diff --git a/.gitignore b/.gitignore index 5148e52..3406854 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +1,117 @@ -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history +# Created by .ignore support plugin (hsz.mobi) +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties +### Windows template +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk +### SublimeText template +# cache files for sublime text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# workspace files are user-specific +*.sublime-workspace + +# project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using SublimeText +# *.sublime-project + +# sftp configuration file +sftp-config.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings +### SVN template +.svn/ + +# Dependency directories +node_modules +jspm_packages +dist + +.DS_Store +koa/examples +koa/examples2 +nohup.out +koa/HelloKoa2/public/images +koa/HelloKoa2/public/avatar diff --git a/GET-POST/get.js b/GET-POST/get.js deleted file mode 100644 index 297b8a0..0000000 --- a/GET-POST/get.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Created by 斌 on 2017/2/19. - */ -var http = require('http'); -var url = require('url'); -var util = require('util'); - -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Type': 'text/plain'}); - //res.end(util.inspect(url.parse(req.url, true))); - - var params = url.parse(req.url, true).query; - res.write('网站名:' + params.name); - res.write('\n'); - res.write('网站URL:' + params.url); - res.end(); - -}).listen(3000); \ No newline at end of file diff --git a/GET-POST/post.js b/GET-POST/post.js deleted file mode 100644 index 62c81bb..0000000 --- a/GET-POST/post.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Created by 斌 on 2017/2/19. - */ -var http = require('http'); -var querystring = require('querystring'); - -var postHTML = - '' + - '' + - '' + - '菜鸟教程 Node.js 实例' + - '' + - '' + - '
' + - '网站名:
' + - '网站URL:
' + - '' + - '
' + - '' + - ''; - -http.createServer(function (req, res) { - var body = ''; - req.on('data', function (chunk) { - - body += chunk; - }); - //res.end(); - - req.on('end', function () { - body = querystring.parse(body); - res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'}); - - if (body.name && body.url) { - res.write('网站名:' + body.name); - res.write('
'); - res.write('网站URL:' + body.url); - } else { - res.write(postHTML); - } - res.end(); - }); -}).listen(3000); \ No newline at end of file diff --git a/Prerender/phantomjs b/Prerender/phantomjs new file mode 160000 index 0000000..cb73d86 --- /dev/null +++ b/Prerender/phantomjs @@ -0,0 +1 @@ +Subproject commit cb73d8605e1c4d13c1faad7ffbbe4f5044131625 diff --git a/Prerender/start/package-lock.json b/Prerender/start/package-lock.json new file mode 100644 index 0000000..34098d6 --- /dev/null +++ b/Prerender/start/package-lock.json @@ -0,0 +1,451 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "accepts": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "chrome-remote-interface": { + "version": "0.24.5", + "resolved": "http://registry.npm.taobao.org/chrome-remote-interface/download/chrome-remote-interface-0.24.5.tgz", + "integrity": "sha1-PVBCaWWaulpez3LNwYKm8aNmksw=", + "requires": { + "commander": "2.1.0", + "ws": "2.0.3" + } + }, + "commander": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + }, + "compressible": { + "version": "2.0.12", + "resolved": "http://registry.npm.taobao.org/compressible/download/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "requires": { + "mime-db": "1.30.0" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "http://registry.npm.taobao.org/compression/download/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "requires": { + "accepts": "1.3.4", + "bytes": "3.0.0", + "compressible": "2.0.12", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.2", + "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "setprototypeof": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" + }, + "statuses": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "he": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "prerender": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/prerender/download/prerender-5.0.3.tgz", + "integrity": "sha1-lZkzL3z2+9uBjDtz9dy46+cIfaI=", + "requires": { + "body-parser": "1.18.2", + "chrome-remote-interface": "0.24.5", + "compression": "1.7.1", + "express": "4.16.2", + "he": "1.1.1", + "valid-url": "1.0.9" + } + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "send": { + "version": "0.16.1", + "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.1.tgz", + "integrity": "sha1-pw4coh0TgsEdDZ9iMd6ygQgNerM=", + "requires": { + "debug": "2.6.9", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.1.tgz", + "integrity": "sha1-TFfVNASnYdjy58HooYpH2/J4pxk=", + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "statuses": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=" + }, + "type-is": { + "version": "1.6.15", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz", + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "valid-url": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/valid-url/download/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/ws/download/ws-2.0.3.tgz", + "integrity": "sha1-Uy/UmcP319cg5UPx+AcQbPxX2cs=", + "requires": { + "ultron": "1.1.1" + } + } + } +} diff --git a/Prerender/start/server.js b/Prerender/start/server.js new file mode 100644 index 0000000..d3f0f4b --- /dev/null +++ b/Prerender/start/server.js @@ -0,0 +1,3 @@ +const prerender = require('prerender') +const server = prerender() +server.start() diff --git a/Test/Jest/start/__test__/sum.test.js b/Test/Jest/start/__test__/sum.test.js new file mode 100644 index 0000000..f425229 --- /dev/null +++ b/Test/Jest/start/__test__/sum.test.js @@ -0,0 +1,30 @@ +const { sum, forEach } = require('../sum') +test('adds 1 + 2 to equals 3', () => { + expect(sum(1, 2)).toEqual(3) +}) + +test('object assigenment', () => { + const data = { one: 1 } + data['two'] = 2 + expect(data).toEqual({ one: 1, two: 2 }) +}) + +test('zero', () => { + const z = 0 + expect(z).not.toBeNull() + expect(z).toBeDefined() + expect(z).not.toBeUndefined() + expect(z).not.toBeTruthy() + expect(z).toBeFalsy() +}) +test('adding floating point numbers', () => { + const value = 0.1 + 0.2 + expect(value).not.toBe(0.3) + expect(value).toBeCloseTo(0.3) +}) + +test('mock', () => { + const mockCb = jest.fn() + forEach([0, 1], mockCb) + expect(mockCb.mock.calls.length).toBe(2) +}) \ No newline at end of file diff --git a/Test/Jest/start/package-lock.json b/Test/Jest/start/package-lock.json new file mode 100644 index 0000000..4863819 --- /dev/null +++ b/Test/Jest/start/package-lock.json @@ -0,0 +1,4431 @@ +{ + "name": "jest-start", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.38", + "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.38.tgz", + "integrity": "sha1-wK9ZMGF+VeBQM2g446NnCYOwsrI=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "abab": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/abab/download/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "acorn": { + "version": "5.3.0", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-5.3.0.tgz", + "integrity": "sha1-dEbTlFnFT7SagObuZHgUm5QOyCI=", + "dev": true + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.1.0.tgz", + "integrity": "sha1-q3FgJdvhfFTT74HTLs4rLZn+JTg=", + "dev": true, + "requires": { + "acorn": "5.3.0" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.0.0.tgz", + "integrity": "sha1-7D6LTp+AZPwCw6ybZfHCdb2o75I=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/append-transform/download/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.0.tgz", + "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz", + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-jest": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/babel-jest/download/babel-jest-22.1.0.tgz", + "integrity": "sha1-f65vZV//536BiowoaMdUpCRj/f0=", + "dev": true, + "requires": { + "babel-plugin-istanbul": "4.1.5", + "babel-preset-jest": "22.1.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.5", + "resolved": "http://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.5.tgz", + "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "istanbul-lib-instrument": "1.9.1", + "test-exclude": "4.1.1" + } + }, + "babel-plugin-jest-hoist": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-22.1.0.tgz", + "integrity": "sha1-wSgd14h9d6FxHcdgRow7goXd6e4=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-preset-jest": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-22.1.0.tgz", + "integrity": "sha1-/05wQQL5ZCdl4iVCJgUFYdiULsk=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "22.1.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + }, + "dependencies": { + "source-map-support": { + "version": "0.4.18", + "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/bser/download/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "0.4.0" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "callsites": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "ci-info": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.2.tgz", + "integrity": "sha1-A1YSWdtI0EdMi9yQ9bR7Botrv7Q=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-type-parser": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/content-type-parser/download/content-type-parser-1.0.2.tgz", + "integrity": "sha1-yqvoBiPmNjiyUC/Ux/Ev9M4jUuc=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "core-js": { + "version": "2.5.3", + "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz", + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "cssom": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/cssom/download/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "http://registry.npm.taobao.org/cssstyle/download/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "0.3.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "3.4.0", + "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.4.0.tgz", + "integrity": "sha1-sdhVB9rzlkgo3lSzfQ1zumfdpWw=", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz", + "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", + "dev": true, + "requires": { + "webidl-conversions": "4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.10.0.tgz", + "integrity": "sha1-Hss2wZeEKgDY7kwt/YZGu5fWCGQ=", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.9.0", + "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.9.0.tgz", + "integrity": "sha1-mBGi8mXcHNOJRCDuNxcGS2MriFI=", + "dev": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.0.tgz", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", + "dev": true + }, + "estraverse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "exec-sh": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/exec-sh/download/exec-sh-0.2.1.tgz", + "integrity": "sha1-FjuYpuiea2W0fCoo0hW8H2OYnDg=", + "dev": true, + "requires": { + "merge": "1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expect": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/expect/download/expect-22.1.0.tgz", + "integrity": "sha1-+PmwGasnXYWcvv7VMfuu/olyQx0=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "jest-diff": "22.1.0", + "jest-get-type": "22.1.0", + "jest-matcher-utils": "22.1.0", + "jest-message-util": "22.1.0", + "jest-regex-util": "22.1.0" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "2.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.1.3.tgz", + "integrity": "sha1-EfgjGPX+e7LNIpZaEI6TBiCCFtg=", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "hawk": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz", + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-4.2.0.tgz", + "integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.5.0.tgz", + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", + "dev": true, + "requires": { + "whatwg-encoding": "1.0.3" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz", + "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz", + "integrity": "sha1-JH5BYueGDOu9rzC3dNawrH3P56U=", + "dev": true, + "requires": { + "ci-info": "1.1.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/istanbul-api/download/istanbul-api-1.2.1.tgz", + "integrity": "sha1-DGCgUV6xHH1lxrULuixumZrNhiA=", + "dev": true, + "requires": { + "async": "2.6.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-report": "1.1.2", + "istanbul-lib-source-maps": "1.2.2", + "istanbul-reports": "1.1.3", + "js-yaml": "3.10.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha1-c7+5mIhSmUFck9OKPprfeEp3qdo=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha1-hTjZcDcss3FtU+VVI91UtVeo2Js=", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.9.1.tgz", + "integrity": "sha1-JQsws1MeXTJRKZ/dZLCyydtrVY4=", + "dev": true, + "requires": { + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-1.1.2.tgz", + "integrity": "sha1-kivifBO5URuXm9FYc1n2l5jB1CU=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.2.tgz", + "integrity": "sha1-dQV4YCQ18ooMBO5tfZ4PKWDmLBw=", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.1.3.tgz", + "integrity": "sha1-O54eje+20YsdQl2o6LMsWhY/LRA=", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "jest": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest/download/jest-22.1.4.tgz", + "integrity": "sha1-nscTc6OPQP+So+XpauhWh8GBu3I=", + "dev": true, + "requires": { + "jest-cli": "22.1.4" + }, + "dependencies": { + "jest-cli": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-cli/download/jest-cli-22.1.4.tgz", + "integrity": "sha1-D+nzrIgbDNwAInEUxYWDouvvzAQ=", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "exit": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "import-local": "1.0.0", + "is-ci": "1.1.0", + "istanbul-api": "1.2.1", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-source-maps": "1.2.2", + "jest-changed-files": "22.1.4", + "jest-config": "22.1.4", + "jest-environment-jsdom": "22.1.4", + "jest-get-type": "22.1.0", + "jest-haste-map": "22.1.0", + "jest-message-util": "22.1.0", + "jest-regex-util": "22.1.0", + "jest-resolve-dependencies": "22.1.0", + "jest-runner": "22.1.4", + "jest-runtime": "22.1.4", + "jest-snapshot": "22.1.2", + "jest-util": "22.1.4", + "jest-worker": "22.1.0", + "micromatch": "2.3.11", + "node-notifier": "5.2.1", + "realpath-native": "1.0.0", + "rimraf": "2.6.2", + "slash": "1.0.0", + "string-length": "2.0.0", + "strip-ansi": "4.0.0", + "which": "1.3.0", + "yargs": "10.1.1" + } + } + } + }, + "jest-changed-files": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-22.1.4.tgz", + "integrity": "sha1-H3hEvLc53sB+WJmmM8DLbVBpg04=", + "dev": true, + "requires": { + "throat": "4.1.0" + } + }, + "jest-config": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-config/download/jest-config-22.1.4.tgz", + "integrity": "sha1-B1/6zOg8PjjPhbG5ug0hvT7ietA=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "glob": "7.1.2", + "jest-environment-jsdom": "22.1.4", + "jest-environment-node": "22.1.4", + "jest-get-type": "22.1.0", + "jest-jasmine2": "22.1.4", + "jest-regex-util": "22.1.0", + "jest-resolve": "22.1.4", + "jest-util": "22.1.4", + "jest-validate": "22.1.2", + "pretty-format": "22.1.0" + } + }, + "jest-diff": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-diff/download/jest-diff-22.1.0.tgz", + "integrity": "sha1-D62dlsh7RTiWv5Od89yKrGkZrDg=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "diff": "3.4.0", + "jest-get-type": "22.1.0", + "pretty-format": "22.1.0" + } + }, + "jest-docblock": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-docblock/download/jest-docblock-22.1.0.tgz", + "integrity": "sha1-P+WYbVREy8sUl0brSwfFfFpGTf0=", + "dev": true, + "requires": { + "detect-newline": "2.1.0" + } + }, + "jest-environment-jsdom": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-22.1.4.tgz", + "integrity": "sha1-cEUYzoN19+xd4EjR6cQmiwigPgA=", + "dev": true, + "requires": { + "jest-mock": "22.1.0", + "jest-util": "22.1.4", + "jsdom": "11.6.0" + } + }, + "jest-environment-node": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-22.1.4.tgz", + "integrity": "sha1-DylG6PhobObF2PooDOHNjVjoaes=", + "dev": true, + "requires": { + "jest-mock": "22.1.0", + "jest-util": "22.1.4" + } + }, + "jest-get-type": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.1.0.tgz", + "integrity": "sha1-TpCvKY7WGB7chdLaUA29J1Pg1ak=", + "dev": true + }, + "jest-haste-map": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-22.1.0.tgz", + "integrity": "sha1-EXTG/zk/mBjr8RY3ENiGi1Nw2io=", + "dev": true, + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "jest-docblock": "22.1.0", + "jest-worker": "22.1.0", + "micromatch": "2.3.11", + "sane": "2.3.0" + } + }, + "jest-jasmine2": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-22.1.4.tgz", + "integrity": "sha1-ytoLr1CiIMYWqVdXKLgNTd7evos=", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.0", + "co": "4.6.0", + "expect": "22.1.0", + "graceful-fs": "4.1.11", + "is-generator-fn": "1.0.0", + "jest-diff": "22.1.0", + "jest-matcher-utils": "22.1.0", + "jest-message-util": "22.1.0", + "jest-snapshot": "22.1.2", + "source-map-support": "0.5.2" + } + }, + "jest-leak-detector": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-22.1.0.tgz", + "integrity": "sha1-CDdmRM7gcQPaBpuqwZrbApm3csI=", + "dev": true, + "requires": { + "pretty-format": "22.1.0" + } + }, + "jest-matcher-utils": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-22.1.0.tgz", + "integrity": "sha1-4WRmW10xNjasKff2/p7wps4E/rw=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "22.1.0", + "pretty-format": "22.1.0" + } + }, + "jest-message-util": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-22.1.0.tgz", + "integrity": "sha1-UboHlMtuV5v8TprfrEUvnxoCk/w=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.38", + "chalk": "2.3.0", + "micromatch": "2.3.11", + "slash": "1.0.0", + "stack-utils": "1.0.1" + } + }, + "jest-mock": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-mock/download/jest-mock-22.1.0.tgz", + "integrity": "sha1-h+whwFmTJWccmiOtDgXIb7WHm2E=", + "dev": true + }, + "jest-regex-util": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-22.1.0.tgz", + "integrity": "sha1-Xa8v4nAHS22mPl2F8cmsyGZ2j1M=", + "dev": true + }, + "jest-resolve": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-22.1.4.tgz", + "integrity": "sha1-crmzceqsSPhKrUrXMiIv/jdpJgI=", + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "chalk": "2.3.0" + } + }, + "jest-resolve-dependencies": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-22.1.0.tgz", + "integrity": "sha1-NA5BOfsTMVzUOrwFTmwGE2vlHjE=", + "dev": true, + "requires": { + "jest-regex-util": "22.1.0" + } + }, + "jest-runner": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-runner/download/jest-runner-22.1.4.tgz", + "integrity": "sha1-4DkDkRDLGzH+vA+Z40m/fJQwSi8=", + "dev": true, + "requires": { + "exit": "0.1.2", + "jest-config": "22.1.4", + "jest-docblock": "22.1.0", + "jest-haste-map": "22.1.0", + "jest-jasmine2": "22.1.4", + "jest-leak-detector": "22.1.0", + "jest-message-util": "22.1.0", + "jest-runtime": "22.1.4", + "jest-util": "22.1.4", + "jest-worker": "22.1.0", + "throat": "4.1.0" + } + }, + "jest-runtime": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-runtime/download/jest-runtime-22.1.4.tgz", + "integrity": "sha1-FHTZ9c2lGLcC4LJaF9TvP8Vjogw=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-jest": "22.1.0", + "babel-plugin-istanbul": "4.1.5", + "chalk": "2.3.0", + "convert-source-map": "1.5.1", + "exit": "0.1.2", + "graceful-fs": "4.1.11", + "jest-config": "22.1.4", + "jest-haste-map": "22.1.0", + "jest-regex-util": "22.1.0", + "jest-resolve": "22.1.4", + "jest-util": "22.1.4", + "json-stable-stringify": "1.0.1", + "micromatch": "2.3.11", + "realpath-native": "1.0.0", + "slash": "1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "2.3.0", + "yargs": "10.1.1" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "jest-snapshot": { + "version": "22.1.2", + "resolved": "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-22.1.2.tgz", + "integrity": "sha1-snDPbjCY8zrO6v2gKxPrCTPcYTk=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-diff": "22.1.0", + "jest-matcher-utils": "22.1.0", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "pretty-format": "22.1.0" + } + }, + "jest-util": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-util/download/jest-util-22.1.4.tgz", + "integrity": "sha1-rIy9Q+5lQQLxlB8/Dp0deJqLaps=", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.0", + "graceful-fs": "4.1.11", + "is-ci": "1.1.0", + "jest-message-util": "22.1.0", + "jest-validate": "22.1.2", + "mkdirp": "0.5.1" + } + }, + "jest-validate": { + "version": "22.1.2", + "resolved": "http://registry.npm.taobao.org/jest-validate/download/jest-validate-22.1.2.tgz", + "integrity": "sha1-w7Bry6e9moUJGf4za18qjDojlAQ=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "22.1.0", + "leven": "2.1.0", + "pretty-format": "22.1.0" + } + }, + "jest-worker": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-worker/download/jest-worker-22.1.0.tgz", + "integrity": "sha1-CYeDL+WPvcIFNX9MGbmSRGNoyvs=", + "dev": true, + "requires": { + "merge-stream": "1.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.10.0.tgz", + "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "11.6.0", + "resolved": "http://registry.npm.taobao.org/jsdom/download/jsdom-11.6.0.tgz", + "integrity": "sha1-czR4FZXui97ql0L8M/q1za1tGV8=", + "dev": true, + "requires": { + "abab": "1.0.4", + "acorn": "5.3.0", + "acorn-globals": "4.1.0", + "array-equal": "1.0.0", + "browser-process-hrtime": "0.1.2", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "domexception": "1.0.1", + "escodegen": "1.9.0", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.2.0", + "nwmatcher": "1.4.3", + "parse5": "4.0.0", + "pn": "1.1.0", + "request": "2.83.0", + "request-promise-native": "1.0.5", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.3", + "w3c-hr-time": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "6.4.0", + "ws": "4.0.0", + "xml-name-validator": "3.0.0" + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "left-pad": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/left-pad/download/left-pad-1.2.0.tgz", + "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.4" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "merge": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/merge/download/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime-db": { + "version": "1.30.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.8.0", + "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true, + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "http://registry.npm.taobao.org/node-notifier/download/node-notifier-5.2.1.tgz", + "integrity": "sha1-+jE90I9VF9sOJQLldY1mSsafneo=", + "dev": true, + "requires": { + "growly": "1.3.0", + "semver": "5.5.0", + "shellwords": "0.1.1", + "which": "1.3.0" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwmatcher": { + "version": "1.4.3", + "resolved": "http://registry.npm.taobao.org/nwmatcher/download/nwmatcher-1.4.3.tgz", + "integrity": "sha1-ZDSOOz2A8DW0CsEVY9J4+LctuJw=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "1.0.11", + "resolved": "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.2.0.tgz", + "integrity": "sha1-DpK2vty1nwIsE9DxlJ3ILRWQnxw=", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz", + "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz", + "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-format": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/pretty-format/download/pretty-format-22.1.0.tgz", + "integrity": "sha1-IndgW0DtRSmuTbUf9i9L6BdkeRQ=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "realpath-native": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/realpath-native/download/realpath-native-1.0.0.tgz", + "integrity": "sha1-eIVyGoO0O9Uydgnw3eyySCMF/fA=", + "dev": true, + "requires": { + "util.promisify": "1.0.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.83.0.tgz", + "integrity": "sha1-ygtl2gLtYpNYh4COb1EDgQNOM1Y=", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", + "dev": true + }, + "sane": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/sane/download/sane-2.3.0.tgz", + "integrity": "sha1-Pz31hKv2nmPUu3Tw+MQkaOTX1Gs=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "exec-sh": "0.2.1", + "fb-watchman": "2.0.0", + "fsevents": "1.1.3", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.18.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz", + "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "sntp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz", + "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.2.tgz", + "integrity": "sha1-GmKX/Vsudis5aIx/yRIztgmE8KU=", + "dev": true, + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "stack-utils": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "1.0.0", + "strip-ansi": "4.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "test-exclude": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/test-exclude/download/test-exclude-4.1.1.tgz", + "integrity": "sha1-TYSWSwlmsAh+zDNKLOAC09k0HiY=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "throat": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "tmpl": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "ultron": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz", + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "object.getownpropertydescriptors": "2.0.3" + } + }, + "uuid": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.2.1.tgz", + "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.11" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "http://registry.npm.taobao.org/watch/download/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "0.2.1", + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz", + "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.3.tgz", + "integrity": "sha1-V8I1vIZX6RTSTho5fTyC2u4Ka6M=", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-url": { + "version": "6.4.0", + "resolved": "http://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.4.0.tgz", + "integrity": "sha1-CP3yuehyeDp6H2IWJgodZsxyLgg=", + "dev": true, + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "ws": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/ws/download/ws-4.0.0.tgz", + "integrity": "sha1-v+HaTAjuuXgLmG4OTRDszXNFmZ8=", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz", + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "10.1.1", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-10.1.1.tgz", + "integrity": "sha1-X+HqMGmFoJmzNJIAH6GaHmHv4oU=", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + }, + "dependencies": { + "cliui": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-4.0.0.tgz", + "integrity": "sha1-dD1GUOBfNtHtJXW1ljjYcyK/u8w=", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz", + "integrity": "sha1-8TdqM7Ziml0GN4KUTacyYx6WaVA=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } +} diff --git a/Test/Jest/start/package.json b/Test/Jest/start/package.json new file mode 100644 index 0000000..821886a --- /dev/null +++ b/Test/Jest/start/package.json @@ -0,0 +1,14 @@ +{ + "name": "jest-start", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "jest" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "jest": "^22.1.4" + } +} diff --git a/Test/Jest/start/sum.js b/Test/Jest/start/sum.js new file mode 100644 index 0000000..47bca86 --- /dev/null +++ b/Test/Jest/start/sum.js @@ -0,0 +1,34 @@ +function sum (a, b) { + return a + b +} + +function forEach(items, cb) { + for (let index = 0; index < items.length; index++) { + cb(items[index]) + } +} + +const filterTestFn = jest.fn() +filterTestFn.mockReturnValueOnce(true).mockReturnValueOnce(false) +console.log(filterTestFn()) +console.log(filterTestFn()) +const result = [11, 12].filter(filterTestFn) +console.log(result) + +const myMockFn = jest + .fn(() => 'default') + .mockImplementationOnce(() => 'first call') + .mockImplementationOnce(() => 'second call') + +console.log(myMockFn(), myMockFn(), myMockFn()) + +const mm = jest + .fn() + .mockReturnValue('default') + .mockImplementation(scalar => 42 + scalar) + .mockName('add42') + +console.log(mm(1), mm(2), mm(3)) + +exports.sum = sum +exports.forEach = forEach diff --git a/Test/Jest/vue-test/.babelrc b/Test/Jest/vue-test/.babelrc new file mode 100644 index 0000000..828196f --- /dev/null +++ b/Test/Jest/vue-test/.babelrc @@ -0,0 +1,18 @@ +{ + "presets": [ + ["env", { + "modules": false, + "targets": { + "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] + } + }], + "stage-2" + ], + "plugins": ["transform-vue-jsx", "transform-runtime"], + "env": { + "test": { + "presets": ["env", "stage-2"], + "plugins": ["transform-vue-jsx"] + } + } +} diff --git a/Test/Jest/vue-test/.editorconfig b/Test/Jest/vue-test/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/Test/Jest/vue-test/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/Test/Jest/vue-test/.gitignore b/Test/Jest/vue-test/.gitignore new file mode 100644 index 0000000..541a820 --- /dev/null +++ b/Test/Jest/vue-test/.gitignore @@ -0,0 +1,14 @@ +.DS_Store +node_modules/ +/dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/Test/Jest/vue-test/.postcssrc.js b/Test/Jest/vue-test/.postcssrc.js new file mode 100644 index 0000000..eee3e92 --- /dev/null +++ b/Test/Jest/vue-test/.postcssrc.js @@ -0,0 +1,10 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + "plugins": { + "postcss-import": {}, + "postcss-url": {}, + // to edit target browsers: use "browserslist" field in package.json + "autoprefixer": {} + } +} diff --git a/Test/Jest/vue-test/README.md b/Test/Jest/vue-test/README.md new file mode 100644 index 0000000..7412d1d --- /dev/null +++ b/Test/Jest/vue-test/README.md @@ -0,0 +1,21 @@ +# vue-test + +> A Vue.js project + +## Build Setup + +``` bash +# install dependencies +npm install + +# serve with hot reload at localhost:8080 +npm run dev + +# build for production with minification +npm run build + +# build for production and view the bundle analyzer report +npm run build --report +``` + +For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). diff --git a/Test/Jest/vue-test/build/build.js b/Test/Jest/vue-test/build/build.js new file mode 100644 index 0000000..8f2ad8a --- /dev/null +++ b/Test/Jest/vue-test/build/build.js @@ -0,0 +1,41 @@ +'use strict' +require('./check-versions')() + +process.env.NODE_ENV = 'production' + +const ora = require('ora') +const rm = require('rimraf') +const path = require('path') +const chalk = require('chalk') +const webpack = require('webpack') +const config = require('../config') +const webpackConfig = require('./webpack.prod.conf') + +const spinner = ora('building for production...') +spinner.start() + +rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { + if (err) throw err + webpack(webpackConfig, (err, stats) => { + spinner.stop() + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. + chunks: false, + chunkModules: false + }) + '\n\n') + + if (stats.hasErrors()) { + console.log(chalk.red(' Build failed with errors.\n')) + process.exit(1) + } + + console.log(chalk.cyan(' Build complete.\n')) + console.log(chalk.yellow( + ' Tip: built files are meant to be served over an HTTP server.\n' + + ' Opening index.html over file:// won\'t work.\n' + )) + }) +}) diff --git a/Test/Jest/vue-test/build/check-versions.js b/Test/Jest/vue-test/build/check-versions.js new file mode 100644 index 0000000..3ef972a --- /dev/null +++ b/Test/Jest/vue-test/build/check-versions.js @@ -0,0 +1,54 @@ +'use strict' +const chalk = require('chalk') +const semver = require('semver') +const packageConfig = require('../package.json') +const shell = require('shelljs') + +function exec (cmd) { + return require('child_process').execSync(cmd).toString().trim() +} + +const versionRequirements = [ + { + name: 'node', + currentVersion: semver.clean(process.version), + versionRequirement: packageConfig.engines.node + } +] + +if (shell.which('npm')) { + versionRequirements.push({ + name: 'npm', + currentVersion: exec('npm --version'), + versionRequirement: packageConfig.engines.npm + }) +} + +module.exports = function () { + const warnings = [] + + for (let i = 0; i < versionRequirements.length; i++) { + const mod = versionRequirements[i] + + if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { + warnings.push(mod.name + ': ' + + chalk.red(mod.currentVersion) + ' should be ' + + chalk.green(mod.versionRequirement) + ) + } + } + + if (warnings.length) { + console.log('') + console.log(chalk.yellow('To use this template, you must update following to modules:')) + console.log() + + for (let i = 0; i < warnings.length; i++) { + const warning = warnings[i] + console.log(' ' + warning) + } + + console.log() + process.exit(1) + } +} diff --git a/Test/Jest/vue-test/build/logo.png b/Test/Jest/vue-test/build/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/Test/Jest/vue-test/build/logo.png differ diff --git a/Test/Jest/vue-test/build/utils.js b/Test/Jest/vue-test/build/utils.js new file mode 100644 index 0000000..e534fb0 --- /dev/null +++ b/Test/Jest/vue-test/build/utils.js @@ -0,0 +1,101 @@ +'use strict' +const path = require('path') +const config = require('../config') +const ExtractTextPlugin = require('extract-text-webpack-plugin') +const packageConfig = require('../package.json') + +exports.assetsPath = function (_path) { + const assetsSubDirectory = process.env.NODE_ENV === 'production' + ? config.build.assetsSubDirectory + : config.dev.assetsSubDirectory + + return path.posix.join(assetsSubDirectory, _path) +} + +exports.cssLoaders = function (options) { + options = options || {} + + const cssLoader = { + loader: 'css-loader', + options: { + sourceMap: options.sourceMap + } + } + + const postcssLoader = { + loader: 'postcss-loader', + options: { + sourceMap: options.sourceMap + } + } + + // generate loader string to be used with extract text plugin + function generateLoaders (loader, loaderOptions) { + const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] + + if (loader) { + loaders.push({ + loader: loader + '-loader', + options: Object.assign({}, loaderOptions, { + sourceMap: options.sourceMap + }) + }) + } + + // Extract CSS when that option is specified + // (which is the case during production build) + if (options.extract) { + return ExtractTextPlugin.extract({ + use: loaders, + fallback: 'vue-style-loader' + }) + } else { + return ['vue-style-loader'].concat(loaders) + } + } + + // https://vue-loader.vuejs.org/en/configurations/extract-css.html + return { + css: generateLoaders(), + postcss: generateLoaders(), + less: generateLoaders('less'), + sass: generateLoaders('sass', { indentedSyntax: true }), + scss: generateLoaders('sass'), + stylus: generateLoaders('stylus'), + styl: generateLoaders('stylus') + } +} + +// Generate loaders for standalone style files (outside of .vue) +exports.styleLoaders = function (options) { + const output = [] + const loaders = exports.cssLoaders(options) + + for (const extension in loaders) { + const loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + use: loader + }) + } + + return output +} + +exports.createNotifierCallback = () => { + const notifier = require('node-notifier') + + return (severity, errors) => { + if (severity !== 'error') return + + const error = errors[0] + const filename = error.file && error.file.split('!').pop() + + notifier.notify({ + title: packageConfig.name, + message: severity + ': ' + error.name, + subtitle: filename || '', + icon: path.join(__dirname, 'logo.png') + }) + } +} diff --git a/Test/Jest/vue-test/build/vue-loader.conf.js b/Test/Jest/vue-test/build/vue-loader.conf.js new file mode 100644 index 0000000..33ed58b --- /dev/null +++ b/Test/Jest/vue-test/build/vue-loader.conf.js @@ -0,0 +1,22 @@ +'use strict' +const utils = require('./utils') +const config = require('../config') +const isProduction = process.env.NODE_ENV === 'production' +const sourceMapEnabled = isProduction + ? config.build.productionSourceMap + : config.dev.cssSourceMap + +module.exports = { + loaders: utils.cssLoaders({ + sourceMap: sourceMapEnabled, + extract: isProduction + }), + cssSourceMap: sourceMapEnabled, + cacheBusting: config.dev.cacheBusting, + transformToRequire: { + video: ['src', 'poster'], + source: 'src', + img: 'src', + image: 'xlink:href' + } +} diff --git a/Test/Jest/vue-test/build/webpack.base.conf.js b/Test/Jest/vue-test/build/webpack.base.conf.js new file mode 100644 index 0000000..2d875f4 --- /dev/null +++ b/Test/Jest/vue-test/build/webpack.base.conf.js @@ -0,0 +1,82 @@ +'use strict' +const path = require('path') +const utils = require('./utils') +const config = require('../config') +const vueLoaderConfig = require('./vue-loader.conf') + +function resolve (dir) { + return path.join(__dirname, '..', dir) +} + + + +module.exports = { + context: path.resolve(__dirname, '../'), + entry: { + app: './src/main.js' + }, + output: { + path: config.build.assetsRoot, + filename: '[name].js', + publicPath: process.env.NODE_ENV === 'production' + ? config.build.assetsPublicPath + : config.dev.assetsPublicPath + }, + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + 'vue$': 'vue/dist/vue.esm.js', + '@': path.join(__dirname, '..', 'src') + } + }, + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + options: vueLoaderConfig + }, + { + test: /\.js$/, + loader: 'babel-loader', + include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, + { + test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('media/[name].[hash:7].[ext]') + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]') + } + } + ] + }, + node: { + // prevent webpack from injecting useless setImmediate polyfill because Vue + // source contains it (although only uses it if it's native). + setImmediate: false, + // prevent webpack from injecting mocks to Node native modules + // that does not make sense for the client + dgram: 'empty', + fs: 'empty', + net: 'empty', + tls: 'empty', + child_process: 'empty' + } +} diff --git a/Test/Jest/vue-test/build/webpack.dev.conf.js b/Test/Jest/vue-test/build/webpack.dev.conf.js new file mode 100644 index 0000000..070ae22 --- /dev/null +++ b/Test/Jest/vue-test/build/webpack.dev.conf.js @@ -0,0 +1,95 @@ +'use strict' +const utils = require('./utils') +const webpack = require('webpack') +const config = require('../config') +const merge = require('webpack-merge') +const path = require('path') +const baseWebpackConfig = require('./webpack.base.conf') +const CopyWebpackPlugin = require('copy-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') +const portfinder = require('portfinder') + +const HOST = process.env.HOST +const PORT = process.env.PORT && Number(process.env.PORT) + +const devWebpackConfig = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) + }, + // cheap-module-eval-source-map is faster for development + devtool: config.dev.devtool, + + // these devServer options should be customized in /config/index.js + devServer: { + clientLogLevel: 'warning', + historyApiFallback: { + rewrites: [ + { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, + ], + }, + hot: true, + contentBase: false, // since we use CopyWebpackPlugin. + compress: true, + host: HOST || config.dev.host, + port: PORT || config.dev.port, + open: config.dev.autoOpenBrowser, + overlay: config.dev.errorOverlay + ? { warnings: false, errors: true } + : false, + publicPath: config.dev.assetsPublicPath, + proxy: config.dev.proxyTable, + quiet: true, // necessary for FriendlyErrorsPlugin + watchOptions: { + poll: config.dev.poll, + } + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': require('../config/dev.env') + }), + new webpack.HotModuleReplacementPlugin(), + new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. + new webpack.NoEmitOnErrorsPlugin(), + // https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'index.html', + inject: true + }), + // copy custom static assets + new CopyWebpackPlugin([ + { + from: path.resolve(__dirname, '../static'), + to: config.dev.assetsSubDirectory, + ignore: ['.*'] + } + ]) + ] +}) + +module.exports = new Promise((resolve, reject) => { + portfinder.basePort = process.env.PORT || config.dev.port + portfinder.getPort((err, port) => { + if (err) { + reject(err) + } else { + // publish the new Port, necessary for e2e tests + process.env.PORT = port + // add port to devServer config + devWebpackConfig.devServer.port = port + + // Add FriendlyErrorsPlugin + devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ + compilationSuccessInfo: { + messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], + }, + onErrors: config.dev.notifyOnErrors + ? utils.createNotifierCallback() + : undefined + })) + + resolve(devWebpackConfig) + } + }) +}) diff --git a/Test/Jest/vue-test/build/webpack.prod.conf.js b/Test/Jest/vue-test/build/webpack.prod.conf.js new file mode 100644 index 0000000..d9f99f6 --- /dev/null +++ b/Test/Jest/vue-test/build/webpack.prod.conf.js @@ -0,0 +1,145 @@ +'use strict' +const path = require('path') +const utils = require('./utils') +const webpack = require('webpack') +const config = require('../config') +const merge = require('webpack-merge') +const baseWebpackConfig = require('./webpack.base.conf') +const CopyWebpackPlugin = require('copy-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const ExtractTextPlugin = require('extract-text-webpack-plugin') +const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') +const UglifyJsPlugin = require('uglifyjs-webpack-plugin') + +const env = require('../config/prod.env') + +const webpackConfig = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ + sourceMap: config.build.productionSourceMap, + extract: true, + usePostCSS: true + }) + }, + devtool: config.build.productionSourceMap ? config.build.devtool : false, + output: { + path: config.build.assetsRoot, + filename: utils.assetsPath('js/[name].[chunkhash].js'), + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') + }, + plugins: [ + // http://vuejs.github.io/vue-loader/en/workflow/production.html + new webpack.DefinePlugin({ + 'process.env': env + }), + new UglifyJsPlugin({ + uglifyOptions: { + compress: { + warnings: false + } + }, + sourceMap: config.build.productionSourceMap, + parallel: true + }), + // extract css into its own file + new ExtractTextPlugin({ + filename: utils.assetsPath('css/[name].[contenthash].css'), + // Setting the following option to `false` will not extract CSS from codesplit chunks. + // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. + // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, + // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 + allChunks: true, + }), + // Compress extracted CSS. We are using this plugin so that possible + // duplicated CSS from different components can be deduped. + new OptimizeCSSPlugin({ + cssProcessorOptions: config.build.productionSourceMap + ? { safe: true, map: { inline: false } } + : { safe: true } + }), + // generate dist index.html with correct asset hash for caching. + // you can customize output by editing /index.html + // see https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: config.build.index, + template: 'index.html', + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true + // more options: + // https://github.com/kangax/html-minifier#options-quick-reference + }, + // necessary to consistently work with multiple chunks via CommonsChunkPlugin + chunksSortMode: 'dependency' + }), + // keep module.id stable when vendor modules does not change + new webpack.HashedModuleIdsPlugin(), + // enable scope hoisting + new webpack.optimize.ModuleConcatenationPlugin(), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks (module) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + minChunks: Infinity + }), + // This instance extracts shared chunks from code splitted chunks and bundles them + // in a separate chunk, similar to the vendor chunk + // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk + new webpack.optimize.CommonsChunkPlugin({ + name: 'app', + async: 'vendor-async', + children: true, + minChunks: 3 + }), + + // copy custom static assets + new CopyWebpackPlugin([ + { + from: path.resolve(__dirname, '../static'), + to: config.build.assetsSubDirectory, + ignore: ['.*'] + } + ]) + ] +}) + +if (config.build.productionGzip) { + const CompressionWebpackPlugin = require('compression-webpack-plugin') + + webpackConfig.plugins.push( + new CompressionWebpackPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: new RegExp( + '\\.(' + + config.build.productionGzipExtensions.join('|') + + ')$' + ), + threshold: 10240, + minRatio: 0.8 + }) + ) +} + +if (config.build.bundleAnalyzerReport) { + const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin + webpackConfig.plugins.push(new BundleAnalyzerPlugin()) +} + +module.exports = webpackConfig diff --git a/Test/Jest/vue-test/config/dev.env.js b/Test/Jest/vue-test/config/dev.env.js new file mode 100644 index 0000000..1e22973 --- /dev/null +++ b/Test/Jest/vue-test/config/dev.env.js @@ -0,0 +1,7 @@ +'use strict' +const merge = require('webpack-merge') +const prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"' +}) diff --git a/Test/Jest/vue-test/config/index.js b/Test/Jest/vue-test/config/index.js new file mode 100644 index 0000000..c5eded7 --- /dev/null +++ b/Test/Jest/vue-test/config/index.js @@ -0,0 +1,69 @@ +'use strict' +// Template version: 1.3.1 +// see http://vuejs-templates.github.io/webpack for documentation. + +const path = require('path') + +module.exports = { + dev: { + + // Paths + assetsSubDirectory: 'static', + assetsPublicPath: '/', + proxyTable: {}, + + // Various Dev Server settings + host: 'localhost', // can be overwritten by process.env.HOST + port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined + autoOpenBrowser: false, + errorOverlay: true, + notifyOnErrors: true, + poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- + + + /** + * Source Maps + */ + + // https://webpack.js.org/configuration/devtool/#development + devtool: 'cheap-module-eval-source-map', + + // If you have problems debugging vue-files in devtools, + // set this to false - it *may* help + // https://vue-loader.vuejs.org/en/options.html#cachebusting + cacheBusting: true, + + cssSourceMap: true + }, + + build: { + // Template for index.html + index: path.resolve(__dirname, '../dist/index.html'), + + // Paths + assetsRoot: path.resolve(__dirname, '../dist'), + assetsSubDirectory: 'static', + assetsPublicPath: '/', + + /** + * Source Maps + */ + + productionSourceMap: true, + // https://webpack.js.org/configuration/devtool/#production + devtool: '#source-map', + + // Gzip off by default as many popular static hosts such as + // Surge or Netlify already gzip all static assets for you. + // Before setting to `true`, make sure to: + // npm install --save-dev compression-webpack-plugin + productionGzip: false, + productionGzipExtensions: ['js', 'css'], + + // Run the build command with an extra argument to + // View the bundle analyzer report after build finishes: + // `npm run build --report` + // Set to `true` or `false` to always turn it on or off + bundleAnalyzerReport: process.env.npm_config_report + } +} diff --git a/Test/Jest/vue-test/config/prod.env.js b/Test/Jest/vue-test/config/prod.env.js new file mode 100644 index 0000000..a6f9976 --- /dev/null +++ b/Test/Jest/vue-test/config/prod.env.js @@ -0,0 +1,4 @@ +'use strict' +module.exports = { + NODE_ENV: '"production"' +} diff --git a/Test/Jest/vue-test/index.html b/Test/Jest/vue-test/index.html new file mode 100644 index 0000000..4b33914 --- /dev/null +++ b/Test/Jest/vue-test/index.html @@ -0,0 +1,12 @@ + + + + + + vue-test + + +
+ + + diff --git a/Test/Jest/vue-test/package-lock.json b/Test/Jest/vue-test/package-lock.json new file mode 100644 index 0000000..6c80c91 --- /dev/null +++ b/Test/Jest/vue-test/package-lock.json @@ -0,0 +1,13153 @@ +{ + "name": "vue-test", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.38", + "resolved": "http://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.0.0-beta.38.tgz", + "integrity": "sha1-wK9ZMGF+VeBQM2g446NnCYOwsrI=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "abab": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/abab/download/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "accepts": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true, + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.3.0", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-5.3.0.tgz", + "integrity": "sha1-dEbTlFnFT7SagObuZHgUm5QOyCI=", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.1.0.tgz", + "integrity": "sha1-q3FgJdvhfFTT74HTLs4rLZn+JTg=", + "dev": true, + "requires": { + "acorn": "5.3.0" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.0.0.tgz", + "integrity": "sha1-7D6LTp+AZPwCw6ybZfHCdb2o75I=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "http://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/append-transform/download/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/array-includes/download/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "http://registry.npm.taobao.org/asn1.js/download/asn1.js-4.9.2.tgz", + "integrity": "sha1-gRfvT37YfNj4kES1v/l6wkOhbJo=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.0.tgz", + "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz", + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/atob/download/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "dev": true + }, + "autoprefixer": { + "version": "7.2.5", + "resolved": "http://registry.npm.taobao.org/autoprefixer/download/autoprefixer-7.2.5.tgz", + "integrity": "sha1-BMy9DGphExttE/U9NxkmCSlS0ZI=", + "dev": true, + "requires": { + "browserslist": "2.11.3", + "caniuse-lite": "1.0.30000792", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.16", + "postcss-value-parser": "3.3.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "axios": { + "version": "0.17.1", + "resolved": "http://registry.npm.taobao.org/axios/download/axios-0.17.1.tgz", + "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "requires": { + "follow-redirects": "1.4.1", + "is-buffer": "1.1.6" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-bindify-decorators/download/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-helper-define-map/download/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-explode-class/download/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-helper-regex/download/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=", + "dev": true + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-jest": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/babel-jest/download/babel-jest-22.1.0.tgz", + "integrity": "sha1-f65vZV//536BiowoaMdUpCRj/f0=", + "dev": true, + "requires": { + "babel-plugin-istanbul": "4.1.5", + "babel-preset-jest": "22.1.0" + } + }, + "babel-loader": { + "version": "7.1.2", + "resolved": "http://registry.npm.taobao.org/babel-loader/download/babel-loader-7.1.2.tgz", + "integrity": "sha1-9svhInEPGqKvTYgcbVtUNYyiQSY=", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.5", + "resolved": "http://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.5.tgz", + "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "istanbul-lib-instrument": "1.9.1", + "test-exclude": "4.1.1" + } + }, + "babel-plugin-jest-hoist": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-22.1.0.tgz", + "integrity": "sha1-wSgd14h9d6FxHcdgRow7goXd6e4=", + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-async-generators/download/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-async-generator-functions/download/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-decorators/download/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-vue-jsx": { + "version": "3.5.0", + "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-vue-jsx/download/babel-plugin-transform-vue-jsx-3.5.0.tgz", + "integrity": "sha1-axrSk1GtdTkZQDZ18L+LKkPhdnE=", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/babel-preset-env/download/babel-preset-env-1.6.1.tgz", + "integrity": "sha1-oYtWTMm5r99KrleuPBsNmRiOb0g=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.3", + "invariant": "2.2.2", + "semver": "5.5.0" + } + }, + "babel-preset-jest": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-22.1.0.tgz", + "integrity": "sha1-/05wQQL5ZCdl4iVCJgUFYdiULsk=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "22.1.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-preset-stage-2/download/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "http://registry.npm.taobao.org/babel-preset-stage-3/download/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.0", + "pascalcase": "0.1.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "base64-js": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.1.tgz", + "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "http://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "http://registry.npm.taobao.org/body-parser/download/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "http://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.2", + "multicast-dns-service-types": "1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "4.3.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "http://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.1.1.tgz", + "integrity": "sha1-OLerVe24Bv8tzaGn8WIHc6R3xJ8=", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "http://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-2.11.3.tgz", + "integrity": "sha1-/jYWeu0bvN5IJ+v+cTR6LMcLmbI=", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000792", + "electron-to-chromium": "1.3.31" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/bser/download/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.2", + "resolved": "http://registry.npm.taobao.org/cacache/download/cacache-10.0.2.tgz", + "integrity": "sha1-EFqToWK77fOiXaQuGTntmf+xRfg=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "1.3.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.1.0", + "unique-filename": "1.1.0", + "y18n": "3.2.1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/caniuse-api/download/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000794", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000794", + "electron-to-chromium": "1.3.31" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000794", + "resolved": "http://registry.npm.taobao.org/caniuse-db/download/caniuse-db-1.0.30000794.tgz", + "integrity": "sha1-u+cRBPonfOSzYjh9VJBei4jlLzU=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000792", + "resolved": "http://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30000792.tgz", + "integrity": "sha1-0M6pgfgRjzlhRxr7tDyaHlu/AzI=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + }, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/chownr/download/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "ci-info": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.2.tgz", + "integrity": "sha1-A1YSWdtI0EdMi9yQ9bR7Botrv7Q=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "clap": { + "version": "1.2.3", + "resolved": "http://registry.npm.taobao.org/clap/download/clap-1.2.3.tgz", + "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "clean-css": { + "version": "4.1.9", + "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-4.1.9.tgz", + "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "dev": true, + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.1.0.tgz", + "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "clone": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/coa/download/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "0.11.4", + "resolved": "http://registry.npm.taobao.org/color/download/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.3", + "color-convert": "1.9.1", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/color-string/download/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/colormin/download/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/colors/download/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.12.2", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.12.2.tgz", + "integrity": "sha1-D1lGxCftnsDZGka7ne9T5UZQ5VU=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compressible": { + "version": "2.0.12", + "resolved": "http://registry.npm.taobao.org/compressible/download/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "http://registry.npm.taobao.org/compression/download/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "bytes": "3.0.0", + "compressible": "2.0.12", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/console-browserify/download/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "consolidate": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "dev": true, + "requires": { + "bluebird": "3.5.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "content-type-parser": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/content-type-parser/download/content-type-parser-1.0.2.tgz", + "integrity": "sha1-yqvoBiPmNjiyUC/Ux/Ev9M4jUuc=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.3.1", + "resolved": "http://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-4.3.1.tgz", + "integrity": "sha1-GbpjcL9vjiY8vWYYWit58jIakwI=", + "dev": true, + "requires": { + "cacache": "10.0.2", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "p-limit": "1.2.0", + "pify": "3.0.0", + "serialize-javascript": "1.4.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "core-js": { + "version": "2.5.3", + "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-2.2.2.tgz", + "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/create-hash/download/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.10" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz", + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "http://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.9", + "resolved": "http://registry.npm.taobao.org/css-loader/download/css-loader-0.28.9.tgz", + "integrity": "sha1-aAZLhfTicdfOTEilgwCSjlNdHJU=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + } + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/cssesc/download/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/cssnano/download/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "http://registry.npm.taobao.org/autoprefixer/download/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000794", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000794", + "electron-to-chromium": "1.3.31" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/csso/download/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "cssom": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/cssom/download/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "http://registry.npm.taobao.org/cssstyle/download/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "0.3.2" + } + }, + "cuint": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/cuint/download/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/cyclist/download/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/d/download/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.38" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/date-now/download/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/define-properties/download/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/defined/download/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/del/download/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "detect-node": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/detect-node/download/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "diff": { + "version": "3.4.0", + "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.4.0.tgz", + "integrity": "sha1-sdhVB9rzlkgo3lSzfQ1zumfdpWw=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "http://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz", + "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/dom-converter/download/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/utila/download/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/domain-browser/download/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz", + "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", + "dev": true, + "requires": { + "webidl-conversions": "4.0.2" + } + }, + "domhandler": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.5.3", + "resolved": "http://registry.npm.taobao.org/duplexify/download/duplexify-3.5.3.tgz", + "integrity": "sha1-i1gYgA35L9ASWyeriWSRkShYJD4=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.5.7", + "resolved": "http://registry.npm.taobao.org/ejs/download/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.31", + "resolved": "http://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.31.tgz", + "integrity": "sha1-ANgyy6n+I1hlKwxIqIFsjjoDfp8=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "http://registry.npm.taobao.org/elliptic/download/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/errno/download/errno-0.1.6.tgz", + "integrity": "sha1-w4bOimKD8U/AlWO3FWCQjJv1MCY=", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.1.tgz", + "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "dev": true, + "requires": { + "stackframe": "1.0.4" + } + }, + "es-abstract": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/es-abstract/download/es-abstract-1.10.0.tgz", + "integrity": "sha1-Hss2wZeEKgDY7kwt/YZGu5fWCGQ=", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.38", + "resolved": "http://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.38.tgz", + "integrity": "sha1-+n1A1lu8m7imfh0/nMZWoAUw7tM=", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/es6-map/download/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/es6-weak-map/download/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.9.0", + "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.9.0.tgz", + "integrity": "sha1-mBGi8mXcHNOJRCDuNxcGS2MriFI=", + "dev": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "http://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "http://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "http://registry.npm.taobao.org/event-emitter/download/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/eventemitter3/download/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/events/download/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "exec-sh": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/exec-sh/download/exec-sh-0.2.1.tgz", + "integrity": "sha1-FjuYpuiea2W0fCoo0hW8H2OYnDg=", + "dev": true, + "requires": { + "merge": "1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expect": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/expect/download/expect-22.1.0.tgz", + "integrity": "sha1-+PmwGasnXYWcvv7VMfuu/olyQx0=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "jest-diff": "22.1.0", + "jest-get-type": "22.1.0", + "jest-matcher-utils": "22.1.0", + "jest-message-util": "22.1.0", + "jest-regex-util": "22.1.0" + } + }, + "express": { + "version": "4.16.2", + "resolved": "http://registry.npm.taobao.org/express/download/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extract-text-webpack-plugin/download/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha1-XwQ+qgL5dQqSWLeMCm4NwUCPsvc=", + "dev": true, + "requires": { + "async": "2.6.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/fastparse/download/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "2.0.0" + } + }, + "file-loader": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/file-loader/download/file-loader-1.1.6.tgz", + "integrity": "sha1-e5qPLFjwCnf930npQPesl4o+oOg=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "filesize": { + "version": "3.5.11", + "resolved": "http://registry.npm.taobao.org/filesize/download/filesize-3.5.11.tgz", + "integrity": "sha1-GRkyZ0lDO7PPdzaL0VjKq8wZ6e4=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "find-babel-config": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/find-babel-config/download/find-babel-config-1.1.0.tgz", + "integrity": "sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=", + "dev": true, + "requires": { + "json5": "0.5.1", + "path-exists": "3.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.1.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/flatten/download/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.4.1.tgz", + "integrity": "sha1-2BIPRRgZD1Wqxlu2/HuF/NZm1qo=", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/friendly-errors-webpack-plugin/download/friendly-errors-webpack-plugin-1.6.1.tgz", + "integrity": "sha1-4yeBxHIvVGoGqbXXp8+ihSA3XXA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "error-stack-parser": "2.0.1", + "string-length": "1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/fsevents/download/fsevents-1.1.3.tgz", + "integrity": "sha1-EfgjGPX+e7LNIpZaEI6TBiCCFtg=", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/gzip-size/download/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "http://registry.npm.taobao.org/handle-thing/download/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/hash.js/download/hash.js-1.1.3.tgz", + "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz", + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-4.2.0.tgz", + "integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.5.0.tgz", + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "http://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "wbuf": "1.7.2" + } + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", + "dev": true, + "requires": { + "whatwg-encoding": "1.0.3" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.8", + "resolved": "http://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.8.tgz", + "integrity": "sha1-XM2x9zoNZU5gkBR1Efbmsu4xJwA=", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.9", + "commander": "2.12.2", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.3.8" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "http://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.8", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "http://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.9", + "resolved": "http://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.9.tgz", + "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "http://registry.npm.taobao.org/http-proxy/download/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "http://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/icss-utils/download/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.16" + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-3.3.7.tgz", + "integrity": "sha1-YSKJv7PCIOGGpYEYYY1b6MG6sCE=", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz", + "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/internal-ip/download/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/interpret/download/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/is-callable/download/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz", + "integrity": "sha1-JH5BYueGDOu9rzC3dNawrH3P56U=", + "dev": true, + "requires": { + "ci-info": "1.1.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-odd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-odd/download/is-odd-1.0.0.tgz", + "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", + "dev": true, + "requires": { + "is-number": "3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-svg/download/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/istanbul-api/download/istanbul-api-1.2.1.tgz", + "integrity": "sha1-DGCgUV6xHH1lxrULuixumZrNhiA=", + "dev": true, + "requires": { + "async": "2.6.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-report": "1.1.2", + "istanbul-lib-source-maps": "1.2.2", + "istanbul-reports": "1.1.3", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha1-c7+5mIhSmUFck9OKPprfeEp3qdo=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha1-hTjZcDcss3FtU+VVI91UtVeo2Js=", + "dev": true, + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.9.1.tgz", + "integrity": "sha1-JQsws1MeXTJRKZ/dZLCyydtrVY4=", + "dev": true, + "requires": { + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-1.1.2.tgz", + "integrity": "sha1-kivifBO5URuXm9FYc1n2l5jB1CU=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.2.tgz", + "integrity": "sha1-dQV4YCQ18ooMBO5tfZ4PKWDmLBw=", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.1.3.tgz", + "integrity": "sha1-O54eje+20YsdQl2o6LMsWhY/LRA=", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "jest": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest/download/jest-22.1.4.tgz", + "integrity": "sha1-nscTc6OPQP+So+XpauhWh8GBu3I=", + "dev": true, + "requires": { + "jest-cli": "22.1.4" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-4.0.0.tgz", + "integrity": "sha1-dD1GUOBfNtHtJXW1ljjYcyK/u8w=", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "jest-cli": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-cli/download/jest-cli-22.1.4.tgz", + "integrity": "sha1-D+nzrIgbDNwAInEUxYWDouvvzAQ=", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "exit": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "import-local": "1.0.0", + "is-ci": "1.1.0", + "istanbul-api": "1.2.1", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-source-maps": "1.2.2", + "jest-changed-files": "22.1.4", + "jest-config": "22.1.4", + "jest-environment-jsdom": "22.1.4", + "jest-get-type": "22.1.0", + "jest-haste-map": "22.1.0", + "jest-message-util": "22.1.0", + "jest-regex-util": "22.1.0", + "jest-resolve-dependencies": "22.1.0", + "jest-runner": "22.1.4", + "jest-runtime": "22.1.4", + "jest-snapshot": "22.1.2", + "jest-util": "22.1.4", + "jest-worker": "22.1.0", + "micromatch": "2.3.11", + "node-notifier": "5.2.1", + "realpath-native": "1.0.0", + "rimraf": "2.6.2", + "slash": "1.0.0", + "string-length": "2.0.0", + "strip-ansi": "4.0.0", + "which": "1.3.0", + "yargs": "10.1.2" + } + }, + "string-length": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "1.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs": { + "version": "10.1.2", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-10.1.2.tgz", + "integrity": "sha1-RU0HTCsWpRpD4vt4B+T53mnMtcU=", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz", + "integrity": "sha1-8TdqM7Ziml0GN4KUTacyYx6WaVA=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "jest-changed-files": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-22.1.4.tgz", + "integrity": "sha1-H3hEvLc53sB+WJmmM8DLbVBpg04=", + "dev": true, + "requires": { + "throat": "4.1.0" + } + }, + "jest-config": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-config/download/jest-config-22.1.4.tgz", + "integrity": "sha1-B1/6zOg8PjjPhbG5ug0hvT7ietA=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "glob": "7.1.2", + "jest-environment-jsdom": "22.1.4", + "jest-environment-node": "22.1.4", + "jest-get-type": "22.1.0", + "jest-jasmine2": "22.1.4", + "jest-regex-util": "22.1.0", + "jest-resolve": "22.1.4", + "jest-util": "22.1.4", + "jest-validate": "22.1.2", + "pretty-format": "22.1.0" + } + }, + "jest-diff": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-diff/download/jest-diff-22.1.0.tgz", + "integrity": "sha1-D62dlsh7RTiWv5Od89yKrGkZrDg=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "diff": "3.4.0", + "jest-get-type": "22.1.0", + "pretty-format": "22.1.0" + } + }, + "jest-docblock": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-docblock/download/jest-docblock-22.1.0.tgz", + "integrity": "sha1-P+WYbVREy8sUl0brSwfFfFpGTf0=", + "dev": true, + "requires": { + "detect-newline": "2.1.0" + } + }, + "jest-environment-jsdom": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-22.1.4.tgz", + "integrity": "sha1-cEUYzoN19+xd4EjR6cQmiwigPgA=", + "dev": true, + "requires": { + "jest-mock": "22.1.0", + "jest-util": "22.1.4", + "jsdom": "11.6.0" + } + }, + "jest-environment-node": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-22.1.4.tgz", + "integrity": "sha1-DylG6PhobObF2PooDOHNjVjoaes=", + "dev": true, + "requires": { + "jest-mock": "22.1.0", + "jest-util": "22.1.4" + } + }, + "jest-get-type": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.1.0.tgz", + "integrity": "sha1-TpCvKY7WGB7chdLaUA29J1Pg1ak=", + "dev": true + }, + "jest-haste-map": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-22.1.0.tgz", + "integrity": "sha1-EXTG/zk/mBjr8RY3ENiGi1Nw2io=", + "dev": true, + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "jest-docblock": "22.1.0", + "jest-worker": "22.1.0", + "micromatch": "2.3.11", + "sane": "2.3.0" + } + }, + "jest-jasmine2": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-22.1.4.tgz", + "integrity": "sha1-ytoLr1CiIMYWqVdXKLgNTd7evos=", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.0", + "co": "4.6.0", + "expect": "22.1.0", + "graceful-fs": "4.1.11", + "is-generator-fn": "1.0.0", + "jest-diff": "22.1.0", + "jest-matcher-utils": "22.1.0", + "jest-message-util": "22.1.0", + "jest-snapshot": "22.1.2", + "source-map-support": "0.5.2" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.2.tgz", + "integrity": "sha1-GmKX/Vsudis5aIx/yRIztgmE8KU=", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + } + } + }, + "jest-leak-detector": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-22.1.0.tgz", + "integrity": "sha1-CDdmRM7gcQPaBpuqwZrbApm3csI=", + "dev": true, + "requires": { + "pretty-format": "22.1.0" + } + }, + "jest-matcher-utils": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-22.1.0.tgz", + "integrity": "sha1-4WRmW10xNjasKff2/p7wps4E/rw=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "22.1.0", + "pretty-format": "22.1.0" + } + }, + "jest-message-util": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-message-util/download/jest-message-util-22.1.0.tgz", + "integrity": "sha1-UboHlMtuV5v8TprfrEUvnxoCk/w=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.38", + "chalk": "2.3.0", + "micromatch": "2.3.11", + "slash": "1.0.0", + "stack-utils": "1.0.1" + } + }, + "jest-mock": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-mock/download/jest-mock-22.1.0.tgz", + "integrity": "sha1-h+whwFmTJWccmiOtDgXIb7WHm2E=", + "dev": true + }, + "jest-regex-util": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-22.1.0.tgz", + "integrity": "sha1-Xa8v4nAHS22mPl2F8cmsyGZ2j1M=", + "dev": true + }, + "jest-resolve": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-resolve/download/jest-resolve-22.1.4.tgz", + "integrity": "sha1-crmzceqsSPhKrUrXMiIv/jdpJgI=", + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "chalk": "2.3.0" + } + }, + "jest-resolve-dependencies": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-22.1.0.tgz", + "integrity": "sha1-NA5BOfsTMVzUOrwFTmwGE2vlHjE=", + "dev": true, + "requires": { + "jest-regex-util": "22.1.0" + } + }, + "jest-runner": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-runner/download/jest-runner-22.1.4.tgz", + "integrity": "sha1-4DkDkRDLGzH+vA+Z40m/fJQwSi8=", + "dev": true, + "requires": { + "exit": "0.1.2", + "jest-config": "22.1.4", + "jest-docblock": "22.1.0", + "jest-haste-map": "22.1.0", + "jest-jasmine2": "22.1.4", + "jest-leak-detector": "22.1.0", + "jest-message-util": "22.1.0", + "jest-runtime": "22.1.4", + "jest-util": "22.1.4", + "jest-worker": "22.1.0", + "throat": "4.1.0" + } + }, + "jest-runtime": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-runtime/download/jest-runtime-22.1.4.tgz", + "integrity": "sha1-FHTZ9c2lGLcC4LJaF9TvP8Vjogw=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-jest": "22.1.0", + "babel-plugin-istanbul": "4.1.5", + "chalk": "2.3.0", + "convert-source-map": "1.5.1", + "exit": "0.1.2", + "graceful-fs": "4.1.11", + "jest-config": "22.1.4", + "jest-haste-map": "22.1.0", + "jest-regex-util": "22.1.0", + "jest-resolve": "22.1.4", + "jest-util": "22.1.4", + "json-stable-stringify": "1.0.1", + "micromatch": "2.3.11", + "realpath-native": "1.0.0", + "slash": "1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "2.3.0", + "yargs": "10.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-4.0.0.tgz", + "integrity": "sha1-dD1GUOBfNtHtJXW1ljjYcyK/u8w=", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs": { + "version": "10.1.2", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-10.1.2.tgz", + "integrity": "sha1-RU0HTCsWpRpD4vt4B+T53mnMtcU=", + "dev": true, + "requires": { + "cliui": "4.0.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz", + "integrity": "sha1-8TdqM7Ziml0GN4KUTacyYx6WaVA=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "jest-snapshot": { + "version": "22.1.2", + "resolved": "http://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-22.1.2.tgz", + "integrity": "sha1-snDPbjCY8zrO6v2gKxPrCTPcYTk=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-diff": "22.1.0", + "jest-matcher-utils": "22.1.0", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "pretty-format": "22.1.0" + } + }, + "jest-util": { + "version": "22.1.4", + "resolved": "http://registry.npm.taobao.org/jest-util/download/jest-util-22.1.4.tgz", + "integrity": "sha1-rIy9Q+5lQQLxlB8/Dp0deJqLaps=", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.0", + "graceful-fs": "4.1.11", + "is-ci": "1.1.0", + "jest-message-util": "22.1.0", + "jest-validate": "22.1.2", + "mkdirp": "0.5.1" + } + }, + "jest-validate": { + "version": "22.1.2", + "resolved": "http://registry.npm.taobao.org/jest-validate/download/jest-validate-22.1.2.tgz", + "integrity": "sha1-w7Bry6e9moUJGf4za18qjDojlAQ=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "jest-get-type": "22.1.0", + "leven": "2.1.0", + "pretty-format": "22.1.0" + } + }, + "jest-vue-preprocessor": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/jest-vue-preprocessor/download/jest-vue-preprocessor-1.3.1.tgz", + "integrity": "sha1-cWGk8fZu7jTEBkdkR8jNcJk4rXU=", + "dev": true, + "requires": { + "babel-plugin-transform-runtime": "6.23.0", + "find-babel-config": "1.1.0", + "typescript": "2.5.3", + "vue-property-decorator": "6.0.0" + } + }, + "jest-worker": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/jest-worker/download/jest-worker-22.1.0.tgz", + "integrity": "sha1-CYeDL+WPvcIFNX9MGbmSRGNoyvs=", + "dev": true, + "requires": { + "merge-stream": "1.0.1" + } + }, + "js-base64": { + "version": "2.4.2", + "resolved": "http://registry.npm.taobao.org/js-base64/download/js-base64-2.4.2.tgz", + "integrity": "sha1-GJbaAQ74hi84XYiHZI6bbcSnouk=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "11.6.0", + "resolved": "http://registry.npm.taobao.org/jsdom/download/jsdom-11.6.0.tgz", + "integrity": "sha1-czR4FZXui97ql0L8M/q1za1tGV8=", + "dev": true, + "requires": { + "abab": "1.0.4", + "acorn": "5.3.0", + "acorn-globals": "4.1.0", + "array-equal": "1.0.0", + "browser-process-hrtime": "0.1.2", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "domexception": "1.0.1", + "escodegen": "1.9.0", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.2.0", + "nwmatcher": "1.4.3", + "parse5": "4.0.0", + "pn": "1.1.0", + "request": "2.83.0", + "request-promise-native": "1.0.5", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.3", + "w3c-hr-time": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "6.4.0", + "ws": "4.0.0", + "xml-name-validator": "3.0.0" + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/json-loader/download/json-loader-0.5.7.tgz", + "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/json3/download/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/killable/download/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "last-call-webpack-plugin": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/last-call-webpack-plugin/download/last-call-webpack-plugin-2.1.2.tgz", + "integrity": "sha1-rYDG4xCZgpTS7SGApo6VieR2jEQ=", + "dev": true, + "requires": { + "lodash": "4.17.4", + "webpack-sources": "1.1.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "left-pad": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/left-pad/download/left-pad-1.2.0.tgz", + "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/loader-runner/download/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "http://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "http://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/loglevel/download/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "http://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "http://registry.npm.taobao.org/macaddress/download/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "make-dir": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.1.0.tgz", + "integrity": "sha1-GbQ2n+SMEW9Twq+VrRAsDjnoXVE=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "http://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.4" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "http://registry.npm.taobao.org/math-expression-evaluator/download/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/md5.js/download/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.6", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "merge": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/merge/download/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/mississippi/download/mississippi-1.3.0.tgz", + "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.0.tgz", + "integrity": "sha1-R6hzK6l3mUV8jB7KKPlRMtfoFQo=", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.2", + "resolved": "http://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.2.tgz", + "integrity": "sha1-MAthMzYfiqryuNEkjoXDY/5blaA=", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "0.1.0" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.8.0", + "resolved": "http://registry.npm.taobao.org/nan/download/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.7", + "resolved": "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.7.tgz", + "integrity": "sha1-U81KoQn/aLf4aVkf3J0Q2u7qPnk=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "is-odd": "1.0.0", + "kind-of": "5.1.0", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/ncname/download/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-forge": { + "version": "0.6.33", + "resolved": "http://registry.npm.taobao.org/node-forge/download/node-forge-0.6.33.tgz", + "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.1.0.tgz", + "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "http://registry.npm.taobao.org/node-notifier/download/node-notifier-5.2.1.tgz", + "integrity": "sha1-+jE90I9VF9sOJQLldY1mSsafneo=", + "dev": true, + "requires": { + "growly": "1.3.0", + "semver": "5.5.0", + "shellwords": "0.1.1", + "which": "1.3.0" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwmatcher": { + "version": "1.4.3", + "resolved": "http://registry.npm.taobao.org/nwmatcher/download/nwmatcher-1.4.3.tgz", + "integrity": "sha1-ZDSOOz2A8DW0CsEVY9J4+LctuJw=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + } + } + }, + "object-keys": { + "version": "1.0.11", + "resolved": "http://registry.npm.taobao.org/object-keys/download/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/obuf/download/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/on-headers/download/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "http://registry.npm.taobao.org/opener/download/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "opn": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/opn/download/opn-5.2.0.tgz", + "integrity": "sha1-cf35NNaCfWds7L6hUx+V01RkEiU=", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.2" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/optimize-css-assets-webpack-plugin/download/optimize-css-assets-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-CaQMTO/eHdAUJESoc8Vqop6xjm8=", + "dev": true, + "requires": { + "cssnano": "3.10.0", + "last-call-webpack-plugin": "2.1.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "ora": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/ora/download/ora-1.3.0.tgz", + "integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "2.1.0", + "cli-spinners": "1.1.0", + "log-symbols": "1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "original": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/original/download/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/url-parse/download/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.2.0.tgz", + "integrity": "sha1-DpK2vty1nwIsE9DxlJ3ILRWQnxw=", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz", + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/pako/download/pako-1.0.6.tgz", + "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz", + "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=", + "dev": true + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "http://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.14.tgz", + "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz", + "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", + "dev": true + }, + "portfinder": { + "version": "1.0.13", + "resolved": "http://registry.npm.taobao.org/portfinder/download/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "6.0.16", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-6.0.16.tgz", + "integrity": "sha1-ES4v4qbSEJvglXaHJDFw6lWJ4UY=", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "5.1.0" + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "http://registry.npm.taobao.org/postcss-calc/download/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "http://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "http://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/postcss-discard-unused/download/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-filter-plugins/download/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqid": "4.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-import": { + "version": "11.0.0", + "resolved": "http://registry.npm.taobao.org/postcss-import/download/postcss-import-11.0.0.tgz", + "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=", + "dev": true, + "requires": { + "postcss": "6.0.16", + "postcss-value-parser": "3.3.0", + "read-cache": "1.0.0", + "resolve": "1.5.0" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-load-options/download/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/postcss-load-plugins/download/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "2.0.10", + "resolved": "http://registry.npm.taobao.org/postcss-loader/download/postcss-loader-2.0.10.tgz", + "integrity": "sha1-CQ2wVAFAvVanp/cXxBvCmu70xnQ=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.16", + "postcss-load-config": "1.2.0", + "schema-utils": "0.3.0" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "http://registry.npm.taobao.org/postcss-merge-idents/download/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "resolved": "http://registry.npm.taobao.org/browserslist/download/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000794", + "electron-to-chromium": "1.3.31" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/postcss-message-helpers/download/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "6.0.16" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.16" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.16" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.16" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "http://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/postcss-reduce-idents/download/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "http://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-url": { + "version": "7.3.0", + "resolved": "http://registry.npm.taobao.org/postcss-url/download/postcss-url-7.3.0.tgz", + "integrity": "sha1-zy9F4GdDz0PP6iUwn4HLwAPceD8=", + "dev": true, + "requires": { + "mime": "1.6.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "postcss": "6.0.16", + "xxhashjs": "0.2.2" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/postcss-zindex/download/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "http://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz", + "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.10.2", + "resolved": "http://registry.npm.taobao.org/prettier/download/prettier-1.10.2.tgz", + "integrity": "sha1-Gvg1bRhCJ2qZpbVSnILdnprTzJM=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "pretty-format": { + "version": "22.1.0", + "resolved": "http://registry.npm.taobao.org/pretty-format/download/pretty-format-22.1.0.tgz", + "integrity": "sha1-IndgW0DtRSmuTbUf9i9L6BdkeRQ=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "http://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/pump/download/pump-1.0.3.tgz", + "integrity": "sha1-Xf6DEcM7v2/BgmH580cCxHwIqVQ=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/pumpify/download/pumpify-1.4.0.tgz", + "integrity": "sha1-gLfF334kFT0D8OesigWl0Gi9B/s=", + "dev": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "http://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/querystringify/download/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/randombytes/download/randombytes-2.0.6.tgz", + "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/randomfill/download/randomfill-1.0.3.tgz", + "integrity": "sha1-uWt99YfwHdkXJsQY8wVTsUGOPWI=", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "realpath-native": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/realpath-native/download/realpath-native-1.0.0.tgz", + "integrity": "sha1-eIVyGoO0O9Uydgnw3eyySCMF/fA=", + "dev": true, + "requires": { + "util.promisify": "1.0.0" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "http://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.5.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/reduce-css-calc/download/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/reduce-function-call/download/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reflect-metadata": { + "version": "0.1.12", + "resolved": "http://registry.npm.taobao.org/reflect-metadata/download/reflect-metadata-0.1.12.tgz", + "integrity": "sha1-MRvwxrY814LyKKgavhRqK/qcVvI=", + "dev": true + }, + "regenerate": { + "version": "1.3.3", + "resolved": "http://registry.npm.taobao.org/regenerate/download/regenerate-1.3.3.tgz", + "integrity": "sha1-DDNtOYBVPXVcObWGrjsgqknIK38=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "http://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.10.1.tgz", + "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.0.tgz", + "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "http://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/renderkid/download/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/utila/download/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.83.0.tgz", + "integrity": "sha1-ygtl2gLtYpNYh4COb1EDgQNOM1Y=", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/require-from-string/download/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.5.0.tgz", + "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", + "dev": true + }, + "sane": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/sane/download/sane-2.3.0.tgz", + "integrity": "sha1-Pz31hKv2nmPUu3Tw+MQkaOTX1Gs=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "exec-sh": "0.2.1", + "fb-watchman": "2.0.0", + "fsevents": "1.1.3", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.18.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.1", + "resolved": "http://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.1.tgz", + "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "dev": true, + "requires": { + "node-forge": "0.6.33" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true + }, + "send": { + "version": "0.16.1", + "resolved": "http://registry.npm.taobao.org/send/download/send-0.16.1.tgz", + "integrity": "sha1-pw4coh0TgsEdDZ9iMd6ygQgNerM=", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.2", + "mime-types": "2.1.17", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "http://registry.npm.taobao.org/serve-static/download/serve-static-1.13.1.tgz", + "integrity": "sha1-TFfVNASnYdjy58HooYpH2/J4pxk=", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-getter": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/set-getter/download/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "dev": true, + "requires": { + "to-object-path": "0.3.0" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "sha.js": { + "version": "2.4.10", + "resolved": "http://registry.npm.taobao.org/sha.js/download/sha.js-2.4.10.tgz", + "integrity": "sha1-sf3lzX0RpWJmOKB8YEq5Cc+jH5s=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "http://registry.npm.taobao.org/shelljs/download/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz", + "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.1", + "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.1.tgz", + "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz", + "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "http://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz", + "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.2.1" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "http://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.2.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "http://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.0.tgz", + "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.1.tgz", + "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "http://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "http://registry.npm.taobao.org/spdy/download/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "http://registry.npm.taobao.org/spdy-transport/download/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/ssri/download/ssri-5.1.0.tgz", + "integrity": "sha1-LL8d82t00PyR/PiWQKSz4dELGJk=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stack-utils": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "stackframe": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/stackframe/download/stackframe-1.0.4.tgz", + "integrity": "sha1-NXskqZL5Qny6a1RdlqFO0svKGHs=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/stream-each/download/stream-each-1.2.2.tgz", + "integrity": "sha1-joxGP5HaiZF3h2WHP+TZYNj2Fr0=", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.0", + "resolved": "http://registry.npm.taobao.org/stream-http/download/stream-http-2.8.0.tgz", + "integrity": "sha1-/YZUbaybHJGv+PxdKHuY+vtBvBA=", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-length": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/string-length/download/string-length-1.0.1.tgz", + "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "dev": true, + "requires": { + "strip-ansi": "3.0.1" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "supports-color": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.1.0.tgz", + "integrity": "sha1-BYoCHRthn33fOYDXEuo1kM5949U=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "http://registry.npm.taobao.org/svgo/download/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "tapable": { + "version": "0.2.8", + "resolved": "http://registry.npm.taobao.org/tapable/download/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "test-exclude": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/test-exclude/download/test-exclude-4.1.1.tgz", + "integrity": "sha1-TYSWSwlmsAh+zDNKLOAC09k0HiY=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "throat": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "thunky": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/thunky/download/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/time-stamp/download/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.4.tgz", + "integrity": "sha1-lspT9LeUpefA4b18yIo3Ipj6AeY=", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.1.tgz", + "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "regex-not": "1.0.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "toposort": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/toposort/download/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.5.3", + "resolved": "http://registry.npm.taobao.org/typescript/download/typescript-2.5.3.tgz", + "integrity": "sha1-3z3Nw48764ANS8MiZGsEo/bKfw0=", + "dev": true + }, + "uglify-js": { + "version": "3.3.8", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-3.3.8.tgz", + "integrity": "sha1-Ueml23OvtTrJhgPQgiTtzQvkX9g=", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz", + "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-1.1.6.tgz", + "integrity": "sha1-9LqESe3PF4NcGLpq6ZudYQhX+xk=", + "dev": true, + "requires": { + "cacache": "10.0.2", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.3", + "serialize-javascript": "1.4.0", + "source-map": "0.6.1", + "uglify-es": "3.3.8", + "webpack-sources": "1.1.0", + "worker-farm": "1.5.2" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz", + "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=", + "dev": true + }, + "schema-utils": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.3.tgz", + "integrity": "sha1-4qWU0zlYNNXhXaIrSL4TUXhZRY4=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1" + } + }, + "uglify-es": { + "version": "3.3.8", + "resolved": "http://registry.npm.taobao.org/uglify-es/download/uglify-es-3.3.8.tgz", + "integrity": "sha1-8saObP8ND53JV35NogcVHC51O34=", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz", + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "set-value": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/uniqid/download/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "http://registry.npm.taobao.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.5.9", + "resolved": "http://registry.npm.taobao.org/url-loader/download/url-loader-0.5.9.tgz", + "integrity": "sha1-zI/qgse5Bud3cBklCGnlaemVwpU=", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.3.6" + }, + "dependencies": { + "mime": { + "version": "1.3.6", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/url-parse/download/url-parse-1.2.0.tgz", + "integrity": "sha1-OhnoqqbQI93SfcxEy0/I9/7COYY=", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/querystringify/download/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "use": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/use/download/use-2.0.2.tgz", + "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "0.1.0" + } + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "http://registry.npm.taobao.org/util/download/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "object.getownpropertydescriptors": "2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.2.1.tgz", + "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/vendors/download/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/vm-browserify/download/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vue": { + "version": "2.5.13", + "resolved": "http://registry.npm.taobao.org/vue/download/vue-2.5.13.tgz", + "integrity": "sha1-lb0x4g7896fzkjnJqmeHzoz1eOE=" + }, + "vue-class-component": { + "version": "6.1.2", + "resolved": "http://registry.npm.taobao.org/vue-class-component/download/vue-class-component-6.1.2.tgz", + "integrity": "sha1-h6wCZbDbcaP0nxDZDk9p+b6cL70=", + "dev": true + }, + "vue-hot-reload-api": { + "version": "2.2.4", + "resolved": "http://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.2.4.tgz", + "integrity": "sha1-aDvR0CbA07PJN9WHVnnpqH7GzY8=", + "dev": true + }, + "vue-loader": { + "version": "13.7.0", + "resolved": "http://registry.npm.taobao.org/vue-loader/download/vue-loader-13.7.0.tgz", + "integrity": "sha1-TWo1sWnCoKSIhC+5XIUFIQX6lyk=", + "dev": true, + "requires": { + "consolidate": "0.14.5", + "hash-sum": "1.0.2", + "loader-utils": "1.1.0", + "lru-cache": "4.1.1", + "postcss": "6.0.16", + "postcss-load-config": "1.2.0", + "postcss-selector-parser": "2.2.3", + "prettier": "1.10.2", + "resolve": "1.5.0", + "source-map": "0.6.1", + "vue-hot-reload-api": "2.2.4", + "vue-style-loader": "3.1.0", + "vue-template-es2015-compiler": "1.6.0" + } + }, + "vue-property-decorator": { + "version": "6.0.0", + "resolved": "http://registry.npm.taobao.org/vue-property-decorator/download/vue-property-decorator-6.0.0.tgz", + "integrity": "sha1-u2UbKTVC4x2w0k829LAlDvCNhRU=", + "dev": true, + "requires": { + "reflect-metadata": "0.1.12", + "vue-class-component": "6.1.2" + } + }, + "vue-style-loader": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-3.1.0.tgz", + "integrity": "sha1-1WUAMNLjy7nrV8+S9fgr5zUXUjA=", + "dev": true, + "requires": { + "hash-sum": "1.0.2", + "loader-utils": "1.1.0" + } + }, + "vue-template-compiler": { + "version": "2.5.13", + "resolved": "http://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.5.13.tgz", + "integrity": "sha1-EqKqDs1hWKxeXxTSlLCZPzmcPTg=", + "dev": true, + "requires": { + "de-indent": "1.0.2", + "he": "1.1.1" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha1-3EJpcTMwLOMBdSQ1amxht7abShg=", + "dev": true + }, + "vue-test-utils": { + "version": "1.0.0-beta.11", + "resolved": "http://registry.npm.taobao.org/vue-test-utils/download/vue-test-utils-1.0.0-beta.11.tgz", + "integrity": "sha1-Qbf6U+AGHRbsvhjP7qGXyQnUq4o=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.11" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "http://registry.npm.taobao.org/watch/download/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "0.2.1", + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "watchpack": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/watchpack/download/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "2.6.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "http://registry.npm.taobao.org/wbuf/download/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz", + "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", + "dev": true + }, + "webpack": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/webpack/download/webpack-3.10.0.tgz", + "integrity": "sha1-UpG4dQeM8qv0K90jr+P4+WwX1yU=", + "dev": true, + "requires": { + "acorn": "5.3.0", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.4.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "http://registry.npm.taobao.org/uglifyjs-webpack-plugin/download/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "2.9.2", + "resolved": "http://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-2.9.2.tgz", + "integrity": "sha1-Y+2G63HMTNqG9o5oWoRTC6ASZEk=", + "dev": true, + "requires": { + "acorn": "5.3.0", + "chalk": "1.1.3", + "commander": "2.12.2", + "ejs": "2.5.7", + "express": "4.16.2", + "filesize": "3.5.11", + "gzip-size": "3.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "opener": "1.4.3", + "ws": "4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "http://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha1-+PwRIM47T8VoDO7LQ9d3lmshEF4=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + }, + "webpack-dev-server": { + "version": "2.11.1", + "resolved": "http://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-2.11.1.tgz", + "integrity": "sha1-b5NYoALbhAPwFuM2gW9EhThOXsA=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "2.0.0", + "compression": "1.7.1", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.2", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "1.0.0", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.2.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.1", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.1.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "3.1.5", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.0.tgz", + "integrity": "sha1-pGlBy1+0khVrPWplbgbDU2Tj5m4=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.1" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chokidar": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.0.tgz", + "integrity": "sha1-ZoYxPFQdMnSypcASMzQgN5SMkRs=", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.0", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "micromatch": { + "version": "3.1.5", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.5.tgz", + "integrity": "sha1-0F4WjCBkct+8qYW/709XeXtM1Lo=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.0", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.7", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-merge": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.1.1.tgz", + "integrity": "sha1-8Rl6Cpc+acb77rbWWCGaqMDBNVU=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.1.0.tgz", + "integrity": "sha1-oQHrrlnWUHNU1x2AE5UKOot6WlQ=", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.9", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.3.tgz", + "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.3.tgz", + "integrity": "sha1-V8I1vIZX6RTSTho5fTyC2u4Ka6M=", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-url": { + "version": "6.4.0", + "resolved": "http://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.4.0.tgz", + "integrity": "sha1-CP3yuehyeDp6H2IWJgodZsxyLgg=", + "dev": true, + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "http://registry.npm.taobao.org/whet.extend/download/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "worker-farm": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/worker-farm/download/worker-farm-1.5.2.tgz", + "integrity": "sha1-MrMS5dw9XUXXnvRKzCWHSRzXKa4=", + "dev": true, + "requires": { + "errno": "0.1.6", + "xtend": "4.0.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "ws": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/ws/download/ws-4.0.0.tgz", + "integrity": "sha1-v+HaTAjuuXgLmG4OTRDszXNFmZ8=", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/xml-char-classes/download/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz", + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/xxhashjs/download/xxhashjs-0.2.2.tgz", + "integrity": "sha1-imJRVnYhocRqWuIE2gJJx/jKqdg=", + "dev": true, + "requires": { + "cuint": "0.2.2" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } +} diff --git a/Test/Jest/vue-test/package.json b/Test/Jest/vue-test/package.json new file mode 100644 index 0000000..84ffe0f --- /dev/null +++ b/Test/Jest/vue-test/package.json @@ -0,0 +1,80 @@ +{ + "name": "vue-test", + "version": "1.0.0", + "description": "A Vue.js project", + "author": "imuntil ", + "private": true, + "scripts": { + "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", + "start": "npm run dev", + "build": "node build/build.js", + "test": "jest" + }, + "dependencies": { + "axios": "^0.17.1", + "vue": "^2.5.2" + }, + "devDependencies": { + "autoprefixer": "^7.1.2", + "babel-core": "^6.22.1", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "babel-jest": "^22.1.0", + "babel-loader": "^7.1.1", + "babel-plugin-syntax-jsx": "^6.18.0", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-plugin-transform-vue-jsx": "^3.5.0", + "babel-preset-env": "^1.3.2", + "babel-preset-stage-2": "^6.22.0", + "chalk": "^2.0.1", + "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.28.0", + "extract-text-webpack-plugin": "^3.0.0", + "file-loader": "^1.1.4", + "friendly-errors-webpack-plugin": "^1.6.1", + "html-webpack-plugin": "^2.30.1", + "jest": "^22.1.4", + "jest-vue-preprocessor": "^1.3.1", + "node-notifier": "^5.1.2", + "optimize-css-assets-webpack-plugin": "^3.2.0", + "ora": "^1.2.0", + "portfinder": "^1.0.13", + "postcss-import": "^11.0.0", + "postcss-loader": "^2.0.8", + "postcss-url": "^7.2.1", + "rimraf": "^2.6.0", + "semver": "^5.3.0", + "shelljs": "^0.7.6", + "uglifyjs-webpack-plugin": "^1.1.1", + "url-loader": "^0.5.8", + "vue-loader": "^13.3.0", + "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.5.2", + "vue-test-utils": "^1.0.0-beta.11", + "webpack": "^3.6.0", + "webpack-bundle-analyzer": "^2.9.0", + "webpack-dev-server": "^2.9.1", + "webpack-merge": "^4.1.0" + }, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ], + "jest": { + "moduleNameMapper": { + "^vue$": "vue/dist/vue.common.js" + }, + "moduleFileExtensions": [ + "js", + "vue" + ], + "transform": { + "^.+\\.js$": "/node_modules/babel-jest", + ".*\\.(vue)$": "/node_modules/jest-vue-preprocessor" + } + } +} diff --git a/Test/Jest/vue-test/src/App.vue b/Test/Jest/vue-test/src/App.vue new file mode 100644 index 0000000..33b7706 --- /dev/null +++ b/Test/Jest/vue-test/src/App.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/Test/Jest/vue-test/src/assets/logo.png b/Test/Jest/vue-test/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/Test/Jest/vue-test/src/assets/logo.png differ diff --git a/Test/Jest/vue-test/src/components/Form.vue b/Test/Jest/vue-test/src/components/Form.vue new file mode 100644 index 0000000..d385b37 --- /dev/null +++ b/Test/Jest/vue-test/src/components/Form.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/Test/Jest/vue-test/src/components/HelloWorld.vue b/Test/Jest/vue-test/src/components/HelloWorld.vue new file mode 100644 index 0000000..1c19f2a --- /dev/null +++ b/Test/Jest/vue-test/src/components/HelloWorld.vue @@ -0,0 +1,113 @@ + + + + + + diff --git a/Test/Jest/vue-test/src/components/Message.vue b/Test/Jest/vue-test/src/components/Message.vue new file mode 100644 index 0000000..50f0233 --- /dev/null +++ b/Test/Jest/vue-test/src/components/Message.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/Test/Jest/vue-test/src/components/MessageList.vue b/Test/Jest/vue-test/src/components/MessageList.vue new file mode 100644 index 0000000..c6efa06 --- /dev/null +++ b/Test/Jest/vue-test/src/components/MessageList.vue @@ -0,0 +1,17 @@ + + diff --git a/Test/Jest/vue-test/src/components/Test.vue b/Test/Jest/vue-test/src/components/Test.vue new file mode 100644 index 0000000..bf53705 --- /dev/null +++ b/Test/Jest/vue-test/src/components/Test.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/Test/Jest/vue-test/src/main.js b/Test/Jest/vue-test/src/main.js new file mode 100644 index 0000000..684ffac --- /dev/null +++ b/Test/Jest/vue-test/src/main.js @@ -0,0 +1,13 @@ +// The Vue build version to load with the `import` command +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. +import Vue from 'vue' +import App from './App' + +Vue.config.productionTip = false + +/* eslint-disable no-new */ +new Vue({ + el: '#app', + components: { App }, + template: '' +}) diff --git a/Test/Jest/vue-test/static/.gitkeep b/Test/Jest/vue-test/static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Test/Jest/vue-test/test/App.test.js b/Test/Jest/vue-test/test/App.test.js new file mode 100644 index 0000000..b3cc62b --- /dev/null +++ b/Test/Jest/vue-test/test/App.test.js @@ -0,0 +1,42 @@ +import Vue from 'vue' +import App from '../src/App' +import { shallow } from 'vue-test-utils' + +// describe('App.test.js', () => { +// let cmp, vm + +// beforeEach(() => { +// cmp = Vue.extend(App) +// vm = new cmp({ +// data: { +// messages: ['Cat'] +// } +// }).$mount()s +// }) + +// it('equals messages to ["Cat"]', () => { +// expect(vm.messages).toEqual(['Cat']) +// }) +// it('has the expected html structure', () => { +// expect(vm.$el).toMatchSnapshot() +// }) +// }) +describe('App.test.js', () => { + let cmp + + beforeEach(() => { + cmp = shallow(App, { + data: { + messages: ['Cat'] + } + }) + }) + + it('equals messages to be ["Cat"]', () => { + expect(cmp.vm.messages).toEqual(['Cat']) + }) + + it('has the expected html structure', () => { + expect(cmp.element).toMatchSnapshot() + }) +}) \ No newline at end of file diff --git a/Test/Jest/vue-test/test/Form.test.js b/Test/Jest/vue-test/test/Form.test.js new file mode 100644 index 0000000..34174d6 --- /dev/null +++ b/Test/Jest/vue-test/test/Form.test.js @@ -0,0 +1,85 @@ +// jest.mock('axios', () => ({ +// get: jest.fn(() => Promise.resolve({ data: [3] })) +// })) +import { shallow } from 'vue-test-utils' +import Form from '../src/components/Form.vue' +import axios from 'axios' + +describe('Form.test.js', () => { + let cmp + + beforeEach(() => { + cmp = shallow(Form) + jest.resetModules() + jest.clearAllMocks() + }) + + describe('Properties', () => { + it('returns the string in normal order if reversed property is not true', () => { + cmp.vm.inputValue = 'Yoo' + expect(cmp.vm.reversedInput).toBe('Yoo') + }) + + it('returns the reversed string if reversed property is true', () => { + cmp.vm.inputValue = 'Yoo' + cmp.setProps({ reversed: true }) + expect(cmp.vm.reversedInput).toBe('ooY') + }) + }) + + describe('Watchers - inputValue', () => { + let spy + + beforeAll(() => { + spy = jest.spyOn(console, 'log') + }) + + afterEach(() => { + spy.mockClear() + }) + + it('is not called if value is empty (trimmed)', (next) => { + cmp.vm.inputValue = ' ' + cmp.vm.$nextTick(() => { + expect(spy).not.toBeCalled() + next() + }) + }) + it('is not called if values are the same', (next) => { + // cmp.vm.inputValue = 'foo' + // cmp.vm.$nextTick(() => { + // spy.mockClear() + // cmp.vm.inputValue = 'foo' + + // cmp.vm.$nextTick(() => { + // expect(spy).not.toBeCalled() + // next() + // }) + // }) + cmp = shallow(Form, { data: ({ inputValue: 'foo' }) }) + cmp.vm.inputValue = 'foo' + + cmp.vm.$nextTick(() => { + expect(spy).not.toBeCalled() + next() + }) + }) + it('is called with the new value in other cased', (next) => { + cmp.vm.inputValue = 'foo' + cmp.vm.$nextTick(() => { + expect(spy).toBeCalled() + next() + }) + }) + }) + + describe('methods', () => { + it('calls axios.get', async () => { + const result = await cmp.vm.onSubmit('an') + + // expect(result).toEqual({ data: [3] }) + expect(cmp.vm.results).toEqual([3]) + expect(axios.get).toBeCalledWith('https://jsonplaceholder.typicode.com/posts?q=an') + }) + }) +}) \ No newline at end of file diff --git a/Test/Jest/vue-test/test/Message.spec.js b/Test/Jest/vue-test/test/Message.spec.js new file mode 100644 index 0000000..8063b1a --- /dev/null +++ b/Test/Jest/vue-test/test/Message.spec.js @@ -0,0 +1,37 @@ +import Message from '../src/components/Message.vue' +import { mount } from 'vue-test-utils' + +describe('Message.test.js', () => { + let cmp + const createCmp = propsData => mount(Message, { propsData }) + describe('Events', () => { + beforeEach(() => { + cmp = createCmp({ message: 'Cat' }) + }) + it ('call handleClick when click on message', () => { + // const spy = spyOn(cmp.vm, 'handleClick') + // cmp.update() + // const el = cmp.find('.message').trigger('click') + // expect(cmp.vm.handleClick).toBeCalled() + + // cmp.vm.handleClick = jest.fn() + // cmp.update() + // const el = cmp.find('.message').trigger('click') + // expect(cmp.vm.handleClick).toBeCalled() + + const stub = jest.fn() + cmp.setMethods({ handleClick: stub }) + const el = cmp.find('.message').trigger('click') + // expect(stub).toBeCalled() + expect(stub).toHaveBeenCalled() + }) + + it('triggers a message-clicked event when a handClick method is called', () => { + const stub = jest.fn() + cmp.vm.$on('message-clicked', stub) + cmp.vm.handleClick() + + expect(stub).toBeCalledWith('Cat') + }) + }) +}) \ No newline at end of file diff --git a/Test/Jest/vue-test/test/Message.test.js b/Test/Jest/vue-test/test/Message.test.js new file mode 100644 index 0000000..b6251a6 --- /dev/null +++ b/Test/Jest/vue-test/test/Message.test.js @@ -0,0 +1,35 @@ +import Message from '../src/components/Message.vue' +import { mount } from 'vue-test-utils' + +describe('Message.test.js', () => { + // let cmp + const createCmp = propsData => mount(Message, { propsData }) + describe('Properties', () => { + it('has a message property', () => { + const cmp = createCmp({ message: 'hey' }) + expect(cmp.props('message', 'hey')).toBeTruthy() + }) + it('has no cat property', () => { + const cmp = createCmp({ cat: 'key' }) + expect(cmp.props('cat', 'hey')).toBeTruthy() + }) + it('Zhin is the defalut author', () => { + const cmp = createCmp({ message: 'key' }) + expect(cmp.props('author', 'Zhin')).toBeTruthy() + }) + // it('message is of type string', () => { + // const spy = jest.spyOn(console, 'error') + // const cmp = createCmp({ message: 1 }) + // expect(spy).toBeCalledWith( + // expect.stringContaining('[Vue warn]: Invalid prop') + // ) + // spy.mockReset() + // }) + describe('Validation', () => { + const message = createCmp().vm.$options.props.message + it('message is of type string', () => { + expect(message.type).toBe(String) + }) + }) + }) +}) diff --git a/Test/Jest/vue-test/test/MessageList.test.js b/Test/Jest/vue-test/test/MessageList.test.js new file mode 100644 index 0000000..e03103c --- /dev/null +++ b/Test/Jest/vue-test/test/MessageList.test.js @@ -0,0 +1,52 @@ +import Vue from 'vue' +import { shallow, mount } from 'vue-test-utils' +import MessageList from '../src/components/MessageList.vue' +import Message from '../src/components/Message.vue' + +describe('MessageList.test.js', () => { + let cmp + + beforeEach(() => { + const messageWrapper = { + render (h) { + return h(Message, { props: { message: 'hey boy' } }) + } + } + cmp = mount(MessageList, { + slots: { + default: messageWrapper + } + }) + }) + + it('Messages are inserted in a ul.list-messages element', () => { + expect(cmp.is('div.list-wrapper')).toBe(true) + // expect(cmp.find(MessageList).isVueInstance()).toBe(true) + expect(cmp.is(MessageList)).toBe(true) + expect(cmp.find(Message).isVueInstance()).toBe(true) + // expect(cmp.contains(Message)).toBe(true) + // expect(cmp.contains(MessageList)).toBe(true) + }) + + it('Header slot renders a default header text', () => { + const header = cmp.find('.list-header') + expect(header.text().trim()).toBe('This is a default header') + }) + + it('Header slot is rendered withing .list-header', () => { + const component = mount(MessageList, { + slots: { + header: '
What an awesome header
' + } + }) + const header = component.find('.list-header') + expect(header.text().trim()).toBe('What an awesome header') + }) + + it('Message length is higher than 5', () => { + const messages = cmp.findAll(Message) + messages.wrappers.forEach(c => { + expect(c.vm.message.length).toBeGreaterThan(5) + }); + }) +}) \ No newline at end of file diff --git a/Test/Jest/vue-test/test/MessageList.test.js.d b/Test/Jest/vue-test/test/MessageList.test.js.d new file mode 100644 index 0000000..82c1565 --- /dev/null +++ b/Test/Jest/vue-test/test/MessageList.test.js.d @@ -0,0 +1,47 @@ +// import { shallow, mount } from 'vue-test-utils' +// import MessageList from '../src/components/MessageList.vue' +// import Message from '../src/components/Message.vue' + +// describe('Message.test.js', () => { +// let cmp + +// beforeEach(() => { +// cmp = mount(MessageList, { +// propsData: { +// messages: ['Cat'] +// } +// }) +// }) +// // beforeEach(() => { +// // cmp = shallow(MessageList, { +// // propsData: { +// // messages: ['Cat'] +// // } +// // }) +// // }) + +// it('has received ["Cat"] as the message property', () => { +// expect(cmp.vm.messages).toEqual(['Cat']) +// }) + +// it('has the expected html structure', () => { +// expect(cmp.element).toMatchSnapshot() +// }) + +// it('Calls handleMessageClick when @message-click happens', () => { +// const stub = jest.fn() +// cmp.setMethods({ handleMessageClick: stub }) +// cmp.update() + +// cmp.find(Message).vm.$emit('message-clicked', 'cat') +// expect(stub).toBeCalledWith('cat') +// }) + +// it('console "cat" when handleMessageClick method is called', () => { +// const spy = jest.spyOn(console, 'log') +// // cmp.find(Message).vm.$emit('message-clicked', 'cat') +// cmp.vm.handleMessageClick('cat') +// expect(spy).toBeCalledWith('cat') +// spy.mockReset() +// }) +// }) \ No newline at end of file diff --git a/Test/Jest/vue-test/test/__mocks__/axios.js b/Test/Jest/vue-test/test/__mocks__/axios.js new file mode 100644 index 0000000..27908a6 --- /dev/null +++ b/Test/Jest/vue-test/test/__mocks__/axios.js @@ -0,0 +1,3 @@ +module.exports = { + get: jest.fn(() => Promise.resolve({ data: [3] })) +} \ No newline at end of file diff --git a/Test/Jest/vue-test/test/__snapshots__/App.test.js.snap b/Test/Jest/vue-test/test/__snapshots__/App.test.js.snap new file mode 100644 index 0000000..a454ef1 --- /dev/null +++ b/Test/Jest/vue-test/test/__snapshots__/App.test.js.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`App.test.js has the expected html structure 1`] = ` +
+ + + +
+`; diff --git a/cat/body.js b/cat/body.js deleted file mode 100644 index cee4581..0000000 --- a/cat/body.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Created by on 2017/2/18. - */ -function body() { - console.log('body'); -} -exports.body = body; \ No newline at end of file diff --git a/cat/head.js b/cat/head.js deleted file mode 100644 index d3a783c..0000000 --- a/cat/head.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Created by on 2017/2/18. - */ -function head() { - console.log('head'); -} -exports.head = head; \ No newline at end of file diff --git a/cat/main.js b/cat/main.js deleted file mode 100644 index 67f9a9c..0000000 --- a/cat/main.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Created by on 2017/2/18. - */ -var head = require('./head'); -var body = require('./body'); - -exports.create = function (name) { - return { - name: name, - head: head.create(), - body: body.create() - }; -}; \ No newline at end of file diff --git a/chat-room/01/app.js b/chat-room/01/app.js index eefcb50..0fb18fd 100644 --- a/chat-room/01/app.js +++ b/chat-room/01/app.js @@ -15,7 +15,7 @@ var http = require('http').Server(app); var io = require('socket.io')(http); var router = express.Router(); -var port = process.env.PORT || 8080; +var port = process.env.PORT || 23333; // save user's nickname var nicknames = []; diff --git a/chat-room/01/public/javascripts/register.js b/chat-room/01/public/javascripts/register.js index fcb5592..c78ffaa 100644 --- a/chat-room/01/public/javascripts/register.js +++ b/chat-room/01/public/javascripts/register.js @@ -3,71 +3,71 @@ */ var socket = io.connect(); $(function () { - var nickname = $('#nickname'); - $('.register').submit(function (e) { - socket.emit('nickname', nickname.val(), function (data) { - if (data) { - console.log('nickname set successfully'); - $('.register').hide(); - $('.register-warn') - .text('nickname set successfully, your nickname is ' + nickname.val()) - .css('visibility', 'visible'); - $('.chat-box').show(); - } else { - if (data === 0) { - $('.register-warn') - .text('the nickname can not be empty') - .css('visibility','visible'); - } else { - $('.register-warn') - .text('the nickname has been used') - .css('visibility','visible'); - } - } - }); - //e.preventDefault; - return false; - }); - - var chartContent = $('#chatting'); - $('.chat-box').submit(function (e) { - e.preventDefault(); - socket.emit('chatting-content', chartContent.val()); - chartContent.val('').focus(); + var nickname = $('#nickname'); + $('.register').submit(function (e) { + socket.emit('nickname', nickname.val(), function (data) { + if (data) { + console.log('nickname set successfully'); + $('.register').hide(); + $('.register-warn') + .text('nickname set successfully, your nickname is ' + nickname.val()) + .css('visibility', 'visible'); + $('.chat-box').show(); + } else { + if (data === 0) { + $('.register-warn') + .text('the nickname can not be empty') + .css('visibility','visible'); + } else { + $('.register-warn') + .text('the nickname has been used') + .css('visibility','visible'); + } + } }); + //e.preventDefault; + return false; + }); - var list = $('.nicknames-list'), - ri = $('.register-info'); - var logo = 0; - socket.on('pull-nicknames', function (data) { - logo ++; - console.log(data); - var html = ''; - data.nicknames.forEach(function (item, index) { - html += '
  • ' + item + '
  • '; - }); - list - .empty() - .append(html); + var chartContent = $('#chatting'); + $('.chat-box').submit(function (e) { + e.preventDefault(); + socket.emit('chatting-content', chartContent.val()); + chartContent.val('').focus(); + }); - var _class = 'logo-' + logo; - if (data._in) { - ri.append('
    ' + - data.changeChatter + ' gets in the room
    '); - $('.' + _class).fadeOut(2000); - } else { - ri.append('
    ' + - data.changeChatter + ' leave the room
    '); - $('.' + _class).fadeOut(2000); - } + var list = $('.nicknames-list'), + ri = $('.register-info'); + var logo = 0; + socket.on('pull-nicknames', function (data) { + logo ++; + console.log(data); + var html = ''; + data.nicknames.forEach(function (item, index) { + html += '
  • ' + item + '
  • '; }); + list + .empty() + .append(html); - var room = $('.chat-room'); - socket.on('chatting-content', function (data) { - var html = '
    ' + - '
    ' + data.nick + ':
    ' + - '
    ' + data.message + '
    ' + - '
    '; - room.append(html); - }); + var _class = 'logo-' + logo; + if (data._in) { + ri.append('
    ' + + data.changeChatter + ' gets in the room
    '); + $('.' + _class).fadeOut(2000); + } else { + ri.append('
    ' + + data.changeChatter + ' leave the room
    '); + $('.' + _class).fadeOut(2000); + } + }); + + var room = $('.chat-room'); + socket.on('chatting-content', function (data) { + var html = '
    ' + + '
    ' + data.nick + ':
    ' + + '
    ' + data.message + '
    ' + + '
    '; + room.append(html); + }); }); \ No newline at end of file diff --git a/chat-room/npm-debug.log b/chat-room/npm-debug.log new file mode 100644 index 0000000..913ed6c --- /dev/null +++ b/chat-room/npm-debug.log @@ -0,0 +1,22 @@ +0 info it worked if it ends with ok +1 verbose cli [ 'D:\\Program Files\\nodejs\\node.exe', +1 verbose cli 'D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js', +1 verbose cli 'start' ] +2 info using npm@3.10.10 +3 info using node@v6.9.5 +4 verbose stack Error: ENOENT: no such file or directory, open 'D:\LR\nodejs\package.json' +4 verbose stack at Error (native) +5 verbose cwd D:\LR\nodejs\chat-room +6 error Windows_NT 10.0.14393 +7 error argv "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start" +8 error node v6.9.5 +9 error npm v3.10.10 +10 error path D:\LR\nodejs\package.json +11 error code ENOENT +12 error errno -4058 +13 error syscall open +14 error enoent ENOENT: no such file or directory, open 'D:\LR\nodejs\package.json' +15 error enoent ENOENT: no such file or directory, open 'D:\LR\nodejs\package.json' +15 error enoent This is most likely not a problem with npm itself +15 error enoent and is related to npm not being able to find a file. +16 verbose exit [ -4058, true ] diff --git a/express/Campari-vue/api/address.js b/express/Campari-vue/api/address.js deleted file mode 100644 index c57ece1..0000000 --- a/express/Campari-vue/api/address.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Created by 斌 on 2017/4/16. - */ -const api = require('express').Router(); -const Address = require('../models/address'); -const _ = require('lodash'); - - -function errHandle(err, res) { - res.json({code:2, msg:'database err', detail: err}); -} - -function validate(req) { - req.checkBody('province', 'invalid province').len(2, 12); - req.checkBody('city', 'invalid city').len(2, 8); - req.checkBody('detail', 'invalid detail').len(2, 40); - req.checkBody('name', 'invalid name').len(2, 30); - req.checkBody('phone', 'invalid phone').isPhone(); - req.checkBody('isDefault', 'invalid default').isBoolean(); -} - -/** - * id ? - */ -api.get('/:id?', (req, res) => { - let user = req.session.isLogin; - if (!user) { - return res.json({code: -1, msg:'the user is not logged in'}); - } - let params = req.params; - if (!params.id) { - //获取全部的地址 - Address.find({_owner: user}) - .sort('-date') - .exec((err, docs) => { - if (err) {return errHandle(err, res)} - res.json({code:1, msg:'success', result:docs}); - }); - } else { - //获取某个地址 - Address.findById(params.id, (err, doc) => { - if (err) {return errHandle(err, res)} - if (!doc) { - return res.json({code:0, msg:'invalid id'}) - } - res.json({code:1, msg: 'success', result: doc}); - }); - } -}); - - -/** - * action {delete || update || add} - */ -api.post('/:id?/:action?', (req, res, next) => { - let user = req.session.isLogin; - if (!user) { - return res.json({code: -1, msg:'the user is not logged in'}); - } - let params = req.params; - - if (!params.id) { - return res.json({code:-1, msg:'id must be passed'}); - } - - console.log('params:', params); - - //新增地址 - if (params.id === 'add' || (+params.id === 0 && params.action === 'add')) { - validate(req); - let errors = req.validationErrors(); - if (errors) { - return res.json({code:-1, msg:'参数有误', detail:errors}); - } - let body = req.body; - let adr = new Address(_.assign({ - _owner:req.session.isLogin, - date:Date.now() - }, body)); - adr.save((err) => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'添加成功', result: adr}) - }); - } - - //更新 - else if (params.action === 'update') { - validate(req); - let errors = req.validationErrors(); - if (errors) { - return res.json({code:-1, msg:'参数有误', detail:errors}); - } - let body = req.body; - Address.findByIdAndUpdate( - params.id, - {$set: _.assign(body, {date: Date.now()})}, - (err, doc) => { - if (err) {return errHandle(err, res)} - res.json({code: 1, msg:'更新成功'}) - }); - } - - - //删除 - else if (params.action === 'delete') { - Address.findByIdAndRemove( - params.id, - err => { - if (err) {return errHandle(err, res)} - res.json({code:1, msg:'删除成功'}); - } - ) - } - - else { - res.json({code:2, msg:'invalid action'}); - } -}); - -module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/api/cart.js b/express/Campari-vue/api/cart.js deleted file mode 100644 index 675356e..0000000 --- a/express/Campari-vue/api/cart.js +++ /dev/null @@ -1,183 +0,0 @@ -/** - * Created by 斌 on 2017/4/16. - */ -const api = require('express').Router(); -const Cart = require('../models/cart'); -const Product = require('../models/product'); -const _ = require('lodash'); - -/** - * 获取购物车 - * params {action?} null||add||update||delete - * query {sku,by,chosen} - */ -api.get('/', (req, res, next) => { - let user = req.session.isLogin; - if (!user) { - return res.json({code:-1, msg:'the user is not logged in'}); - } - - Cart.findOne({_owner: user}) - .exec((err, doc) => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'success', result:doc.products}) - }); -}); - -/** - * adu - */ -api.post('/:action?', (req, res, next) => { - let user = req.session.isLogin; - if (!user) { - return res.json({code:-1, msg:'the user is not logged in'}); - } - let action = req.params.action; - let query = Cart.findOne({_owner:user}); - if (!action) { - query - .exec((err, doc) => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'success', result: doc.products}) - }); - } else { - let search = req.body; - - switch (action) { - case 'add': - query.exec((err, doc) => { - //是否出错 - if (err) { - return errHandle(err, res); - } - //是否有sku - if (!search.sku) { - return res.json({code:0, msg:'sku must be passed'}); - } - - //cart中是否已经存在该商品 - let p = doc.products || []; - let has = _.findIndex(p, {sku: search.sku}); - //cart中有此商品 - if (has > -1) { - //count +1 - p[has].count += 1; - //修改更新时间 - doc.lastDate = Date.now(); - doc.save((err, doc) => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'购物车中本商品数量+1'}); - }); - return; - } - - //cart中没有此商品 - //product表中是否存在该商品 - Product.findOne({sku: search.sku}) - .exec((err, pro) => { - if (err) { - return errHandle(err, res); - } - if (!pro) { - // 不存在 - return res.json({code:-1, msg: `invalid sku, sku for ${search.sku} do not exist`}); - } - // 存在 - doc.lastDate = Date.now(); - !doc.products && (doc.products = []); - doc.products.push({sku:search.sku, count:1, chosen: true}); - doc.save((err, doc) => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'添加成功'}); - }) - }); - }); - break; - case 'update': - query.exec((err, doc) => { - //是否出错 - if (err) { - return errHandle(err, res); - } - //是否有sku - if (!search.sku) { - return res.json({code:0, msg:'sku must be passed'}); - } - - //是否有by或者chosen - if(!+search.by || search.chosen === undefined) { - return res.json({code:0, msg:'by or chosen must be passed, and search must be a number'}); - } - - //cart中是否已经存在该商品 - let p = doc.products || []; - let has = _.findIndex(p, {sku: search.sku}); - if (has === -1) { - //没有,update失败 - return res.json({code:0, msg:'购物车中没有此商品,更新失败'}) - } - - //有此商品 - p[has].count += (+search.by); - if (p[has].count < 1) { - p[has].count = 1; - } - if (search.chosen !== undefined || search.chosen !== '') { - p[has].chosen = !!search.chosen; - } - doc.lastDate = Date.now(); - doc.save(err => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'更新成功'}); - }); - }); - break; - case 'delete': - query.exec((err, doc) => { - //是否出错 - if (err) { - return errHandle(err, res); - } - //是否有sku - if (!search.sku) { - return res.json({code:0, msg:'sku must be passed'}); - } - - //cart中是否已经存在该商品 - let p = doc.products || []; - let has = _.findIndex(p, {sku: search.sku}); - if (has === -1) { - //没有,update失败 - return res.json({code:0, msg:'购物车中没有此商品,删除失败'}) - } - //有此商品 - p.splice(has, 1); - doc.save(err => { - if (err) { - return errHandle(err, res); - } - res.json({code:1, msg:'删除成功'}); - }); - }); - break; - default: - res.json({code:4, msg:'invalid action'}); - } - } -}); - -function errHandle(err, res) { - res.json({code:2, msg:'database err', detail: err}); -} - -module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/api/order.js b/express/Campari-vue/api/order.js deleted file mode 100644 index 2a95a97..0000000 --- a/express/Campari-vue/api/order.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Created by 斌 on 2017/4/16. - */ -const api = require('express').Router(); -const Product = require('../models/product'); -const Order = require('../models/order'); -const _ = require('lodash'); - - -function errHandle(err, res) { - res.json({code:2, msg:'database err', detail: err}); -} - -/** - * 下单 - * sku [], - * counts [] - */ -api.post('/placeOrder', (req, res, next) => { - let user = req.session.isLogin; - if (!user) { - return res.json({code:-1, msg:'the user is not logged in'}); - } - let body = req.body; - req.checkBody('sku' ,'must be array').isArray(); - req.checkBody('counts', 'must be array').isArray(); - let errors = req.validationErrors(); - if (errors || body.sku.length !== body.counts.length || !body.sku.length) { - return res.json({code:-1, msg:'sku, counts must be array and not empty'}); - } - - Product.find({"sku":{"$in":body.sku}}) - .select('-stock -sales -introduce -date -_id -__v') - .lean() - .exec((err, docs) => { - - if (err) {return errHandle(err, res)} - let products = docs, amount = 0, total = 0; - _.forEach(products, (pro, index) => { - pro.count = body.counts[index]; - total += pro.count; - amount += (pro.count * pro.discounted); - }); - console.log(products); - let date = Date.now(); - let order = new Order({ - customerId: user, - orderNumber: + date + '-' + Math.floor(Math.random()*1000), - date: date, - total: total, - amount: amount, - status: 0, - products: products - }); - order.save(err => { - if (err) {return errHandle(err, res)} - res.json({code:1, msg:'下单完成', result:{orderNumber: order.orderNumber}}) - }); - }) -}); - -/** - * / 全部 - * /-1/orderNumber 某个 - * /0 所有未支付 - * /1 所有已支付 - */ - -api.get('/:status?/:orderNumber?', (req, res, next) => { - let user = req.session.isLogin; - if (!user) { - return res.json({code:-1, msg:'the user is not logged in'}); - } - let params = req.params; - if (_.indexOf([-1,0,1], +params.status) === -1) { - //查询全部 - Order.find({customerId: user}) - .select('-customerId -_id -__v') - .exec((err, docs) => { - if (err) {return errHandle(err, res)} - return res.json({code:1, msg:'success', result: docs}); - }); - } - //根据订单号查询某一个 - else if (+params.status === -1 && params.orderNumber) { - Order.findOne({orderNumber: params.orderNumber}) - .select('-customerId -_id -__v') - .exec((err, doc) => { - if (err) {return errHandle(err, res)} - if (!doc) { - return res.json({code:0, msg:'订单号有误'}); - } - return res.json({code:1, msg:'success', result: doc}); - }); - } - - //查询所有未支付 - else if (+params.status === 0) { - Order.find({customerId:user}) - .where('status').equals(0) - .select('-customerId -_id -__v') - .exec((err, docs) => { - if (err) {return errHandle(err, res)} - return res.json({code:1, msg:'success', result: docs}); - }); - } - - //查询所有已支付 - else if (+params.status === 1) { - Order.find({customerId: user}) - .where('status').gte(1) - .select('-customerId -_id -__v') - .exec((err, docs) => { - if (err) {return errHandle(err, res)} - return res.json({code:1, msg:'success', result: docs}); - }); - } - else { - res.json({code:-1, msg:'unknown error'}); - } -}); - -_.forEach([{a:1}, {a:2}], (item, index) => { - console.log(item); -}); - -module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/api/product.js b/express/Campari-vue/api/product.js deleted file mode 100644 index efc3723..0000000 --- a/express/Campari-vue/api/product.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Created by 斌 on 2017/4/15. - */ -const api = require('express').Router(); -const Product = require('../models/product'); - -/** - * type 1-7 - * flag 1:date, 2:sales, 3:price - * sort 1:asc, 2:desc - */ - -function query({flag=1, sort=1} = {}) { - let s1, s2; - switch (+flag) { - case 1: - s1 = 'date'; - break; - case 2: - s1 = 'sales'; - break; - case 3: - s1 = 'discounted'; - break; - default: - s1 = 'date'; - } - - s2 = +sort === 1 ? '' : '-'; - return s2 + s1; -} - -api.get('/query', (req, res, next) => { - let params = req.query; - let limit = +params.limit || 0; - if (!+params.flag || !+params.sort) { - return res.json({code: -1, msg:'invalid params'}); - } - let s = query(params); - if (!params.type || +params.type <= 0 || +params.type >= 7) { - Product - .find() - .select('-introduce -sales -stock') - .sort(s) - .limit(limit) - .exec(handler); - return; - } - - Product - .find({type: +params.type}) - .select('-introduce -sales -stock') - .sort(s) - .limit(limit) - .exec(handler); - - - function handler(err, docs) { - if (err) { - return res.json({code:2, msg:'数据库出错', detail: err}); - } - return res.json({code:1, msg:'success', result: docs}); - } -}); - -api.get('/query/discount', (req, res, next) => { - let limit = +req.query.limit || 0; - Product - .find() - .select('-introduce -sales -stock') - .$where(function () { - return this.discounted <= this.price; - }) - .limit(limit) - .exec((err, docs) => { - if (err) { - return res.json({code: 2, msg:'数据库出错', detail:err}) - } - if (!docs || !docs.length) { - return res.json({code:1, msg:'success', result:[]}); - } - res.json({code:1, msg:'success', result: docs}); - }); -}); - -api.get('/:sku', (req, res, next) => { - let sku = req.params.sku; - if (!sku) { - return res.json({code:-1, msg:'need sku'}); - } - Product.findOne({sku: sku}) - .select('-sales -stock') - .exec((err, doc) => { - if (err) { - return res.json({code:2, msg:'数据库出错', detail:err}); - } - if (!doc) { - return res.json({code:-1, msg:`invalid sku, there is no pro with sku =${sku}`}); - } - return res.json({code:1, msg:'success', result: doc}); - }) -}); - -module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/api/user.js b/express/Campari-vue/api/user.js deleted file mode 100644 index d3f7fd0..0000000 --- a/express/Campari-vue/api/user.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Created by 斌 on 2017/4/15. - */ -const api = require('express').Router(); -const passport = require('passport'); -const upload = require('../lib/storage'); -const User = require('../models/user'); -const fs = require('fs'); - -/** - * 注册 - * phone, password - */ -api.post('/sign-up', (req, res, next) => { - passport.authenticate('local.sign', (err, user, info) => { - res.json(info); - })(req, res, next); -}); - -/** - * 登录 - * phone, password - */ -api.post('/login', (req, res, next) => { - passport.authenticate('local.login', (err, user, info) => { - if (user) { - //建立登录会话 - req.session.isLogin = user.id; - req.session.save(); - } - res.json(info); - })(req, res, next); -}); - -//登出 -api.get('/logout', (req, res, next) => { - req.session.isLogin = false; - req.session.save(); - res.redirect('/'); -}); - -/** - * 修改密码 - * params - * old, _new, _newRepeat - */ -api.post('/modify-password', (req, res, next) => { - if (req.body._new !== req.body._newRepeat) { - return res.json({code:-1, msg:'两次输入的密码不一致'}); - } - req.checkBody('old', 'invalid pass').len32(); - req.checkBody('_new', 'invalid pass').len32(); - let errors = req.validationErrors(); - if (errors) { - console.error(errors); - return res.json({ - code:-1, - msg:'密码格式有误', - }); - } - if (req.body.old === req.body._new) { - return res.json({ - code: -1, - msg:'新旧密码不能一样', - }); - } - - User.findById(req.session.isLogin, (err, doc) => { - if (err || !doc) { - console.error(err); - return res.json({code:3, msg:'未知错误', detail: err}); - } - if (!doc.validPassword(req.body.old)) { - return res.json({code: 0, msg:'原密码有误'}); - } - - doc.password = doc.encryptPassword(req.body._new); - doc.save() - .then(() => res.json({code:1, msg:'修改成功'})) - .catch(err => { - console.error(err); - res.json({code:-1, msg:'修改失败', detail: err}) - }); - }) -}); - -/** - * 忘记密码 - * _new, _newRepeat - */ -api.post('/forget', (req, res, next) => { - if (req.body._new !== req.body._newRepeat) { - return res.json({code:-1, msg:'两次输入的密码不一致'}); - } - req.checkBody('_new', 'invalid pass').len32(); - if (req.validationErrors()) { - return res.json({code:-1, msg:'密码格式有误'}); - } - - User.findById(req.session.isLogin, (err, doc) => { - if (err || !doc) { - console.error(err); - return res.json({code:3, msg:'未知错误', detail: err}); - } - doc.password = doc.encryptPassword(req.body._new); - doc.save() - .then(() => res.json({code:1, msg:'修改成功'})) - .catch(err => { - console.error(err); - res.json({code:2, msg:'修改失败', detail: err}) - }); - }); -}); - -/** - * 修改昵称 - * nick - */ -api.post('/modify-nick', (req, res, next) => { - req.checkBody('nick', 'invalid nick').len(2, 30); - if (req.validationErrors()) { - return res.json({code:-1, msg: '昵称长度为2-30个字符'}); - } - User.findById(req.session,isLogin, (err, doc) => { - if (err || !doc) { - console.error(err); - return res.json({code:3, msg:'未知错误', detail: err}); - } - doc.nick = req.body.nick; - doc.save() - .then(() => res.json({code:1, msg:'修改成功'})) - .catch(err => { - console.error(err); - res.json({code:2, msg:'修改失败', detail: err}) - }); - }); -}); - -/** - * 修改头像 - * FormData - */ -api.post('/modify-avatar', (req, res, next) => { - let imgData = req.body.avatar; - let base64 = imgData.replace(/^data:image\/\w+;base64,/, ""); - let dataBuffer = new Buffer(base64, 'base64'); - fs.writeFile('./public/data/avatar/' + req.session.isLogin + '.jpg', dataBuffer, err => { - if (err) { - return res.json({code:-1, msg:'上传失败', detail: err}); - } - res.json({code: 1, msg:'success', path:'/data/avatar/' + req.session.isLogin + '.jpg'}); - }); -}); - -module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/app.js b/express/Campari-vue/app.js deleted file mode 100644 index c12dfeb..0000000 --- a/express/Campari-vue/app.js +++ /dev/null @@ -1,106 +0,0 @@ -const express = require('express'); -const path = require('path'); -const favicon = require('serve-favicon'); -const logger = require('morgan'); -const cookieParser = require('cookie-parser'); -const bodyParser = require('body-parser'); -const mongoose = require('mongoose'); -const expressValidator = require('express-validator'); -const passport = require('passport'); -const session = require('express-session'); -const RedisStore = require('connect-redis')(session); -const credentials = require('./lib/credentials'); -const _ = require('lodash'); - -require('./lib/passport'); - -const userApi = require('./api/user'); -const productApi = require('./api/product'); -const cartApi = require('./api/cart'); -const addressApi = require('./api/address'); -const orderApi = require('./api/order'); - - -//替换mongoose的promise -mongoose.Promise = global.Promise; - -const index = require('./routes/index'); -// const users = require('./routes/users'); - -const app = express(); - -// view engine setup -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'jade'); - -// uncomment after placing your favicon in /public -//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); -app.use(logger('dev')); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); -app.use(cookieParser(credentials.cookieSecret)); -app.use(express.static(path.join(__dirname, 'public'))); -app.use(passport.initialize()); -app.use(expressValidator({ - customValidators: { - isPhone(value) { - return /^0?(13[0-9]|15[0-9]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$/.test(value); - }, - len32(value) { - return _.trim(value).length === 32; - }, - isArray(value) { - return Array.isArray(value); - } - } -})); - -app.use('/', index); - - -app.use(session({ - store: new RedisStore({ - host: 'localhost', - port: '6379', - ttl: 60*60*24*7*1000, - db:1, - }), - secret: credentials.cookieSecret, - cookie:{ - maxAge: 60*60*24*7*1000, - path: '/', - domain: 'localhost' - } -})); - -app.use('/api/user', userApi); -app.use('/api/product', productApi); -app.use('/api/cart', cartApi); -app.use('/api/address', addressApi); -app.use('/api/order', orderApi); - - -// catch 404 and forward to error handler -app.use(function(req, res, next) { - const err = new Error('Not Found'); - err.status = 404; - next(err); -}); - -// error handler -app.use(function(err, req, res, next) { - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // render the error page - res.status(err.status || 500); - res.render('error'); -}); - -mongoose.connect(credentials.mongodb.dev.path, err => { - if (!err) { console.log('connected to mongodb');} - else {throw err} -}); - -module.exports = app; diff --git a/express/Campari-vue/app/.babelrc b/express/Campari-vue/app/.babelrc new file mode 100644 index 0000000..41fb081 --- /dev/null +++ b/express/Campari-vue/app/.babelrc @@ -0,0 +1,19 @@ +{ + "presets": [ + ["env", { "modules": false }], + "stage-2" + ], + "plugins": [["component", [ + { + "libraryName": "mint-ui", + "style": true + } + ]]], + "comments": false, + "env": { + "test": { + "presets": ["env", "stage-2"], + "plugins": [ "istanbul" ] + } + } +} diff --git a/express/Campari-vue/app/.editorconfig b/express/Campari-vue/app/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/express/Campari-vue/app/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/express/Campari-vue/app/.eslintignore b/express/Campari-vue/app/.eslintignore new file mode 100644 index 0000000..ad5bae8 --- /dev/null +++ b/express/Campari-vue/app/.eslintignore @@ -0,0 +1,5 @@ +build/*.js +config/*.js +src/lib/*.js +www/*.js +static/*.js diff --git a/express/Campari-vue/app/.eslintrc.js b/express/Campari-vue/app/.eslintrc.js new file mode 100644 index 0000000..67c085d --- /dev/null +++ b/express/Campari-vue/app/.eslintrc.js @@ -0,0 +1,27 @@ +// http://eslint.org/docs/user-guide/configuring + +module.exports = { + root: true, + parser: 'babel-eslint', + parserOptions: { + sourceType: 'module' + }, + env: { + browser: true, + }, + // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style + extends: 'standard', + // required to lint *.vue files + plugins: [ + 'html' + ], + // add your custom rules here + 'rules': { + // allow paren-less arrow functions + 'arrow-parens': 0, + // allow async-await + 'generator-star-spacing': 0, + // allow debugger during development + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 + } +} diff --git a/express/Campari-vue/app/.gitignore b/express/Campari-vue/app/.gitignore new file mode 100644 index 0000000..0e0b48d --- /dev/null +++ b/express/Campari-vue/app/.gitignore @@ -0,0 +1,11 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log +yarn-error.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +test/unit/coverage +test/e2e/reports +selenium-debug.log diff --git a/express/Campari-vue/app/.postcssrc.js b/express/Campari-vue/app/.postcssrc.js new file mode 100644 index 0000000..ea9a5ab --- /dev/null +++ b/express/Campari-vue/app/.postcssrc.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + "plugins": { + // to edit target browsers: use "browserlist" field in package.json + "autoprefixer": {} + } +} diff --git a/express/Campari-vue/app/README.md b/express/Campari-vue/app/README.md new file mode 100644 index 0000000..1818de9 --- /dev/null +++ b/express/Campari-vue/app/README.md @@ -0,0 +1,30 @@ +# campari + +> A Vue.js project + +## Build Setup + +``` bash +# install dependencies +npm install + +# serve with hot reload at localhost:8080 +npm run dev + +# build for production with minification +npm run build + +# build for production and view the bundle analyzer report +npm run build --report + +# run unit tests +npm run unit + +# run e2e tests +npm run e2e + +# run all tests +npm test +``` + +For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). diff --git a/express/Campari-vue/app/build/build.js b/express/Campari-vue/app/build/build.js new file mode 100644 index 0000000..6b8add1 --- /dev/null +++ b/express/Campari-vue/app/build/build.js @@ -0,0 +1,35 @@ +require('./check-versions')() + +process.env.NODE_ENV = 'production' + +var ora = require('ora') +var rm = require('rimraf') +var path = require('path') +var chalk = require('chalk') +var webpack = require('webpack') +var config = require('../config') +var webpackConfig = require('./webpack.prod.conf') + +var spinner = ora('building for production...') +spinner.start() + +rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { + if (err) throw err + webpack(webpackConfig, function (err, stats) { + spinner.stop() + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false + }) + '\n\n') + + console.log(chalk.cyan(' Build complete.\n')) + console.log(chalk.yellow( + ' Tip: built files are meant to be served over an HTTP server.\n' + + ' Opening index.html over file:// won\'t work.\n' + )) + }) +}) diff --git a/express/Campari-vue/app/build/check-versions.js b/express/Campari-vue/app/build/check-versions.js new file mode 100644 index 0000000..6548ba1 --- /dev/null +++ b/express/Campari-vue/app/build/check-versions.js @@ -0,0 +1,45 @@ +var chalk = require('chalk') +var semver = require('semver') +var packageConfig = require('../package.json') + +function exec (cmd) { + return require('child_process').execSync(cmd).toString().trim() +} + +var versionRequirements = [ + { + name: 'node', + currentVersion: semver.clean(process.version), + versionRequirement: packageConfig.engines.node + }, + { + name: 'npm', + currentVersion: exec('npm --version'), + versionRequirement: packageConfig.engines.npm + } +] + +module.exports = function () { + var warnings = [] + for (var i = 0; i < versionRequirements.length; i++) { + var mod = versionRequirements[i] + if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { + warnings.push(mod.name + ': ' + + chalk.red(mod.currentVersion) + ' should be ' + + chalk.green(mod.versionRequirement) + ) + } + } + + if (warnings.length) { + console.log('') + console.log(chalk.yellow('To use this template, you must update following to modules:')) + console.log() + for (var i = 0; i < warnings.length; i++) { + var warning = warnings[i] + console.log(' ' + warning) + } + console.log() + process.exit(1) + } +} diff --git a/express/Campari-vue/app/build/dev-client.js b/express/Campari-vue/app/build/dev-client.js new file mode 100644 index 0000000..18aa1e2 --- /dev/null +++ b/express/Campari-vue/app/build/dev-client.js @@ -0,0 +1,9 @@ +/* eslint-disable */ +require('eventsource-polyfill') +var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') + +hotClient.subscribe(function (event) { + if (event.action === 'reload') { + window.location.reload() + } +}) diff --git a/express/Campari-vue/app/build/dev-server.js b/express/Campari-vue/app/build/dev-server.js new file mode 100644 index 0000000..4006c10 --- /dev/null +++ b/express/Campari-vue/app/build/dev-server.js @@ -0,0 +1,92 @@ +require('./check-versions')() + +var config = require('../config') +if (!process.env.NODE_ENV) { + process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) +} + +var opn = require('opn') +var path = require('path') +var express = require('express') +var webpack = require('webpack') +var proxyMiddleware = require('http-proxy-middleware') +var webpackConfig = process.env.NODE_ENV === 'testing' + ? require('./webpack.prod.conf') + : require('./webpack.dev.conf') + +// default port where dev server listens for incoming traffic +var port = process.env.PORT || config.dev.port +// automatically open browser, if not set will be false +var autoOpenBrowser = !!config.dev.autoOpenBrowser +// Define HTTP proxies to your custom API backend +// https://github.com/chimurai/http-proxy-middleware +var proxyTable = config.dev.proxyTable + +var app = express() +var compiler = webpack(webpackConfig) + +var devMiddleware = require('webpack-dev-middleware')(compiler, { + publicPath: webpackConfig.output.publicPath, + quiet: true +}) + +var hotMiddleware = require('webpack-hot-middleware')(compiler, { + log: () => {} +}) +// force page reload when html-webpack-plugin template changes +compiler.plugin('compilation', function (compilation) { + compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { + hotMiddleware.publish({ action: 'reload' }) + cb() + }) +}) + +// proxy api requests +Object.keys(proxyTable).forEach(function (context) { + var options = proxyTable[context] + if (typeof options === 'string') { + options = { target: options } + } + app.use(proxyMiddleware(options.filter || context, options)) +}) + +// handle fallback for HTML5 history API +app.use(require('connect-history-api-fallback')()) + +// serve webpack bundle output +app.use(devMiddleware) + +// enable hot-reload and state-preserving +// compilation error display +app.use(hotMiddleware) + +// serve pure static assets +var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) +app.use(staticPath, express.static('./static')) + +var uri = 'http://localhost:' + port + +var _resolve +var readyPromise = new Promise(resolve => { + _resolve = resolve +}) + +console.log('> Starting dev server...') +devMiddleware.waitUntilValid(() => { + console.log('> Listening at ' + uri + '\n') + // when env is testing, don't need open it + + if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { + opn(uri) + } + _resolve() +}) + +var server = app.listen(port) + +module.exports = { + ready: readyPromise, + close: () => { + server.close() + } +} diff --git a/express/Campari-vue/app/build/utils.js b/express/Campari-vue/app/build/utils.js new file mode 100644 index 0000000..b1d54b4 --- /dev/null +++ b/express/Campari-vue/app/build/utils.js @@ -0,0 +1,71 @@ +var path = require('path') +var config = require('../config') +var ExtractTextPlugin = require('extract-text-webpack-plugin') + +exports.assetsPath = function (_path) { + var assetsSubDirectory = process.env.NODE_ENV === 'production' + ? config.build.assetsSubDirectory + : config.dev.assetsSubDirectory + return path.posix.join(assetsSubDirectory, _path) +} + +exports.cssLoaders = function (options) { + options = options || {} + + var cssLoader = { + loader: 'css-loader', + options: { + minimize: process.env.NODE_ENV === 'production', + sourceMap: options.sourceMap + } + } + + // generate loader string to be used with extract text plugin + function generateLoaders (loader, loaderOptions) { + var loaders = [cssLoader] + if (loader) { + loaders.push({ + loader: loader + '-loader', + options: Object.assign({}, loaderOptions, { + sourceMap: options.sourceMap + }) + }) + } + + // Extract CSS when that option is specified + // (which is the case during production build) + if (options.extract) { + return ExtractTextPlugin.extract({ + use: loaders, + fallback: 'vue-style-loader' + }) + } else { + return ['vue-style-loader'].concat(loaders) + } + } + + // https://vue-loader.vuejs.org/en/configurations/extract-css.html + return { + css: generateLoaders(), + postcss: generateLoaders(), + less: generateLoaders('less'), + sass: generateLoaders('sass', { indentedSyntax: true }), + scss: generateLoaders('sass'), + stylus: generateLoaders('stylus'), + styl: generateLoaders('stylus') + } +} + +// Generate loaders for standalone style files (outside of .vue) +exports.styleLoaders = function (options) { + var output = [] + var loaders = exports.cssLoaders(options) + for (var extension in loaders) { + var loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + use: loader + }) + } + return output +} diff --git a/express/Campari-vue/app/build/vue-loader.conf.js b/express/Campari-vue/app/build/vue-loader.conf.js new file mode 100644 index 0000000..57f6886 --- /dev/null +++ b/express/Campari-vue/app/build/vue-loader.conf.js @@ -0,0 +1,17 @@ +var utils = require('./utils') +var config = require('../config') +var isProduction = process.env.NODE_ENV === 'production' + +module.exports = { + loaders: utils.cssLoaders({ + sourceMap: isProduction + ? config.build.productionSourceMap + : config.dev.cssSourceMap, + extract: isProduction + }), + postcss: [ + require('autoprefixer')({ + browsers: ['iOS >= 7', 'Android >= 4.1'] + }) + ] +} diff --git a/express/Campari-vue/app/build/webpack.base.conf.js b/express/Campari-vue/app/build/webpack.base.conf.js new file mode 100644 index 0000000..8262aea --- /dev/null +++ b/express/Campari-vue/app/build/webpack.base.conf.js @@ -0,0 +1,94 @@ +var path = require('path') +var utils = require('./utils') + +var projectRoot = path.resolve(__dirname, '../') +const vuxLoader = require('vux-loader') + +var config = require('../config') +var vueLoaderConfig = require('./vue-loader.conf') + +function resolve (dir) { + return path.join(__dirname, '..', dir) +} + +let webpackConfig = { + entry: { + app: './src/main.js' + }, + output: { + path: config.build.assetsRoot, + filename: '[name].js', + publicPath: process.env.NODE_ENV === 'production' + ? config.build.assetsPublicPath + : config.dev.assetsPublicPath + }, + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + 'vue$': 'vue/dist/vue.esm.js', + '@': resolve('src'), + 'muse-components': 'muse-ui/src' + } + }, + module: { + rules: [ + { + test: /\.(js|vue)$/, + loader: 'eslint-loader', + enforce: 'pre', + include: [resolve('src'), resolve('test')], + options: { + formatter: require('eslint-friendly-formatter') + } + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: vueLoaderConfig + }, + { + test: /\.js$/, + loader: 'babel-loader', + include: [resolve('src'), resolve('test')] + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]') + } + }, + { test: /iview.src.*?js$/, loader: 'babel-loader' }, + { + test: /muse-ui.src.*?js$/, + loader: 'babel-loader' + } + ] + } +} + + +// module.exports = vuxLoader.merge(webpackConfig, { +// plugins: ['vux-ui', 'progress-bar', 'duplicate-style'] +// }) + +module.exports = vuxLoader.merge(webpackConfig, { + plugins: [ + {name: 'vux-ui'}, + {name: 'progress-bar'}, + {name: 'duplicate-style'}, + { + name:'less-theme', + path: 'src/styles/theme.less' + } + ] +}) diff --git a/express/Campari-vue/app/build/webpack.dev.conf.js b/express/Campari-vue/app/build/webpack.dev.conf.js new file mode 100644 index 0000000..5470402 --- /dev/null +++ b/express/Campari-vue/app/build/webpack.dev.conf.js @@ -0,0 +1,35 @@ +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') + +// add hot-reload related code to entry chunks +Object.keys(baseWebpackConfig.entry).forEach(function (name) { + baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) +}) + +module.exports = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) + }, + // cheap-module-eval-source-map is faster for development + devtool: '#cheap-module-eval-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env': config.dev.env + }), + // https://github.com/glenjamin/webpack-hot-middleware#installation--usage + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + // https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'index.html', + inject: true + }), + new FriendlyErrorsPlugin() + ] +}) diff --git a/express/Campari-vue/app/build/webpack.prod.conf.js b/express/Campari-vue/app/build/webpack.prod.conf.js new file mode 100644 index 0000000..99713cc --- /dev/null +++ b/express/Campari-vue/app/build/webpack.prod.conf.js @@ -0,0 +1,124 @@ +var path = require('path') +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var CopyWebpackPlugin = require('copy-webpack-plugin') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var ExtractTextPlugin = require('extract-text-webpack-plugin') +var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') + +var env = process.env.NODE_ENV === 'testing' + ? require('../config/test.env') + : config.build.env + +var webpackConfig = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ + sourceMap: config.build.productionSourceMap, + extract: true + }) + }, + devtool: config.build.productionSourceMap ? '#source-map' : false, + output: { + path: config.build.assetsRoot, + filename: utils.assetsPath('js/[name].[chunkhash].js'), + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') + }, + plugins: [ + // http://vuejs.github.io/vue-loader/en/workflow/production.html + new webpack.DefinePlugin({ + 'process.env': env + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + }, + sourceMap: true + }), + // extract css into its own file + new ExtractTextPlugin({ + filename: utils.assetsPath('css/[name].[contenthash].css') + }), + // Compress extracted CSS. We are using this plugin so that possible + // duplicated CSS from different components can be deduped. + new OptimizeCSSPlugin({ + cssProcessorOptions: { + safe: true + } + }), + // generate dist index.html with correct asset hash for caching. + // you can customize output by editing /index.html + // see https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: process.env.NODE_ENV === 'testing' + ? 'index.html' + : config.build.index, + template: 'index.html', + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true + // more options: + // https://github.com/kangax/html-minifier#options-quick-reference + }, + // necessary to consistently work with multiple chunks via CommonsChunkPlugin + chunksSortMode: 'dependency' + }), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: function (module, count) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + chunks: ['vendor'] + }), + // copy custom static assets + new CopyWebpackPlugin([ + { + from: path.resolve(__dirname, '../static'), + to: config.build.assetsSubDirectory, + ignore: ['.*'] + } + ]) + ] +}) + +if (config.build.productionGzip) { + var CompressionWebpackPlugin = require('compression-webpack-plugin') + + webpackConfig.plugins.push( + new CompressionWebpackPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: new RegExp( + '\\.(' + + config.build.productionGzipExtensions.join('|') + + ')$' + ), + threshold: 10240, + minRatio: 0.8 + }) + ) +} + +if (config.build.bundleAnalyzerReport) { + var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin + webpackConfig.plugins.push(new BundleAnalyzerPlugin()) +} + +module.exports = webpackConfig diff --git a/express/Campari-vue/app/build/webpack.test.conf.js b/express/Campari-vue/app/build/webpack.test.conf.js new file mode 100644 index 0000000..8e4385c --- /dev/null +++ b/express/Campari-vue/app/build/webpack.test.conf.js @@ -0,0 +1,24 @@ +// This is the webpack config used for unit tests. + +var utils = require('./utils') +var webpack = require('webpack') +var merge = require('webpack-merge') +var baseConfig = require('./webpack.base.conf') + +var webpackConfig = merge(baseConfig, { + // use inline sourcemap for karma-sourcemap-loader + module: { + rules: utils.styleLoaders() + }, + devtool: '#inline-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env': require('../config/test.env') + }) + ] +}) + +// no need for app entry during tests +delete webpackConfig.entry + +module.exports = webpackConfig diff --git a/express/Campari-vue/app/config/dev.env.js b/express/Campari-vue/app/config/dev.env.js new file mode 100644 index 0000000..efead7c --- /dev/null +++ b/express/Campari-vue/app/config/dev.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"' +}) diff --git a/express/Campari-vue/app/config/index.js b/express/Campari-vue/app/config/index.js new file mode 100644 index 0000000..ff544c4 --- /dev/null +++ b/express/Campari-vue/app/config/index.js @@ -0,0 +1,38 @@ +// see http://vuejs-templates.github.io/webpack for documentation. +var path = require('path') + +module.exports = { + build: { + env: require('./prod.env'), + index: path.resolve(__dirname, '../dist/index.html'), + assetsRoot: path.resolve(__dirname, '../dist'), + assetsSubDirectory: 'static', + assetsPublicPath: '/', + productionSourceMap: true, + // Gzip off by default as many popular static hosts such as + // Surge or Netlify already gzip all static assets for you. + // Before setting to `true`, make sure to: + // npm install --save-dev compression-webpack-plugin + productionGzip: false, + productionGzipExtensions: ['js', 'css'], + // Run the build command with an extra argument to + // View the bundle analyzer report after build finishes: + // `npm run build --report` + // Set to `true` or `false` to always turn it on or off + bundleAnalyzerReport: process.env.npm_config_report + }, + dev: { + env: require('./dev.env'), + port: 8080, + autoOpenBrowser: false, + assetsSubDirectory: 'static', + assetsPublicPath: '/', + proxyTable: {}, + // CSS Sourcemaps off by default because relative paths are "buggy" + // with this option, according to the CSS-Loader README + // (https://github.com/webpack/css-loader#sourcemaps) + // In our experience, they generally work as expected, + // just be aware of this issue when enabling this option. + cssSourceMap: false + } +} diff --git a/express/Campari-vue/app/config/prod.env.js b/express/Campari-vue/app/config/prod.env.js new file mode 100644 index 0000000..773d263 --- /dev/null +++ b/express/Campari-vue/app/config/prod.env.js @@ -0,0 +1,3 @@ +module.exports = { + NODE_ENV: '"production"' +} diff --git a/express/Campari-vue/app/config/test.env.js b/express/Campari-vue/app/config/test.env.js new file mode 100644 index 0000000..89f90de --- /dev/null +++ b/express/Campari-vue/app/config/test.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var devEnv = require('./dev.env') + +module.exports = merge(devEnv, { + NODE_ENV: '"testing"' +}) diff --git a/express/Campari-vue/app/index.html b/express/Campari-vue/app/index.html new file mode 100644 index 0000000..559f9d4 --- /dev/null +++ b/express/Campari-vue/app/index.html @@ -0,0 +1,12 @@ + + + + + + campari + + +
    + + + diff --git a/express/Campari-vue/app/package.json b/express/Campari-vue/app/package.json new file mode 100644 index 0000000..1fe369e --- /dev/null +++ b/express/Campari-vue/app/package.json @@ -0,0 +1,115 @@ +{ + "name": "campari", + "version": "1.0.0", + "description": "A Vue.js project", + "author": "imuntil ", + "private": true, + "scripts": { + "dev": "node build/dev-server.js", + "build": "node build/build.js", + "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", + "e2e": "node test/e2e/runner.js", + "test": "npm run unit && npm run e2e", + "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" + }, + "dependencies": { + "animate.css": "^3.5.2", + "blueimp-md5": "^2.7.0", + "cropper": "^3.0.0-rc.1", + "fastclick": "^1.0.6", + "iview": "^2.0.0-rc.12", + "jquery": "^3.2.1", + "lodash": "^4.17.4", + "mint-ui": "^2.2.5", + "muse-ui": "^2.0.2", + "vee-validate": "^2.0.0-beta.25", + "velocity-animate": "^1.5.0", + "vue": "^2.2.2", + "vue-resource": "^1.3.1", + "vue-router": "^2.2.0", + "vuex": "^2.1.1", + "vuex-i18n": "^1.3.1", + "vux": "^2.2.0" + }, + "devDependencies": { + "autoprefixer": "^6.7.2", + "babel-core": "^6.22.1", + "babel-eslint": "^7.1.1", + "babel-loader": "^6.2.10", + "babel-plugin-component": "^0.9.1", + "babel-plugin-istanbul": "^3.1.2", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-env": "^1.2.1", + "babel-preset-stage-2": "^6.22.0", + "babel-register": "^6.22.0", + "chai": "^3.5.0", + "chalk": "^1.1.3", + "chromedriver": "^2.27.2", + "compression-webpack-plugin": "^0.3.2", + "connect-history-api-fallback": "^1.3.0", + "copy-webpack-plugin": "^4.0.1", + "cross-env": "^3.1.4", + "cross-spawn": "^5.0.1", + "css-loader": "^0.26.1", + "eslint": "^3.14.1", + "eslint-config-standard": "^6.2.1", + "eslint-friendly-formatter": "^2.0.7", + "eslint-loader": "^1.6.1", + "eslint-plugin-html": "^2.0.0", + "eslint-plugin-promise": "^3.4.0", + "eslint-plugin-standard": "^2.0.1", + "eventsource-polyfill": "^0.9.6", + "express": "^4.14.1", + "extract-text-webpack-plugin": "^2.0.0", + "file-loader": "^0.10.0", + "friendly-errors-webpack-plugin": "^1.1.3", + "function-bind": "^1.1.0", + "html-webpack-plugin": "^2.28.0", + "http-proxy-middleware": "^0.17.3", + "inject-loader": "^2.0.1", + "karma": "^1.4.1", + "karma-coverage": "^1.1.1", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sinon-chai": "^1.2.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-spec-reporter": "0.0.26", + "karma-webpack": "^2.0.2", + "keycode": "^2.1.9", + "less": "^2.7.1", + "less-loader": "^2.2.3", + "lolex": "^1.5.2", + "mocha": "^3.2.0", + "nightwatch": "^0.9.12", + "node-sass": "^4.5.2", + "opn": "^4.0.2", + "optimize-css-assets-webpack-plugin": "^1.3.0", + "ora": "^1.1.0", + "phantomjs-prebuilt": "^2.1.14", + "rimraf": "^2.6.0", + "sass-loader": "^6.0.3", + "selenium-server": "^3.0.1", + "semver": "^5.3.0", + "sinon": "^1.17.7", + "sinon-chai": "^2.8.0", + "url-loader": "^0.5.7", + "vue-loader": "^11.1.4", + "vue-style-loader": "^2.0.0", + "vue-template-compiler": "^2.2.4", + "vux-loader": "^1.0.56", + "webpack": "^2.2.1", + "webpack-bundle-analyzer": "^2.2.1", + "webpack-dev-middleware": "^1.10.0", + "webpack-hot-middleware": "^2.16.1", + "webpack-merge": "^2.6.1", + "yaml-loader": "^0.4.0" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "iOS >= 7", + "Android >= 4.1" + ] +} diff --git a/express/Campari-vue/app/src/App.vue b/express/Campari-vue/app/src/App.vue new file mode 100644 index 0000000..17dd0d0 --- /dev/null +++ b/express/Campari-vue/app/src/App.vue @@ -0,0 +1,114 @@ + + + + diff --git a/express/Campari-vue/app/src/assets/ani/lpics296.jpg b/express/Campari-vue/app/src/assets/ani/lpics296.jpg new file mode 100644 index 0000000..ffa51b1 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics296.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics299.jpg b/express/Campari-vue/app/src/assets/ani/lpics299.jpg new file mode 100644 index 0000000..681df5c Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics299.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics313.jpg b/express/Campari-vue/app/src/assets/ani/lpics313.jpg new file mode 100644 index 0000000..7ecda86 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics313.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics326.jpg b/express/Campari-vue/app/src/assets/ani/lpics326.jpg new file mode 100644 index 0000000..bef4f25 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics326.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics420.jpg b/express/Campari-vue/app/src/assets/ani/lpics420.jpg new file mode 100644 index 0000000..fcb7a0f Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics420.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics442.jpg b/express/Campari-vue/app/src/assets/ani/lpics442.jpg new file mode 100644 index 0000000..8ef0ac8 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics442.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics460.jpg b/express/Campari-vue/app/src/assets/ani/lpics460.jpg new file mode 100644 index 0000000..0781f20 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics460.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics492.jpg b/express/Campari-vue/app/src/assets/ani/lpics492.jpg new file mode 100644 index 0000000..f04f6bd Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics492.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics539.jpg b/express/Campari-vue/app/src/assets/ani/lpics539.jpg new file mode 100644 index 0000000..54dff66 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics539.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics589.jpg b/express/Campari-vue/app/src/assets/ani/lpics589.jpg new file mode 100644 index 0000000..45c295a Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics589.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics592.jpg b/express/Campari-vue/app/src/assets/ani/lpics592.jpg new file mode 100644 index 0000000..e6c7b8b Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics592.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics604.jpg b/express/Campari-vue/app/src/assets/ani/lpics604.jpg new file mode 100644 index 0000000..aef1363 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics604.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics606.jpg b/express/Campari-vue/app/src/assets/ani/lpics606.jpg new file mode 100644 index 0000000..41eebec Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics606.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics615.jpg b/express/Campari-vue/app/src/assets/ani/lpics615.jpg new file mode 100644 index 0000000..89caafd Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics615.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics623.jpg b/express/Campari-vue/app/src/assets/ani/lpics623.jpg new file mode 100644 index 0000000..04036dd Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics623.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics642.jpg b/express/Campari-vue/app/src/assets/ani/lpics642.jpg new file mode 100644 index 0000000..447cabe Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics642.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics681.jpg b/express/Campari-vue/app/src/assets/ani/lpics681.jpg new file mode 100644 index 0000000..b584863 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics681.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics682.jpg b/express/Campari-vue/app/src/assets/ani/lpics682.jpg new file mode 100644 index 0000000..d6fad3f Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics682.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics729.jpg b/express/Campari-vue/app/src/assets/ani/lpics729.jpg new file mode 100644 index 0000000..0959624 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics729.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics739.jpg b/express/Campari-vue/app/src/assets/ani/lpics739.jpg new file mode 100644 index 0000000..bf16e4d Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics739.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics742.jpg b/express/Campari-vue/app/src/assets/ani/lpics742.jpg new file mode 100644 index 0000000..76cc9df Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics742.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics757.jpg b/express/Campari-vue/app/src/assets/ani/lpics757.jpg new file mode 100644 index 0000000..641dd9e Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics757.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics768.jpg b/express/Campari-vue/app/src/assets/ani/lpics768.jpg new file mode 100644 index 0000000..0291fa2 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics768.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics776.jpg b/express/Campari-vue/app/src/assets/ani/lpics776.jpg new file mode 100644 index 0000000..8ede318 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics776.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics783.jpg b/express/Campari-vue/app/src/assets/ani/lpics783.jpg new file mode 100644 index 0000000..0d5ea1f Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics783.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics799.jpg b/express/Campari-vue/app/src/assets/ani/lpics799.jpg new file mode 100644 index 0000000..3066e4c Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics799.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics818.jpg b/express/Campari-vue/app/src/assets/ani/lpics818.jpg new file mode 100644 index 0000000..9f2e4af Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics818.jpg differ diff --git a/express/Campari-vue/app/src/assets/ani/lpics841.jpg b/express/Campari-vue/app/src/assets/ani/lpics841.jpg new file mode 100644 index 0000000..a2489b4 Binary files /dev/null and b/express/Campari-vue/app/src/assets/ani/lpics841.jpg differ diff --git a/express/Campari-vue/app/src/assets/c-all-4.jpg b/express/Campari-vue/app/src/assets/c-all-4.jpg new file mode 100644 index 0000000..e4f2d89 Binary files /dev/null and b/express/Campari-vue/app/src/assets/c-all-4.jpg differ diff --git a/express/Campari-vue/app/src/assets/chosen.png b/express/Campari-vue/app/src/assets/chosen.png new file mode 100644 index 0000000..81b83a3 Binary files /dev/null and b/express/Campari-vue/app/src/assets/chosen.png differ diff --git a/express/Campari-vue/app/src/assets/detail-sign.jpg b/express/Campari-vue/app/src/assets/detail-sign.jpg new file mode 100644 index 0000000..e4c7895 Binary files /dev/null and b/express/Campari-vue/app/src/assets/detail-sign.jpg differ diff --git a/express/Campari-vue/app/src/assets/home-swiper.jpg b/express/Campari-vue/app/src/assets/home-swiper.jpg new file mode 100644 index 0000000..439e9c0 Binary files /dev/null and b/express/Campari-vue/app/src/assets/home-swiper.jpg differ diff --git a/express/Campari-vue/app/src/assets/like.png b/express/Campari-vue/app/src/assets/like.png new file mode 100644 index 0000000..0ffefa3 Binary files /dev/null and b/express/Campari-vue/app/src/assets/like.png differ diff --git a/express/Campari-vue/app/src/assets/location-pattern.png b/express/Campari-vue/app/src/assets/location-pattern.png new file mode 100644 index 0000000..0ff1cb0 Binary files /dev/null and b/express/Campari-vue/app/src/assets/location-pattern.png differ diff --git a/express/Campari-vue/app/src/assets/logo.png b/express/Campari-vue/app/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/express/Campari-vue/app/src/assets/logo.png differ diff --git a/express/Campari-vue/app/src/assets/nav-1-a.jpg b/express/Campari-vue/app/src/assets/nav-1-a.jpg new file mode 100644 index 0000000..d212664 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-1-a.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-1.jpg b/express/Campari-vue/app/src/assets/nav-1.jpg new file mode 100644 index 0000000..0096105 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-1.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-2-a.jpg b/express/Campari-vue/app/src/assets/nav-2-a.jpg new file mode 100644 index 0000000..5fc435e Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-2-a.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-2.jpg b/express/Campari-vue/app/src/assets/nav-2.jpg new file mode 100644 index 0000000..a436d62 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-2.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-3-a.jpg b/express/Campari-vue/app/src/assets/nav-3-a.jpg new file mode 100644 index 0000000..14b7766 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-3-a.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-3.jpg b/express/Campari-vue/app/src/assets/nav-3.jpg new file mode 100644 index 0000000..370344e Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-3.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-4-a.jpg b/express/Campari-vue/app/src/assets/nav-4-a.jpg new file mode 100644 index 0000000..4199582 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-4-a.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-4.jpg b/express/Campari-vue/app/src/assets/nav-4.jpg new file mode 100644 index 0000000..eda460b Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-4.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-5-a.jpg b/express/Campari-vue/app/src/assets/nav-5-a.jpg new file mode 100644 index 0000000..2853bc2 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-5-a.jpg differ diff --git a/express/Campari-vue/app/src/assets/nav-5.jpg b/express/Campari-vue/app/src/assets/nav-5.jpg new file mode 100644 index 0000000..0258ff0 Binary files /dev/null and b/express/Campari-vue/app/src/assets/nav-5.jpg differ diff --git a/express/Campari-vue/app/src/assets/not-choose.png b/express/Campari-vue/app/src/assets/not-choose.png new file mode 100644 index 0000000..b10023d Binary files /dev/null and b/express/Campari-vue/app/src/assets/not-choose.png differ diff --git a/express/Campari-vue/app/src/assets/not-like.png b/express/Campari-vue/app/src/assets/not-like.png new file mode 100644 index 0000000..29825d0 Binary files /dev/null and b/express/Campari-vue/app/src/assets/not-like.png differ diff --git a/express/Campari-vue/app/src/assets/palette-1.jpg b/express/Campari-vue/app/src/assets/palette-1.jpg new file mode 100644 index 0000000..d1f7dc9 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-1.jpg differ diff --git a/express/Campari-vue/app/src/assets/palette-1.png b/express/Campari-vue/app/src/assets/palette-1.png new file mode 100644 index 0000000..ef9ef68 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-1.png differ diff --git a/express/Campari-vue/app/src/assets/palette-2.jpg b/express/Campari-vue/app/src/assets/palette-2.jpg new file mode 100644 index 0000000..89cfec6 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-2.jpg differ diff --git a/express/Campari-vue/app/src/assets/palette-2.png b/express/Campari-vue/app/src/assets/palette-2.png new file mode 100644 index 0000000..a2bd6b9 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-2.png differ diff --git a/express/Campari-vue/app/src/assets/palette-3.jpg b/express/Campari-vue/app/src/assets/palette-3.jpg new file mode 100644 index 0000000..08f8640 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-3.jpg differ diff --git a/express/Campari-vue/app/src/assets/palette-3.png b/express/Campari-vue/app/src/assets/palette-3.png new file mode 100644 index 0000000..8dd309a Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-3.png differ diff --git a/express/Campari-vue/app/src/assets/palette-4.jpg b/express/Campari-vue/app/src/assets/palette-4.jpg new file mode 100644 index 0000000..3c03603 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-4.jpg differ diff --git a/express/Campari-vue/app/src/assets/palette-4.png b/express/Campari-vue/app/src/assets/palette-4.png new file mode 100644 index 0000000..8e16e50 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-4.png differ diff --git a/express/Campari-vue/app/src/assets/palette-5.jpg b/express/Campari-vue/app/src/assets/palette-5.jpg new file mode 100644 index 0000000..a0e50ef Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-5.jpg differ diff --git a/express/Campari-vue/app/src/assets/palette-5.png b/express/Campari-vue/app/src/assets/palette-5.png new file mode 100644 index 0000000..d567ed1 Binary files /dev/null and b/express/Campari-vue/app/src/assets/palette-5.png differ diff --git a/express/Campari-vue/app/src/assets/placeholder.png b/express/Campari-vue/app/src/assets/placeholder.png new file mode 100644 index 0000000..1ae9c31 Binary files /dev/null and b/express/Campari-vue/app/src/assets/placeholder.png differ diff --git a/express/Campari-vue/app/src/assets/print.jpg b/express/Campari-vue/app/src/assets/print.jpg new file mode 100644 index 0000000..0a803c0 Binary files /dev/null and b/express/Campari-vue/app/src/assets/print.jpg differ diff --git a/express/Campari-vue/app/src/assets/print.png b/express/Campari-vue/app/src/assets/print.png new file mode 100644 index 0000000..6d8a350 Binary files /dev/null and b/express/Campari-vue/app/src/assets/print.png differ diff --git a/express/Campari-vue/app/src/assets/vux_logo.png b/express/Campari-vue/app/src/assets/vux_logo.png new file mode 100644 index 0000000..fab5465 Binary files /dev/null and b/express/Campari-vue/app/src/assets/vux_logo.png differ diff --git a/express/Campari-vue/app/src/components/XDialog.vue b/express/Campari-vue/app/src/components/XDialog.vue new file mode 100644 index 0000000..d3e0296 --- /dev/null +++ b/express/Campari-vue/app/src/components/XDialog.vue @@ -0,0 +1,53 @@ + + + + diff --git a/express/Campari-vue/app/src/components/cart-item.vue b/express/Campari-vue/app/src/components/cart-item.vue new file mode 100644 index 0000000..613a8ff --- /dev/null +++ b/express/Campari-vue/app/src/components/cart-item.vue @@ -0,0 +1,220 @@ + + + diff --git a/express/Campari-vue/app/src/components/cocktail-item.vue b/express/Campari-vue/app/src/components/cocktail-item.vue new file mode 100644 index 0000000..2d04e2b --- /dev/null +++ b/express/Campari-vue/app/src/components/cocktail-item.vue @@ -0,0 +1,32 @@ + + + diff --git a/express/Campari-vue/app/src/components/cropper-avatar.vue b/express/Campari-vue/app/src/components/cropper-avatar.vue new file mode 100644 index 0000000..d7b0c15 --- /dev/null +++ b/express/Campari-vue/app/src/components/cropper-avatar.vue @@ -0,0 +1,1358 @@ + + + + diff --git a/express/Campari-vue/app/src/components/filter-layer2@products.vue b/express/Campari-vue/app/src/components/filter-layer2@products.vue new file mode 100644 index 0000000..e781dc3 --- /dev/null +++ b/express/Campari-vue/app/src/components/filter-layer2@products.vue @@ -0,0 +1,80 @@ + + + diff --git a/express/Campari-vue/app/src/components/filter-layer@products.vue b/express/Campari-vue/app/src/components/filter-layer@products.vue new file mode 100644 index 0000000..c30c6a7 --- /dev/null +++ b/express/Campari-vue/app/src/components/filter-layer@products.vue @@ -0,0 +1,90 @@ + + + diff --git a/express/Campari-vue/app/src/components/img-loader.vue b/express/Campari-vue/app/src/components/img-loader.vue new file mode 100644 index 0000000..051d617 --- /dev/null +++ b/express/Campari-vue/app/src/components/img-loader.vue @@ -0,0 +1,15 @@ + + diff --git a/express/Campari-vue/app/src/components/li-item.vue b/express/Campari-vue/app/src/components/li-item.vue new file mode 100644 index 0000000..23cc46e --- /dev/null +++ b/express/Campari-vue/app/src/components/li-item.vue @@ -0,0 +1,57 @@ + + + diff --git a/express/Campari-vue/app/src/components/li-item2.vue b/express/Campari-vue/app/src/components/li-item2.vue new file mode 100644 index 0000000..32c5ed1 --- /dev/null +++ b/express/Campari-vue/app/src/components/li-item2.vue @@ -0,0 +1,144 @@ + + + diff --git a/express/Campari-vue/app/src/components/order-ed-item.vue b/express/Campari-vue/app/src/components/order-ed-item.vue new file mode 100644 index 0000000..268e60f --- /dev/null +++ b/express/Campari-vue/app/src/components/order-ed-item.vue @@ -0,0 +1,167 @@ + + + diff --git a/express/Campari-vue/app/src/components/order-ing-item.vue b/express/Campari-vue/app/src/components/order-ing-item.vue new file mode 100644 index 0000000..ad24619 --- /dev/null +++ b/express/Campari-vue/app/src/components/order-ing-item.vue @@ -0,0 +1,91 @@ + + + diff --git a/express/Campari-vue/app/src/components/palette-com.vue b/express/Campari-vue/app/src/components/palette-com.vue new file mode 100644 index 0000000..73ea89c --- /dev/null +++ b/express/Campari-vue/app/src/components/palette-com.vue @@ -0,0 +1,53 @@ + + + diff --git a/express/Campari-vue/app/src/components/partical-title.vue b/express/Campari-vue/app/src/components/partical-title.vue new file mode 100644 index 0000000..6431bee --- /dev/null +++ b/express/Campari-vue/app/src/components/partical-title.vue @@ -0,0 +1,30 @@ + + + diff --git a/express/Campari-vue/app/src/components/products-container.vue b/express/Campari-vue/app/src/components/products-container.vue new file mode 100644 index 0000000..8e7a722 --- /dev/null +++ b/express/Campari-vue/app/src/components/products-container.vue @@ -0,0 +1,86 @@ + + + diff --git a/express/Campari-vue/app/src/components/swiper-slide.vue b/express/Campari-vue/app/src/components/swiper-slide.vue new file mode 100644 index 0000000..538b769 --- /dev/null +++ b/express/Campari-vue/app/src/components/swiper-slide.vue @@ -0,0 +1,18 @@ + + + diff --git a/express/Campari-vue/app/src/components/swiper.vue b/express/Campari-vue/app/src/components/swiper.vue new file mode 100644 index 0000000..7d4a085 --- /dev/null +++ b/express/Campari-vue/app/src/components/swiper.vue @@ -0,0 +1,40 @@ + + + diff --git a/express/Campari-vue/app/src/components/v-code.vue b/express/Campari-vue/app/src/components/v-code.vue new file mode 100644 index 0000000..975f220 --- /dev/null +++ b/express/Campari-vue/app/src/components/v-code.vue @@ -0,0 +1,123 @@ + + diff --git a/express/Campari-vue/app/src/components/z-number.vue b/express/Campari-vue/app/src/components/z-number.vue new file mode 100644 index 0000000..5ef4ecb --- /dev/null +++ b/express/Campari-vue/app/src/components/z-number.vue @@ -0,0 +1,131 @@ + + + diff --git a/express/Campari-vue/app/src/layout/Layout.vue b/express/Campari-vue/app/src/layout/Layout.vue new file mode 100644 index 0000000..f02648a --- /dev/null +++ b/express/Campari-vue/app/src/layout/Layout.vue @@ -0,0 +1,79 @@ + + + diff --git a/express/Campari-vue/app/src/lib/common-tools.js b/express/Campari-vue/app/src/lib/common-tools.js new file mode 100644 index 0000000..7bee7fe --- /dev/null +++ b/express/Campari-vue/app/src/lib/common-tools.js @@ -0,0 +1,142 @@ +/** + * Created by 斌 on 2017/3/16. + */ +import _ from 'lodash' + +/** + * localStorage + * @type {{putValue: ((key?, value?)), getValue: ((key?)), remove: ((key?))}} + */ +export const Ls = { + putValue (key, value) { + localStorage.removeItem(key) + if (_.isObject(value)) { + localStorage.setItem(key, JSON.stringify(value)) + } else { + localStorage.setItem(key, value) + } + }, + getValue (key) { + let _value = '' + try { + _value = JSON.parse(localStorage.getItem(key)) + } catch (err) { + _value = localStorage.getItem(key) + } + return _value + }, + remove (key) { + localStorage.removeItem(key) + } +} +/** + * sessionStorage + * @type {{putValue: ((key?, value?)), getValue: ((key?)), remove: ((key?))}} + */ +export const Ss = { + putValue (key, value) { + sessionStorage.removeItem(key) + if (_.isObject(value)) { + sessionStorage.setItem(key, JSON.stringify(value)) + } else { + sessionStorage.setItem(key, value) + } + }, + getValue (key) { + let _value = '' + try { + _value = JSON.parse(sessionStorage.getItem(key)) + } catch (err) { + _value = sessionStorage.getItem(key) + } + return _value + }, + remove (key) { + sessionStorage.removeItem(key) + } +} +/** + * 城市数据 + * @type {[*]} + */ +export const citiesData = { + '安徽': ['安庆市', '蚌埠市', '池州市', '滁州市', '芜湖市', '阜阳市', '淮北市', '淮南市', '合肥市', '亳州市', '黄山市', '六安市', '马鞍山市', '宿州市', '铜陵市', '宣城市'], + '北京': ['北京市'], + '重庆市': ['重庆市'], + '福建': ['福州市', '龙岩市', '南平市', '宁德市', '莆田市', '泉州市', '三明市', '厦门市', '漳州市'], + '甘肃': ['庆阳市', '白银市', '定西市', '甘南藏族自治州', '嘉峪关市', '酒泉市', '金昌市', '兰州市', '陇南市', '临夏回族自治州', '平凉市', '天水市', '武威市', '张掖市'], + '广东': ['东莞市', '佛山市', '广州市', '惠州市', '河源市', '鹤山市', '揭阳市', '江门市', '开平市', '梅州市', '茂名市', '清远市', '汕头市', '深圳市', '韶关市', '肇庆市', '云浮市', '阳江市', '中山市', '湛江市', '珠海市'], + '广西': ['北海市', '百色市', '崇左市', '防城港市', '桂林市', '贵港市', '河池市', '贺州市', '来宾市', '柳州市', '南宁市', '钦州市', '梧州市', '玉林市'], + '贵州': ['安顺市', '毕节市', '贵阳市', '六盘水市', '黔东南苗族侗族自治州', '黔南布依族苗族自治州', '黔西南布依族苗族自治州', '仁怀市', '铜仁市', '威宁县', '遵义市'], + '海南': ['儋州市', '海口市', '三亚市', '三沙市'], + '河北': ['保定市', '承德市', '沧州市', '定州市', '衡水市', '邯郸市', '廊坊市', '秦皇岛市', '唐山市', '石家庄市', '邢台市', '辛集市', '张家口市'], + '河南': ['安阳市', '鹤壁市', '济源市', '焦作市', '开封市', '洛阳市', '漯河市', '南阳市', '平顶山市', '濮阳市', '三门峡市', '商丘市', '信阳市', '新乡市', '许昌市', '周口市', '郑州市', '驻马店市'], + '黑龙江': ['大庆市', '大兴安岭地区', '哈尔滨市', '鹤岗市', '黑河市', '佳木斯市', '鸡西市', '牡丹江市', '齐齐哈尔市', '七台河市', '绥化市', '双鸭山市', '伊春市'], + '湖北': ['恩施市', '鄂州市', '黄冈市', '黄石市', '荆州市', '荆门市', '潜江市', '十堰市', '随州市', '神农架林区', '天门市', '武汉市', '仙桃市', '咸宁市', '孝感市', '襄阳市', '宜昌市'], + '湖南': ['郴州市', '常德市', '长沙市', '怀化市', '衡阳市', '娄底市', '邵阳市', '湘潭市', '湘西土家族苗族自治州', '益阳市', '岳阳市', '永州市', '张家界市', '株洲市'], + '吉林': ['白山市', '白城市', '长春市', '长白山保护开发区', '公主岭', '吉林市', '辽源市', '梅河口', '松原市', '四平市', '通化市', '延边朝鲜族自治区'], + '江苏': ['常州市', '常熟市', '淮安市', '江阴市', '昆山市', '连云港市', '南京市', '南通市', '邳州市', '苏州市', '宿迁市', '太仓市', '泰州市', '无锡市', '徐州市', '扬州市', '盐城市', '张家港市', '镇江市'], + '江西': ['抚州市', '赣州市', '高安市', '九江市', '吉安市', '景德镇市', '南昌市', '萍乡市', '上饶市', '新余市', '宜春市', '鹰潭市'], + '辽宁': ['鞍山市', '本溪市', '朝阳市', '丹东市', '大连市', '抚顺市', '阜新市', '葫芦岛市', '锦州市', '辽阳市', '盘锦市', '沈阳市', '铁岭市', '营口市'], + '内蒙古': ['阿拉善盟', '包头市', '巴彦淖尔市', '赤峰市', '鄂尔多斯市', '呼伦贝尔市', '呼和浩特市', '乌海市', '通辽市', '乌兰察布市', '兴安盟', '锡林郭勒盟'], + '宁夏': ['固原市', '石嘴山市', '吴忠市', '银川市', '中卫市'], + '青海': ['黄南州', '果洛州', '海南州', '海东市', '海西州', '海北州', '西宁市', '玉树州'], + '山东': ['滨州市', '东营市', '德州市', '荷泽市', '即墨市', '济南市', '济宁市', '胶州市', '龙口市', '临沂市', '梁山市', '聊城市', '莱芜市', '青岛市', '荣成市', '日照市', '潍坊市', '泰安市', '威海市', '烟台市', '枣庄市', '淄博市', '邹城市'], + '山西': ['长治市', '大同市', '晋中市', '晋城市', '临汾市', '吕梁市', '朔州市', '太原市', '忻州市', '运城市', '阳泉市'], + '陕西': ['安康市', '宝鸡市', '都匀市', '汉中市', '商洛市', '铜川市', '渭南市', '西安市', '咸阳市', '延安市', '榆林市'], + '上海': ['上海市'], + '四川': ['成都市', '德阳市', '达州市', '广元市', '广安市', '乐山市', '泸州市', '眉山市', '绵阳市', '内江市', '南充市', '攀枝花市', '遂宁市', '宜宾市', '雅安市', '自贡市', '资阳市'], + '天津': ['天津市'], + '西藏': ['阿里地区', '昌都市', '拉萨市', '林芝市', '那曲地区', '日喀则市', '山南市'], + '新疆': ['阿克苏地区', '阿拉尔市', '博尔塔拉蒙古州', '巴音郭楞蒙古州', '北屯市', '昌吉州', '哈密市', '和田地区', '克拉玛依市', '克孜勒苏柯尔克孜州', '喀什地区', '可克达拉市', '昆玉市', '石河子市', '吐鲁番市', '图木舒克市', '铁门关市', '乌鲁木齐市', '五家渠市', '伊犁哈萨克州'], + '云南': ['保山市', '楚雄彝族自治州', '德宏傣族景颇族自治州', '迪庆藏族自治州', '大理白族自治州', '红河哈尼族彝族自治州', '昆明市', '丽江市', '临沧市', '怒江傈僳族自治州', '普洱市', '曲靖市', '昭通市', '西双版纳傣族自治州', '文山壮族苗族自治州', '玉溪市'], + '浙江': ['杭州市', '湖州市', '嘉兴市', '金华市', '丽水市', '宁波市', '衢州市', '绍兴市', '台州市', '温州市', '舟山市'] +} +export const address = { + '北京': ['北京'], + '广东': ['广州', '深圳', '珠海', '汕头', '韶关', '佛山', '江门', '湛江', '茂名', '肇庆', '惠州', '梅州', '汕尾', '河源', '阳江', '清远', '东莞', '中山', '潮州', '揭阳', '云浮'], + '上海': ['上海'], + '天津': ['天津'], + '重庆': ['重庆'], + '辽宁': ['沈阳', '大连', '鞍山', '抚顺', '本溪', '丹东', '锦州', '营口', '阜新', '辽阳', '盘锦', '铁岭', '朝阳', '葫芦岛'], + '江苏': ['南京', '苏州', '无锡', '常州', '镇江', '南通', '泰州', '扬州', '盐城', '连云港', '徐州', '淮安', '宿迁'], + '湖北': ['武汉', '黄石', '十堰', '荆州', '宜昌', '襄樊', '鄂州', '荆门', '孝感', '黄冈', '咸宁', '随州', '恩施土家族苗族自治州', '仙桃', '天门', '潜江', '神农架林区'], + '四川': ['成都', '自贡', '攀枝花', '泸州', '德阳', '绵阳', '广元', '遂宁', '内江', '乐山', '南充', '眉山', '宜宾', '广安', '达州', '雅安', '巴中', '资阳', '阿坝藏族羌族自治州', '甘孜藏族自治州', '凉山彝族自治州'], + '陕西': ['西安', '铜川', '宝鸡', '咸阳', '渭南', '延安', '汉中', '榆林', '安康', '商洛'], + '河北': ['石家庄', '唐山', '秦皇岛', '邯郸', '邢台', '保定', '张家口', '承德', '沧州', '廊坊', '衡水'], + '山西': ['太原', '大同', '阳泉', '长治', '晋城', '朔州', '晋中', '运城', '忻州', '临汾', '吕梁'], + '河南': ['郑州', '开封', '洛阳', '平顶山', '安阳', '鹤壁', '新乡', '焦作', '濮阳', '许昌', '漯河', '三门峡', '南阳', '商丘', '信阳', '周口', '驻马店'], + '吉林': ['长春', '吉林', '四平', '辽源', '通化', '白山', '松原', '白城', '延边朝鲜族自治州'], + '黑龙江': ['哈尔滨', '齐齐哈尔', '鹤岗', '双鸭山', '鸡西', '大庆', '伊春', '牡丹江', '佳木斯', '七台河', '黑河', '绥化', '大兴安岭地区'], + '内蒙古': ['呼和浩特', '包头', '乌海', '赤峰', '通辽', '鄂尔多斯', '呼伦贝尔', '巴彦淖尔', '乌兰察布', '锡林郭勒盟', '兴安盟', '阿拉善盟'], + '山东': ['济南', '青岛', '淄博', '枣庄', '东营', '烟台', '潍坊', '济宁', '泰安', '威海', '日照', '莱芜', '临沂', '德州', '聊城', '滨州', '菏泽'], + '安徽': ['合肥', '芜湖', '蚌埠', '淮南', '马鞍山', '淮北', '铜陵', '安庆', '黄山', '滁州', '阜阳', '宿州', '巢湖', '六安', '亳州', '池州', '宣城'], + '浙江': ['杭州', '宁波', '温州', '嘉兴', '湖州', '绍兴', '金华', '衢州', '舟山', '台州', '丽水'], + '福建': ['福州', '厦门', '莆田', '三明', '泉州', '漳州', '南平', '龙岩', '宁德'], + '湖南': ['长沙', '株洲', '湘潭', '衡阳', '邵阳', '岳阳', '常德', '张家界', '益阳', '郴州', '永州', '怀化', '娄底', '湘西土家族苗族自治州'], + '广西': ['南宁', '柳州', '桂林', '梧州', '北海', '防城港', '钦州', '贵港', '玉林', '百色', '贺州', '河池', '来宾', '崇左'], + '江西': ['南昌', '景德镇', '萍乡', '九江', '新余', '鹰潭', '赣州', '吉安', '宜春', '抚州', '上饶'], + '贵州': ['贵阳', '六盘水', '遵义', '安顺', '铜仁地区', '毕节地区', '黔西南布依族苗族自治州', '黔东南苗族侗族自治州', '黔南布依族苗族自治州'], + '云南': ['昆明', '曲靖', '玉溪', '保山', '昭通', '丽江', '普洱', '临沧', '德宏傣族景颇族自治州', '怒江傈僳族自治州', '迪庆藏族自治州', '大理白族自治州', '楚雄彝族自治州', '红河哈尼族彝族自治州', '文山壮族苗族自治州', '西双版纳傣族自治州'], + '西藏': ['拉萨', '那曲地区', '昌都地区', '林芝地区', '山南地区', '日喀则地区', '阿里地区'], + '海南': ['海口', '三亚', '五指山', '琼海', '儋州', '文昌', '万宁', '东方', '澄迈县', '定安县', '屯昌县', '临高县', '白沙黎族自治县', '昌江黎族自治县', '乐东黎族自治县', '陵水黎族自治县', '保亭黎族苗族自治县', '琼中黎族苗族自治县'], + '甘肃': ['兰州', '嘉峪关', '金昌', '白银', '天水', '武威', '酒泉', '张掖', '庆阳', '平凉', '定西', '陇南', '临夏回族自治州', '甘南藏族自治州'], + '宁夏': ['银川', '石嘴山', '吴忠', '固原', '中卫'], + '青海': ['西宁', '海东地区', '海北藏族自治州', '海南藏族自治州', '黄南藏族自治州', '果洛藏族自治州', '玉树藏族自治州', '海西蒙古族藏族自治州'], + '新疆': ['乌鲁木齐', '克拉玛依', '吐鲁番地区', '哈密地区', '和田地区', '阿克苏地区', '喀什地区', '克孜勒苏柯尔克孜自治州', '巴音郭楞蒙古自治州', '昌吉回族自治州', '博尔塔拉蒙古自治州', '石河子', '阿拉尔', '图木舒克', '五家渠', '伊犁哈萨克自治州'], + '香港': ['香港'], + '澳门': ['澳门'], + '台湾': ['台北市', '高雄市', '台北县', '桃园县', '新竹县', '苗栗县', '台中县', '彰化县', '南投县', '云林县', '嘉义县', '台南县', '高雄县', '屏东县', '宜兰县', '花莲县', '台东县', '澎湖县', '基隆市', '新竹市', '台中市', '嘉义市', '台南市'] +} + +let timer = null +export function timeout (cb, delay) { + if (timer) { + clearTimeout(timer) + timer = null + } + timer = setTimeout(function () { + cb() + timer = null + }, delay) +} diff --git a/express/Campari-vue/app/src/lib/config.js b/express/Campari-vue/app/src/lib/config.js new file mode 100644 index 0000000..df3c5bd --- /dev/null +++ b/express/Campari-vue/app/src/lib/config.js @@ -0,0 +1,100 @@ +/** + * Created by 斌 on 2017/3/13. + */ + +const BASE_PATH = '/api/' +const IMG_PATH = '/images/asserts/' + +export default { + path: BASE_PATH, + imgPath: IMG_PATH, + avatarPath: BASE_PATH + 'upload/', + dev: false, + testData: [ + {price: 1131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 1}, + {price: 11111, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 2}, + {price: 2111, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 3}, + {price: 1131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 4}, + {price: 111, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 5}, + {price: 1114, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 6}, + {price: 1151, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 7}, + {price: 1141, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 8}, + {price: 111, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 9}, + {price: 1811, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 10}, + {price: 9111, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 11}, + {price: 1011, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 12}, + {price: 1191, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 13} + ], + simUserData: { + name: 'zhin', + phone: '13022163937', + userid: 3, + avatar: '3.png' + }, + testOrderData: [ + { + ordernum: '13745933347530', + total: '2', + orderprice: '100', + orderstatus: 0, + orderaddress: '上海换头可靠连接方式', + status: { + s: '未支付', + c: 'red', + o: '去支付' + }, + products: [ + {price: 1131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 1, num: 1}, + {price: 1131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 2, num: 1} + ] + }, + { + ordernum: '13745932317530', + total: '2', + orderprice: '1001', + orderstatus: 1, + orderaddress: '上海宝三', + status: { + s: '已支付', + c: 'red', + o: '查看物流' + }, + products: [ + {price: 118, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 2, num: 1}, + {price: 131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 1, num: 1} + ] + }, + { + ordernum: '1297927952409', + total: '1', + orderprice: '100', + orderstatus: 0, + orderaddress: '上海换头可靠连接方式', + status: { + s: '未支付', + c: 'red', + o: '去支付' + }, + products: [ + {price: 1131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 1, num: 1} + ] + }, + { + ordernum: '12380170918', + total: '3', + orderprice: '1001', + orderstatus: 1, + orderaddress: '上海宝三', + status: { + s: '已支付', + c: 'red', + o: '查看物流' + }, + products: [ + {price: 118, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 2, num: 1}, + {price: 131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 1, num: 1}, + {price: 1131, ENName: 'noxxx', CNName: '茅台', procontent: '700', id: 2, num: 1} + ] + } + ] +} diff --git a/express/Campari-vue/app/src/lib/constant.js b/express/Campari-vue/app/src/lib/constant.js new file mode 100644 index 0000000..3d9c46f --- /dev/null +++ b/express/Campari-vue/app/src/lib/constant.js @@ -0,0 +1,99 @@ +/** + * Created by 斌 on 2017/3/31. + */ +export const AJAX_RESPONSE_CODE = 'code' +export const AJAX_RESPONSE_RESULT = 'result' +export const AJAX_RESPONSE_MSG = 'msg' + +export const THE_USER_KEY = 'Use2HFY7201nmjf871lOD-20nmq1EFCM' +export const THE_ADDRESS_KEY = 'AddRessJFUHS67210JVX7FEHJua19CJ9G7Bciqk' +export const THE_CART_KEY = 'DJFUj7F5dig1FI829sy167YWU287surfT' + +// address +// 从服务器拉取address +export const ADR_FETCH_ADDRESSES_A = 'address/fetch-adrs-a' +// 将fetch的数据同步本地address +export const ADR_SET_ADRS_M = 'address/set-adrs-m' +// 增加地址 +export const ADR_ADD_ADDRESS_A = 'address/add-adr-a' +// 更新本地地址库 +export const ADR_UPDATE_ADRS = 'address/adr-update-adrs' +// 删除地址 +export const ADR_DELETE_ADDRESS_A = 'address/deleteAdr-A' +// 更新地址(编辑地址) +export const ADR_UPDATE_ADDRESS_A = 'address/updateAdr-A' +// 设置默认地址 +export const ADR_SET_DEFAULT_ADDRESS_A = 'address/setDefaultAdr-A' +// 设置选择的地址 +export const ADR_SET_CHOSEN_ADDRESS = 'address/setChosenAdr' +// 获取chosen-adr-g +export const ADR_CHOSEN_ADDRESS_G = 'address/chosenAdr' +export const ADR_SET_EDIT_ADDRESS = 'address/setEditAdr' + +// cart +// 获取购物车-action +export const CART_FETCH_CART_A = 'cart/fetch-cart-a' +// 获取购物车-mutations +export const CART_SET_CART_M = 'cart/set-cart-m' +// 加入购物车 +export const CART_ADD_ITEM_A = 'cart/add-item-a' +// 修改cart中商品count +export const CART_EDIT_COUNT_A = 'cart/edit-count-a' +// 选中商品 +export const CART_CHOOSE_A = 'cart/choose-a' +// 更新购物车 +export const CART_UPDATE_CART = 'cart/update-cart' +// 删除购物车中的商品 +export const CART_DELETE_ITEM_A = 'cart/delete-item-a' +// 需要更新(详见 store/cart.js) +export const CART_NEED_UPDATE_M = 'cart/need-update-M' +// toggle all chosen && delete +export const CART_CHOOSE_ALL_A = 'cart/choose-all-a' +export const CART_CHOOSE_ALL = 'cart/choose-all' +export const CART_DELETE_ALL_A = 'cart/delete-all-a' +export const CART_DELETE_ALL = 'cart/delete-all' +export const CART_ADD_BUY_NOW = 'cart/addBuyNow' +export const CART_UPDATE_BUY_NOW = 'cart/updateBuyNow' +// GETTERS +export const CART_ALL_CHOSEN = 'cart/allChosen' +export const CART_THE_MONEY = 'cart/theMoney' +export const CART_IS_ALL_CHOSEN = 'cart/isAllChosen' +export const CART_THE_CHOSEN = 'cart/theChosen' +export const CART_THE_PRO = 'cart/thePro' + +export const USER_LOCAL_USER_M = 'user/localUser' +export const USER_SET_USER_M = 'user/setUser' +export const USER_MODIFY_AVATAR_M = 'user/modifyAvatar' +export const USER_SAVE_PHONE_CODE_M = 'user/savePhone_Code' +export const USER_DELETE_PHONE_CODE_M = 'user/deletePhone_Code' + +export const USER_LOCAL_USER_A = 'user/localUser' +export const USER_SET_USER_A = 'user/setUser' +// 修改头像 +export const USER_MODIFY_AVATAR_A = 'user/modifyAvatar' +// 修改昵称 +export const USER_MODIFY_NICK_A = 'user/modifyNick' +// 确认用户是否登录 +export const USER_CHECK_LOGIN_A = 'user/checkLogin' +// 登出 +export const USER_LOGOUT_A = 'user/logout' +// 用户信息 +export const USER_INFO = 'user/userInfo' + +// 订单 +export const PLACE_ORDER_A = 'order/placeOrder' + +// loading +export const UPDATE_LOADING_STATUS = 'loading/updateLoadingStatus' +// toast +export const SHOW_TOAST = 'loading/showToast' +export const HIDE_TOAST = 'loading/hideToast' +// 目标路由,用于登录后的重定向 +export const DESTINATION = 'loading/destination' +// 暂时隐藏tabbar +export const TEMP_HIDING = 'loading/temp-hiding' + +// 产品类别 +export const TYPES = ['none', '开胃酒&利口酒', '伏特加', '威士忌', '白兰地', '朗姆酒', '起泡葡萄酒', '葡萄酒'] +// 订单状态 +export const ORDER_STATUS = ['待支付', '待收货', '已完成', '已取消'] diff --git a/express/Campari-vue/app/src/lib/custom-filter.js b/express/Campari-vue/app/src/lib/custom-filter.js new file mode 100644 index 0000000..2e50b6d --- /dev/null +++ b/express/Campari-vue/app/src/lib/custom-filter.js @@ -0,0 +1,32 @@ +/** + * Created by 斌 on 2017/4/18. + */ +const digitsRE = /(\d{3})(?=\d)/g + +export function currency (value, currency, decimals) { + value = parseFloat(value) + if (!isFinite(value) || (!value && value !== 0)) return '' + currency = currency != null ? currency : '$' + decimals = decimals != null ? decimals : 2 + let stringified = Math.abs(value).toFixed(decimals) + let _int = decimals + ? stringified.slice(0, -1 - decimals) + : stringified + let i = _int.length % 3 + let head = i > 0 + ? (_int.slice(0, i) + (_int.length > 3 ? ',' : '')) + : '' + let _float = decimals + ? stringified.slice(-1 - decimals) + : '' + let sign = value < 0 ? '-' : '' + return sign + currency + head + + _int.slice(i).replace(digitsRE, '$1,') + + _float +} + +export function formatPhone (value) { + let format = value.toString().split('') + format.splice(-8, 4, '*', '*', '*', '*') + return format.join('') +} diff --git a/express/Campari-vue/app/src/lib/project-tools.js b/express/Campari-vue/app/src/lib/project-tools.js new file mode 100644 index 0000000..6e1ee72 --- /dev/null +++ b/express/Campari-vue/app/src/lib/project-tools.js @@ -0,0 +1,37 @@ +/** + * Created by 斌 on 2017/5/1. + */ +import { user } from './services' +import { THE_USER_KEY, USER_INFO, USER_LOCAL_USER_M } from './constant' +import { Ss } from './common-tools' +import store from '../store/index' + +export function checkLogin () { + // 首先检查store + let status = store.getters[USER_INFO] + if (status && status.phone) { + return Promise.resolve(true) + } + // 检查本地sessionStorage + status = Ss.getValue(THE_USER_KEY) + if (status && status.phone) { + // 将session中的信息同步到store + store.commit(USER_LOCAL_USER_M, status) + return Promise.resolve(true) + } + return user.checkLogin() + .then(data => { + console.log(data) + // 将信息同步到session和store + if (data.code === 1) { + Ss.putValue(THE_USER_KEY, data.msg) + store.commit(USER_LOCAL_USER_M, data.msg) + return true + } + return false + }) + .catch(err => { + console.log(err) + return false + }) +} diff --git a/express/Campari-vue/app/src/lib/services.js b/express/Campari-vue/app/src/lib/services.js new file mode 100644 index 0000000..0d99707 --- /dev/null +++ b/express/Campari-vue/app/src/lib/services.js @@ -0,0 +1,236 @@ +/** + * Created by 斌 on 2017/3/14. + */ + +import Vue from 'vue' +import config from './config' +// import _ from 'lodash' +import {AJAX_RESPONSE_CODE, AJAX_RESPONSE_RESULT, AJAX_RESPONSE_MSG} from './constant' + +const __get = function (url, params, notDeal) { + return Vue.http.get(url, {params: params}) + .then(response => { + let data = response.body + if (notDeal) { + return Promise.resolve(data) + } + if (+data[AJAX_RESPONSE_CODE] === 1) { + return Promise.resolve(data[AJAX_RESPONSE_RESULT]) + } else { + return Promise.reject(data[AJAX_RESPONSE_MSG]) + } + }, error => { + console.info(error) + return Promise.reject('出错了,请稍后重试') + }) +} +const __post = function (url, data) { + return Vue.http.post(url, data) + .then(response => { + let data = response.body + if (+data[AJAX_RESPONSE_CODE] === 1) { + return Promise.resolve(data[AJAX_RESPONSE_RESULT]) + } else { + return Promise.reject(data[AJAX_RESPONSE_MSG]) + } + }, error => { + console.info(error) + return Promise.reject('出错了,请稍后重试') + }) +} + +export const productAndOrder = { + /** + * 查询我的订单 + * @param params {Object} [flag, orderstatus] + */ + queryOrders (params) { + return __get(config.path + 'selectOrderStatusOdr.action', params) + } +} + +export const user = { + /** + * 登录 + * @param params {object} [phone, password] + */ + signIn (params) { + return __post(config.path + 'user/login', params) + }, + /** + * 获取登录状态 + */ + checkLogin () { + return __get(config.path + 'user/login-status', {}, true) + }, + /** + * 注册 + * @param params {object} [nickname, phone, password] + */ + login (params) { + return __post(config.path + 'user/register', params) + }, + /** + * 获取验证码 + * @param params {object} [phone] + */ + getCode (params) { + return __get(config.path + 'user/get-code', params) + }, + /** + * 忘记密码 + * @param params {object} [phone, _new, _newRepeat] + */ + forget (params) { + return __post(config.path + 'user/forget', params) + }, + logout () { + return __get(config.path + 'user/logout') + }, + /** + * 修改昵称 + * @param params {object} [nickname] + */ + modifyNick (params) { + return __post(config.path + 'user/modify-nick', params) + }, + /** + * 修改密码 + * @param params {object} [old, _new, _newRepeat] + */ + modifyPw (params) { + return __post(config.path + 'user/modify-password', params) + }, + /** + * 修改头像 + * @param params {object} [imgfile(string or base64)] + */ + modifyAvatar (params) { + return __post(config.path + 'user/modify-avatar', params) + }, + /** + * 查询手机号是否注册 + * @param params {object} [phone] + */ + validatePhone (params) { + return __get(config.path + 'user/has-phone', params, true) + } +} + +export const cart = { + /** + * 获取用户购物车 + * @param params {object} [_id] + */ + fetchCart (params) { + return __get(config.path + 'cart', params) + }, + /** + * 向cart中添加商品 + * @param params {object} [sku, _id] + */ + addToCart (params) { + return __post(config.path + 'cart/add', params) + }, + /** + * update cart + * @param params {object} [_id, sku, by || chosen] + */ + updateCart (params) { + return __post(config.path + 'cart/update', params) + }, + /** + * 删除购物车中的商品 + * @param params {object} [_id, sku:[-1, string, [string]]] + * -1,删除全部;string,单个删除;[string],批量删除 + */ + deleteCart (params) { + return __post(config.path + 'cart/delete', params) + }, + /** + * 全选或者全不选 + * @param params {object} [_id, payload] + */ + chooseAllOfCart (params) { + return __post(config.path + 'cart/allChosen', params) + }, + /** + * 全部删除 + * @param params {object} [_id, payload] + */ + deleteAllOfCart (params) { + return __post(config.path + 'cart/allDelete', params) + } +} + +export const address = { + /** + * 查询地址 + * @param params {object} [_id] + * @param id + */ + fetchAddress (params, id = '') { + return __get(config.path + `address/${id}`, params) + }, + /** + * 新增地址 + * @param params {object} [_id, name, nick, label, province, city, detail, isDefault] + */ + addAddress (params) { + return __post(config.path + 'address/0/add', params) + }, + /** + * 删除地址 + * @param params {object} [_id] + * @param id + */ + deleteAddress (params, id) { + return __post(config.path + `address/${id}/delete`, params) + }, + /** + * 更新地址 + * @param params + * @param id {object} [_id, name, nick, label, province, city, detail, isDefault] + */ + updateAddress (params, id) { + return __post(config.path + `address/${id}/update`, params) + }, + /** + * 设置默认地址 + * @param params {object} [_id] + * @param id + */ + setDefaultAdr (params, id) { + return __post(config.path + `address/${id}/set-default`, params) + } +} + +export const order = { + /** + * 下单 + * @param params {object} [_id, sku:[], counts:[]] + */ + placeOrder (params) { + return __post(config.path + 'order/placeOrder', params) + }, + /** + * 查询订单 + * @param params {object} [_id, str: '', -1/xxxx, 0, 1, -2] + */ + checkOrder (params) { + return __get(config.path + `order/${params.str}`, {_id: params._id}) + } +} + +export function query (url, params) { + return Vue.http.get(config.path + url, {params: params}) + .then(data => { + let body = data.body + if (body.code === 1) { + return body.result + } else { + return Promise.reject(body) + } + }) +} + diff --git a/express/Campari-vue/app/src/lib/some-other.js b/express/Campari-vue/app/src/lib/some-other.js new file mode 100644 index 0000000..323bd34 --- /dev/null +++ b/express/Campari-vue/app/src/lib/some-other.js @@ -0,0 +1,46 @@ +/** + * Created by 斌 on 2017/4/30. + */ +import Vue from 'vue' +import VeeValidate from 'vee-validate' +import Velocity from 'velocity-animate' +import '../../static/vendor/velocity.ui' +import messageCn from 'vee-validate/dist/locale/zh_CN' + +Vue.directive('re-render', { + inserted (el, binding) { + setTimeout(function () { + el.style.paddingBottom = binding.value + }, 2000) + } +}) +Vue.directive('shaking', { + update (el, binding) { + let value = binding.value + if (value) { + Velocity(el, { + borderColor: '#ff0000' + }, {duration: 200, queue: false}) + Velocity(el, 'callout.flash', { duration: 500 }) + .then(function () { + Velocity(el, { + borderColor: '#ffffff' + }, {duration: 200}) + }) + } + } +}) +VeeValidate.Validator.extend('phone', { + getMessage (filed, params, data) { + return (data && data.message) || 'phone number is wrong' + }, + validate (value) { + let _reg = /^0?(13[0-9]|15[0-9]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$/ + return _reg.test(value) + } +}) +VeeValidate.Validator.addLocale(messageCn) + +Vue.use(VeeValidate, { + locale: 'zh_CN' +}) diff --git a/express/Campari-vue/app/src/main.js b/express/Campari-vue/app/src/main.js new file mode 100644 index 0000000..10bae10 --- /dev/null +++ b/express/Campari-vue/app/src/main.js @@ -0,0 +1,43 @@ +// The Vue build version to load with the `import` command +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. +import Vue from 'vue' +import FastClick from 'fastclick' +import VueRouter from 'vue-router' +import VueResource from 'vue-resource' +import VeeValidate from 'vee-validate' + +import App from './App' +import {router} from './router/index' +import {currency, formatPhone} from './lib/custom-filter' +import store from './store/index' + +import { ToastPlugin, AlertPlugin, ConfirmPlugin } from 'vux' +import { InfiniteScroll } from 'mint-ui' + +import './lib/some-other' +import 'animate.css' +import 'mint-ui/lib/palette-button/style.css' + +Vue.use(VeeValidate) +Vue.use(VueRouter) +Vue.use(VueResource) + +Vue.use(InfiniteScroll) +Vue.use(ToastPlugin) +Vue.use(AlertPlugin) +Vue.use(ConfirmPlugin) + +Vue.filter('currency', currency) +Vue.filter('phone', formatPhone) + +FastClick.attach(document.body) + +Vue.config.productionTip = false + +/* eslint-disable no-new */ +new Vue({ + router, + store, + render: h => h(App) +}).$mount('#app-box') + diff --git a/express/Campari-vue/app/src/pages/Cart.vue b/express/Campari-vue/app/src/pages/Cart.vue new file mode 100644 index 0000000..879db35 --- /dev/null +++ b/express/Campari-vue/app/src/pages/Cart.vue @@ -0,0 +1,160 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Cocktail.vue b/express/Campari-vue/app/src/pages/Cocktail.vue new file mode 100644 index 0000000..cb682bb --- /dev/null +++ b/express/Campari-vue/app/src/pages/Cocktail.vue @@ -0,0 +1,102 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Detail.vue b/express/Campari-vue/app/src/pages/Detail.vue new file mode 100644 index 0000000..adf91ba --- /dev/null +++ b/express/Campari-vue/app/src/pages/Detail.vue @@ -0,0 +1,375 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Home.vue b/express/Campari-vue/app/src/pages/Home.vue new file mode 100644 index 0000000..e6a6ea6 --- /dev/null +++ b/express/Campari-vue/app/src/pages/Home.vue @@ -0,0 +1,260 @@ + + + + diff --git a/express/Campari-vue/app/src/pages/Login.vue b/express/Campari-vue/app/src/pages/Login.vue new file mode 100644 index 0000000..438d88f --- /dev/null +++ b/express/Campari-vue/app/src/pages/Login.vue @@ -0,0 +1,101 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Order.vue b/express/Campari-vue/app/src/pages/Order.vue new file mode 100644 index 0000000..9850a9f --- /dev/null +++ b/express/Campari-vue/app/src/pages/Order.vue @@ -0,0 +1,457 @@ + + + + diff --git a/express/Campari-vue/app/src/pages/Products.vue b/express/Campari-vue/app/src/pages/Products.vue new file mode 100644 index 0000000..bc52bba --- /dev/null +++ b/express/Campari-vue/app/src/pages/Products.vue @@ -0,0 +1,130 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Products2.vue b/express/Campari-vue/app/src/pages/Products2.vue new file mode 100644 index 0000000..aee092e --- /dev/null +++ b/express/Campari-vue/app/src/pages/Products2.vue @@ -0,0 +1,118 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Register-2.vue b/express/Campari-vue/app/src/pages/Register-2.vue new file mode 100644 index 0000000..61750f3 --- /dev/null +++ b/express/Campari-vue/app/src/pages/Register-2.vue @@ -0,0 +1,101 @@ + + + diff --git a/express/Campari-vue/app/src/pages/Register.vue b/express/Campari-vue/app/src/pages/Register.vue new file mode 100644 index 0000000..109b6f0 --- /dev/null +++ b/express/Campari-vue/app/src/pages/Register.vue @@ -0,0 +1,161 @@ + + + diff --git a/express/Campari-vue/app/src/pages/User.vue b/express/Campari-vue/app/src/pages/User.vue new file mode 100644 index 0000000..27fa37e --- /dev/null +++ b/express/Campari-vue/app/src/pages/User.vue @@ -0,0 +1,186 @@ + + + diff --git a/express/Campari-vue/app/src/pages/address/Address.vue b/express/Campari-vue/app/src/pages/address/Address.vue new file mode 100644 index 0000000..856c20c --- /dev/null +++ b/express/Campari-vue/app/src/pages/address/Address.vue @@ -0,0 +1,207 @@ + + + diff --git a/express/Campari-vue/app/src/pages/address/Edit-address.vue b/express/Campari-vue/app/src/pages/address/Edit-address.vue new file mode 100644 index 0000000..9272c02 --- /dev/null +++ b/express/Campari-vue/app/src/pages/address/Edit-address.vue @@ -0,0 +1,333 @@ + + + + diff --git a/express/Campari-vue/app/src/pages/order/My-order.vue b/express/Campari-vue/app/src/pages/order/My-order.vue new file mode 100644 index 0000000..c6ce6ab --- /dev/null +++ b/express/Campari-vue/app/src/pages/order/My-order.vue @@ -0,0 +1,105 @@ + + + diff --git a/express/Campari-vue/app/src/pages/order/Order-detail.vue b/express/Campari-vue/app/src/pages/order/Order-detail.vue new file mode 100644 index 0000000..0acb246 --- /dev/null +++ b/express/Campari-vue/app/src/pages/order/Order-detail.vue @@ -0,0 +1,258 @@ + + + diff --git a/express/Campari-vue/app/src/pages/order/Order-list.vue b/express/Campari-vue/app/src/pages/order/Order-list.vue new file mode 100644 index 0000000..c69a542 --- /dev/null +++ b/express/Campari-vue/app/src/pages/order/Order-list.vue @@ -0,0 +1,49 @@ + + + diff --git a/express/Campari-vue/app/src/pages/safe/Forget.vue b/express/Campari-vue/app/src/pages/safe/Forget.vue new file mode 100644 index 0000000..a6909dc --- /dev/null +++ b/express/Campari-vue/app/src/pages/safe/Forget.vue @@ -0,0 +1,280 @@ + + + + diff --git a/express/Campari-vue/app/src/pages/safe/Modify-password.vue b/express/Campari-vue/app/src/pages/safe/Modify-password.vue new file mode 100644 index 0000000..7743ce6 --- /dev/null +++ b/express/Campari-vue/app/src/pages/safe/Modify-password.vue @@ -0,0 +1,130 @@ + + + + diff --git a/express/Campari-vue/app/src/pages/safe/Safe.vue b/express/Campari-vue/app/src/pages/safe/Safe.vue new file mode 100644 index 0000000..9e59c80 --- /dev/null +++ b/express/Campari-vue/app/src/pages/safe/Safe.vue @@ -0,0 +1,78 @@ + + + diff --git a/express/Campari-vue/app/src/router/index.js b/express/Campari-vue/app/src/router/index.js new file mode 100644 index 0000000..0116478 --- /dev/null +++ b/express/Campari-vue/app/src/router/index.js @@ -0,0 +1,74 @@ +import Vue from 'vue' +import Router from 'vue-router' +// import Hello from '@/components/Hello' +// import Layout from '@/layout/Layout' +import Home from '@/pages/Home' +import {UPDATE_LOADING_STATUS, DESTINATION, USER_CHECK_LOGIN_A} from '../lib/constant' +import store from '../store/index' + +Vue.use(Router) + +let router = new Router({ + mode: 'history', + routes: [ + { path: '', name: 'index', component: Home }, + { path: '/home', name: 'home', component: Home }, + { path: '/products', name: 'products', component () { return System.import('@/pages/Products') } }, + { path: '/products2', name: 'products2', component () { return System.import('@/pages/Products2') } }, + { path: '/cocktail', name: 'cocktail', component () { return System.import('@/pages/Cocktail') } }, + { path: '/cart', name: 'cart', component () { return System.import('@/pages/Cart.vue') } }, + { path: '/order/list', name: 'order-list', component () { return System.import('@/pages/order/Order-list') } }, + { path: '/order/my-order', name: 'my-order', component () { return System.import('@/pages/order/My-order') } }, + { path: '/order/detail/:on', name: 'order-detail', component () { return System.import('@/pages/order/Order-detail') } }, + { path: '/order/:from?', name: 'order', component () { return System.import('@/pages/Order.vue') } }, + { path: '/detail/:sku', name: 'detail', component () { return System.import('@/pages/Detail') } }, + { path: '/login', name: 'login', component () { return System.import('@/pages/Login') } }, + { path: '/register', name: 'register', component () { return System.import('@/pages/Register') } }, + { path: '/register2', name: 'register2', component () { return System.import('@/pages/Register-2') } }, + { path: '/user', name: 'user', component () { return System.import('@/pages/User') } }, + { path: '/safe', name: 'safe', component () { return System.import('@/pages/safe/Safe') } }, + { path: '/safe/modify-password', name: 'mp', component () { return System.import('@/pages/safe/Modify-password') } }, + { path: '/safe/forget', name: 'forget', component () { return System.import('@/pages/safe/Forget') } }, + { path: '/address', name: 'address', component () { return System.import('@/pages/address/Address') } }, + { path: '/address/edit/:index?', name: 'edit-adr', component () { return System.import('@/pages/address/Edit-address') } } + ] +}) + +const needLoginPage = [ + 'user', + 'cart', + 'safe', + 'mp', + 'address', + 'edit-adr', + 'order', + 'my-order', + 'order-detail' +] + +router.beforeEach((to, from, next) => { + store.commit(UPDATE_LOADING_STATUS, {isLoading: true}) + console.log(to.name) + if (needLoginPage.indexOf(to.name) > -1) { + store.dispatch(USER_CHECK_LOGIN_A) + .then(auto => { + if (!auto) { + store.commit(DESTINATION, {name: to.name}) + next({name: 'login'}) + return + } + next() + }) + .catch(() => { + store.commit(DESTINATION, {name: to.name}) + next({name: 'login'}) + }) + return + } + next() +}) +router.afterEach((to, from, next) => { + store.commit(UPDATE_LOADING_STATUS, {isLoading: false}) +}) + +export {router} diff --git a/express/Campari-vue/app/src/store/index.js b/express/Campari-vue/app/src/store/index.js new file mode 100644 index 0000000..a578aca --- /dev/null +++ b/express/Campari-vue/app/src/store/index.js @@ -0,0 +1,23 @@ +/** + * Created by 斌 on 2017/4/19. + */ +import Vue from 'vue' +import Vuex from 'vuex' + +import loading from './modules/loading' +import user from './modules/user' +import cart from './modules/cart' +import address from './modules/address' +import order from './modules/order' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + loading, + user, + cart, + address, + order + } +}) diff --git a/express/Campari-vue/app/src/store/modules/address.js b/express/Campari-vue/app/src/store/modules/address.js new file mode 100644 index 0000000..cbf891a --- /dev/null +++ b/express/Campari-vue/app/src/store/modules/address.js @@ -0,0 +1,103 @@ +/** + * Created by 斌 on 2017/5/7. + */ +import * as type from '../../lib/constant' +import { address } from '../../lib/services' +import _ from 'lodash' + +function setDefault (adrs, index) { + _.forEach(adrs, adr => { + adr.isDefault = false + }) + adrs[index].isDefault = true +} +export default { + state: { + ADRS: [], + chosenAdr: null + }, + mutations: { + [type.ADR_SET_ADRS_M] (state, payload) { + state.ADRS = payload + }, + [type.ADR_UPDATE_ADRS] (state, payload) { + switch (payload.method.toUpperCase()) { + case 'ADD': + state.ADRS.push(payload.adr) + if (payload.adr.isDefault) { + setDefault(state.ADRS, state.ADRS.length - 1) + } + break + case 'UPDATE': + state.ADRS[payload.index] = payload.adr + if (payload.adr.isDefault) { + setDefault(state.ADRS, payload.index) + } + break + case 'DELETE': + state.ADRS.splice(payload.index, 1) + break + case 'DEFAULT': + setDefault(state.ADRS, payload.index) + break + } + }, + [type.ADR_SET_CHOSEN_ADDRESS] (state, payload) { + state.chosenAdr = state.ADRS[payload.index] + } + }, + actions: { + [type.ADR_FETCH_ADDRESSES_A] (context, payload) { + return address.fetchAddress(payload) + .then(data => { + if (!data || !data.length) { + data = [{id: 1}, {id: 2}, {id: 3}, {id: 4}] + } + context.commit(type.ADR_SET_ADRS_M, data) + return true + }) + }, + [type.ADR_ADD_ADDRESS_A] (context, payload) { + return address.addAddress(payload) + .then(() => { + context.commit(type.ADR_UPDATE_ADRS, {adr: payload, method: 'add'}) + return true + }) + }, + [type.ADR_DELETE_ADDRESS_A] (context, payload) { + return address.deleteAddress({_id: payload._id}, payload.id) + .then(() => { + context.commit(type.ADR_UPDATE_ADRS, {method: 'delete', index: payload.index}) + return true + }) + }, + [type.ADR_UPDATE_ADDRESS_A] (context, payload) { + return address.updateAddress(payload.params, payload.params._id) + .then(() => { + context.commit(type.ADR_UPDATE_ADRS, {method: 'update', index: payload.index, adr: payload.params}) + return true + }) + }, + [type.ADR_SET_DEFAULT_ADDRESS_A] (context, payload) { + return address.setDefaultAdr(payload, payload.id) + .then(() => { + context.commit(type.ADR_UPDATE_ADRS, {method: 'default', index: payload.index}) + return true + }) + } + }, + getters: { + [type.ADR_CHOSEN_ADDRESS_G] (state) { + if (state.chosenAdr) return state.chosenAdr + let adr = _.filter(state.ADRS, {isDefault: true})[0] + if (adr) { + state.chosenAdr = adr + return adr + } + if (state.ADRS.length) { + state.chosenAdr = state.ADRS[0] + return state.chosenAdr + } + } + } +} diff --git a/express/Campari-vue/app/src/store/modules/cart.js b/express/Campari-vue/app/src/store/modules/cart.js new file mode 100644 index 0000000..b97e2c5 --- /dev/null +++ b/express/Campari-vue/app/src/store/modules/cart.js @@ -0,0 +1,159 @@ +/** + * Created by 斌 on 2017/5/5. + */ +import * as type from '../../lib/constant' +import { cart } from '../../lib/services' +import _ from 'lodash' + +export default { + state: { + cart: [], + // 数据库的原因,导致查询cart返回的其实只有商品的sku,count,chosen三个数据,其他的商品信息需要再去查询product表, + // 而再向cart中添加商品的时候,会不不知道时添加商品还是增加商品的情况,导致前台不方便更新store的cart数据。 + // 因而增加needUpdate变量,当向cart中添加商品成功后,将needUpdate设为true。并在下次强制从server fetch cart, + // fetch之后再将值设置为false + needUpdate: false, + // 立即购买 + buyNow: {} + }, + mutations: { + [type.CART_SET_CART_M] (state, cart) { + state.cart = cart + }, + [type.CART_UPDATE_CART] (state, payload) { + if (_.isNumber(payload)) { + state.cart.splice(payload, 1) + return + } + let updator = state.cart[payload.index] + if (payload.by !== undefined) { + updator.count += payload.by + } else { + updator.chosen = payload.chosen + } + }, + [type.CART_NEED_UPDATE_M] (state, update) { + state.needUpdate = update + }, + [type.CART_CHOOSE_ALL] (state, payload) { + _.forEach(state.cart, item => { + item.chosen = payload + }) + }, + [type.CART_DELETE_ALL] (state) { + state.cart = [] + }, + [type.CART_ADD_BUY_NOW] (state, payload) { + state.buyNow = payload + }, + [type.CART_UPDATE_BUY_NOW] (state, payload) { + state.buyNow = _.assign(state.buyNow, {count: payload}) + } + }, + actions: { + // 获取购物车 + [type.CART_FETCH_CART_A] (context, params) { + // 获取购物车数据 + return cart.fetchCart(params) + .then(data => { + console.log(data) + if (!data.length) { + data = [{id: 1}, {id: 2}] + } + context.commit(type.CART_SET_CART_M, data) + // fetched cart,将needUpdate设置为false + context.commit(type.CART_NEED_UPDATE_M, false) + return true + }) + .catch(err => { + console.log(err) + return err + }) + }, + // 向购物车中添加商品 + [type.CART_ADD_ITEM_A] (context, params) { + // 加入购物车 + return cart.addToCart(params) + .then(data => { + context.commit(type.CART_NEED_UPDATE_M, true) + return true + }) + .catch(err => { + console.log(err) + return false + }) + }, + // 修改cart中商品的选中状态 + [type.CART_CHOOSE_A] (context, params) { + cart.updateCart(params.item) + .then(() => { + context.commit(type.CART_UPDATE_CART, {index: params.index, chosen: !!params.item.chosen}) + return true + }) + .catch(err => { + console.log(err) + }) + }, + // 修改cart中商品的数量 + [type.CART_EDIT_COUNT_A] (context, params) { + cart.updateCart(params.item) + .then(() => { + context.commit(type.CART_UPDATE_CART, {index: params.index, by: +params.item.by}) + }) + .catch(err => { + console.log(err) + }) + }, + // 删除购物车中的商品 + [type.CART_DELETE_ITEM_A] (context, params) { + cart.deleteCart(params.item) + .then(() => { + if (params.lazy) { + context.commit(type.CART_NEED_UPDATE_M, true) + return + } + context.commit(type.CART_UPDATE_CART, +params.index) + }) + .catch(err => { + console.log(err) + }) + }, + // 废弃 + [type.CART_DELETE_ALL_A] (context, params) { + cart.deleteAllOfCart(params) + .then(() => { + context.commit(type.CART_DELETE_ALL) + }) + .catch(err => { + console.log(err) + }) + }, + [type.CART_CHOOSE_ALL_A] (context, params) { + cart.chooseAllOfCart(params) + .then(() => { + context.commit(type.CART_CHOOSE_ALL, params.payload) + }) + .catch(err => { + console.log(err) + }) + } + }, + getters: { + // chosen pro + [type.CART_ALL_CHOSEN] (state) { + return state.cart.filter(item => item.chosen) + }, + [type.CART_THE_MONEY] (state, getters) { + let _chosen = getters[type.CART_ALL_CHOSEN] + if (!_chosen.length) return 0 + let _money = 0 + _.forEach(_chosen, item => { + _money += item.price * item.count + }) + return _money + }, + [type.CART_IS_ALL_CHOSEN] (state, getters) { + return (state.cart.length === getters[type.CART_ALL_CHOSEN].length) && state.cart.length > 0 + } + } +} diff --git a/express/Campari-vue/app/src/store/modules/loading.js b/express/Campari-vue/app/src/store/modules/loading.js new file mode 100644 index 0000000..52d76c6 --- /dev/null +++ b/express/Campari-vue/app/src/store/modules/loading.js @@ -0,0 +1,42 @@ +/** + * Created by 斌 on 2017/4/19. + */ +import {UPDATE_LOADING_STATUS, SHOW_TOAST, HIDE_TOAST, DESTINATION, TEMP_HIDING} from '../../lib/constant' +import _ from 'lodash' + +export default { + state: { + isLoading: false, + toast: { + value: false, + time: 1000, + width: '80%', + type: 'text', + position: 'default', + text: '' + }, + destination: {}, + tempHiding: false + }, + mutations: { + [UPDATE_LOADING_STATUS] (state, payload) { + state.isLoading = payload.isLoading + }, + [SHOW_TOAST] (state, payload) { + if (_.isString(payload)) { + state.toast = _.assign(state.toast, {value: true, text: payload}) + } else { + state.toast = _.assign(state.toast, payload, {value: true}) + } + }, + [HIDE_TOAST] (state) { + state.toast.value = false + }, + [DESTINATION] (state, destination) { + state.destination = destination + }, + [TEMP_HIDING] (state, payload) { + state.tempHiding = payload + } + } +} diff --git a/express/Campari-vue/app/src/store/modules/order.js b/express/Campari-vue/app/src/store/modules/order.js new file mode 100644 index 0000000..6b9cf67 --- /dev/null +++ b/express/Campari-vue/app/src/store/modules/order.js @@ -0,0 +1,35 @@ +/** + * Created by 斌 on 2017/5/21. + */ +import { order } from '../../lib/services' +import * as type from '../../lib/constant' +// import _ from 'lodash' + +export default { + state: { + }, + actions: { + [type.PLACE_ORDER_A] (context, payload) { + return order.placeOrder(payload.orders) + .then(data => { + console.log(data) + if (payload.from) return + let orders = payload.orders + console.log(payload) + let sku = null + payload.isAll && (sku = -1) + orders.sku.length === 1 && (sku = orders.sku[0].sku) + if (orders.sku.length > 1) { + sku = orders.sku + } + context.dispatch(type.CART_DELETE_ITEM_A, { + item: { + _id: payload._id, + sku + }, + lazy: true + }) + }) + } + } +} diff --git a/express/Campari-vue/app/src/store/modules/user.js b/express/Campari-vue/app/src/store/modules/user.js new file mode 100644 index 0000000..d4ce32e --- /dev/null +++ b/express/Campari-vue/app/src/store/modules/user.js @@ -0,0 +1,115 @@ +/** + * Created by 斌 on 2017/5/1. + */ +import * as type from '../../lib/constant' +import { Ls, Ss } from '../../lib/common-tools' +import { user } from '../../lib/services' +import _ from 'lodash' + +const key = type.THE_USER_KEY +export default { + state: { + user: {}, + loginTemData: { + phone: '', + code: '' + } + }, + mutations: { + [type.USER_LOCAL_USER_M] (state, user) { + state.user = user + }, + [type.USER_SET_USER_M] (state, user) { + state.user = _.assign(state.user, user) + }, + [type.USER_MODIFY_AVATAR_M] (state, avatar) { + state.user.avatar = avatar + state.user.imgname = avatar + Ls.putValue(key, state.user) + }, + [type.USER_SAVE_PHONE_CODE_M] (state, data) { + state.loginTemData = data + }, + [type.USER_DELETE_PHONE_CODE_M] (state) { + state.loginTemData = {} + } + }, + actions: { + [type.USER_LOCAL_USER_A] (context) { + context.commit(type.USER_LOCAL_USER_M) + if (context.state.user) { + // context.commit(type.CART_FETCH_CART) + // context.commit(type.ADR_FETCH_ADDRESSES) + } + }, + [type.USER_SET_USER_A] (context, user) { + context.commit(type.USER_SET_USER_M, user) + // context.commit(type.CART_FETCH_CART) + // context.commit(type.ADR_FETCH_ADDRESSES) + }, + // 检测登录 + [type.USER_CHECK_LOGIN_A] (context) { + if (context.state.user && context.state.user.phone) { + return Promise.resolve(true) + } + let _user = Ss.getValue(key) + if (_user && _user.phone) { + context.commit(type.USER_LOCAL_USER_M, _user) + return Promise.resolve(true) + } + return user.checkLogin() + .then(data => { + if (data.code === 1) { + Ss.putValue(key, data.result) + context.commit(type.USER_LOCAL_USER_M, data.result) + return true + } + throw new Error(data.msg) + }) + }, + // 退出登录 + [type.USER_LOGOUT_A] (context) { + // 除去token (cookie) + user.logout() + // 清除session + Ss.remove(key) + // 清除store + context.commit(type.USER_LOCAL_USER_M, {}) + }, + [type.USER_MODIFY_NICK_A] (context, modify) { + return user.modifyNick(modify) + .then(data => { + // 修改成功 + // 更新session和store + context.commit(type.USER_SET_USER_A, modify) + console.log(context.state.user) + Ss.putValue(key, context.state.user) + console.log('xxx') + return true + }) + .catch(err => { + console.log(err) + // 修改失败 + return false + }) + }, + [type.USER_MODIFY_AVATAR_A] (context, modify) { + return user.modifyAvatar(modify) + .then(data => { + // 修改成功 + // 更新session和store + context.commit(type.USER_SET_USER_A, {avatar: data + '?' + Math.random()}) + Ss.putValue(key, context.state.user) + return true + }) + .catch(err => { + return err + }) + } + }, + getters: { + [type.USER_INFO] (state) { + return state.user + } + } +} diff --git a/express/Campari-vue/app/src/styles/_theme.scss b/express/Campari-vue/app/src/styles/_theme.scss new file mode 100644 index 0000000..a304f23 --- /dev/null +++ b/express/Campari-vue/app/src/styles/_theme.scss @@ -0,0 +1,7 @@ +$font-size: 1rem; +$common-red-color: #e41035; +$price-gray-color: #b6b6b6; +$border-gray-color: #d8d8d8; +$light-border-color: #EEEEEE; +$backgroud-color: #f6f6f6; +$common-blue-color: #71CBEA; diff --git a/express/Campari-vue/app/src/styles/base.scss b/express/Campari-vue/app/src/styles/base.scss new file mode 100644 index 0000000..9688814 --- /dev/null +++ b/express/Campari-vue/app/src/styles/base.scss @@ -0,0 +1,110 @@ +@import "_theme"; +html, +body { + font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",Arial,sans-serif; + -webkit-font-smoothing:antialiased; + -moz-osx-font-smoothing:grayscale +} +.wrapper { + width:100%; + height:100%; + position: relative; + background-color: #fff; +} +.hide-scroll-bar { + padding-right:20px; + width:100%; + overflow-x: hidden; + overflow-y: scroll; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* fallback */ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: local('Material Icons'), local('MaterialIcons-Regular'), url(https://fonts.gstatic.com/s/materialicons/v22/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-feature-settings: 'liga'; + -webkit-font-smoothing: antialiased; +} + + +//login & register form +.login-box { + width: 90%; + position: absolute; + bottom:4%; + left:0; + right:0; + margin:auto; + background-color: rgba(0, 0, 0, .5); + border-radius: .5rem; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding:.8rem; + .form-group { + width: 100%; + display: flex; + padding: .8rem 0; + align-items:center; + justify-content:space-between; + border-bottom: 2px solid #ffffff; + flex: 1 1 auto; + label { + flex: 0 0 30%; + font-size: 1.2rem; + color: #ffffff; + } + input { + width: 60%; + height: 2.4rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + font-size: 1rem; + border:1px solid #ffffff; + background-color: transparent; + color: #ffffff; + border-radius: .3rem; + padding-left: 1rem; + } + } + .login-btn { + width: 100%; + display: block; + text-align: center; + color: #ffffff; + background-color: $common-red-color; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding:1rem; + border-radius: .3rem; + margin-top: 2rem; + font-size: 1rem; + } +} +.weui-dialog__btn_primary { + color: rgb(38, 162, 255) !important; +} +.weui-cell { + padding:12px 15px !important; +} diff --git a/express/Campari-vue/app/src/styles/reset.css b/express/Campari-vue/app/src/styles/reset.css new file mode 100644 index 0000000..32f6a47 --- /dev/null +++ b/express/Campari-vue/app/src/styles/reset.css @@ -0,0 +1,66 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1 !important; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +a { + display: block; + text-decoration: none; +} +img { + width: 100%; +} + +html { + touch-action: none; + -webkit-overflow-scrolling : touch; + color: #444; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} diff --git a/express/Campari-vue/app/src/styles/theme.less b/express/Campari-vue/app/src/styles/theme.less new file mode 100644 index 0000000..66ae58c --- /dev/null +++ b/express/Campari-vue/app/src/styles/theme.less @@ -0,0 +1,28 @@ +@yellow: #ffe26d; +@button-tab-border-color: #ccc; +@button-tab-active-background-color: @yellow; +@button-tab-active-font-color: #000; + +@switch-checked-bg-color: @yellow; +@switch-checked-border-color: @yellow; + +@number-button-font-color: #FF9900; +@number-round-button-enabled-border-color: #FF9900; + +@swiper-indicator-active-color: #FF9900; + +@checklist-icon-active-color: #FF9900; + +@tab-text-active-color: #FF9900; +@tab-bar-active-color: #FF9900; + +@dialog-button-text-primary-color: #FF9900; + +@form-preview-button-primary-color: #FF9900; + +@tabbar-text-active-color: #e41035; + +@toast-position-top-offset: 56px; +@toast-position-bottom-offset: 60px; + +@search-cancel-font-color: #FF9900; diff --git a/express/Campari-vue/app/static/.gitkeep b/express/Campari-vue/app/static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/express/Campari-vue/app/static/vendor/swiper.min.css b/express/Campari-vue/app/static/vendor/swiper.min.css new file mode 100644 index 0000000..b7d8cc7 --- /dev/null +++ b/express/Campari-vue/app/static/vendor/swiper.min.css @@ -0,0 +1,15 @@ +/** + * Swiper 3.1.2 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2015, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: August 22, 2015 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:300ms;-moz-transition:300ms;-o-transition:300ms;transition:300ms;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination{bottom:10px;left:0;width:100%}.swiper-container-horizontal>.swiper-pagination .swiper-pagination-bullet{margin:0 5px}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;width:100%;height:100%;z-index:1}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}} \ No newline at end of file diff --git a/express/Campari-vue/app/static/vendor/swiper.min.js b/express/Campari-vue/app/static/vendor/swiper.min.js new file mode 100644 index 0000000..b73d554 --- /dev/null +++ b/express/Campari-vue/app/static/vendor/swiper.min.js @@ -0,0 +1,18 @@ +/** + * Swiper 3.1.2 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/swiper/ + * + * Copyright 2015, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under MIT + * + * Released on: August 22, 2015 + */ +!function(){"use strict";function e(e){e.fn.swiper=function(a){var r;return e(this).each(function(){var e=new t(this,a);r||(r=e)}),r}}var a,t=function(e,s){function i(){return"horizontal"===w.params.direction}function n(e){return Math.floor(e)}function o(){w.autoplayTimeoutId=setTimeout(function(){w.params.loop?(w.fixLoop(),w._slideNext()):w.isEnd?s.autoplayStopOnLast?w.stopAutoplay():w._slideTo(0):w._slideNext()},w.params.autoplay)}function l(e,t){var r=a(e.target);if(!r.is(t))if("string"==typeof t)r=r.parents(t);else if(t.nodeType){var s;return r.parents().each(function(e,a){a===t&&(s=t)}),s?t:void 0}return 0===r.length?void 0:r[0]}function d(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,r=new t(function(e){e.forEach(function(e){w.onResize(!0),w.emit("onObserverUpdate",w,e)})});r.observe(e,{attributes:"undefined"==typeof a.attributes?!0:a.attributes,childList:"undefined"==typeof a.childList?!0:a.childList,characterData:"undefined"==typeof a.characterData?!0:a.characterData}),w.observers.push(r)}function p(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!w.params.allowSwipeToNext&&(i()&&39===a||!i()&&40===a))return!1;if(!w.params.allowSwipeToPrev&&(i()&&37===a||!i()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(w.container.parents(".swiper-slide").length>0&&0===w.container.parents(".swiper-slide-active").length)return;var r={left:window.pageXOffset,top:window.pageYOffset},s=window.innerWidth,n=window.innerHeight,o=w.container.offset();w.rtl&&(o.left=o.left-w.container[0].scrollLeft);for(var l=[[o.left,o.top],[o.left+w.width,o.top],[o.left,o.top+w.height],[o.left+w.width,o.top+w.height]],d=0;d=r.left&&p[0]<=r.left+s&&p[1]>=r.top&&p[1]<=r.top+n&&(t=!0)}if(!t)return}i()?((37===a||39===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!w.rtl||37===a&&w.rtl)&&w.slideNext(),(37===a&&!w.rtl||39===a&&w.rtl)&&w.slidePrev()):((38===a||40===a)&&(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&w.slideNext(),38===a&&w.slidePrev())}}function u(e){e.originalEvent&&(e=e.originalEvent);var a=w.mousewheel.event,t=0;if(e.detail)t=-e.detail;else if("mousewheel"===a)if(w.params.mousewheelForceToAxis)if(i()){if(!(Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY)))return;t=e.wheelDeltaX}else{if(!(Math.abs(e.wheelDeltaY)>Math.abs(e.wheelDeltaX)))return;t=e.wheelDeltaY}else t=e.wheelDelta;else if("DOMMouseScroll"===a)t=-e.detail;else if("wheel"===a)if(w.params.mousewheelForceToAxis)if(i()){if(!(Math.abs(e.deltaX)>Math.abs(e.deltaY)))return;t=-e.deltaX}else{if(!(Math.abs(e.deltaY)>Math.abs(e.deltaX)))return;t=-e.deltaY}else t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?-e.deltaX:-e.deltaY;if(w.params.mousewheelInvert&&(t=-t),w.params.freeMode){var r=w.getWrapperTranslate()+t*w.params.mousewheelSensitivity;if(r>0&&(r=0),r60)if(0>t)if(w.isEnd&&!w.params.loop||w.animating){if(w.params.mousewheelReleaseOnEdges)return!0}else w.slideNext();else if(w.isBeginning&&!w.params.loop||w.animating){if(w.params.mousewheelReleaseOnEdges)return!0}else w.slidePrev();w.mousewheel.lastScrollTime=(new window.Date).getTime()}return w.params.autoplay&&w.stopAutoplay(),e.preventDefault?e.preventDefault():e.returnValue=!1,!1}function c(e,t){e=a(e);var r,s,n;r=e.attr("data-swiper-parallax")||"0",s=e.attr("data-swiper-parallax-x"),n=e.attr("data-swiper-parallax-y"),s||n?(s=s||"0",n=n||"0"):i()?(s=r,n="0"):(n=r,s="0"),s=s.indexOf("%")>=0?parseInt(s,10)*t+"%":s*t+"px",n=n.indexOf("%")>=0?parseInt(n,10)*t+"%":n*t+"px",e.transform("translate3d("+s+", "+n+",0px)")}function m(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof t))return new t(e,s);var f={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeSticky:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,scrollbar:null,scrollbarHide:!0,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,hashnav:!1,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationHiddenClass:"swiper-pagination-hidden",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},h=s&&s.virtualTranslate;s=s||{};for(var g in f)if("undefined"==typeof s[g])s[g]=f[g];else if("object"==typeof s[g])for(var v in f[g])"undefined"==typeof s[g][v]&&(s[g][v]=f[g][v]);var w=this;if(w.version="3.1.0",w.params=s,w.classNames=[],"undefined"!=typeof a&&"undefined"!=typeof r&&(a=r),("undefined"!=typeof a||(a="undefined"==typeof r?window.Dom7||window.Zepto||window.jQuery:r))&&(w.$=a,w.container=a(e),0!==w.container.length)){if(w.container.length>1)return void w.container.each(function(){new t(this,s)});w.container[0].swiper=w,w.container.data("swiper",w),w.classNames.push("swiper-container-"+w.params.direction),w.params.freeMode&&w.classNames.push("swiper-container-free-mode"),w.support.flexbox||(w.classNames.push("swiper-container-no-flexbox"),w.params.slidesPerColumn=1),(w.params.parallax||w.params.watchSlidesVisibility)&&(w.params.watchSlidesProgress=!0),["cube","coverflow"].indexOf(w.params.effect)>=0&&(w.support.transforms3d?(w.params.watchSlidesProgress=!0,w.classNames.push("swiper-container-3d")):w.params.effect="slide"),"slide"!==w.params.effect&&w.classNames.push("swiper-container-"+w.params.effect),"cube"===w.params.effect&&(w.params.resistanceRatio=0,w.params.slidesPerView=1,w.params.slidesPerColumn=1,w.params.slidesPerGroup=1,w.params.centeredSlides=!1,w.params.spaceBetween=0,w.params.virtualTranslate=!0,w.params.setWrapperSize=!1),"fade"===w.params.effect&&(w.params.slidesPerView=1,w.params.slidesPerColumn=1,w.params.slidesPerGroup=1,w.params.watchSlidesProgress=!0,w.params.spaceBetween=0,"undefined"==typeof h&&(w.params.virtualTranslate=!0)),w.params.grabCursor&&w.support.touch&&(w.params.grabCursor=!1),w.wrapper=w.container.children("."+w.params.wrapperClass),w.params.pagination&&(w.paginationContainer=a(w.params.pagination),w.params.paginationClickable&&w.paginationContainer.addClass("swiper-pagination-clickable")),w.rtl=i()&&("rtl"===w.container[0].dir.toLowerCase()||"rtl"===w.container.css("direction")),w.rtl&&w.classNames.push("swiper-container-rtl"),w.rtl&&(w.wrongRTL="-webkit-box"===w.wrapper.css("display")),w.params.slidesPerColumn>1&&w.classNames.push("swiper-container-multirow"),w.device.android&&w.classNames.push("swiper-container-android"),w.container.addClass(w.classNames.join(" ")),w.translate=0,w.progress=0,w.velocity=0,w.lockSwipeToNext=function(){w.params.allowSwipeToNext=!1},w.lockSwipeToPrev=function(){w.params.allowSwipeToPrev=!1},w.lockSwipes=function(){w.params.allowSwipeToNext=w.params.allowSwipeToPrev=!1},w.unlockSwipeToNext=function(){w.params.allowSwipeToNext=!0},w.unlockSwipeToPrev=function(){w.params.allowSwipeToPrev=!0},w.unlockSwipes=function(){w.params.allowSwipeToNext=w.params.allowSwipeToPrev=!0},w.params.grabCursor&&(w.container[0].style.cursor="move",w.container[0].style.cursor="-webkit-grab",w.container[0].style.cursor="-moz-grab",w.container[0].style.cursor="grab"),w.imagesToLoad=[],w.imagesLoaded=0,w.loadImage=function(e,a,t,r){function s(){r&&r()}var i;e.complete&&t?s():a?(i=new window.Image,i.onload=s,i.onerror=s,i.src=a):s()},w.preloadImages=function(){function e(){"undefined"!=typeof w&&null!==w&&(void 0!==w.imagesLoaded&&w.imagesLoaded++,w.imagesLoaded===w.imagesToLoad.length&&(w.params.updateOnImagesReady&&w.update(),w.emit("onImagesReady",w)))}w.imagesToLoad=w.container.find("img");for(var a=0;a=0&&(a=parseFloat(a.replace("%",""))/100*w.size),w.virtualSize=-a,w.slides.css(w.rtl?{marginLeft:"",marginTop:""}:{marginRight:"",marginBottom:""});var o;w.params.slidesPerColumn>1&&(o=Math.floor(w.slides.length/w.params.slidesPerColumn)===w.slides.length/w.params.slidesPerColumn?w.slides.length:Math.ceil(w.slides.length/w.params.slidesPerColumn)*w.params.slidesPerColumn);var l,d=w.params.slidesPerColumn,p=o/d,u=p-(w.params.slidesPerColumn*p-w.slides.length);for(e=0;e1){var m,f,h;"column"===w.params.slidesPerColumnFill?(f=Math.floor(e/d),h=e-f*d,(f>u||f===u&&h===d-1)&&++h>=d&&(h=0,f++),m=f+h*o/d,c.css({"-webkit-box-ordinal-group":m,"-moz-box-ordinal-group":m,"-ms-flex-order":m,"-webkit-order":m,order:m})):(h=Math.floor(e/p),f=e-h*p),c.css({"margin-top":0!==h&&w.params.spaceBetween&&w.params.spaceBetween+"px"}).attr("data-swiper-column",f).attr("data-swiper-row",h)}"none"!==c.css("display")&&("auto"===w.params.slidesPerView?(l=i()?c.outerWidth(!0):c.outerHeight(!0),w.params.roundLengths&&(l=n(l))):(l=(w.size-(w.params.slidesPerView-1)*a)/w.params.slidesPerView,w.params.roundLengths&&(l=n(l)),i()?w.slides[e].style.width=l+"px":w.slides[e].style.height=l+"px"),w.slides[e].swiperSlideSize=l,w.slidesSizesGrid.push(l),w.params.centeredSlides?(t=t+l/2+r/2+a,0===e&&(t=t-w.size/2-a),Math.abs(t)<.001&&(t=0),s%w.params.slidesPerGroup===0&&w.snapGrid.push(t),w.slidesGrid.push(t)):(s%w.params.slidesPerGroup===0&&w.snapGrid.push(t),w.slidesGrid.push(t),t=t+l+a),w.virtualSize+=l+a,r=l,s++)}w.virtualSize=Math.max(w.virtualSize,w.size)+w.params.slidesOffsetAfter;var g;if(w.rtl&&w.wrongRTL&&("slide"===w.params.effect||"coverflow"===w.params.effect)&&w.wrapper.css({width:w.virtualSize+w.params.spaceBetween+"px"}),(!w.support.flexbox||w.params.setWrapperSize)&&w.wrapper.css(i()?{width:w.virtualSize+w.params.spaceBetween+"px"}:{height:w.virtualSize+w.params.spaceBetween+"px"}),w.params.slidesPerColumn>1&&(w.virtualSize=(l+w.params.spaceBetween)*o,w.virtualSize=Math.ceil(w.virtualSize/w.params.slidesPerColumn)-w.params.spaceBetween,w.wrapper.css({width:w.virtualSize+w.params.spaceBetween+"px"}),w.params.centeredSlides)){for(g=[],e=0;eMath.floor(w.snapGrid[w.snapGrid.length-1])&&w.snapGrid.push(w.virtualSize-w.size)}0===w.snapGrid.length&&(w.snapGrid=[0]),0!==w.params.spaceBetween&&w.slides.css(i()?w.rtl?{marginLeft:a+"px"}:{marginRight:a+"px"}:{marginBottom:a+"px"}),w.params.watchSlidesProgress&&w.updateSlidesOffset()},w.updateSlidesOffset=function(){for(var e=0;e=0&&n0&&o<=w.size||0>=n&&o>=w.size;l&&w.slides.eq(t).addClass(w.params.slideVisibleClass)}r.progress=w.rtl?-s:s}}},w.updateProgress=function(e){"undefined"==typeof e&&(e=w.translate||0);var a=w.maxTranslate()-w.minTranslate();0===a?(w.progress=0,w.isBeginning=w.isEnd=!0):(w.progress=(e-w.minTranslate())/a,w.isBeginning=w.progress<=0,w.isEnd=w.progress>=1),w.isBeginning&&w.emit("onReachBeginning",w),w.isEnd&&w.emit("onReachEnd",w),w.params.watchSlidesProgress&&w.updateSlidesProgress(e),w.emit("onProgress",w,w.progress)},w.updateActiveIndex=function(){var e,a,t,r=w.rtl?w.translate:-w.translate;for(a=0;a=w.slidesGrid[a]&&r=w.slidesGrid[a]&&r=w.slidesGrid[a]&&(e=a);(0>e||"undefined"==typeof e)&&(e=0),t=Math.floor(e/w.params.slidesPerGroup),t>=w.snapGrid.length&&(t=w.snapGrid.length-1),e!==w.activeIndex&&(w.snapIndex=t,w.previousIndex=w.activeIndex,w.activeIndex=e,w.updateClasses())},w.updateClasses=function(){w.slides.removeClass(w.params.slideActiveClass+" "+w.params.slideNextClass+" "+w.params.slidePrevClass);var e=w.slides.eq(w.activeIndex);if(e.addClass(w.params.slideActiveClass),e.next("."+w.params.slideClass).addClass(w.params.slideNextClass),e.prev("."+w.params.slideClass).addClass(w.params.slidePrevClass),w.bullets&&w.bullets.length>0){w.bullets.removeClass(w.params.bulletActiveClass);var t;w.params.loop?(t=Math.ceil(w.activeIndex-w.loopedSlides)/w.params.slidesPerGroup,t>w.slides.length-1-2*w.loopedSlides&&(t-=w.slides.length-2*w.loopedSlides),t>w.bullets.length-1&&(t-=w.bullets.length)):t="undefined"!=typeof w.snapIndex?w.snapIndex:w.activeIndex||0,w.paginationContainer.length>1?w.bullets.each(function(){a(this).index()===t&&a(this).addClass(w.params.bulletActiveClass)}):w.bullets.eq(t).addClass(w.params.bulletActiveClass)}w.params.loop||(w.params.prevButton&&(w.isBeginning?(a(w.params.prevButton).addClass(w.params.buttonDisabledClass),w.params.a11y&&w.a11y&&w.a11y.disable(a(w.params.prevButton))):(a(w.params.prevButton).removeClass(w.params.buttonDisabledClass),w.params.a11y&&w.a11y&&w.a11y.enable(a(w.params.prevButton)))),w.params.nextButton&&(w.isEnd?(a(w.params.nextButton).addClass(w.params.buttonDisabledClass),w.params.a11y&&w.a11y&&w.a11y.disable(a(w.params.nextButton))):(a(w.params.nextButton).removeClass(w.params.buttonDisabledClass),w.params.a11y&&w.a11y&&w.a11y.enable(a(w.params.nextButton)))))},w.updatePagination=function(){if(w.params.pagination&&w.paginationContainer&&w.paginationContainer.length>0){for(var e="",a=w.params.loop?Math.ceil((w.slides.length-2*w.loopedSlides)/w.params.slidesPerGroup):w.snapGrid.length,t=0;a>t;t++)e+=w.params.paginationBulletRender?w.params.paginationBulletRender(t,w.params.bulletClass):"<"+w.params.paginationElement+' class="'+w.params.bulletClass+'">";w.paginationContainer.html(e),w.bullets=w.paginationContainer.find("."+w.params.bulletClass),w.params.paginationClickable&&w.params.a11y&&w.a11y&&w.a11y.initPagination()}},w.update=function(e){function a(){r=Math.min(Math.max(w.translate,w.maxTranslate()),w.minTranslate()),w.setWrapperTranslate(r),w.updateActiveIndex(),w.updateClasses()}if(w.updateContainerSize(),w.updateSlidesSize(),w.updateProgress(),w.updatePagination(),w.updateClasses(),w.params.scrollbar&&w.scrollbar&&w.scrollbar.set(),e){var t,r;w.controller&&w.controller.spline&&(w.controller.spline=void 0),w.params.freeMode?a():(t=("auto"===w.params.slidesPerView||w.params.slidesPerView>1)&&w.isEnd&&!w.params.centeredSlides?w.slideTo(w.slides.length-1,0,!1,!0):w.slideTo(w.activeIndex,0,!1,!0),t||a())}},w.onResize=function(e){var a=w.params.allowSwipeToPrev,t=w.params.allowSwipeToNext;if(w.params.allowSwipeToPrev=w.params.allowSwipeToNext=!0,w.updateContainerSize(),w.updateSlidesSize(),("auto"===w.params.slidesPerView||w.params.freeMode||e)&&w.updatePagination(),w.params.scrollbar&&w.scrollbar&&w.scrollbar.set(),w.controller&&w.controller.spline&&(w.controller.spline=void 0),w.params.freeMode){var r=Math.min(Math.max(w.translate,w.maxTranslate()),w.minTranslate());w.setWrapperTranslate(r),w.updateActiveIndex(),w.updateClasses()}else w.updateClasses(),("auto"===w.params.slidesPerView||w.params.slidesPerView>1)&&w.isEnd&&!w.params.centeredSlides?w.slideTo(w.slides.length-1,0,!1,!0):w.slideTo(w.activeIndex,0,!1,!0);w.params.allowSwipeToPrev=a,w.params.allowSwipeToNext=t};var y=["mousedown","mousemove","mouseup"];window.navigator.pointerEnabled?y=["pointerdown","pointermove","pointerup"]:window.navigator.msPointerEnabled&&(y=["MSPointerDown","MSPointerMove","MSPointerUp"]),w.touchEvents={start:w.support.touch||!w.params.simulateTouch?"touchstart":y[0],move:w.support.touch||!w.params.simulateTouch?"touchmove":y[1],end:w.support.touch||!w.params.simulateTouch?"touchend":y[2]},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===w.params.touchEventsTarget?w.container:w.wrapper).addClass("swiper-wp8-"+w.params.direction),w.initEvents=function(e){var t=e?"off":"on",r=e?"removeEventListener":"addEventListener",i="container"===w.params.touchEventsTarget?w.container[0]:w.wrapper[0],n=w.support.touch?i:document,o=w.params.nested?!0:!1;w.browser.ie?(i[r](w.touchEvents.start,w.onTouchStart,!1),n[r](w.touchEvents.move,w.onTouchMove,o),n[r](w.touchEvents.end,w.onTouchEnd,!1)):(w.support.touch&&(i[r](w.touchEvents.start,w.onTouchStart,!1),i[r](w.touchEvents.move,w.onTouchMove,o),i[r](w.touchEvents.end,w.onTouchEnd,!1)),!s.simulateTouch||w.device.ios||w.device.android||(i[r]("mousedown",w.onTouchStart,!1),document[r]("mousemove",w.onTouchMove,o),document[r]("mouseup",w.onTouchEnd,!1))),window[r]("resize",w.onResize),w.params.nextButton&&(a(w.params.nextButton)[t]("click",w.onClickNext),w.params.a11y&&w.a11y&&a(w.params.nextButton)[t]("keydown",w.a11y.onEnterKey)),w.params.prevButton&&(a(w.params.prevButton)[t]("click",w.onClickPrev),w.params.a11y&&w.a11y&&a(w.params.prevButton)[t]("keydown",w.a11y.onEnterKey)),w.params.pagination&&w.params.paginationClickable&&(a(w.paginationContainer)[t]("click","."+w.params.bulletClass,w.onClickIndex),w.params.a11y&&w.a11y&&a(w.paginationContainer)[t]("keydown","."+w.params.bulletClass,w.a11y.onEnterKey)),(w.params.preventClicks||w.params.preventClicksPropagation)&&i[r]("click",w.preventClicks,!0)},w.attachEvents=function(e){w.initEvents()},w.detachEvents=function(){w.initEvents(!0)},w.allowClick=!0,w.preventClicks=function(e){w.allowClick||(w.params.preventClicks&&e.preventDefault(),w.params.preventClicksPropagation&&w.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},w.onClickNext=function(e){e.preventDefault(),(!w.isEnd||w.params.loop)&&w.slideNext()},w.onClickPrev=function(e){e.preventDefault(),(!w.isBeginning||w.params.loop)&&w.slidePrev()},w.onClickIndex=function(e){e.preventDefault();var t=a(this).index()*w.params.slidesPerGroup;w.params.loop&&(t+=w.loopedSlides),w.slideTo(t)},w.updateClickedSlide=function(e){var t=l(e,"."+w.params.slideClass),r=!1;if(t)for(var s=0;sw.slides.length-w.params.slidesPerView)w.fixLoop(),n=w.wrapper.children("."+w.params.slideClass+'[data-swiper-slide-index="'+i+'"]').eq(0).index(),setTimeout(function(){w.slideTo(n)},0);else if(n0&&(E=!1),"touchstart"!==e.type){var s=!0;a(e.target).is(I)&&(s=!1),document.activeElement&&a(document.activeElement).is(I)&&document.activeElement.blur(),s&&e.preventDefault()}w.emit("onTouchStart",w,e)}}}},w.onTouchMove=function(e){if(e.originalEvent&&(e=e.originalEvent),!(D&&"mousemove"===e.type||e.preventedByNestedSwiper)){if(w.params.onlyExternal)return w.allowClick=!1,void(b&&(w.touches.startX=w.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,w.touches.startY=w.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,T=Date.now()));if(D&&document.activeElement&&e.target===document.activeElement&&a(e.target).is(I))return x=!0,void(w.allowClick=!1);if(w.emit("onTouchMove",w,e),!(e.targetTouches&&e.targetTouches.length>1)){if(w.touches.currentX="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,w.touches.currentY="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,"undefined"==typeof S){var t=180*Math.atan2(Math.abs(w.touches.currentY-w.touches.startY),Math.abs(w.touches.currentX-w.touches.startX))/Math.PI;S=i()?t>w.params.touchAngle:90-t>w.params.touchAngle}if(S&&w.emit("onTouchMoveOpposite",w,e),"undefined"==typeof B&&w.browser.ieTouch&&(w.touches.currentX!==w.touches.startX||w.touches.currentY!==w.touches.startY)&&(B=!0),b){if(S)return void(b=!1);if(B||!w.browser.ieTouch){w.allowClick=!1,w.emit("onSliderMove",w,e),e.preventDefault(),w.params.touchMoveStopPropagation&&!w.params.nested&&e.stopPropagation(),x||(s.loop&&w.fixLoop(),M=w.getWrapperTranslate(),w.setWrapperTransition(0),w.animating&&w.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),w.params.autoplay&&w.autoplaying&&(w.params.autoplayDisableOnInteraction?w.stopAutoplay():w.pauseAutoplay()),z=!1,w.params.grabCursor&&(w.container[0].style.cursor="move",w.container[0].style.cursor="-webkit-grabbing",w.container[0].style.cursor="-moz-grabbin",w.container[0].style.cursor="grabbing")),x=!0;var r=w.touches.diff=i()?w.touches.currentX-w.touches.startX:w.touches.currentY-w.touches.startY;r*=w.params.touchRatio,w.rtl&&(r=-r),w.swipeDirection=r>0?"prev":"next",C=r+M;var n=!0;if(r>0&&C>w.minTranslate()?(n=!1,w.params.resistance&&(C=w.minTranslate()-1+Math.pow(-w.minTranslate()+M+r,w.params.resistanceRatio))):0>r&&CC&&(C=M),!w.params.allowSwipeToPrev&&"prev"===w.swipeDirection&&C>M&&(C=M),w.params.followFinger){if(w.params.threshold>0){if(!(Math.abs(r)>w.params.threshold||E))return void(C=M);if(!E)return E=!0,w.touches.startX=w.touches.currentX,w.touches.startY=w.touches.currentY,C=M,void(w.touches.diff=i()?w.touches.currentX-w.touches.startX:w.touches.currentY-w.touches.startY)}(w.params.freeMode||w.params.watchSlidesProgress)&&w.updateActiveIndex(),w.params.freeMode&&(0===L.length&&L.push({position:w.touches[i()?"startX":"startY"],time:T}),L.push({position:w.touches[i()?"currentX":"currentY"],time:(new window.Date).getTime()})),w.updateProgress(C),w.setWrapperTranslate(C)}}}}}},w.onTouchEnd=function(e){if(e.originalEvent&&(e=e.originalEvent),w.emit("onTouchEnd",w,e),b){w.params.grabCursor&&x&&b&&(w.container[0].style.cursor="move",w.container[0].style.cursor="-webkit-grab",w.container[0].style.cursor="-moz-grab",w.container[0].style.cursor="grab");var t=Date.now(),r=t-T;if(w.allowClick&&(w.updateClickedSlide(e),w.emit("onTap",w,e),300>r&&t-k>300&&(P&&clearTimeout(P),P=setTimeout(function(){w&&(w.params.paginationHide&&w.paginationContainer.length>0&&!a(e.target).hasClass(w.params.bulletClass)&&w.paginationContainer.toggleClass(w.params.paginationHiddenClass),w.emit("onClick",w,e))},300)),300>r&&300>t-k&&(P&&clearTimeout(P),w.emit("onDoubleTap",w,e))),k=Date.now(),setTimeout(function(){w&&(w.allowClick=!0)},0),!b||!x||!w.swipeDirection||0===w.touches.diff||C===M)return void(b=x=!1);b=x=!1;var s;if(s=w.params.followFinger?w.rtl?w.translate:-w.translate:-C,w.params.freeMode){if(s<-w.minTranslate())return void w.slideTo(w.activeIndex);if(s>-w.maxTranslate())return void w.slideTo(w.slides.length1){var i=L.pop(),n=L.pop(),o=i.position-n.position,l=i.time-n.time;w.velocity=o/l,w.velocity=w.velocity/2,Math.abs(w.velocity)<.02&&(w.velocity=0),(l>150||(new window.Date).getTime()-i.time>300)&&(w.velocity=0)}else w.velocity=0;L.length=0;var d=1e3*w.params.freeModeMomentumRatio,p=w.velocity*d,u=w.translate+p;w.rtl&&(u=-u);var c,m=!1,f=20*Math.abs(w.velocity)*w.params.freeModeMomentumBounceRatio;if(uw.minTranslate())w.params.freeModeMomentumBounce?(u-w.minTranslate()>f&&(u=w.minTranslate()+f),c=w.minTranslate(),m=!0,z=!0):u=w.minTranslate();else if(w.params.freeModeSticky){var h,g=0;for(g=0;g-u){h=g;break}u=Math.abs(w.snapGrid[h]-u)=w.params.longSwipesMs)&&(w.updateProgress(),w.updateActiveIndex()))}var v,y=0,S=w.slidesSizesGrid[0];for(v=0;v=w.slidesGrid[v]&&s=w.slidesGrid[v]&&(y=v,S=w.slidesGrid[w.slidesGrid.length-1]-w.slidesGrid[w.slidesGrid.length-2]);var E=(s-w.slidesGrid[y])/S;if(r>w.params.longSwipesMs){if(!w.params.longSwipes)return void w.slideTo(w.activeIndex);"next"===w.swipeDirection&&w.slideTo(E>=w.params.longSwipesRatio?y+w.params.slidesPerGroup:y),"prev"===w.swipeDirection&&w.slideTo(E>1-w.params.longSwipesRatio?y+w.params.slidesPerGroup:y)}else{if(!w.params.shortSwipes)return void w.slideTo(w.activeIndex);"next"===w.swipeDirection&&w.slideTo(y+w.params.slidesPerGroup),"prev"===w.swipeDirection&&w.slideTo(y)}}},w._slideTo=function(e,a){return w.slideTo(e,a,!0,!0)},w.slideTo=function(e,a,t,r){"undefined"==typeof t&&(t=!0),"undefined"==typeof e&&(e=0),0>e&&(e=0),w.snapIndex=Math.floor(e/w.params.slidesPerGroup),w.snapIndex>=w.snapGrid.length&&(w.snapIndex=w.snapGrid.length-1);var s=-w.snapGrid[w.snapIndex];w.params.autoplay&&w.autoplaying&&(r||!w.params.autoplayDisableOnInteraction?w.pauseAutoplay(a):w.stopAutoplay()),w.updateProgress(s);for(var n=0;n=Math.floor(100*w.slidesGrid[n])&&(e=n);if(!w.params.allowSwipeToNext&&sw.translate&&s>w.maxTranslate()&&(w.activeIndex||0)!==e)return!1;if("undefined"==typeof a&&(a=w.params.speed),w.previousIndex=w.activeIndex||0,w.activeIndex=e,s===w.translate)return w.updateClasses(),!1;w.updateClasses(),w.onTransitionStart(t);i()?s:0,i()?0:s;return 0===a?(w.setWrapperTransition(0),w.setWrapperTranslate(s),w.onTransitionEnd(t)):(w.setWrapperTransition(a),w.setWrapperTranslate(s),w.animating||(w.animating=!0,w.wrapper.transitionEnd(function(){w&&w.onTransitionEnd(t)}))),!0},w.onTransitionStart=function(e){"undefined"==typeof e&&(e=!0), +w.lazy&&w.lazy.onTransitionStart(),e&&(w.emit("onTransitionStart",w),w.activeIndex!==w.previousIndex&&w.emit("onSlideChangeStart",w))},w.onTransitionEnd=function(e){w.animating=!1,w.setWrapperTransition(0),"undefined"==typeof e&&(e=!0),w.lazy&&w.lazy.onTransitionEnd(),e&&(w.emit("onTransitionEnd",w),w.activeIndex!==w.previousIndex&&w.emit("onSlideChangeEnd",w)),w.params.hashnav&&w.hashnav&&w.hashnav.setHash()},w.slideNext=function(e,a,t){if(w.params.loop){if(w.animating)return!1;w.fixLoop();{w.container[0].clientLeft}return w.slideTo(w.activeIndex+w.params.slidesPerGroup,a,e,t)}return w.slideTo(w.activeIndex+w.params.slidesPerGroup,a,e,t)},w._slideNext=function(e){return w.slideNext(!0,e,!0)},w.slidePrev=function(e,a,t){if(w.params.loop){if(w.animating)return!1;w.fixLoop();{w.container[0].clientLeft}return w.slideTo(w.activeIndex-1,a,e,t)}return w.slideTo(w.activeIndex-1,a,e,t)},w._slidePrev=function(e){return w.slidePrev(!0,e,!0)},w.slideReset=function(e,a,t){return w.slideTo(w.activeIndex,a,e)},w.setWrapperTransition=function(e,a){w.wrapper.transition(e),"slide"!==w.params.effect&&w.effects[w.params.effect]&&w.effects[w.params.effect].setTransition(e),w.params.parallax&&w.parallax&&w.parallax.setTransition(e),w.params.scrollbar&&w.scrollbar&&w.scrollbar.setTransition(e),w.params.control&&w.controller&&w.controller.setTransition(e,a),w.emit("onSetTransition",w,e)},w.setWrapperTranslate=function(e,a,t){var r=0,s=0,n=0;i()?r=w.rtl?-e:e:s=e,w.params.virtualTranslate||w.wrapper.transform(w.support.transforms3d?"translate3d("+r+"px, "+s+"px, "+n+"px)":"translate("+r+"px, "+s+"px)"),w.translate=i()?r:s,a&&w.updateActiveIndex(),"slide"!==w.params.effect&&w.effects[w.params.effect]&&w.effects[w.params.effect].setTranslate(w.translate),w.params.parallax&&w.parallax&&w.parallax.setTranslate(w.translate),w.params.scrollbar&&w.scrollbar&&w.scrollbar.setTranslate(w.translate),w.params.control&&w.controller&&w.controller.setTranslate(w.translate,t),w.emit("onSetTranslate",w,w.translate)},w.getTranslate=function(e,a){var t,r,s,i;return"undefined"==typeof a&&(a="x"),w.params.virtualTranslate?w.rtl?-w.translate:w.translate:(s=window.getComputedStyle(e,null),window.WebKitCSSMatrix?i=new window.WebKitCSSMatrix("none"===s.webkitTransform?"":s.webkitTransform):(i=s.MozTransform||s.OTransform||s.MsTransform||s.msTransform||s.transform||s.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(r=window.WebKitCSSMatrix?i.m41:parseFloat(16===t.length?t[12]:t[4])),"y"===a&&(r=window.WebKitCSSMatrix?i.m42:parseFloat(16===t.length?t[13]:t[5])),w.rtl&&r&&(r=-r),r||0)},w.getWrapperTranslate=function(e){return"undefined"==typeof e&&(e=i()?"x":"y"),w.getTranslate(w.wrapper[0],e)},w.observers=[],w.initObservers=function(){if(w.params.observeParents)for(var e=w.container.parents(),a=0;ae.length&&(w.loopedSlides=e.length);var t,r=[],s=[];for(e.each(function(t,i){var n=a(this);t=e.length-w.loopedSlides&&r.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)w.wrapper.prepend(a(r[t].cloneNode(!0)).addClass(w.params.slideDuplicateClass))},w.destroyLoop=function(){w.wrapper.children("."+w.params.slideClass+"."+w.params.slideDuplicateClass).remove(),w.slides.removeAttr("data-swiper-slide-index")},w.fixLoop=function(){var e;w.activeIndex=2*w.loopedSlides||w.activeIndex>w.slides.length-2*w.params.slidesPerView)&&(e=-w.slides.length+w.activeIndex+w.loopedSlides,e+=w.loopedSlides,w.slideTo(e,0,!1,!0))},w.appendSlide=function(e){if(w.params.loop&&w.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;aa&&t--;t=Math.max(t,0)}else a=e,w.slides[a]&&w.slides.eq(a).remove(),t>a&&t--,t=Math.max(t,0);w.params.loop&&w.createLoop(),w.params.observer&&w.support.observer||w.update(!0),w.params.loop?w.slideTo(t+w.loopedSlides,0,!1):w.slideTo(t,0,!1)},w.removeAllSlides=function(){for(var e=[],a=0;a'),w.wrapper.append(e)),e.css({height:w.width+"px"})):(e=w.container.find(".swiper-cube-shadow"),0===e.length&&(e=a('
    '),w.container.append(e))));for(var r=0;r=l&&l>-1&&(t=90*r+90*l,w.rtl&&(t=90*-r-90*l)),s.transform(c),w.params.cube.slideShadows){var m=s.find(i()?".swiper-slide-shadow-left":".swiper-slide-shadow-top"),f=s.find(i()?".swiper-slide-shadow-right":".swiper-slide-shadow-bottom");0===m.length&&(m=a('
    '),s.append(m)),0===f.length&&(f=a('
    '),s.append(f));{s[0].progress}m.length&&(m[0].style.opacity=-s[0].progress),f.length&&(f[0].style.opacity=s[0].progress)}}if(w.wrapper.css({"-webkit-transform-origin":"50% 50% -"+w.size/2+"px","-moz-transform-origin":"50% 50% -"+w.size/2+"px","-ms-transform-origin":"50% 50% -"+w.size/2+"px","transform-origin":"50% 50% -"+w.size/2+"px"}),w.params.cube.shadow)if(i())e.transform("translate3d(0px, "+(w.width/2+w.params.cube.shadowOffset)+"px, "+-w.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+w.params.cube.shadowScale+")");else{var h=Math.abs(t)-90*Math.floor(Math.abs(t)/90),g=1.5-(Math.sin(2*h*Math.PI/360)/2+Math.cos(2*h*Math.PI/360)/2),v=w.params.cube.shadowScale,y=w.params.cube.shadowScale/g,b=w.params.cube.shadowOffset;e.transform("scale3d("+v+", 1, "+y+") translate3d(0px, "+(w.height/2+b)+"px, "+-w.height/2/y+"px) rotateX(-90deg)")}var x=w.isSafari||w.isUiWebView?-w.size/2:0;w.wrapper.transform("translate3d(0px,0,"+x+"px) rotateX("+(i()?0:t)+"deg) rotateY("+(i()?-t:0)+"deg)")},setTransition:function(e){w.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),w.params.cube.shadow&&!i()&&w.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var e=w.translate,t=i()?-e+w.width/2:-e+w.height/2,r=i()?w.params.coverflow.rotate:-w.params.coverflow.rotate,s=w.params.coverflow.depth,n=0,o=w.slides.length;o>n;n++){var l=w.slides.eq(n),d=w.slidesSizesGrid[n],p=l[0].swiperSlideOffset,u=(t-p-d/2)/d*w.params.coverflow.modifier,c=i()?r*u:0,m=i()?0:r*u,f=-s*Math.abs(u),h=i()?0:w.params.coverflow.stretch*u,g=i()?w.params.coverflow.stretch*u:0;Math.abs(g)<.001&&(g=0),Math.abs(h)<.001&&(h=0),Math.abs(f)<.001&&(f=0),Math.abs(c)<.001&&(c=0),Math.abs(m)<.001&&(m=0);var v="translate3d("+g+"px,"+h+"px,"+f+"px) rotateX("+m+"deg) rotateY("+c+"deg)";if(l.transform(v),l[0].style.zIndex=-Math.abs(Math.round(u))+1,w.params.coverflow.slideShadows){var y=l.find(i()?".swiper-slide-shadow-left":".swiper-slide-shadow-top"),b=l.find(i()?".swiper-slide-shadow-right":".swiper-slide-shadow-bottom");0===y.length&&(y=a('
    '),l.append(y)),0===b.length&&(b=a('
    '),l.append(b)),y.length&&(y[0].style.opacity=u>0?u:0),b.length&&(b[0].style.opacity=-u>0?-u:0)}}if(w.browser.ie){var x=w.wrapper[0].style;x.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){w.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},w.lazy={initialImageLoaded:!1,loadImageInSlide:function(e,t){if("undefined"!=typeof e&&("undefined"==typeof t&&(t=!0),0!==w.slides.length)){var r=w.slides.eq(e),s=r.find(".swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)");!r.hasClass("swiper-lazy")||r.hasClass("swiper-lazy-loaded")||r.hasClass("swiper-lazy-loading")||s.add(r[0]),0!==s.length&&s.each(function(){var e=a(this);e.addClass("swiper-lazy-loading");var s=e.attr("data-background"),i=e.attr("data-src");w.loadImage(e[0],i||s,!1,function(){if(s?(e.css("background-image","url("+s+")"),e.removeAttr("data-background")):(e.attr("src",i),e.removeAttr("data-src")),e.addClass("swiper-lazy-loaded").removeClass("swiper-lazy-loading"),r.find(".swiper-lazy-preloader, .preloader").remove(),w.params.loop&&t){var a=r.attr("data-swiper-slide-index");if(r.hasClass(w.params.slideDuplicateClass)){var n=w.wrapper.children('[data-swiper-slide-index="'+a+'"]:not(.'+w.params.slideDuplicateClass+")");w.lazy.loadImageInSlide(n.index(),!1)}else{var o=w.wrapper.children("."+w.params.slideDuplicateClass+'[data-swiper-slide-index="'+a+'"]');w.lazy.loadImageInSlide(o.index(),!1)}}w.emit("onLazyImageReady",w,r[0],e[0])}),w.emit("onLazyImageLoad",w,r[0],e[0])})}},load:function(){var e;if(w.params.watchSlidesVisibility)w.wrapper.children("."+w.params.slideVisibleClass).each(function(){w.lazy.loadImageInSlide(a(this).index())});else if(w.params.slidesPerView>1)for(e=w.activeIndex;e1){for(e=w.activeIndex+w.params.slidesPerView;e0&&w.lazy.loadImageInSlide(t.index());var r=w.wrapper.children("."+w.params.slidePrevClass);r.length>0&&w.lazy.loadImageInSlide(r.index())}},onTransitionStart:function(){w.params.lazyLoading&&(w.params.lazyLoadingOnTransitionStart||!w.params.lazyLoadingOnTransitionStart&&!w.lazy.initialImageLoaded)&&w.lazy.load()},onTransitionEnd:function(){w.params.lazyLoading&&!w.params.lazyLoadingOnTransitionStart&&w.lazy.load()}},w.scrollbar={set:function(){if(w.params.scrollbar){var e=w.scrollbar;e.track=a(w.params.scrollbar),e.drag=e.track.find(".swiper-scrollbar-drag"),0===e.drag.length&&(e.drag=a('
    '),e.track.append(e.drag)),e.drag[0].style.width="",e.drag[0].style.height="",e.trackSize=i()?e.track[0].offsetWidth:e.track[0].offsetHeight,e.divider=w.size/w.virtualSize,e.moveDivider=e.divider*(e.trackSize/w.size),e.dragSize=e.trackSize*e.divider,i()?e.drag[0].style.width=e.dragSize+"px":e.drag[0].style.height=e.dragSize+"px",e.track[0].style.display=e.divider>=1?"none":"",w.params.scrollbarHide&&(e.track[0].style.opacity=0)}},setTranslate:function(){if(w.params.scrollbar){var e,a=w.scrollbar,t=(w.translate||0,a.dragSize);e=(a.trackSize-a.dragSize)*w.progress,w.rtl&&i()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):0>e?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),i()?(a.drag.transform(w.support.transforms3d?"translate3d("+e+"px, 0, 0)":"translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(a.drag.transform(w.support.transforms3d?"translate3d(0px, "+e+"px, 0)":"translateY("+e+"px)"),a.drag[0].style.height=t+"px"),w.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){w.params.scrollbar&&w.scrollbar.drag.transition(e)}},w.controller={LinearSpline:function(e,a){this.x=e,this.y=a,this.lastIndex=e.length-1;{var t,r;this.x.length}this.interpolate=function(e){return e?(r=s(this.x,e),t=r-1,(e-this.x[t])*(this.y[r]-this.y[t])/(this.x[r]-this.x[t])+this.y[t]):0};var s=function(){var e,a,t;return function(r,s){for(a=-1,e=r.length;e-a>1;)r[t=e+a>>1]<=s?a=t:e=t;return e}}()},getInterpolateFunction:function(e){w.controller.spline||(w.controller.spline=w.params.loop?new w.controller.LinearSpline(w.slidesGrid,e.slidesGrid):new w.controller.LinearSpline(w.snapGrid,e.snapGrid))},setTranslate:function(e,a){function r(a){e=a.rtl&&"horizontal"===a.params.direction?-w.translate:w.translate,"slide"===w.params.controlBy&&(w.controller.getInterpolateFunction(a),i=-w.controller.spline.interpolate(-e)),i&&"container"!==w.params.controlBy||(s=(a.maxTranslate()-a.minTranslate())/(w.maxTranslate()-w.minTranslate()),i=(e-w.minTranslate())*s+a.minTranslate()),w.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,w),a.updateActiveIndex()}var s,i,n=w.params.control;if(w.isArray(n))for(var o=0;ot;t++){var s=w.slides.eq(t),i=s.attr("data-hash");if(i===e&&!s.hasClass(w.params.slideDuplicateClass)){var n=s.index();w.slideTo(n,a,w.params.runCallbacksOnInit,!0)}}}},setHash:function(){w.hashnav.initialized&&w.params.hashnav&&(document.location.hash=w.slides.eq(w.activeIndex).attr("data-hash")||"")}},w.disableKeyboardControl=function(){a(document).off("keydown",p)},w.enableKeyboardControl=function(){a(document).on("keydown",p)},w.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},w.params.mousewheelControl){try{new window.WheelEvent("wheel"),w.mousewheel.event="wheel"}catch(G){}w.mousewheel.event||void 0===document.onmousewheel||(w.mousewheel.event="mousewheel"),w.mousewheel.event||(w.mousewheel.event="DOMMouseScroll")}w.disableMousewheelControl=function(){return w.mousewheel.event?(w.container.off(w.mousewheel.event,u),!0):!1},w.enableMousewheelControl=function(){return w.mousewheel.event?(w.container.on(w.mousewheel.event,u),!0):!1},w.parallax={setTranslate:function(){w.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){c(this,w.progress)}),w.slides.each(function(){var e=a(this);e.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var a=Math.min(Math.max(e[0].progress,-1),1);c(this,a)})})},setTransition:function(e){"undefined"==typeof e&&(e=w.params.speed),w.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=a(this),r=parseInt(t.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),t.transition(r)})}},w._plugins=[];for(var O in w.plugins){var A=w.plugins[O](w,w.params[O]);A&&w._plugins.push(A)}return w.callPlugins=function(e){for(var a=0;a'),notify:function(e){var a=w.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){if(w.params.nextButton){var e=a(w.params.nextButton);w.a11y.makeFocusable(e),w.a11y.addRole(e,"button"),w.a11y.addLabel(e,w.params.nextSlideMessage)}if(w.params.prevButton){var t=a(w.params.prevButton);w.a11y.makeFocusable(t),w.a11y.addRole(t,"button"),w.a11y.addLabel(t,w.params.prevSlideMessage)}a(w.container).append(w.a11y.liveRegion)},initPagination:function(){w.params.pagination&&w.params.paginationClickable&&w.bullets&&w.bullets.length&&w.bullets.each(function(){var e=a(this);w.a11y.makeFocusable(e),w.a11y.addRole(e,"button"),w.a11y.addLabel(e,w.params.paginationBulletMessage.replace(/{{index}}/,e.index()+1))})},destroy:function(){w.a11y.liveRegion&&w.a11y.liveRegion.length>0&&w.a11y.liveRegion.remove()}},w.init=function(){w.params.loop&&w.createLoop(),w.updateContainerSize(),w.updateSlidesSize(),w.updatePagination(),w.params.scrollbar&&w.scrollbar&&w.scrollbar.set(),"slide"!==w.params.effect&&w.effects[w.params.effect]&&(w.params.loop||w.updateProgress(),w.effects[w.params.effect].setTranslate()),w.params.loop?w.slideTo(w.params.initialSlide+w.loopedSlides,0,w.params.runCallbacksOnInit):(w.slideTo(w.params.initialSlide,0,w.params.runCallbacksOnInit),0===w.params.initialSlide&&(w.parallax&&w.params.parallax&&w.parallax.setTranslate(),w.lazy&&w.params.lazyLoading&&(w.lazy.load(),w.lazy.initialImageLoaded=!0))),w.attachEvents(),w.params.observer&&w.support.observer&&w.initObservers(),w.params.preloadImages&&!w.params.lazyLoading&&w.preloadImages(),w.params.autoplay&&w.startAutoplay(),w.params.keyboardControl&&w.enableKeyboardControl&&w.enableKeyboardControl(),w.params.mousewheelControl&&w.enableMousewheelControl&&w.enableMousewheelControl(),w.params.hashnav&&w.hashnav&&w.hashnav.init(),w.params.a11y&&w.a11y&&w.a11y.init(),w.emit("onInit",w)},w.cleanupStyles=function(){w.container.removeClass(w.classNames.join(" ")).removeAttr("style"),w.wrapper.removeAttr("style"),w.slides&&w.slides.length&&w.slides.removeClass([w.params.slideVisibleClass,w.params.slideActiveClass,w.params.slideNextClass,w.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),w.paginationContainer&&w.paginationContainer.length&&w.paginationContainer.removeClass(w.params.paginationHiddenClass),w.bullets&&w.bullets.length&&w.bullets.removeClass(w.params.bulletActiveClass),w.params.prevButton&&a(w.params.prevButton).removeClass(w.params.buttonDisabledClass),w.params.nextButton&&a(w.params.nextButton).removeClass(w.params.buttonDisabledClass),w.params.scrollbar&&w.scrollbar&&(w.scrollbar.track&&w.scrollbar.track.length&&w.scrollbar.track.removeAttr("style"),w.scrollbar.drag&&w.scrollbar.drag.length&&w.scrollbar.drag.removeAttr("style"))},w.destroy=function(e,a){w.detachEvents(),w.stopAutoplay(),w.params.loop&&w.destroyLoop(),a&&w.cleanupStyles(),w.disconnectObservers(),w.params.keyboardControl&&w.disableKeyboardControl&&w.disableKeyboardControl(),w.params.mousewheelControl&&w.disableMousewheelControl&&w.disableMousewheelControl(),w.params.a11y&&w.a11y&&w.a11y.destroy(),w.emit("onDestroy"),e!==!1&&(w=null)},w.init(),w}};t.prototype={isSafari:function(){var e=navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1},device:function(){var e=navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),s=!t&&e.match(/(iPhone\sOS)\s([\d_]+)/);return{ios:t||s||r,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t=0&&o.indexOf(">")>=0){var l="div";for(0===o.indexOf(":~]/)?(t||document).querySelectorAll(a):[document.getElementById(a.split("#")[1])],s=0;s0&&a[0].nodeType)for(s=0;s0?parseFloat(this.css("width")):null},outerWidth:function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null},height:function(){return this[0]===window?window.innerHeight:this.length>0?parseFloat(this.css("height")):null},outerHeight:function(e){return this.length>0?e?this[0].offsetHeight+parseFloat(this.css("margin-top"))+parseFloat(this.css("margin-bottom")):this[0].offsetHeight:null},offset:function(){if(this.length>0){var e=this[0],a=e.getBoundingClientRect(),t=document.body,r=e.clientTop||t.clientTop||0,s=e.clientLeft||t.clientLeft||0,i=window.pageYOffset||e.scrollTop,n=window.pageXOffset||e.scrollLeft;return{top:a.top+i-r,left:a.left+n-s}}return null},css:function(e,a){var t;if(1===arguments.length){if("string"!=typeof e){for(t=0;tr-1?new e([]):0>a?(t=r+a,new e(0>t?[]:[this[t]])):new e([this[a]])},append:function(a){var t,r;for(t=0;t=0;r--)this[t].insertBefore(s.childNodes[r],this[t].childNodes[0])}else if(a instanceof e)for(r=0;r1)for(var s=0;s1)for(var s=0;s0?t?this[0].nextElementSibling&&a(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])},nextAll:function(t){var r=[],s=this[0];if(!s)return new e([]);for(;s.nextElementSibling;){ +var i=s.nextElementSibling;t?a(i).is(t)&&r.push(i):r.push(i),s=i}return new e(r)},prev:function(t){return new e(this.length>0?t?this[0].previousElementSibling&&a(this[0].previousElementSibling).is(t)?[this[0].previousElementSibling]:[]:this[0].previousElementSibling?[this[0].previousElementSibling]:[]:[])},prevAll:function(t){var r=[],s=this[0];if(!s)return new e([]);for(;s.previousElementSibling;){var i=s.previousElementSibling;t?a(i).is(t)&&r.push(i):r.push(i),s=i}return new e(r)},parent:function(e){for(var t=[],r=0;r parseFloat(versionInts[1])); + } + + if (greaterSemver(requiredVersion, velocityVersion)) { + var abortError = "Velocity UI Pack: You need to update Velocity (velocity.js) to a newer version. Visit http://github.com/julianshapiro/velocity."; + alert(abortError); + throw new Error(abortError); + } + + /************************ + Effect Registration + ************************/ + + /* Note: RegisterUI is a legacy name. */ + Velocity.RegisterEffect = Velocity.RegisterUI = function(effectName, properties) { + /* Animate the expansion/contraction of the elements' parent's height for In/Out effects. */ + function animateParentHeight(elements, direction, totalDuration, stagger) { + var totalHeightDelta = 0, + parentNode; + + /* Sum the total height (including padding and margin) of all targeted elements. */ + $.each(elements.nodeType ? [elements] : elements, function(i, element) { + if (stagger) { + /* Increase the totalDuration by the successive delay amounts produced by the stagger option. */ + totalDuration += i * stagger; + } + + parentNode = element.parentNode; + + var propertiesToSum = ["height", "paddingTop", "paddingBottom", "marginTop", "marginBottom"]; + + /* If box-sizing is border-box, the height already includes padding and margin */ + if (Velocity.CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() === "border-box") { + propertiesToSum = ["height"]; + } + + $.each(propertiesToSum, function(i, property) { + totalHeightDelta += parseFloat(Velocity.CSS.getPropertyValue(element, property)); + }); + }); + + /* Animate the parent element's height adjustment (with a varying duration multiplier for aesthetic benefits). */ + Velocity.animate( + parentNode, + {height: (direction === "In" ? "+" : "-") + "=" + totalHeightDelta}, + {queue: false, easing: "ease-in-out", duration: totalDuration * (direction === "In" ? 0.6 : 1)} + ); + } + + /* Register a custom redirect for each effect. */ + Velocity.Redirects[effectName] = function(element, redirectOptions, elementsIndex, elementsSize, elements, promiseData, loop) { + var finalElement = (elementsIndex === elementsSize - 1), + totalDuration = 0; + + loop = loop || properties.loop; + if (typeof properties.defaultDuration === "function") { + properties.defaultDuration = properties.defaultDuration.call(elements, elements); + } else { + properties.defaultDuration = parseFloat(properties.defaultDuration); + } + + /* Get the total duration used, so we can share it out with everything that doesn't have a duration */ + for (var callIndex = 0; callIndex < properties.calls.length; callIndex++) { + durationPercentage = properties.calls[callIndex][1]; + if (typeof durationPercentage === "number") { + totalDuration += durationPercentage; + } + } + var shareDuration = totalDuration >= 1 ? 0 : properties.calls.length ? (1 - totalDuration) / properties.calls.length : 1; + + /* Iterate through each effect's call array. */ + for (callIndex = 0; callIndex < properties.calls.length; callIndex++) { + var call = properties.calls[callIndex], + propertyMap = call[0], + redirectDuration = 1000, + durationPercentage = call[1], + callOptions = call[2] || {}, + opts = {}; + + if (redirectOptions.duration !== undefined) { + redirectDuration = redirectOptions.duration; + } else if (properties.defaultDuration !== undefined) { + redirectDuration = properties.defaultDuration; + } + + /* Assign the whitelisted per-call options. */ + opts.duration = redirectDuration * (typeof durationPercentage === "number" ? durationPercentage : shareDuration); + opts.queue = redirectOptions.queue || ""; + opts.easing = callOptions.easing || "ease"; + opts.delay = parseFloat(callOptions.delay) || 0; + opts.loop = !properties.loop && callOptions.loop; + opts._cacheValues = callOptions._cacheValues || true; + + /* Special processing for the first effect call. */ + if (callIndex === 0) { + /* If a delay was passed into the redirect, combine it with the first call's delay. */ + opts.delay += (parseFloat(redirectOptions.delay) || 0); + + if (elementsIndex === 0) { + opts.begin = function() { + /* Only trigger a begin callback on the first effect call with the first element in the set. */ + if (redirectOptions.begin) { + redirectOptions.begin.call(elements, elements); + } + + var direction = effectName.match(/(In|Out)$/); + + /* Make "in" transitioning elements invisible immediately so that there's no FOUC between now + and the first RAF tick. */ + if ((direction && direction[0] === "In") && propertyMap.opacity !== undefined) { + $.each(elements.nodeType ? [elements] : elements, function(i, element) { + Velocity.CSS.setPropertyValue(element, "opacity", 0); + }); + } + + /* Only trigger animateParentHeight() if we're using an In/Out transition. */ + if (redirectOptions.animateParentHeight && direction) { + animateParentHeight(elements, direction[0], redirectDuration + opts.delay, redirectOptions.stagger); + } + }; + } + + /* If the user isn't overriding the display option, default to "auto" for "In"-suffixed transitions. */ + if (redirectOptions.display !== null) { + if (redirectOptions.display !== undefined && redirectOptions.display !== "none") { + opts.display = redirectOptions.display; + } else if (/In$/.test(effectName)) { + /* Inline elements cannot be subjected to transforms, so we switch them to inline-block. */ + var defaultDisplay = Velocity.CSS.Values.getDisplayType(element); + opts.display = (defaultDisplay === "inline") ? "inline-block" : defaultDisplay; + } + } + + if (redirectOptions.visibility && redirectOptions.visibility !== "hidden") { + opts.visibility = redirectOptions.visibility; + } + } + + /* Special processing for the last effect call. */ + if (callIndex === properties.calls.length - 1) { + /* Append promise resolving onto the user's redirect callback. */ + var injectFinalCallbacks = function() { + if ((redirectOptions.display === undefined || redirectOptions.display === "none") && /Out$/.test(effectName)) { + $.each(elements.nodeType ? [elements] : elements, function(i, element) { + Velocity.CSS.setPropertyValue(element, "display", "none"); + }); + } + if (redirectOptions.complete) { + redirectOptions.complete.call(elements, elements); + } + if (promiseData) { + promiseData.resolver(elements || element); + } + }; + + opts.complete = function() { + if (loop) { + Velocity.Redirects[effectName](element, redirectOptions, elementsIndex, elementsSize, elements, promiseData, loop === true ? true : Math.max(0, loop - 1)); + } + if (properties.reset) { + for (var resetProperty in properties.reset) { + if (!properties.reset.hasOwnProperty(resetProperty)) { + continue; + } + var resetValue = properties.reset[resetProperty]; + + /* Format each non-array value in the reset property map to [ value, value ] so that changes apply + immediately and DOM querying is avoided (via forcefeeding). */ + /* Note: Don't forcefeed hooks, otherwise their hook roots will be defaulted to their null values. */ + if (Velocity.CSS.Hooks.registered[resetProperty] === undefined && (typeof resetValue === "string" || typeof resetValue === "number")) { + properties.reset[resetProperty] = [properties.reset[resetProperty], properties.reset[resetProperty]]; + } + } + + /* So that the reset values are applied instantly upon the next rAF tick, use a zero duration and parallel queueing. */ + var resetOptions = {duration: 0, queue: false}; + + /* Since the reset option uses up the complete callback, we trigger the user's complete callback at the end of ours. */ + if (finalElement) { + resetOptions.complete = injectFinalCallbacks; + } + + Velocity.animate(element, properties.reset, resetOptions); + /* Only trigger the user's complete callback on the last effect call with the last element in the set. */ + } else if (finalElement) { + injectFinalCallbacks(); + } + }; + + if (redirectOptions.visibility === "hidden") { + opts.visibility = redirectOptions.visibility; + } + } + + Velocity.animate(element, propertyMap, opts); + } + }; + + /* Return the Velocity object so that RegisterUI calls can be chained. */ + return Velocity; + }; + + /********************* + Packaged Effects + *********************/ + + /* Externalize the packagedEffects data so that they can optionally be modified and re-registered. */ + /* Support: <=IE8: Callouts will have no effect, and transitions will simply fade in/out. IE9/Android 2.3: Most effects are fully supported, the rest fade in/out. All other browsers: full support. */ + Velocity.RegisterEffect.packagedEffects = + { + /* Animate.css */ + "callout.bounce": { + defaultDuration: 550, + calls: [ + [{translateY: -30}, 0.25], + [{translateY: 0}, 0.125], + [{translateY: -15}, 0.125], + [{translateY: 0}, 0.25] + ] + }, + /* Animate.css */ + "callout.shake": { + defaultDuration: 800, + calls: [ + [{translateX: -11}], + [{translateX: 11}], + [{translateX: -11}], + [{translateX: 11}], + [{translateX: -11}], + [{translateX: 11}], + [{translateX: -11}], + [{translateX: 0}] + ] + }, + /* Animate.css */ + "callout.flash": { + defaultDuration: 1100, + calls: [ + [{opacity: [0, "easeInOutQuad", 1]}], + [{opacity: [1, "easeInOutQuad"]}], + [{opacity: [0, "easeInOutQuad"]}], + [{opacity: [1, "easeInOutQuad"]}] + ] + }, + /* Animate.css */ + "callout.pulse": { + defaultDuration: 825, + calls: [ + [{scaleX: 1.1, scaleY: 1.1}, 0.50, {easing: "easeInExpo"}], + [{scaleX: 1, scaleY: 1}, 0.50] + ] + }, + /* Animate.css */ + "callout.swing": { + defaultDuration: 950, + calls: [ + [{rotateZ: 15}], + [{rotateZ: -10}], + [{rotateZ: 5}], + [{rotateZ: -5}], + [{rotateZ: 0}] + ] + }, + /* Animate.css */ + "callout.tada": { + defaultDuration: 1000, + calls: [ + [{scaleX: 0.9, scaleY: 0.9, rotateZ: -3}, 0.10], + [{scaleX: 1.1, scaleY: 1.1, rotateZ: 3}, 0.10], + [{scaleX: 1.1, scaleY: 1.1, rotateZ: -3}, 0.10], + ["reverse", 0.125], + ["reverse", 0.125], + ["reverse", 0.125], + ["reverse", 0.125], + ["reverse", 0.125], + [{scaleX: 1, scaleY: 1, rotateZ: 0}, 0.20] + ] + }, + "transition.fadeIn": { + defaultDuration: 500, + calls: [ + [{opacity: [1, 0]}] + ] + }, + "transition.fadeOut": { + defaultDuration: 500, + calls: [ + [{opacity: [0, 1]}] + ] + }, + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipXIn": { + defaultDuration: 700, + calls: [ + [{opacity: [1, 0], transformPerspective: [800, 800], rotateY: [0, -55]}] + ], + reset: {transformPerspective: 0} + }, + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipXOut": { + defaultDuration: 700, + calls: [ + [{opacity: [0, 1], transformPerspective: [800, 800], rotateY: 55}] + ], + reset: {transformPerspective: 0, rotateY: 0} + }, + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipYIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], transformPerspective: [800, 800], rotateX: [0, -45]}] + ], + reset: {transformPerspective: 0} + }, + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipYOut": { + defaultDuration: 800, + calls: [ + [{opacity: [0, 1], transformPerspective: [800, 800], rotateX: 25}] + ], + reset: {transformPerspective: 0, rotateX: 0} + }, + /* Animate.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipBounceXIn": { + defaultDuration: 900, + calls: [ + [{opacity: [0.725, 0], transformPerspective: [400, 400], rotateY: [-10, 90]}, 0.50], + [{opacity: 0.80, rotateY: 10}, 0.25], + [{opacity: 1, rotateY: 0}, 0.25] + ], + reset: {transformPerspective: 0} + }, + /* Animate.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipBounceXOut": { + defaultDuration: 800, + calls: [ + [{opacity: [0.9, 1], transformPerspective: [400, 400], rotateY: -10}], + [{opacity: 0, rotateY: 90}] + ], + reset: {transformPerspective: 0, rotateY: 0} + }, + /* Animate.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipBounceYIn": { + defaultDuration: 850, + calls: [ + [{opacity: [0.725, 0], transformPerspective: [400, 400], rotateX: [-10, 90]}, 0.50], + [{opacity: 0.80, rotateX: 10}, 0.25], + [{opacity: 1, rotateX: 0}, 0.25] + ], + reset: {transformPerspective: 0} + }, + /* Animate.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.flipBounceYOut": { + defaultDuration: 800, + calls: [ + [{opacity: [0.9, 1], transformPerspective: [400, 400], rotateX: -15}], + [{opacity: 0, rotateX: 90}] + ], + reset: {transformPerspective: 0, rotateX: 0} + }, + /* Magic.css */ + "transition.swoopIn": { + defaultDuration: 850, + calls: [ + [{opacity: [1, 0], transformOriginX: ["100%", "50%"], transformOriginY: ["100%", "100%"], scaleX: [1, 0], scaleY: [1, 0], translateX: [0, -700], translateZ: 0}] + ], + reset: {transformOriginX: "50%", transformOriginY: "50%"} + }, + /* Magic.css */ + "transition.swoopOut": { + defaultDuration: 850, + calls: [ + [{opacity: [0, 1], transformOriginX: ["50%", "100%"], transformOriginY: ["100%", "100%"], scaleX: 0, scaleY: 0, translateX: -700, translateZ: 0}] + ], + reset: {transformOriginX: "50%", transformOriginY: "50%", scaleX: 1, scaleY: 1, translateX: 0} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3. (Fades and scales only.) */ + "transition.whirlIn": { + defaultDuration: 850, + calls: [ + [{opacity: [1, 0], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: [1, 0], scaleY: [1, 0], rotateY: [0, 160]}, 1, {easing: "easeInOutSine"}] + ] + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3. (Fades and scales only.) */ + "transition.whirlOut": { + defaultDuration: 750, + calls: [ + [{opacity: [0, "easeInOutQuint", 1], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: 0, scaleY: 0, rotateY: 160}, 1, {easing: "swing"}] + ], + reset: {scaleX: 1, scaleY: 1, rotateY: 0} + }, + "transition.shrinkIn": { + defaultDuration: 750, + calls: [ + [{opacity: [1, 0], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: [1, 1.5], scaleY: [1, 1.5], translateZ: 0}] + ] + }, + "transition.shrinkOut": { + defaultDuration: 600, + calls: [ + [{opacity: [0, 1], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: 1.3, scaleY: 1.3, translateZ: 0}] + ], + reset: {scaleX: 1, scaleY: 1} + }, + "transition.expandIn": { + defaultDuration: 700, + calls: [ + [{opacity: [1, 0], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: [1, 0.625], scaleY: [1, 0.625], translateZ: 0}] + ] + }, + "transition.expandOut": { + defaultDuration: 700, + calls: [ + [{opacity: [0, 1], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: 0.5, scaleY: 0.5, translateZ: 0}] + ], + reset: {scaleX: 1, scaleY: 1} + }, + /* Animate.css */ + "transition.bounceIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], scaleX: [1.05, 0.3], scaleY: [1.05, 0.3]}, 0.35], + [{scaleX: 0.9, scaleY: 0.9, translateZ: 0}, 0.20], + [{scaleX: 1, scaleY: 1}, 0.45] + ] + }, + /* Animate.css */ + "transition.bounceOut": { + defaultDuration: 800, + calls: [ + [{scaleX: 0.95, scaleY: 0.95}, 0.35], + [{scaleX: 1.1, scaleY: 1.1, translateZ: 0}, 0.35], + [{opacity: [0, 1], scaleX: 0.3, scaleY: 0.3}, 0.30] + ], + reset: {scaleX: 1, scaleY: 1} + }, + /* Animate.css */ + "transition.bounceUpIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], translateY: [-30, 1000]}, 0.60, {easing: "easeOutCirc"}], + [{translateY: 10}, 0.20], + [{translateY: 0}, 0.20] + ] + }, + /* Animate.css */ + "transition.bounceUpOut": { + defaultDuration: 1000, + calls: [ + [{translateY: 20}, 0.20], + [{opacity: [0, "easeInCirc", 1], translateY: -1000}, 0.80] + ], + reset: {translateY: 0} + }, + /* Animate.css */ + "transition.bounceDownIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], translateY: [30, -1000]}, 0.60, {easing: "easeOutCirc"}], + [{translateY: -10}, 0.20], + [{translateY: 0}, 0.20] + ] + }, + /* Animate.css */ + "transition.bounceDownOut": { + defaultDuration: 1000, + calls: [ + [{translateY: -20}, 0.20], + [{opacity: [0, "easeInCirc", 1], translateY: 1000}, 0.80] + ], + reset: {translateY: 0} + }, + /* Animate.css */ + "transition.bounceLeftIn": { + defaultDuration: 750, + calls: [ + [{opacity: [1, 0], translateX: [30, -1250]}, 0.60, {easing: "easeOutCirc"}], + [{translateX: -10}, 0.20], + [{translateX: 0}, 0.20] + ] + }, + /* Animate.css */ + "transition.bounceLeftOut": { + defaultDuration: 750, + calls: [ + [{translateX: 30}, 0.20], + [{opacity: [0, "easeInCirc", 1], translateX: -1250}, 0.80] + ], + reset: {translateX: 0} + }, + /* Animate.css */ + "transition.bounceRightIn": { + defaultDuration: 750, + calls: [ + [{opacity: [1, 0], translateX: [-30, 1250]}, 0.60, {easing: "easeOutCirc"}], + [{translateX: 10}, 0.20], + [{translateX: 0}, 0.20] + ] + }, + /* Animate.css */ + "transition.bounceRightOut": { + defaultDuration: 750, + calls: [ + [{translateX: -30}, 0.20], + [{opacity: [0, "easeInCirc", 1], translateX: 1250}, 0.80] + ], + reset: {translateX: 0} + }, + "transition.slideUpIn": { + defaultDuration: 900, + calls: [ + [{opacity: [1, 0], translateY: [0, 20], translateZ: 0}] + ] + }, + "transition.slideUpOut": { + defaultDuration: 900, + calls: [ + [{opacity: [0, 1], translateY: -20, translateZ: 0}] + ], + reset: {translateY: 0} + }, + "transition.slideDownIn": { + defaultDuration: 900, + calls: [ + [{opacity: [1, 0], translateY: [0, -20], translateZ: 0}] + ] + }, + "transition.slideDownOut": { + defaultDuration: 900, + calls: [ + [{opacity: [0, 1], translateY: 20, translateZ: 0}] + ], + reset: {translateY: 0} + }, + "transition.slideLeftIn": { + defaultDuration: 1000, + calls: [ + [{opacity: [1, 0], translateX: [0, -20], translateZ: 0}] + ] + }, + "transition.slideLeftOut": { + defaultDuration: 1050, + calls: [ + [{opacity: [0, 1], translateX: -20, translateZ: 0}] + ], + reset: {translateX: 0} + }, + "transition.slideRightIn": { + defaultDuration: 1000, + calls: [ + [{opacity: [1, 0], translateX: [0, 20], translateZ: 0}] + ] + }, + "transition.slideRightOut": { + defaultDuration: 1050, + calls: [ + [{opacity: [0, 1], translateX: 20, translateZ: 0}] + ], + reset: {translateX: 0} + }, + "transition.slideUpBigIn": { + defaultDuration: 850, + calls: [ + [{opacity: [1, 0], translateY: [0, 75], translateZ: 0}] + ] + }, + "transition.slideUpBigOut": { + defaultDuration: 800, + calls: [ + [{opacity: [0, 1], translateY: -75, translateZ: 0}] + ], + reset: {translateY: 0} + }, + "transition.slideDownBigIn": { + defaultDuration: 850, + calls: [ + [{opacity: [1, 0], translateY: [0, -75], translateZ: 0}] + ] + }, + "transition.slideDownBigOut": { + defaultDuration: 800, + calls: [ + [{opacity: [0, 1], translateY: 75, translateZ: 0}] + ], + reset: {translateY: 0} + }, + "transition.slideLeftBigIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], translateX: [0, -75], translateZ: 0}] + ] + }, + "transition.slideLeftBigOut": { + defaultDuration: 750, + calls: [ + [{opacity: [0, 1], translateX: -75, translateZ: 0}] + ], + reset: {translateX: 0} + }, + "transition.slideRightBigIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], translateX: [0, 75], translateZ: 0}] + ] + }, + "transition.slideRightBigOut": { + defaultDuration: 750, + calls: [ + [{opacity: [0, 1], translateX: 75, translateZ: 0}] + ], + reset: {translateX: 0} + }, + /* Magic.css */ + "transition.perspectiveUpIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: ["100%", "100%"], rotateX: [0, -180]}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveUpOut": { + defaultDuration: 850, + calls: [ + [{opacity: [0, 1], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: ["100%", "100%"], rotateX: -180}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateX: 0} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveDownIn": { + defaultDuration: 800, + calls: [ + [{opacity: [1, 0], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateX: [0, 180]}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveDownOut": { + defaultDuration: 850, + calls: [ + [{opacity: [0, 1], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateX: 180}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateX: 0} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveLeftIn": { + defaultDuration: 950, + calls: [ + [{opacity: [1, 0], transformPerspective: [2000, 2000], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateY: [0, -180]}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveLeftOut": { + defaultDuration: 950, + calls: [ + [{opacity: [0, 1], transformPerspective: [2000, 2000], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateY: -180}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateY: 0} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveRightIn": { + defaultDuration: 950, + calls: [ + [{opacity: [1, 0], transformPerspective: [2000, 2000], transformOriginX: ["100%", "100%"], transformOriginY: [0, 0], rotateY: [0, 180]}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"} + }, + /* Magic.css */ + /* Support: Loses rotation in IE9/Android 2.3 (fades only). */ + "transition.perspectiveRightOut": { + defaultDuration: 950, + calls: [ + [{opacity: [0, 1], transformPerspective: [2000, 2000], transformOriginX: ["100%", "100%"], transformOriginY: [0, 0], rotateY: 180}] + ], + reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateY: 0} + } + }; + + /* Register the packaged effects. */ + for (var effectName in Velocity.RegisterEffect.packagedEffects) { + if (Velocity.RegisterEffect.packagedEffects.hasOwnProperty(effectName)) { + Velocity.RegisterEffect(effectName, Velocity.RegisterEffect.packagedEffects[effectName]); + } + } + + /********************* + Sequence Running + **********************/ + + /* Note: Sequence calls must use Velocity's single-object arguments syntax. */ + Velocity.RunSequence = function(originalSequence) { + var sequence = $.extend(true, [], originalSequence); + + if (sequence.length > 1) { + $.each(sequence.reverse(), function(i, currentCall) { + var nextCall = sequence[i + 1]; + + if (nextCall) { + /* Parallel sequence calls (indicated via sequenceQueue:false) are triggered + in the previous call's begin callback. Otherwise, chained calls are normally triggered + in the previous call's complete callback. */ + var currentCallOptions = currentCall.o || currentCall.options, + nextCallOptions = nextCall.o || nextCall.options; + + var timing = (currentCallOptions && currentCallOptions.sequenceQueue === false) ? "begin" : "complete", + callbackOriginal = nextCallOptions && nextCallOptions[timing], + options = {}; + + options[timing] = function() { + var nextCallElements = nextCall.e || nextCall.elements; + var elements = nextCallElements.nodeType ? [nextCallElements] : nextCallElements; + + if (callbackOriginal) { + callbackOriginal.call(elements, elements); + } + Velocity(currentCall); + }; + + if (nextCall.o) { + nextCall.o = $.extend({}, nextCallOptions, options); + } else { + nextCall.options = $.extend({}, nextCallOptions, options); + } + } + }); + + sequence.reverse(); + } + + Velocity(sequence[0]); + }; + }((window.jQuery || window.Zepto || window), window, (window ? window.document : undefined)); +})); diff --git a/express/Campari-vue/app/test/e2e/custom-assertions/elementCount.js b/express/Campari-vue/app/test/e2e/custom-assertions/elementCount.js new file mode 100644 index 0000000..c0d5fe0 --- /dev/null +++ b/express/Campari-vue/app/test/e2e/custom-assertions/elementCount.js @@ -0,0 +1,26 @@ +// A custom Nightwatch assertion. +// the name of the method is the filename. +// can be used in tests like this: +// +// browser.assert.elementCount(selector, count) +// +// for how to write custom assertions see +// http://nightwatchjs.org/guide#writing-custom-assertions +exports.assertion = function (selector, count) { + this.message = 'Testing if element <' + selector + '> has count: ' + count + this.expected = count + this.pass = function (val) { + return val === this.expected + } + this.value = function (res) { + return res.value + } + this.command = function (cb) { + var self = this + return this.api.execute(function (selector) { + return document.querySelectorAll(selector).length + }, [selector], function (res) { + cb.call(self, res) + }) + } +} diff --git a/express/Campari-vue/app/test/e2e/nightwatch.conf.js b/express/Campari-vue/app/test/e2e/nightwatch.conf.js new file mode 100644 index 0000000..e9ad88f --- /dev/null +++ b/express/Campari-vue/app/test/e2e/nightwatch.conf.js @@ -0,0 +1,46 @@ +require('babel-register') +var config = require('../../config') + +// http://nightwatchjs.org/getingstarted#settings-file +module.exports = { + src_folders: ['test/e2e/specs'], + output_folder: 'test/e2e/reports', + custom_assertions_path: ['test/e2e/custom-assertions'], + + selenium: { + start_process: true, + server_path: require('selenium-server').path, + host: '127.0.0.1', + port: 4444, + cli_args: { + 'webdriver.chrome.driver': require('chromedriver').path + } + }, + + test_settings: { + default: { + selenium_port: 4444, + selenium_host: 'localhost', + silent: true, + globals: { + devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) + } + }, + + chrome: { + desiredCapabilities: { + browserName: 'chrome', + javascriptEnabled: true, + acceptSslCerts: true + } + }, + + firefox: { + desiredCapabilities: { + browserName: 'firefox', + javascriptEnabled: true, + acceptSslCerts: true + } + } + } +} diff --git a/express/Campari-vue/app/test/e2e/runner.js b/express/Campari-vue/app/test/e2e/runner.js new file mode 100644 index 0000000..85d67d6 --- /dev/null +++ b/express/Campari-vue/app/test/e2e/runner.js @@ -0,0 +1,33 @@ +// 1. start the dev server using production config +process.env.NODE_ENV = 'testing' +var server = require('../../build/dev-server.js') + +server.ready.then(() => { + // 2. run the nightwatch test suite against it + // to run in additional browsers: + // 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings" + // 2. add it to the --env flag below + // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` + // For more information on Nightwatch's config file, see + // http://nightwatchjs.org/guide#settings-file + var opts = process.argv.slice(2) + if (opts.indexOf('--config') === -1) { + opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) + } + if (opts.indexOf('--env') === -1) { + opts = opts.concat(['--env', 'chrome']) + } + + var spawn = require('cross-spawn') + var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) + + runner.on('exit', function (code) { + server.close() + process.exit(code) + }) + + runner.on('error', function (err) { + server.close() + throw err + }) +}) diff --git a/express/Campari-vue/app/test/e2e/specs/test.js b/express/Campari-vue/app/test/e2e/specs/test.js new file mode 100644 index 0000000..a7b1bd9 --- /dev/null +++ b/express/Campari-vue/app/test/e2e/specs/test.js @@ -0,0 +1,19 @@ +// For authoring Nightwatch tests, see +// http://nightwatchjs.org/guide#usage + +module.exports = { + 'default e2e tests': function (browser) { + // automatically uses dev Server port from /config.index.js + // default: http://localhost:8080 + // see nightwatch.conf.js + const devServer = browser.globals.devServerURL + + browser + .url(devServer) + .waitForElementVisible('#app', 5000) + .assert.elementPresent('.hello') + .assert.containsText('h1', 'Welcome to Your Vue.js App') + .assert.elementCount('img', 1) + .end() + } +} diff --git a/express/Campari-vue/app/test/unit/.eslintrc b/express/Campari-vue/app/test/unit/.eslintrc new file mode 100644 index 0000000..959a4f4 --- /dev/null +++ b/express/Campari-vue/app/test/unit/.eslintrc @@ -0,0 +1,9 @@ +{ + "env": { + "mocha": true + }, + "globals": { + "expect": true, + "sinon": true + } +} diff --git a/express/Campari-vue/app/test/unit/index.js b/express/Campari-vue/app/test/unit/index.js new file mode 100644 index 0000000..32f57b6 --- /dev/null +++ b/express/Campari-vue/app/test/unit/index.js @@ -0,0 +1,16 @@ +import Vue from 'vue' +Vue.config.productionTip = false + +// Polyfill fn.bind() for PhantomJS +/* eslint-disable no-extend-native */ +Function.prototype.bind = require('function-bind') + +// require all test files (files that ends with .spec.js) +const testsContext = require.context('./specs', true, /\.spec$/) +testsContext.keys().forEach(testsContext) + +// require all src files except main.js for coverage. +// you can also change this to match only the subset of files that +// you want coverage for. +const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/) +srcContext.keys().forEach(srcContext) diff --git a/express/Campari-vue/app/test/unit/karma.conf.js b/express/Campari-vue/app/test/unit/karma.conf.js new file mode 100644 index 0000000..be5079e --- /dev/null +++ b/express/Campari-vue/app/test/unit/karma.conf.js @@ -0,0 +1,33 @@ +// This is a karma config file. For more details see +// http://karma-runner.github.io/0.13/config/configuration-file.html +// we are also using it with karma-webpack +// https://github.com/webpack/karma-webpack + +var webpackConfig = require('../../build/webpack.test.conf') + +module.exports = function (config) { + config.set({ + // to run in additional browsers: + // 1. install corresponding karma launcher + // http://karma-runner.github.io/0.13/config/browsers.html + // 2. add it to the `browsers` array below. + browsers: ['PhantomJS'], + frameworks: ['mocha', 'sinon-chai'], + reporters: ['spec', 'coverage'], + files: ['./index.js'], + preprocessors: { + './index.js': ['webpack', 'sourcemap'] + }, + webpack: webpackConfig, + webpackMiddleware: { + noInfo: true + }, + coverageReporter: { + dir: './coverage', + reporters: [ + { type: 'lcov', subdir: '.' }, + { type: 'text-summary' } + ] + } + }) +} \ No newline at end of file diff --git a/express/Campari-vue/app/test/unit/specs/Hello.spec.js b/express/Campari-vue/app/test/unit/specs/Hello.spec.js new file mode 100644 index 0000000..80140ba --- /dev/null +++ b/express/Campari-vue/app/test/unit/specs/Hello.spec.js @@ -0,0 +1,11 @@ +import Vue from 'vue' +import Hello from '@/components/Hello' + +describe('Hello.vue', () => { + it('should render correct contents', () => { + const Constructor = Vue.extend(Hello) + const vm = new Constructor().$mount() + expect(vm.$el.querySelector('.hello h1').textContent) + .to.equal('Welcome to Your Vue.js App') + }) +}) diff --git a/express/Campari-vue/lib/passport.js b/express/Campari-vue/lib/passport.js deleted file mode 100644 index 00ced9d..0000000 --- a/express/Campari-vue/lib/passport.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Created by 斌 on 2017/4/15. - */ -const passport = require('passport'); -const User = require('../models/user'); -const Cart = require('../models/cart'); -const LocalStrategy = require('passport-local').Strategy; - -passport.serializeUser( (user, done) => { - done(null, user.id); -} ); -passport.deserializeUser((id, done) => { - User.findById(id, (err, user) => { - if (err || !user) {return done(err, null)} - done(null, user); - }); -}); - -passport.use('local.sign', new LocalStrategy({ - usernameField: 'phone', - passwordField: 'password', - passReqToCallback: true -}, (req, phone, password, done) => { - req.checkBody('phone', 'invalid phone').isPhone(); - req.checkBody('password', 'invalid password').len32(); - let errors = req.validationErrors(); - if (errors) { - return done(null, false, {code:-1, msg:'密码或手机号码不合法', detail: errors}); - } - - User.findOne({'phone': phone}, (err, user) => { - if (err) { - return done(err); - } - if (user) { - return done(null, false, {code: -1, msg: '手机号码已被注册'}); - } - let _user = new User(); - _user.phone = phone; - _user.password = _user.encryptPassword(password); - _user.created = Date.now(); - _user.save() - .then( () => { - console.log(_user.id); - new Cart({ - _owner:_user._id, - lastDate: Date.now(), - products:[] - }).save(function (err) { - console.log(err); - }); - done(null, _user, {code: 1, msg:'success'}) - }) - .catch(err => done(err, false, {code: 2, msg:'数据库出错'})); - }) -})); - -passport.use('local.login', new LocalStrategy({ - usernameField: 'phone', - passwordField: 'password', - passReqToCallback: true, -}, (req, phone, password, done) => { - req.checkBody('phone', 'invalid phone').isPhone(); - req.checkBody('password', 'invalid password').len32(); - let errors = req.validationErrors(); - if (errors) { - return done(null, false, {code: -1, msg:'手机号码或密码不合法', detail: errors}); - } - User.findOne({'phone': phone}, (err, user) => { - if (err) { - return done(err, false, {code:2, msg: '数据库出错', detail: err}); - } - if (!user) { - return done(null, false, {code: -1, msg: '用户不存在'}); - } - if (!user.validPassword(password)) { - return done(null, false, {code: -1, msg: '密码有误'}); - } - return done(null, user, {code: 1, msg: 'success'}); - }); -})); \ No newline at end of file diff --git a/express/Campari-vue/lib/storage.js b/express/Campari-vue/lib/storage.js deleted file mode 100644 index 0c8bdb9..0000000 --- a/express/Campari-vue/lib/storage.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Created by 斌 on 2017/4/7. - */ -const multer = require('multer'); -const path = require('path'); -const fs = require('fs'); - -let dataDir = path.resolve(__dirname, '../public/') + '/data', - vacationPhotoDir = dataDir + '/vacation-photo', - userAvatarDir = dataDir + '/avatar'; -fs.existsSync(dataDir) || fs.mkdirSync(dataDir); -fs.existsSync(vacationPhotoDir) || fs.mkdirSync(vacationPhotoDir); -fs.existsSync(userAvatarDir) || fs.mkdirSync(userAvatarDir); - - -const photoStorage = multer.diskStorage({ - destination(req, file, cb) { - let dir = vacationPhotoDir + '/' + Date.now(); - fs.existsSync(dir) || fs.mkdirSync(dir); - cb(null, dir); - }, - filename(req, file, cb) { - cb(null, file.originalname) - } -}); - -const avatarStorage = multer.diskStorage({ - destination(req, file, cb) { - cb(null, userAvatarDir); - }, - filename(req, file, cb) { - cb(null, req.session.isLogin + '.jpg'); - } - }); -const upload = { - photo: multer({storage: photoStorage}), - avatar: multer({storage: avatarStorage}), - empty() { - return multer().array(); - } -}; -module.exports = upload; \ No newline at end of file diff --git a/express/Campari-vue/models/cart.js b/express/Campari-vue/models/cart.js deleted file mode 100644 index 2c2a5fe..0000000 --- a/express/Campari-vue/models/cart.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Created by 斌 on 2017/4/13. - */ -const mongoose = require('mongoose'); -const Products = require('./product'); -const User = require('../models/user'); -const _ = require('lodash'); - -const cartSchema = mongoose.Schema({ - _owner:String, - lastDate: Date, - products:[{ - sku: String, - - count: Number, - chosen: Boolean - }], -}); - -cartSchema.methods.getCart = function (id) { - let promises = [], self = this; - if (!self.products) { - return []; - } - promises = _.map(self.products, pro => { - return promises.push(Products.findOne({sku: pro.sku})) - .select('-introduce -alcoholic -origin -weight -sales -stock -date') - .then(doc => { - return _.assign(doc, {count: pro.count, chosen: pro.chosen}) - }) - .catch(err => { - console.error(err); - return null; - }); - }); - - return Promise.all(promises); -}; - - -const Cart = mongoose.model('Cart', cartSchema); -module.exports = Cart; \ No newline at end of file diff --git a/express/Campari-vue/models/user.js b/express/Campari-vue/models/user.js deleted file mode 100644 index 8b7aeb5..0000000 --- a/express/Campari-vue/models/user.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Created by 斌 on 2017/4/13. - */ -const mongoose = require('mongoose'); -const bcrypt = require('bcrypt-nodejs'); - -const userSchema = mongoose.Schema({ - phone: String, - created: Date, - password: String, - nick: String, - avatar: String, - opendId: String, -}); - -userSchema.methods.encryptPassword = function (password) { - return bcrypt.hashSync(password, bcrypt.genSaltSync(5), null); -}; -userSchema.methods.validPassword = function (password) { - return bcrypt.compareSync(password, this.password); -}; - - - -const User = mongoose.model('User', userSchema); -module.exports = User; \ No newline at end of file diff --git a/express/Campari-vue/www/api/address.js b/express/Campari-vue/www/api/address.js new file mode 100644 index 0000000..4b76ef2 --- /dev/null +++ b/express/Campari-vue/www/api/address.js @@ -0,0 +1,155 @@ +/** + * Created by 斌 on 2017/4/16. + */ +const api = require('express').Router(); +const Address = require('../models/address'); +const _ = require('lodash'); +const ensureAuthorized = require('../lib/ensureAuthorized') + + +function errHandle(err, res) { + res.json({code:2, msg:'database err', detail: err}); +} + +function validate(req) { + req.checkBody('province', 'invalid province').len(2, 6); + req.checkBody('city', 'invalid city').len(2, 12); + req.checkBody('detail', 'invalid detail').len(2, 40); + req.checkBody('name', 'invalid name').len(2, 30); + req.checkBody('phone', 'invalid phone').isPhone(); + req.checkBody('isDefault', 'invalid default').isBoolean(); +} + +function setDefault(user) { + Address.findOne({_owner: user, isDefault: true}) + .exec((err, doc) => { + if (err) { + console.log(err); + } + if (doc) { + doc.isDefault = false + doc.save() + } + }) +} + +/** + * id ? + */ +api.get('/:id?', ensureAuthorized, (req, res) => { + let user = req.query._id; + if (!user) { + return res.json({code: -1, msg:'the user is not logged in'}); + } + let params = req.params; + if (!params.id) { + //获取全部的地址 + Address.find({_owner: user}) + .sort('-date') + .select('-_owner -date -__v') + .lean() + .exec((err, docs) => { + if (err) {return errHandle(err, res)} + res.json({code:1, msg:'success', result:docs}); + }); + } else { + //获取某个地址 + Address.findById(params.id, (err, doc) => { + if (err) {return errHandle(err, res)} + if (!doc) { + return res.json({code:0, msg:'invalid id'}) + } + res.json({code:1, msg: 'success', result: doc}); + }); + } +}); + + +/** + * action {delete || update || add} + */ +api.post('/:id?/:action?', ensureAuthorized, (req, res, next) => { + let user = req.body._id; + if (!user) { + return res.json({code: -1, msg:'the user is not logged in'}); + } + let params = req.params; + + if (!params.id) { + return res.json({code:-1, msg:'id must be passed'}); + } + + + //新增地址 + if (params.id === 'add' || (+params.id === 0 && params.action === 'add')) { + validate(req); + let errors = req.validationErrors(); + if (errors) { + return res.json({code:-1, msg:'参数有误', detail:errors}); + } + let body = req.body; + let adr = new Address(_.assign({ + _owner: user, + date: Date.now() + }, _.omit(body, '_id'))); + if (body.isDefault) { + setDefault(user) + } + adr.save((err) => { + if (err) { + return errHandle(err, res); + } + res.json({code:1, msg:'添加成功'}) + }); + } + + //更新 + else if (params.action === 'update') { + validate(req); + let errors = req.validationErrors(); + if (errors) { + return res.json({code:-1, msg:'参数有误', detail:errors}); + } + let body = req.body; + if (body.isDefault) { + setDefault(user) + } + Address.findByIdAndUpdate( + params.id, + {$set: _.assign(body, {date: Date.now()})}, + (err, doc) => { + if (err) {return errHandle(err, res)} + res.json({code: 1, msg:'更新成功'}) + }); + } + + + //删除 + else if (params.action === 'delete') { + Address.findByIdAndRemove( + params.id, + err => { + if (err) {return errHandle(err, res)} + res.json({code:1, msg:'删除成功'}); + } + ) + } + // 设置默认地址 + else if (params.action === 'set-default') { + setDefault(user) + Address.findByIdAndUpdate( + params.id, + {$set: {isDefault: true}}, + err => { + if (err) return errHandle(err, res) + res.json({code: 1, msg:'更新成功'}) + } + ) + } + + else { + res.json({code:2, msg:'invalid action'}); + } +}); + +module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/www/api/cart.js b/express/Campari-vue/www/api/cart.js new file mode 100644 index 0000000..25e948e --- /dev/null +++ b/express/Campari-vue/www/api/cart.js @@ -0,0 +1,257 @@ +/** + * Created by 斌 on 2017/4/16. + */ +const api = require('express').Router() +const Cart = require('../models/cart') +const Product = require('../models/product') +const _ = require('lodash') +const ensureAuthorized = require('../lib/ensureAuthorized') + +/** + * 获取购物车 + * params {action?} null||add||update||delete + * query {sku,by,chosen} + */ +api.get('/', ensureAuthorized, (req, res, next) => { + let user = req.query._id + if (!user) { + return res.json({code: -1, msg: '未知错误,可能时token过期了'}) + } + + Cart.findOne({_owner: user}) + .exec((err, doc) => { + if (err) { + return errHandle(err, res) + } + doc.getCart().then(docs => [ + res.json({code: 1, msg: 'success', result: docs}) + ]).catch(err => { + res.json({code: -1, msg: 'error', detial: err}) + }) + }) +}) + +/** + * a-d-u + */ +api.post('/:action?', ensureAuthorized, (req, res, next) => { + let user = req.body._id + if (!user) { + return res.json({code: -1, msg: '未知错误,可能时token过期了'}) + } + let action = req.params.action + let query = Cart.findOne({_owner: user}) + if (!action) { + query + .exec((err, doc) => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: 'success', result: doc.products}) + }) + } else { + let search = req.body + + switch (action) { + case 'add': + query.exec((err, doc) => { + // 是否出错 + if (err) { + return errHandle(err, res) + } + // 是否有sku + if (!search.sku) { + return res.json({code: 0, msg: 'sku must be passed'}) + } + + // cart中是否已经存在该商品 + let p = doc.products || [] + let has = _.findIndex(p, {sku: search.sku}) + // cart中有此商品 + if (has > -1) { + // count +1 + p[has].count += 1 + // 修改更新时间 + doc.lastDate = Date.now() + doc.save((err, doc) => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: '购物车中本商品数量+1', result: doc}) + }) + return + } + + // cart中没有此商品 + // product表中是否存在该商品 + Product.findOne({sku: search.sku}) + .exec((err, pro) => { + if (err) { + return errHandle(err, res) + } + if (!pro) { + // 不存在 + return res.json({code: -1, msg: `invalid sku, sku for ${search.sku} do not exist`}) + } + // 存在 + doc.lastDate = Date.now() + !doc.products && (doc.products = []) + doc.products.push({sku: search.sku, count: 1, chosen: true}) + doc.save((err, doc) => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: '添加成功', result: doc}) + }) + }) + }) + break + case 'update': + query.exec((err, doc) => { + // 是否出错 + if (err) { + return errHandle(err, res) + } + // 是否有sku + if (!search.sku) { + return res.json({code: 0, msg: 'sku must be passed'}) + } + + // 是否有by或者chosen + if (!+search.by && search.chosen === undefined) { + return res.json({code: 0, msg: 'by or chosen must be passed, and by must be a number'}) + } + + // cart中是否已经存在该商品 + let p = doc.products || [] + let has = _.findIndex(p, {sku: search.sku}) + if (has === -1) { + // 没有,update失败 + return res.json({code: 0, msg: '购物车中没有此商品,更新失败'}) + } + + // 有此商品 + if (search.by) { + // 修改商品数量 + p[has].count += (+search.by) + if (p[has].count < 1) { + p[has].count = 1 + } + } else { + // 修改商品选中状态 + if (search.chosen !== undefined || search.chosen !== '') { + p[has].chosen = !!search.chosen + } + } + doc.lastDate = Date.now() + doc.save(err => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: '更新成功'}) + }) + }) + break + case 'delete': + query.exec((err, doc) => { + // 是否出错 + if (err) { + return errHandle(err, res) + } + // 是否有sku + if (!search.sku) { + return res.json({code: 0, msg: 'sku must be passed'}) + } + + // cart中是否已经存在该商品 + let p = doc.products || [] + if (!p.length) return res.json({code: 0, msg: '购物车中没有任何商品'}) + // 删除全部 + if (+search.sku === -1) { + doc.products = [] + } + // 批量删除 + else if (_.isArray(search.sku)) { + // _.remove(p, i => { + // return _.includes(search.sku, i.sku) + // }) + let temp = _.filter(p, item => !_.includes(search.sku, item.sku)) + doc.products = temp + } + // 单个删除 + else { + // _.remove(doc.products, i => { + // return search.sku === i.sku + // }) + let index = _.findIndex(p, i => search.sku === i.sku) + index > -1 && p.splice(index, 1) + } + doc.save(err => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: '删除成功'}) + }) + }) + break + case 'allChosen': + query.exec((err, doc) => { + // 是否出错 + if (err) { + return errHandle(err, res) + } + let payload = !!search.payload + let p = doc.products || [] + if (!p.length) { + return res.json({code: 0, msg: '购物车中没有任何商品'}) + } + _.forEach(p, item => { + item.chosen = payload + }) + doc.lastDate = Date.now() + doc.save(err => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: '更新成功'}) + }) + }) + break + case 'allDelete': + query.exec((err, doc) => { + // 是否出错 + if (err) { + return errHandle(err, res) + } + let payload = +search.payload + let p = doc.products || [] + if (!p.length) { + return res.json({code: 0, msg: '购物车中没有任何商品'}) + } + if (payload === 1) { + p = [] + } else { + _.remove(p, i => { + return _.includes(payload, i.sku) + }) + } + doc.lastDate = Date.now() + doc.save(err => { + if (err) { + return errHandle(err, res) + } + res.json({code: 1, msg: '删除成功'}) + }) + }) + break + default: + res.json({code: 4, msg: 'invalid action'}) + } + } +}) + +function errHandle (err, res) { + res.json({code: 2, msg: 'database err', detail: err}) +} + +module.exports = api diff --git a/express/Campari-vue/www/api/order.js b/express/Campari-vue/www/api/order.js new file mode 100644 index 0000000..57e3358 --- /dev/null +++ b/express/Campari-vue/www/api/order.js @@ -0,0 +1,128 @@ +/** + * Created by 斌 on 2017/4/16. + */ +const api = require('express').Router(); +const Product = require('../models/product'); +const Order = require('../models/order'); +const _ = require('lodash'); +const ensureAuthorized = require('../lib/ensureAuthorized') + + +function errHandle(err, res) { + res.json({code:2, msg:'database err', detail: err}); +} + +/** + * 下单 + * sku [], + * counts [] + */ +api.post('/placeOrder', ensureAuthorized, (req, res, next) => { + let user = req.body._id + if (!user) { + return res.json({code:-1, msg:'the user is not logged in'}); + } + let body = req.body; + req.checkBody('sku' ,'must be array').isArray(); + req.checkBody('counts', 'must be array').isArray(); + let errors = req.validationErrors(); + if (errors || body.sku.length !== body.counts.length || !body.sku.length) { + return res.json({code:-1, msg:'sku, counts must be array and not empty'}); + } + + Product.find({"sku": {"$in": body.sku}}) + .select('-stock -sales -introduce -date -_id -__v') + .lean() + .exec((err, docs) => { + + if (err) {return errHandle(err, res)} + let products = docs, amount = 0, total = 0; + _.forEach(products, (pro, index) => { + pro.count = body.counts[index]; + total += pro.count; + amount += (pro.count * pro.discounted); + }); + console.log(products); + let date = Date.now(); + let order = new Order({ + customerId: user, + orderNumber: + date + '-' + Math.floor(Math.random()*1000), + date: date, + total: total, + amount: amount, + status: 0, + products: products + }); + order.save(err => { + if (err) {return errHandle(err, res)} + res.json({code:1, msg:'下单完成', result:{orderNumber: order.orderNumber}}) + }); + }) +}); + +/** + * / 全部 + * /-1/orderNumber 某个 + * /0 所有未支付 + * /1 所有已支付 + */ + +api.get('/:status?/:orderNumber?', ensureAuthorized, (req, res, next) => { + let user = req.query._id + if (!user) { + return res.json({code:-1, msg:'the user is not logged in'}); + } + let params = req.params; + if (_.indexOf([-1,0,1], +params.status) === -1) { + //查询全部 + Order.find({customerId: user}) + .select('-customerId -_id -__v') + .exec((err, docs) => { + if (err) {return errHandle(err, res)} + return res.json({code:1, msg:'success', result: docs}); + }); + } + //根据订单号查询某一个 + else if (+params.status === -1 && params.orderNumber) { + Order.findOne({orderNumber: params.orderNumber}) + .select('-customerId -_id -__v') + .exec((err, doc) => { + if (err) {return errHandle(err, res)} + if (!doc) { + return res.json({code:0, msg:'订单号有误'}); + } + return res.json({code:1, msg:'success', result: doc}); + }); + } + + //查询所有未支付 + else if (+params.status === 0) { + Order.find({customerId:user}) + .where('status').equals(0) + .select('-customerId -_id -__v') + .exec((err, docs) => { + if (err) {return errHandle(err, res)} + return res.json({code:1, msg:'success', result: docs}); + }); + } + + //查询所有已支付 + else if (+params.status === 1) { + Order.find({customerId: user}) + .where('status').gte(1) + .select('-customerId -_id -__v') + .exec((err, docs) => { + if (err) {return errHandle(err, res)} + return res.json({code:1, msg:'success', result: docs}); + }); + } + else { + res.json({code:-1, msg:'unknown error'}); + } +}); + +_.forEach([{a:1}, {a:2}], (item, index) => { + console.log(item); +}); + +module.exports = api; \ No newline at end of file diff --git a/express/Campari-vue/www/api/product.js b/express/Campari-vue/www/api/product.js new file mode 100644 index 0000000..3e043db --- /dev/null +++ b/express/Campari-vue/www/api/product.js @@ -0,0 +1,106 @@ +/** + * Created by 斌 on 2017/4/15. + */ +const api = require('express').Router() +const Product = require('../models/product') + +/** + * type 1-7 + * flag 1:date, 2:sales, 3:price + * sort 1:asc, 2:desc + */ + +function query ({flag = 1, sort = 1} = {}) { + let s1, s2 + switch (+flag) { + case 1: + s1 = 'date' + break + case 2: + s1 = 'sales' + break + case 3: + s1 = 'discounted' + break + default: + s1 = 'date' + } + + s2 = +sort === 1 ? '' : '-' + return s2 + s1 +} + +api.get('/query', (req, res, next) => { + let params = req.query + let limit = +params.limit || 0 + if (!+params.flag || !+params.sort) { + return res.json({code: -1, msg: 'invalid params'}) + } + let s = query(params) + if (!params.type || +params.type <= 0 || +params.type > 7) { + Product + .find() + .select('-introduce -sales -stock') + .sort(s) + .limit(limit) + .exec(handler) + return + } + + Product + .find({_type: +params.type}) + .select('-introduce -sales -stock') + .sort(s) + .limit(limit) + .exec(handler) + + function handler (err, docs) { + if (err) { + return res.json({code: 2, msg: '数据库出错', detail: err}) + } + return res.json({code: 1, msg: 'success', result: docs}) + } +}) + +api.get('/query/discount', (req, res, next) => { + let limit = +req.query.limit || 0 + Product + .find() + .select('-introduce -sales -stock') + .$where(function () { + return this.discounted <= this.price + }) + .limit(limit) + .exec((err, docs) => { + if (err) { + return res.json({code: 2, msg: '数据库出错', detail: err}) + } + if (!docs || !docs.length) { + return res.json({code: 1, msg: 'success', result: []}) + } + res.json({code: 1, msg: 'success', result: docs}) + }) +}) + +/** + * 查询某个商品 + */ +api.get('/:sku', (req, res, next) => { + let sku = req.params.sku + if (!sku) { + return res.json({code: -1, msg: 'need sku'}) + } + Product.findOne({sku: sku}) + .select('-sales -stock') + .exec((err, doc) => { + if (err) { + return res.json({code: 2, msg: '数据库出错', detail: err}) + } + if (!doc) { + return res.json({code: -1, msg: `invalid sku, there is no pro with sku =${sku}`}) + } + return res.json({code: 1, msg: 'success', result: doc}) + }) +}) + +module.exports = api diff --git a/express/Campari-vue/www/api/user.js b/express/Campari-vue/www/api/user.js new file mode 100644 index 0000000..e65596f --- /dev/null +++ b/express/Campari-vue/www/api/user.js @@ -0,0 +1,259 @@ +/** + * Created by 斌 on 2017/4/15. + */ +const api = require('express').Router() +const passport = require('passport') +// const upload = require('../lib/storage') +const User = require('../models/user') +const fs = require('fs') +const jwt = require('jsonwebtoken') +const credentials = require('../lib/credentials') +const ensureAuthorized = require('../lib/ensureAuthorized') + +/** + * 注册 + * phone, password + */ +api.post('/register', (req, res, next) => { + passport.authenticate('local.sign', (err, user, info) => { + console.log(err) + if (user) { + let token = jwt.sign({id: user.id}, credentials.cookieSecret, { + expiresIn: '7d' + }) + user.token = token + user.save() + res.cookie('token', token, { + signed: true, + maxAge: 1000 * 60 * 60 * 24 * 7, + httpOnly: true + }) + } + res.json(info) + })(req, res, next) +}) + +/** + * 获取验证码 + */ +api.get('/get-code', (req, res, next) => { + req.checkQuery('phone', 'invalid phone number').isPhone() + let errors = req.validationErrors() + if (errors) { + return res.json({code: -1, result: '手机号码有误', detail: errors}) + } + let code = Math.floor(Math.random() * 10000) + console.log(code) + req.session.tempData = {phone: req.body.phone, code: code} + res.json({code: 1, msg: 'success', result: code}) +}) + +/** + * 查询手机号码是否在数据库中,用于注册等情形 + */ +api.get('/has-phone', (req, res, next) => { + req.checkQuery('phone', 'invalid phone number').isPhone() + let errors = req.validationErrors() + if (errors) { + return res.json({code: -1, result: '手机号码有误', detail: errors}) + } + User.findOne({phone: req.query.phone}, (err, doc) => { + if (err) { + return res.json({code: 2, msg: '数据库出错', detail: err}) + } + console.log(doc) + if (doc) { + return res.json({code: 1, msg: 'success', result: 'has'}) + } else { + return res.json({code: 1, msg: 'success', result: 'no'}) + } + }) +}) + +/** + * 登录 + * phone, password + */ +api.post('/login', (req, res, next) => { + passport.authenticate('local.login', (err, user, info) => { + // 生成token + if (err) { + console.log(err) + } + if (user) { + let token = jwt.sign({id: user.id}, credentials.cookieSecret, { + expiresIn: '7d' + }) + user.token = token + user.save() + res.cookie('token', token, { + signed: true, + maxAge: 1000 * 60 * 60 * 24 * 7, + httpOnly: true + }) + } + res.json(Object.assign(info)) + })(req, res, next) +}) + +/** + * 获取登录状态 + */ +api.get('/login-status', (req, res, next) => { + let token = req.signedCookies['token'] + console.log(token) + if (!token) { + return res.json({code: 0, msg: 'logout'}) + } + User.findOne({token: token}) + .select('phone nick avatar') + .lean() + .exec((err, doc) => { + if (err) { + return res.json({code: 2, msg: '数据库出错', detail: err}) + } + if (!doc) { + return res.json({code: -1, msg: '没有数据'}) + } + return res.json({code: 1, msg: 'success', result: doc}) + }) +}) + +// 登出 +api.get('/logout', (req, res, next) => { + res.clearCookie('token') + res.json({code: 1}) +}) + +/** + * 修改密码 + * params + * old, _new, _newRepeat + */ +api.post('/modify-password', ensureAuthorized, (req, res, next) => { + if (req.body._new !== req.body._newRepeat) { + return res.json({code: -1, msg: '两次输入的密码不一致'}) + } + req.checkBody('old', 'invalid pass').len32() + req.checkBody('_new', 'invalid pass').len32() + let errors = req.validationErrors() + if (errors) { + console.error(errors) + return res.json({ + code: -1, + msg: '密码格式有误' + }) + } + if (req.body.old === req.body._new) { + return res.json({ + code: -1, + msg: '新旧密码不能一样' + }) + } + + User.findOne({token: req.token}, (err, doc) => { + if (err) { + console.error(err) + return res.json({code: 3, msg: '未知错误', detail: err}) + } + if (!doc) { + return res.json({code: -4, msg: 'token失效'}) + } + if (!doc.validPassword(req.body.old)) { + return res.json({code: 0, msg: '原密码有误'}) + } + + doc.password = doc.encryptPassword(req.body._new) + doc.save() + .then(() => res.json({code: 1, msg: '修改成功'})) + .catch(err => { + console.error(err) + res.json({code: -1, msg: '修改失败', detail: err}) + }) + }) +}) + +/** + * 忘记密码 + * _new, _newRepeat + */ +api.post('/forget', (req, res, next) => { + if (req.body._new !== req.body._newRepeat) { + return res.json({code: -1, msg: '两次输入的密码不一致'}) + } + req.checkBody('_new', 'invalid pass').len32() + req.checkBody('phone', 'invalid phone').isPhone() + let errors = req.validationErrors() + if (errors) { + return res.json({code: -1, msg: errors}) + } + + User.findOne({phone: req.body.phone}, (err, doc) => { + if (err || !doc) { + console.error(err) + return res.json({code: 3, msg: '未知错误', detail: err}) + } + doc.password = doc.encryptPassword(req.body._new) + doc.save() + .then(() => res.json({code: 1, msg: '修改成功'})) + .catch(err => { + console.error(err) + res.json({code: 2, msg: '修改失败', detail: err}) + }) + }) +}) + +/** + * 修改昵称 + * nick + */ +api.post('/modify-nick', ensureAuthorized, (req, res, next) => { + req.checkBody('nick', 'invalid nick').len(2, 30) + if (req.validationErrors()) { + return res.json({code: -1, msg: '昵称长度为2-30个字符'}) + } + User.findOne({token: req.token}, (err, doc) => { + if (err || !doc) { + console.error(err) + return res.json({code: 3, msg: '未知错误', detail: err}) + } + doc.nick = req.body.nick + doc.save() + .then(() => res.json({code: 1, msg: '修改成功'})) + .catch(err => { + console.error(err) + res.json({code: 2, msg: '修改失败', detail: err}) + }) + }) +}) + +/** + * 修改头像 + * FormData + */ +api.post('/modify-avatar', ensureAuthorized, (req, res, next) => { + let imgData = req.body.avatar + let base64 = imgData.replace(/^data:image\/\w+;base64,/, '') + let dataBuffer = Buffer.from(base64, 'base64') + + User.findOne({token: req.token}, (err, doc) => { + if (err || !doc) { + console.error(err) + return res.json({code: 3, msg: '未知错误', detail: err}) + } + fs.writeFile('public/uploads/avatar/' + doc._id + '.jpg', dataBuffer, err => { + if (err) { + return res.json({code: -1, msg: '上传失败', detail: err}) + } + doc.avatar = '/uploads/avatar/' + doc._id + '.jpg' + doc.save() + .then(() => res.json({code: 1, msg: 'success', result: doc.avatar})) + .catch(err => { + console.error(err) + res.json({code: 2, msg: '修改失败', detail: err}) + }) + }) + }) +}) + +module.exports = api diff --git a/express/Campari-vue/www/app.js b/express/Campari-vue/www/app.js new file mode 100644 index 0000000..080e9b3 --- /dev/null +++ b/express/Campari-vue/www/app.js @@ -0,0 +1,128 @@ +const express = require('express') +const path = require('path') +const favicon = require('serve-favicon') +const logger = require('morgan') +const cookieParser = require('cookie-parser') +const bodyParser = require('body-parser') +const mongoose = require('mongoose') +const expressValidator = require('express-validator') +const passport = require('passport') +const session = require('express-session') +const RedisStore = require('connect-redis')(session) +const credentials = require('./lib/credentials') +const fs = require('fs') +// const ueditor = require('ueditor') +const _ = require('lodash') + +require('./lib/passport') + +const userApi = require('./api/user') +const productApi = require('./api/product') +const cartApi = require('./api/cart') +const addressApi = require('./api/address') +const orderApi = require('./api/order') + +// 替换mongoose的promise +mongoose.Promise = global.Promise + +const index = require('./routes/index') + +const app = express() + +// view engine setup +app.set('views', path.join(__dirname, 'views')) +app.set('view engine', 'jade') +app.set('port', process.env.port || 3000) + +// uncomment after placing your favicon in /public +app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))) +app.use(logger('dev')) +app.use(bodyParser.json({limit: '50mb'})) +app.use(bodyParser.urlencoded({limit: '50mb', extended: true})) +app.use(cookieParser(credentials.cookieSecret)) +app.use(express.static(path.join(__dirname, 'public'))) +app.use(passport.initialize()) +app.use(expressValidator({ + customValidators: { + isPhone (value) { + return /^0?(13[0-9]|15[0-9]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$/.test(value) + }, + len32 (value) { + return _.trim(value).length === 32 + }, + isArray (value) { + return Array.isArray(value) + } + } +})) + +app.use('/', index) + +app.use('/ueditor', require('./sys/ueditor')) +app.use('/sys/', require('./sys/sys')) + +app.use(session({ + store: new RedisStore({ + port: '6379', + ttl: 60 * 60 * 24 * 7 * 1000, + db: 1 + }), + secret: credentials.cookieSecret, + cookie: { + maxAge: 60 * 1000, + httpOnly: true + } +})) + +app.use('/api', require('cors')()) + +app.use('/api/user', userApi) +app.use('/api/product', productApi) +app.use('/api/cart', cartApi) +app.use('/api/address', addressApi) +app.use('/api/order', orderApi) + +app.post('/test/uploads', (req, res, next) => { + console.log(req.body) + res.json({code: 1}) +}) + +let autoViews = {} +app.use((req, res, next) => { + let path = req.path.toLowerCase() + if (autoViews[path]) return res.render(autoViews[path]) + if (fs.existsSync(`${__dirname}/views${path}.jade`)) { + autoViews[path] = path.replace(/^\//, '') + return res.render(autoViews[path]) + } + next() +}) + +// catch 404 and forward to error handler +app.use(function (req, res, next) { + const err = new Error('Not Found') + err.status = 404 + next(err) +}) + +// error handler +app.use(function (err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message + res.locals.error = req.app.get('env') === 'development' ? err : {} + + // render the error page + res.status(err.status || 500) + res.render('error') +}) + +mongoose.connect(credentials.mongodb.dev.path, err => { + if (!err) { + console.log('connected to mongodb') + } else { + throw err + } +}) + +module.exports = app + diff --git a/express/Campari-vue/bin/www b/express/Campari-vue/www/bin/www similarity index 100% rename from express/Campari-vue/bin/www rename to express/Campari-vue/www/bin/www diff --git a/express/Campari-vue/www/lib/credentials.js b/express/Campari-vue/www/lib/credentials.js new file mode 100644 index 0000000..6d99e39 --- /dev/null +++ b/express/Campari-vue/www/lib/credentials.js @@ -0,0 +1,11 @@ +/** + * Created by 斌 on 2017/4/15. + */ +module.exports = { + cookieSecret: 'm65ueu*3nv2!we^47', + mongodb: { + dev: { + path: 'mongodb://localhost:27017/campari-vue' + } + } +} \ No newline at end of file diff --git a/express/Campari-vue/www/lib/ensureAuthorized.js b/express/Campari-vue/www/lib/ensureAuthorized.js new file mode 100644 index 0000000..1ecb9e4 --- /dev/null +++ b/express/Campari-vue/www/lib/ensureAuthorized.js @@ -0,0 +1,12 @@ +/** + * Created by 斌 on 2017/5/4. + */ +module.exports = function ensureAuthorized (req, res, next) { + let cookie = req.signedCookies['token'] + if (!cookie) { + res.json({code: -5, msg: '请登录'}) + return + } + req.token = cookie + next() +} diff --git a/express/Campari-vue/www/lib/passport.js b/express/Campari-vue/www/lib/passport.js new file mode 100644 index 0000000..1776099 --- /dev/null +++ b/express/Campari-vue/www/lib/passport.js @@ -0,0 +1,97 @@ +/** + * Created by 斌 on 2017/4/15. + */ +const passport = require('passport') +const User = require('../models/user') +const Cart = require('../models/cart') +const LocalStrategy = require('passport-local').Strategy + +passport.serializeUser((user, done) => { + done(null, user.id) +}) +passport.deserializeUser((id, done) => { + User.findById(id, (err, user) => { + if (err || !user) { return done(err, null) } + done(null, user) + }) +}) + +passport.use('local.sign', new LocalStrategy({ + usernameField: 'phone', + passwordField: 'password', + passReqToCallback: true +}, (req, phone, password, done) => { + req.checkBody('phone', 'invalid phone').isPhone() + req.checkBody('password', 'invalid password').len32() + req.checkBody('nick', 'invalid nick').len(2, 20) + let errors = req.validationErrors() + if (errors) { + return done(null, false, {code: -1, msg: '密码或手机号码不合法', detail: errors}) + } + + User.findOne({'phone': phone}, (err, user) => { + if (err) { + return done(err) + } + if (user) { + return done(null, false, {code: -1, msg: '手机号码已被注册'}) + } + let _user = new User() + _user.phone = phone + _user.password = _user.encryptPassword(password) + _user.nick = req.body.nick + _user.created = Date.now() + _user.save() + .then((doc) => { + new Cart({ + _owner: _user._id, + lastDate: Date.now(), + products: [] + }).save(function (err) { + console.log(err) + }) + done(null, _user, {code: 1, msg: 'success'}) + }) + .catch(err => done(err, false, {code: 2, msg: '数据库出错'})) + }) +})) + +passport.use('local.login', new LocalStrategy({ + usernameField: 'phone', + passwordField: 'password', + passReqToCallback: true +}, (req, phone, password, done) => { + req.checkBody('phone', 'invalid phone').isPhone() + req.checkBody('password', 'invalid password').len32() + let errors = req.validationErrors() + if (errors) { + return done(null, false, {code: -1, msg: '手机号码或密码不合法', detail: errors}) + } + User.findOne({'phone': phone}, (err, user) => { + if (err) { + return done(err, false, {code: 2, msg: '数据库出错', detail: err}) + } + if (!user) { + return done(null, false, {code: -1, msg: '用户不存在'}) + } + if (!user.validPassword(password)) { + return done(null, false, {code: -1, msg: '密码有误'}) + } + return done(null, user, {code: 1, msg: 'success'}) + }) +})) + +// passport.use(new LocalStrategy( +// function (username, password, done) { +// User.findOne({ username: username }, function (err, user) { +// if (err) { return done(err) } +// if (!user) { +// return done(null, false, { message: 'Incorrect username.' }) +// } +// if (!user.validPassword(password)) { +// return done(null, false, { message: 'Incorrect password.' }) +// } +// return done(null, user) +// }) +// } +// )) diff --git a/express/Campari-vue/www/lib/storage.js b/express/Campari-vue/www/lib/storage.js new file mode 100644 index 0000000..168dc8e --- /dev/null +++ b/express/Campari-vue/www/lib/storage.js @@ -0,0 +1,29 @@ +/** + * Created by 斌 on 2017/4/7. + */ +const multer = require('multer'); +const path = require('path'); +const fs = require('fs'); + +let dataDir = path.resolve(__dirname, '../public/') + '/images', + proPics = dataDir + '/pro-pics'; +fs.existsSync(dataDir) || fs.mkdirSync(dataDir); +fs.existsSync(proPics) || fs.mkdirSync(proPics); + +const proStorage = multer.diskStorage({ + destination(req, file, cb) { + console.log('xxxx--------------------------------------') + cb(null, proPics); + }, + filename(req, file, cb) { + cb(null, +Date.now() + '.jpg'); + } +}); + +const upload = { + pro: multer({storage: proStorage}), + empty() { + return multer().array(); + } +}; +module.exports = upload; \ No newline at end of file diff --git a/express/Campari-vue/models/___learn.js b/express/Campari-vue/www/models/___learn.js similarity index 100% rename from express/Campari-vue/models/___learn.js rename to express/Campari-vue/www/models/___learn.js diff --git a/express/Campari-vue/models/address.js b/express/Campari-vue/www/models/address.js similarity index 56% rename from express/Campari-vue/models/address.js rename to express/Campari-vue/www/models/address.js index 70aa6c0..777a871 100644 --- a/express/Campari-vue/models/address.js +++ b/express/Campari-vue/www/models/address.js @@ -4,14 +4,15 @@ const mongoose = require('mongoose'); const addressSchema = mongoose.Schema({ - _owner: String, - province: String, - city: String, - detail: String, - name: String, - phone: String, - isDefault: Boolean, - date: Date, + _owner: String, + province: String, + city: String, + detail: String, + name: String, + phone: String, + label: String, + isDefault: Boolean, + date: Date, }); const Address = mongoose.model('Address', addressSchema); diff --git a/express/Campari-vue/www/models/cart.js b/express/Campari-vue/www/models/cart.js new file mode 100644 index 0000000..0725c1a --- /dev/null +++ b/express/Campari-vue/www/models/cart.js @@ -0,0 +1,40 @@ +/** + * Created by 斌 on 2017/4/13. + */ +const mongoose = require('mongoose'); +const Products = require('./product'); +const _ = require('lodash'); + +const cartSchema = mongoose.Schema({ + _owner:String, + lastDate: Date, + products:[{ + sku: String, + count: Number, + chosen: Boolean + }], +}); + +cartSchema.methods.getCart = function () { + let promises = [], self = this; + if (!self.products) { + return Promise.resolve([]) + } + promises = _.map(self.products, pro => { + return Products.findOne({sku: pro.sku}) + .select('-introduce -alcoholic -origin -weight -sales -stock -date') + .lean() + .then(doc => { + return _.assign(doc, {count: pro.count, chosen: pro.chosen}) + }) + .catch(err => { + console.error(err); + return null; + }); + }); + return Promise.all(promises); +}; + + +const Cart = mongoose.model('Cart', cartSchema); +module.exports = Cart; \ No newline at end of file diff --git a/express/Campari-vue/models/order.js b/express/Campari-vue/www/models/order.js similarity index 100% rename from express/Campari-vue/models/order.js rename to express/Campari-vue/www/models/order.js diff --git a/express/Campari-vue/models/product.js b/express/Campari-vue/www/models/product.js similarity index 98% rename from express/Campari-vue/models/product.js rename to express/Campari-vue/www/models/product.js index f664e67..00cf0d2 100644 --- a/express/Campari-vue/models/product.js +++ b/express/Campari-vue/www/models/product.js @@ -22,7 +22,7 @@ const productSchema = mongoose.Schema({ content: Number, weight: Number, origin: String, - type: Number, + _type: Number, introduce: String, date: Date, }); diff --git a/express/Campari-vue/www/models/sys-admin.js b/express/Campari-vue/www/models/sys-admin.js new file mode 100644 index 0000000..4ab4b3f --- /dev/null +++ b/express/Campari-vue/www/models/sys-admin.js @@ -0,0 +1,23 @@ +/** + * Created by 斌 on 2017/4/24. + */ +const mongoose = require('mongoose') +const bcrypt = require('bcrypt-nodejs') + +const adminSchema = mongoose.Schema({ + amount: String, + created: Date, + password: String, + permission: Number +}) + +adminSchema.methods.encryptPassword = function (password) { + return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null) +} +adminSchema.methods.validPassword = function (password) { + return bcrypt.compareSync(password, this.password) +} + +const Admin = mongoose.model('Admin', adminSchema); + +module.exports = Admin; \ No newline at end of file diff --git a/express/Campari-vue/www/models/user.js b/express/Campari-vue/www/models/user.js new file mode 100644 index 0000000..f68f8f3 --- /dev/null +++ b/express/Campari-vue/www/models/user.js @@ -0,0 +1,25 @@ +/** + * Created by 斌 on 2017/4/13. + */ +const mongoose = require('mongoose') +const bcrypt = require('bcrypt-nodejs') + +const userSchema = mongoose.Schema({ + phone: String, + created: Date, + password: String, + nick: String, + avatar: String, + openId: String, + token: String +}) + +userSchema.methods.encryptPassword = function (password) { + return bcrypt.hashSync(password, bcrypt.genSaltSync(5), null) +} +userSchema.methods.validPassword = function (password) { + return bcrypt.compareSync(password, this.password) +} + +const User = mongoose.model('User', userSchema) +module.exports = User diff --git a/express/Campari-vue/package.json b/express/Campari-vue/www/package.json similarity index 58% rename from express/Campari-vue/package.json rename to express/Campari-vue/www/package.json index b0855a9..4ed125c 100644 --- a/express/Campari-vue/package.json +++ b/express/Campari-vue/www/package.json @@ -3,24 +3,35 @@ "version": "0.0.0", "private": true, "scripts": { - "start": "node ./bin/www" + "start": "nodemon ./bin/www" }, "dependencies": { "bcrypt-nodejs": "0.0.3", "body-parser": "~1.17.1", + "bootstrap": "^3.3.7", "connect-redis": "^3.2.0", "cookie-parser": "~1.4.3", "debug": "~2.6.3", "express": "~4.15.2", "express-session": "^1.15.2", "express-validator": "^3.1.3", + "fine-uploader": "^5.14.2", "jade": "~1.11.0", + "jquery": "^3.2.1", + "jsonwebtoken": "^7.4.0", "lodash": "^4.17.4", "mongoose": "^4.9.4", "morgan": "~1.8.1", "multer": "^1.3.0", + "pagination": "git+https://github.com/vanng822/pagination.git", "passport": "^0.3.2", "passport-local": "^1.0.0", - "serve-favicon": "~2.4.2" + "serve-favicon": "~2.4.2", + "ueditor": "^1.2.2", + "vue-quill-editor": "^2.1.2" + }, + "devDependencies": { + "cors": "^2.8.3", + "nodemon": "^1.11.0" } } diff --git a/express/Campari-vue/www/public/favicon.ico b/express/Campari-vue/www/public/favicon.ico new file mode 100644 index 0000000..a5d11c8 Binary files /dev/null and b/express/Campari-vue/www/public/favicon.ico differ diff --git a/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.eot b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.eot differ diff --git a/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.svg b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.ttf b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.ttf differ diff --git a/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.woff b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.woff differ diff --git a/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.woff2 b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/express/Campari-vue/www/public/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-10-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-10-1.jpg new file mode 100644 index 0000000..3866317 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-10-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-10-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-10-2.jpg new file mode 100644 index 0000000..21fd866 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-10-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-11-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-11-1.jpg new file mode 100644 index 0000000..643cdcc Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-11-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-11-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-11-2.jpg new file mode 100644 index 0000000..56b8190 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-11-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-12-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-12-1.jpg new file mode 100644 index 0000000..a88e9a8 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-12-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-12-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-12-2.jpg new file mode 100644 index 0000000..9442c19 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-12-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-13-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-13-1.jpg new file mode 100644 index 0000000..ec7d00a Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-13-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-13-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-13-2.jpg new file mode 100644 index 0000000..e689927 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-13-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-14-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-14-1.jpg new file mode 100644 index 0000000..1e0caab Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-14-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-14-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-14-2.jpg new file mode 100644 index 0000000..825d5ae Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-14-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-14-3.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-14-3.jpg new file mode 100644 index 0000000..32bdb32 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-14-3.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-15-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-15-2.jpg new file mode 100644 index 0000000..5092192 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-15-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-15-3.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-15-3.jpg new file mode 100644 index 0000000..e087e1f Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-15-3.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-16-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-16-2.jpg new file mode 100644 index 0000000..9fb4bca Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-16-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-16-3.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-16-3.jpg new file mode 100644 index 0000000..d49cbed Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-16-3.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-17-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-17-1.jpg new file mode 100644 index 0000000..ae89f10 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-17-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-17-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-17-2.jpg new file mode 100644 index 0000000..6d25e62 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-17-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-18-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-18-1.jpg new file mode 100644 index 0000000..3777a40 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-18-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-18-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-18-2.jpg new file mode 100644 index 0000000..4f41c56 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-18-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-19-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-19-2.jpg new file mode 100644 index 0000000..6d9a4a9 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-19-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-2-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-2-1.jpg new file mode 100644 index 0000000..3573f5c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-2-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-2-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-2-2.jpg new file mode 100644 index 0000000..08924cd Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-2-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-20-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-20-1.jpg new file mode 100644 index 0000000..15eaeba Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-20-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-20-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-20-2.jpg new file mode 100644 index 0000000..5c44bc0 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-20-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-21-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-21-1.jpg new file mode 100644 index 0000000..61998fe Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-21-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-21-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-21-2.jpg new file mode 100644 index 0000000..ab5d5c5 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-21-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-22-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-22-1.jpg new file mode 100644 index 0000000..bcd84dc Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-22-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-22-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-22-2.jpg new file mode 100644 index 0000000..38801ed Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-22-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-23-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-23-2.jpg new file mode 100644 index 0000000..4c07cdd Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-23-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-24-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-24-2.jpg new file mode 100644 index 0000000..30f6067 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-24-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-25-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-25-2.jpg new file mode 100644 index 0000000..6a8b95e Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-25-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-26-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-26-1.jpg new file mode 100644 index 0000000..7b9c2c4 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-26-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-26-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-26-2.jpg new file mode 100644 index 0000000..f43b6fe Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-26-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-27-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-27-1.jpg new file mode 100644 index 0000000..cec0ed4 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-27-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-27-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-27-2.jpg new file mode 100644 index 0000000..999222d Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-27-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-3-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-3-1.jpg new file mode 100644 index 0000000..794622c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-3-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-3-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-3-2.jpg new file mode 100644 index 0000000..77e7073 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-3-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-31-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-31-1.jpg new file mode 100644 index 0000000..1266b78 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-31-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-31-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-31-2.jpg new file mode 100644 index 0000000..ebb8d1c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-31-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-32-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-32-2.jpg new file mode 100644 index 0000000..51055be Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-32-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-33-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-33-2.jpg new file mode 100644 index 0000000..db23a79 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-33-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-34-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-34-2.jpg new file mode 100644 index 0000000..760edee Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-34-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-35-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-35-2.jpg new file mode 100644 index 0000000..8680215 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-35-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-4-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-4-1.jpg new file mode 100644 index 0000000..82f8fe4 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-4-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-5-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-5-1.jpg new file mode 100644 index 0000000..b7fcef5 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-5-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-5-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-5-2.jpg new file mode 100644 index 0000000..d039f2a Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-5-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-8-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-8-1.jpg new file mode 100644 index 0000000..7084ea5 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-8-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-8-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-8-2.jpg new file mode 100644 index 0000000..b83abdb Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-8-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-detail-9-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-detail-9-1.jpg new file mode 100644 index 0000000..fdd2996 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-detail-9-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-1.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-1.jpg new file mode 100644 index 0000000..bd358ec Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-10.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-10.jpg new file mode 100644 index 0000000..5e56d96 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-10.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-11.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-11.jpg new file mode 100644 index 0000000..ebb2203 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-11.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-12.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-12.jpg new file mode 100644 index 0000000..4e30fe4 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-12.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-13.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-13.jpg new file mode 100644 index 0000000..02ec693 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-13.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-14.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-14.jpg new file mode 100644 index 0000000..bd9af23 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-14.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-15.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-15.jpg new file mode 100644 index 0000000..bdd376c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-15.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-16.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-16.jpg new file mode 100644 index 0000000..fa9527c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-16.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-17.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-17.jpg new file mode 100644 index 0000000..04199f0 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-17.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-18.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-18.jpg new file mode 100644 index 0000000..7bb37fc Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-18.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-19.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-19.jpg new file mode 100644 index 0000000..e6f3000 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-19.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-2.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-2.jpg new file mode 100644 index 0000000..cc58c3f Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-20.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-20.jpg new file mode 100644 index 0000000..31c59fe Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-20.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-21.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-21.jpg new file mode 100644 index 0000000..0ef4746 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-21.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-22.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-22.jpg new file mode 100644 index 0000000..597a58b Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-22.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-23.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-23.jpg new file mode 100644 index 0000000..5f4d42f Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-23.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-24.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-24.jpg new file mode 100644 index 0000000..d6733de Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-24.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-25.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-25.jpg new file mode 100644 index 0000000..5af6c75 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-25.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-26.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-26.jpg new file mode 100644 index 0000000..b2e191e Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-26.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-27.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-27.jpg new file mode 100644 index 0000000..ee10858 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-27.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-28.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-28.jpg new file mode 100644 index 0000000..fb445ad Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-28.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-29.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-29.jpg new file mode 100644 index 0000000..9dd13c5 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-29.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-3.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-3.jpg new file mode 100644 index 0000000..0032d9f Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-3.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-30.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-30.jpg new file mode 100644 index 0000000..e47460c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-30.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-31.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-31.jpg new file mode 100644 index 0000000..9eb81cd Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-31.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-32.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-32.jpg new file mode 100644 index 0000000..102fd8b Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-32.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-33.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-33.jpg new file mode 100644 index 0000000..a599083 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-33.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-34.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-34.jpg new file mode 100644 index 0000000..b536a6d Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-34.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-35.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-35.jpg new file mode 100644 index 0000000..ae0813b Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-35.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-4.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-4.jpg new file mode 100644 index 0000000..fafab9b Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-4.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-5.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-5.jpg new file mode 100644 index 0000000..7f8875a Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-5.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-6.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-6.jpg new file mode 100644 index 0000000..27eee2d Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-6.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-7.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-7.jpg new file mode 100644 index 0000000..896bf8a Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-7.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-8.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-8.jpg new file mode 100644 index 0000000..2f8e784 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-8.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/campari-thumb-9.jpg b/express/Campari-vue/www/public/images/asserts/campari-thumb-9.jpg new file mode 100644 index 0000000..fc59b1d Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/campari-thumb-9.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-1.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-1.jpg new file mode 100644 index 0000000..19e4938 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-10.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-10.jpg new file mode 100644 index 0000000..77ed76b Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-10.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-11.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-11.jpg new file mode 100644 index 0000000..32634e5 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-11.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-12.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-12.jpg new file mode 100644 index 0000000..ea1a776 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-12.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-13.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-13.jpg new file mode 100644 index 0000000..ea191d5 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-13.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-2.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-2.jpg new file mode 100644 index 0000000..4830fa2 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-2.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-3.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-3.jpg new file mode 100644 index 0000000..4be4c6d Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-3.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-4.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-4.jpg new file mode 100644 index 0000000..a4012e1 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-4.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-5.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-5.jpg new file mode 100644 index 0000000..ce8ecc3 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-5.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-6.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-6.jpg new file mode 100644 index 0000000..29e1412 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-6.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-7.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-7.jpg new file mode 100644 index 0000000..c871293 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-7.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-8.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-8.jpg new file mode 100644 index 0000000..aec9104 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-8.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-9.jpg b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-9.jpg new file mode 100644 index 0000000..2211f5c Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/cocktail/cocktail-9.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/intro-1.jpg b/express/Campari-vue/www/public/images/asserts/intro-1.jpg new file mode 100644 index 0000000..8503f40 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/intro-1.jpg differ diff --git a/express/Campari-vue/www/public/images/asserts/intro-2.jpg b/express/Campari-vue/www/public/images/asserts/intro-2.jpg new file mode 100644 index 0000000..cb14626 Binary files /dev/null and b/express/Campari-vue/www/public/images/asserts/intro-2.jpg differ diff --git a/express/Campari-vue/www/public/images/bg.jpg b/express/Campari-vue/www/public/images/bg.jpg new file mode 100644 index 0000000..5bdb6f5 Binary files /dev/null and b/express/Campari-vue/www/public/images/bg.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856543961362337792.jpg b/express/Campari-vue/www/public/images/detail/856543961362337792.jpg new file mode 100644 index 0000000..3573f5c Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856543961362337792.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856543961391697920.jpg b/express/Campari-vue/www/public/images/detail/856543961391697920.jpg new file mode 100644 index 0000000..08924cd Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856543961391697920.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856543961429446656.jpg b/express/Campari-vue/www/public/images/detail/856543961429446656.jpg new file mode 100644 index 0000000..794622c Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856543961429446656.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545203438358528.jpg b/express/Campari-vue/www/public/images/detail/856545203438358528.jpg new file mode 100644 index 0000000..3573f5c Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545203438358528.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545203484495872.jpg b/express/Campari-vue/www/public/images/detail/856545203484495872.jpg new file mode 100644 index 0000000..08924cd Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545203484495872.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545203518050304.jpg b/express/Campari-vue/www/public/images/detail/856545203518050304.jpg new file mode 100644 index 0000000..794622c Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545203518050304.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545780297764864.jpg b/express/Campari-vue/www/public/images/detail/856545780297764864.jpg new file mode 100644 index 0000000..3573f5c Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545780297764864.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545780364873728.jpg b/express/Campari-vue/www/public/images/detail/856545780364873728.jpg new file mode 100644 index 0000000..08924cd Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545780364873728.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545780398428160.jpg b/express/Campari-vue/www/public/images/detail/856545780398428160.jpg new file mode 100644 index 0000000..7084ea5 Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545780398428160.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856545780541034496.jpg b/express/Campari-vue/www/public/images/detail/856545780541034496.jpg new file mode 100644 index 0000000..b83abdb Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856545780541034496.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856546432725946368.jpg b/express/Campari-vue/www/public/images/detail/856546432725946368.jpg new file mode 100644 index 0000000..3866317 Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856546432725946368.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/856546432759500800.jpg b/express/Campari-vue/www/public/images/detail/856546432759500800.jpg new file mode 100644 index 0000000..21fd866 Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/856546432759500800.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/857050639677657088.jpg b/express/Campari-vue/www/public/images/detail/857050639677657088.jpg new file mode 100644 index 0000000..75975a1 Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/857050639677657088.jpg differ diff --git a/express/Campari-vue/www/public/images/detail/857050639983841280.jpg b/express/Campari-vue/www/public/images/detail/857050639983841280.jpg new file mode 100644 index 0000000..fd4bced Binary files /dev/null and b/express/Campari-vue/www/public/images/detail/857050639983841280.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493048176655.jpg b/express/Campari-vue/www/public/images/pro-pics/1493048176655.jpg new file mode 100644 index 0000000..d012ebc Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493048176655.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493048176679.jpg b/express/Campari-vue/www/public/images/pro-pics/1493048176679.jpg new file mode 100644 index 0000000..89edd38 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493048176679.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493048176693.jpg b/express/Campari-vue/www/public/images/pro-pics/1493048176693.jpg new file mode 100644 index 0000000..7d861aa Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493048176693.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493048176698.jpg b/express/Campari-vue/www/public/images/pro-pics/1493048176698.jpg new file mode 100644 index 0000000..82eee43 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493048176698.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493048176705.jpg b/express/Campari-vue/www/public/images/pro-pics/1493048176705.jpg new file mode 100644 index 0000000..1f05b08 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493048176705.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493050999439.jpg b/express/Campari-vue/www/public/images/pro-pics/1493050999439.jpg new file mode 100644 index 0000000..bd358ec Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493050999439.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051155097.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051155097.jpg new file mode 100644 index 0000000..bd358ec Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051155097.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051294831.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051294831.jpg new file mode 100644 index 0000000..bd358ec Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051294831.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051294833.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051294833.jpg new file mode 100644 index 0000000..cc58c3f Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051294833.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051294836.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051294836.jpg new file mode 100644 index 0000000..0032d9f Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051294836.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051362231.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051362231.jpg new file mode 100644 index 0000000..bd358ec Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051362231.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051362232.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051362232.jpg new file mode 100644 index 0000000..cc58c3f Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051362232.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051362234.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051362234.jpg new file mode 100644 index 0000000..0032d9f Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051362234.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051405537.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051405537.jpg new file mode 100644 index 0000000..27eee2d Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051405537.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051405539.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051405539.jpg new file mode 100644 index 0000000..896bf8a Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051405539.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051578509.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051578509.jpg new file mode 100644 index 0000000..102fd8b Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051578509.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051578510.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051578510.jpg new file mode 100644 index 0000000..a599083 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051578510.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051578513.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051578513.jpg new file mode 100644 index 0000000..b536a6d Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051578513.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493051578514.jpg b/express/Campari-vue/www/public/images/pro-pics/1493051578514.jpg new file mode 100644 index 0000000..ae0813b Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493051578514.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493130262180.jpg b/express/Campari-vue/www/public/images/pro-pics/1493130262180.jpg new file mode 100644 index 0000000..5bdb6f5 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493130262180.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493171815492.jpg b/express/Campari-vue/www/public/images/pro-pics/1493171815492.jpg new file mode 100644 index 0000000..e327fa6 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493171815492.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493191624240.jpg b/express/Campari-vue/www/public/images/pro-pics/1493191624240.jpg new file mode 100644 index 0000000..68ab835 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493191624240.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493192324116.jpg b/express/Campari-vue/www/public/images/pro-pics/1493192324116.jpg new file mode 100644 index 0000000..aaa49e1 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493192324116.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493192618389.jpg b/express/Campari-vue/www/public/images/pro-pics/1493192618389.jpg new file mode 100644 index 0000000..aaa49e1 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493192618389.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493193553131.jpg b/express/Campari-vue/www/public/images/pro-pics/1493193553131.jpg new file mode 100644 index 0000000..0e939de Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493193553131.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493193553133.jpg b/express/Campari-vue/www/public/images/pro-pics/1493193553133.jpg new file mode 100644 index 0000000..d9994e5 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493193553133.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493194289740.jpg b/express/Campari-vue/www/public/images/pro-pics/1493194289740.jpg new file mode 100644 index 0000000..15d2bed Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493194289740.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493194436694.jpg b/express/Campari-vue/www/public/images/pro-pics/1493194436694.jpg new file mode 100644 index 0000000..d8cd0e7 Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493194436694.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493213898714.jpg b/express/Campari-vue/www/public/images/pro-pics/1493213898714.jpg new file mode 100644 index 0000000..15d2bed Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493213898714.jpg differ diff --git a/express/Campari-vue/www/public/images/pro-pics/1493213898745.jpg b/express/Campari-vue/www/public/images/pro-pics/1493213898745.jpg new file mode 100644 index 0000000..b04bf2f Binary files /dev/null and b/express/Campari-vue/www/public/images/pro-pics/1493213898745.jpg differ diff --git a/express/Campari-vue/www/public/javascripts/bootstrap.min.js b/express/Campari-vue/www/public/javascripts/bootstrap.min.js new file mode 100644 index 0000000..9bcd2fc --- /dev/null +++ b/express/Campari-vue/www/public/javascripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/express/Campari-vue/www/public/javascripts/fine-uploader.min.css b/express/Campari-vue/www/public/javascripts/fine-uploader.min.css new file mode 100644 index 0000000..9aff7b4 --- /dev/null +++ b/express/Campari-vue/www/public/javascripts/fine-uploader.min.css @@ -0,0 +1 @@ +.qq-uploader{position:relative;width:100%}.qq-upload-button{display:block;width:105px;padding:7px 0;text-align:center;background:#800;border-bottom:1px solid #ddd;color:#fff}.qq-upload-button-hover{background:#c00}.qq-upload-button-focus{outline:1px dotted #000}.qq-upload-drop-area,.qq-upload-extra-drop-area{position:absolute;top:0;left:0;width:100%;height:100%;min-height:30px;z-index:2;background:#ff9797;text-align:center}.qq-upload-drop-area span{display:block;position:absolute;top:50%;width:100%;margin-top:-8px;font-size:16px}.qq-upload-extra-drop-area{position:relative;margin-top:50px;font-size:16px;padding-top:30px;height:20px;min-height:40px}.qq-upload-drop-area-active{background:#ff7171}.qq-upload-list{margin:0;padding:0;list-style:none}.qq-upload-list li{margin:0;padding:9px;line-height:15px;font-size:16px;background-color:#fff0bd}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-failed-text,.qq-upload-file,.qq-upload-pause,.qq-upload-retry,.qq-upload-size,.qq-upload-spinner{margin-right:12px;display:inline}.qq-upload-spinner{display:inline-block;background:url(loading.gif);width:15px;height:15px;vertical-align:text-bottom}.qq-drop-processing{display:block}.qq-drop-processing-spinner{display:inline-block;background:url(processing.gif);width:24px;height:24px;vertical-align:text-bottom}.qq-upload-continue,.qq-upload-delete,.qq-upload-pause{display:inline}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-pause,.qq-upload-retry{color:#000}.qq-upload-cancel,.qq-upload-continue,.qq-upload-delete,.qq-upload-pause,.qq-upload-retry,.qq-upload-size{font-size:12px;font-weight:400}.qq-upload-failed-text{display:none;font-style:italic;font-weight:700}.qq-upload-failed-icon{display:none;width:15px;height:15px;vertical-align:text-bottom}.qq-upload-fail .qq-upload-failed-text{display:inline}.qq-upload-retrying .qq-upload-failed-text{display:inline;color:#d60000}.qq-upload-list li.qq-upload-success{background-color:#5da30c;color:#fff}.qq-upload-list li.qq-upload-fail{background-color:#d60000;color:#fff}.qq-progress-bar{display:block;background:-moz-linear-gradient(top,rgba(30,87,153,1) 0,rgba(41,137,216,1) 50%,rgba(32,124,202,1) 51%,rgba(125,185,232,1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(30,87,153,1)),color-stop(50%,rgba(41,137,216,1)),color-stop(51%,rgba(32,124,202,1)),color-stop(100%,rgba(125,185,232,1)));background:-webkit-linear-gradient(top,rgba(30,87,153,1) 0,rgba(41,137,216,1) 50%,rgba(32,124,202,1) 51%,rgba(125,185,232,1) 100%);background:-o-linear-gradient(top,rgba(30,87,153,1) 0,rgba(41,137,216,1) 50%,rgba(32,124,202,1) 51%,rgba(125,185,232,1) 100%);background:-ms-linear-gradient(top,rgba(30,87,153,1) 0,rgba(41,137,216,1) 50%,rgba(32,124,202,1) 51%,rgba(125,185,232,1) 100%);background:linear-gradient(to bottom,rgba(30,87,153,1) 0,rgba(41,137,216,1) 50%,rgba(32,124,202,1) 51%,rgba(125,185,232,1) 100%);width:0;height:15px;border-radius:6px;margin-bottom:3px}.qq-total-progress-bar{height:25px;border-radius:9px}.qq-total-progress-bar-container{margin:9px}INPUT.qq-edit-filename{position:absolute;opacity:0;z-index:-1}.qq-upload-file.qq-editable{cursor:pointer}.qq-edit-filename-icon.qq-editable{display:inline-block;cursor:pointer}INPUT.qq-edit-filename.qq-editing{position:static;margin-top:-5px;margin-right:10px;margin-bottom:-5px;opacity:1}.qq-edit-filename-icon{display:none;background:url(edit.gif);width:15px;height:15px;vertical-align:text-bottom;margin-right:5px}.qq-hide{display:none}.qq-uploader DIALOG{display:none}.qq-uploader DIALOG[open]{display:block}.qq-uploader DIALOG{display:none}.qq-uploader DIALOG[open]{display:block}.qq-uploader DIALOG .qq-dialog-buttons{text-align:center;padding-top:10px}.qq-uploader DIALOG .qq-dialog-buttons BUTTON{margin-left:5px;margin-right:5px}.qq-uploader DIALOG .qq-dialog-message-selector{padding-bottom:10px}.qq-uploader DIALOG::backdrop{background-color:rgba(0,0,0,.7)}/*# sourceMappingURL=fine-uploader.min.css.map */ \ No newline at end of file diff --git a/express/Campari-vue/www/public/javascripts/fine-uploader.min.js b/express/Campari-vue/www/public/javascripts/fine-uploader.min.js new file mode 100644 index 0000000..3e186da --- /dev/null +++ b/express/Campari-vue/www/public/javascripts/fine-uploader.min.js @@ -0,0 +1,7 @@ +// Fine Uploader 5.14.2 - (c) 2013-present Widen Enterprises, Inc. MIT licensed. http://fineuploader.com +!function(global){var qq=function(e){"use strict";return{hide:function(){return e.style.display="none",this},attach:function(t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n),function(){qq(e).detach(t,n)}},detach:function(t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.attachEvent&&e.detachEvent("on"+t,n),this},contains:function(t){return!!t&&(e===t||(e.contains?e.contains(t):!!(8&t.compareDocumentPosition(e))))},insertBefore:function(t){return t.parentNode.insertBefore(e,t),this},remove:function(){return e.parentNode.removeChild(e),this},css:function(t){if(null==e.style)throw new qq.Error("Can't apply style to node as it is not on the HTMLElement prototype chain!");return null!=t.opacity&&"string"!=typeof e.style.opacity&&void 0!==e.filters&&(t.filter="alpha(opacity="+Math.round(100*t.opacity)+")"),qq.extend(e.style,t),this},hasClass:function(t,n){var i=new RegExp("(^| )"+t+"( |$)");return i.test(e.className)||!(!n||!i.test(e.parentNode.className))},addClass:function(t){return qq(e).hasClass(t)||(e.className+=" "+t),this},removeClass:function(t){var n=new RegExp("(^| )"+t+"( |$)");return e.className=e.className.replace(n," ").replace(/^\s+|\s+$/g,""),this},getByClass:function(t,n){var i,o=[];return n&&e.querySelector?e.querySelector("."+t):e.querySelectorAll?e.querySelectorAll("."+t):(i=e.getElementsByTagName("*"),qq.each(i,function(e,n){qq(n).hasClass(t)&&o.push(n)}),n?o[0]:o)},getFirstByClass:function(t){return qq(e).getByClass(t,!0)},children:function(){for(var t=[],n=e.firstChild;n;)1===n.nodeType&&t.push(n),n=n.nextSibling;return t},setText:function(t){return e.innerText=t,e.textContent=t,this},clearText:function(){return qq(e).setText("")},hasAttribute:function(t){var n;return e.hasAttribute?!!e.hasAttribute(t)&&null==/^false$/i.exec(e.getAttribute(t)):(n=e[t],void 0!==n&&null==/^false$/i.exec(n))}}};!function(){"use strict";qq.canvasToBlob=function(e,t,n){return qq.dataUriToBlob(e.toDataURL(t,n))},qq.dataUriToBlob=function(e){var t,n,i,o,r=function(e,t){var n=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,i=n&&new n;return i?(i.append(e),i.getBlob(t)):new Blob([e],{type:t})};return n=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):decodeURI(e.split(",")[1]),o=e.split(",")[0].split(":")[1].split(";")[0],t=new ArrayBuffer(n.length),i=new Uint8Array(t),qq.each(n,function(e,t){i[e]=t.charCodeAt(0)}),r(t,o)},qq.log=function(e,t){window.console&&(t&&"info"!==t?window.console[t]?window.console[t](e):window.console.log("<"+t+"> "+e):window.console.log(e))},qq.isObject=function(e){return e&&!e.nodeType&&"[object Object]"===Object.prototype.toString.call(e)},qq.isFunction=function(e){return"function"==typeof e},qq.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)||e&&window.ArrayBuffer&&e.buffer&&e.buffer.constructor===ArrayBuffer},qq.isItemList=function(e){return"[object DataTransferItemList]"===Object.prototype.toString.call(e)},qq.isNodeList=function(e){return"[object NodeList]"===Object.prototype.toString.call(e)||e.item&&e.namedItem},qq.isString=function(e){return"[object String]"===Object.prototype.toString.call(e)},qq.trimStr=function(e){return String.prototype.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},qq.format=function(e){var t=Array.prototype.slice.call(arguments,1),n=e,i=n.indexOf("{}");return qq.each(t,function(e,t){if(n=n.substring(0,i)+t+n.substring(i+2),i=n.indexOf("{}",i+t.length),i<0)return!1}),n},qq.isFile=function(e){return window.File&&"[object File]"===Object.prototype.toString.call(e)},qq.isFileList=function(e){return window.FileList&&"[object FileList]"===Object.prototype.toString.call(e)},qq.isFileOrInput=function(e){return qq.isFile(e)||qq.isInput(e)},qq.isInput=function(e,t){var n=function(e){var n=e.toLowerCase();return t?"file"!==n:"file"===n};return!!(window.HTMLInputElement&&"[object HTMLInputElement]"===Object.prototype.toString.call(e)&&e.type&&n(e.type))||!!(e.tagName&&"input"===e.tagName.toLowerCase()&&e.type&&n(e.type))},qq.isBlob=function(e){if(window.Blob&&"[object Blob]"===Object.prototype.toString.call(e))return!0},qq.isXhrUploadSupported=function(){var e=document.createElement("input");return e.type="file",void 0!==e.multiple&&"undefined"!=typeof File&&"undefined"!=typeof FormData&&void 0!==qq.createXhrInstance().upload},qq.createXhrInstance=function(){if(window.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(e){return qq.log("Neither XHR or ActiveX are supported!","error"),null}},qq.isFolderDropSupported=function(e){return e.items&&e.items.length>0&&e.items[0].webkitGetAsEntry},qq.isFileChunkingSupported=function(){return!qq.androidStock()&&qq.isXhrUploadSupported()&&(void 0!==File.prototype.slice||void 0!==File.prototype.webkitSlice||void 0!==File.prototype.mozSlice)},qq.sliceBlob=function(e,t,n){return(e.slice||e.mozSlice||e.webkitSlice).call(e,t,n)},qq.arrayBufferToHex=function(e){var t="",n=new Uint8Array(e);return qq.each(n,function(e,n){var i=n.toString(16);i.length<2&&(i="0"+i),t+=i}),t},qq.readBlobToHex=function(e,t,n){var i=qq.sliceBlob(e,t,t+n),o=new FileReader,r=new qq.Promise;return o.onload=function(){r.success(qq.arrayBufferToHex(o.result))},o.onerror=r.failure,o.readAsArrayBuffer(i),r},qq.extend=function(e,t,n){return qq.each(t,function(t,i){n&&qq.isObject(i)?(void 0===e[t]&&(e[t]={}),qq.extend(e[t],i,!0)):e[t]=i}),e},qq.override=function(e,t){var n={},i=t(n);return qq.each(i,function(t,i){void 0!==e[t]&&(n[t]=e[t]),e[t]=i}),e},qq.indexOf=function(e,t,n){if(e.indexOf)return e.indexOf(t,n);n=n||0;var i=e.length;for(n<0&&(n+=i);n=0},qq.safari=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Apple")!==-1},qq.chrome=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Google")!==-1},qq.opera=function(){return void 0!==navigator.vendor&&navigator.vendor.indexOf("Opera")!==-1},qq.firefox=function(){return!qq.edge()&&!qq.ie11()&&navigator.userAgent.indexOf("Mozilla")!==-1&&void 0!==navigator.vendor&&""===navigator.vendor},qq.windows=function(){return"Win32"===navigator.platform},qq.android=function(){return navigator.userAgent.toLowerCase().indexOf("android")!==-1},qq.androidStock=function(){return qq.android()&&navigator.userAgent.toLowerCase().indexOf("chrome")<0},qq.ios6=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 6_")!==-1},qq.ios7=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 7_")!==-1},qq.ios8=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 8_")!==-1},qq.ios800=function(){return qq.ios()&&navigator.userAgent.indexOf(" OS 8_0 ")!==-1},qq.ios=function(){return navigator.userAgent.indexOf("iPad")!==-1||navigator.userAgent.indexOf("iPod")!==-1||navigator.userAgent.indexOf("iPhone")!==-1},qq.iosChrome=function(){return qq.ios()&&navigator.userAgent.indexOf("CriOS")!==-1},qq.iosSafari=function(){return qq.ios()&&!qq.iosChrome()&&navigator.userAgent.indexOf("Safari")!==-1},qq.iosSafariWebView=function(){return qq.ios()&&!qq.iosChrome()&&!qq.iosSafari()},qq.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},qq.toElement=function(){var e=document.createElement("div");return function(t){e.innerHTML=t;var n=e.firstChild;return e.removeChild(n),n}}(),qq.each=function(e,t){var n,i;if(e)if(window.Storage&&e.constructor===window.Storage)for(n=0;n0)return e.substr(t,e.length-t)},qq.getFilename=function(e){return qq.isInput(e)?e.value.replace(/.*(\/|\\)/,""):qq.isFile(e)&&null!==e.fileName&&void 0!==e.fileName?e.fileName:e.name},qq.DisposeSupport=function(){var e=[];return{dispose:function(){var t;do t=e.shift(),t&&t();while(t)},attach:function(){var e=arguments;this.addDisposer(qq(e[0]).attach.apply(this,Array.prototype.slice.call(arguments,1)))},addDisposer:function(t){e.push(t)}}}}(),function(){"use strict";"function"==typeof define&&define.amd?define(function(){return qq}):"undefined"!=typeof module&&module.exports?module.exports=qq:global.qq=qq}(),function(){"use strict";qq.Error=function(e){this.message="[Fine Uploader "+qq.version+"] "+e},qq.Error.prototype=new Error}(),qq.version="5.14.2",qq.supportedFeatures=function(){"use strict";function e(){var e,t=!0;try{e=document.createElement("input"),e.type="file",qq(e).hide(),e.disabled&&(t=!1)}catch(e){t=!1}return t}function t(){return(qq.chrome()||qq.opera())&&void 0!==navigator.userAgent.match(/Chrome\/[2][1-9]|Chrome\/[3-9][0-9]/)}function n(){return(qq.chrome()||qq.opera())&&void 0!==navigator.userAgent.match(/Chrome\/[1][4-9]|Chrome\/[2-9][0-9]/)}function i(){if(window.XMLHttpRequest){return void 0!==qq.createXhrInstance().withCredentials}return!1}function o(){return void 0!==window.XDomainRequest}function r(){return!!i()||o()}function a(){return void 0!==document.createElement("input").webkitdirectory}function s(){try{return!!window.localStorage&&qq.isFunction(window.localStorage.setItem)}catch(e){return!1}}function l(){var e=document.createElement("span");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&!qq.android()&&!qq.ios()}var u,c,d,p,h,q,f,m,g,_,b,v,y,S,w;return u=e(),p=u&&qq.isXhrUploadSupported(),c=p&&!qq.androidStock(),d=p&&l(),h=d&&t(),q=p&&qq.isFileChunkingSupported(),f=p&&q&&s(),m=p&&n(),g=u&&(void 0!==window.postMessage||p),b=i(),_=o(),v=r(),y=a(),S=p&&void 0!==window.FileReader,w=function(){return!!p&&(!qq.androidStock()&&!qq.iosChrome())}(),{ajaxUploading:p,blobUploading:c,canDetermineSize:p,chunking:q,deleteFileCors:v,deleteFileCorsXdr:_,deleteFileCorsXhr:b,dialogElement:!!window.HTMLDialogElement,fileDrop:d,folderDrop:h,folderSelection:y,imagePreviews:S,imageValidation:S,itemSizeValidation:p,pause:q,progressBar:w,resume:f,scaling:S&&c,tiffPreviews:qq.safari(),unlimitedScaledImageSize:!qq.ios(),uploading:u,uploadCors:g,uploadCustomHeaders:p,uploadNonMultipart:p,uploadViaPaste:m}}(),qq.isGenericPromise=function(e){"use strict";return!!(e&&e.then&&qq.isFunction(e.then))},qq.Promise=function(){"use strict";var e,t,n=[],i=[],o=[],r=0;qq.extend(this,{then:function(o,a){return 0===r?(o&&n.push(o),a&&i.push(a)):r===-1?a&&a.apply(null,t):o&&o.apply(null,e),this},done:function(n){return 0===r?o.push(n):n.apply(null,void 0===t?e:t),this},success:function(){return r=1,e=arguments,n.length&&qq.each(n,function(t,n){n.apply(null,e)}),o.length&&qq.each(o,function(t,n){n.apply(null,e)}),this},failure:function(){return r=-1,t=arguments,i.length&&qq.each(i,function(e,n){n.apply(null,t)}),o.length&&qq.each(o,function(e,n){n.apply(null,t)}),this}})},qq.BlobProxy=function(e,t){"use strict";qq.extend(this,{referenceBlob:e,create:function(){return t(e)}})},qq.UploadButton=function(e){"use strict";function t(){var e=document.createElement("input");return e.setAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME,i),e.setAttribute("title",a.title),o.setMultiple(a.multiple,e),a.folders&&qq.supportedFeatures.folderSelection&&e.setAttribute("webkitdirectory",""),a.acceptFiles&&e.setAttribute("accept",a.acceptFiles),e.setAttribute("type","file"),e.setAttribute("name",a.name),qq(e).css({position:"absolute",right:0,top:0,fontFamily:"Arial",fontSize:qq.ie()&&!qq.ie8()?"3500px":"118px",margin:0,padding:0,cursor:"pointer",opacity:0}),!qq.ie7()&&qq(e).css({height:"100%"}),a.element.appendChild(e),r.attach(e,"change",function(){a.onChange(e)}),r.attach(e,"mouseover",function(){qq(a.element).addClass(a.hoverClass)}),r.attach(e,"mouseout",function(){qq(a.element).removeClass(a.hoverClass)}),r.attach(e,"focus",function(){qq(a.element).addClass(a.focusClass)}),r.attach(e,"blur",function(){qq(a.element).removeClass(a.focusClass)}),e}var n,i,o=this,r=new qq.DisposeSupport,a={acceptFiles:null,element:null,focusClass:"qq-upload-button-focus",folders:!1,hoverClass:"qq-upload-button-hover",ios8BrowserCrashWorkaround:!1,multiple:!1,name:"qqfile",onChange:function(e){},title:null};qq.extend(a,e),i=qq.getUniqueId(),qq(a.element).css({position:"relative",overflow:"hidden",direction:"ltr"}),qq.extend(this,{getInput:function(){return n},getButtonId:function(){return i},setMultiple:function(e,t){var n=t||this.getInput();a.ios8BrowserCrashWorkaround&&qq.ios8()&&(qq.iosChrome()||qq.iosSafariWebView())?n.setAttribute("multiple",""):e?n.setAttribute("multiple",""):n.removeAttribute("multiple")},setAcceptFiles:function(e){e!==a.acceptFiles&&n.setAttribute("accept",e)},reset:function(){n.parentNode&&qq(n).remove(),qq(a.element).removeClass(a.focusClass),n=null,n=t()}}),n=t()},qq.UploadButton.BUTTON_ID_ATTR_NAME="qq-button-id",qq.UploadData=function(e){"use strict";function t(e){if(qq.isArray(e)){var t=[];return qq.each(e,function(e,n){t.push(o[n])}),t}return o[e]}function n(e){if(qq.isArray(e)){var t=[];return qq.each(e,function(e,n){t.push(o[r[n]])}),t}return o[r[e]]}function i(e){var t=[],n=[].concat(e);return qq.each(n,function(e,n){var i=a[n];void 0!==i&&qq.each(i,function(e,n){t.push(o[n])})}),t}var o=[],r={},a={},s={},l={};qq.extend(this,{addFile:function(t){var n=t.status||qq.status.SUBMITTING,i=o.push({name:t.name,originalName:t.name,uuid:t.uuid,size:null==t.size?-1:t.size,status:n})-1;return t.batchId&&(o[i].batchId=t.batchId,void 0===l[t.batchId]&&(l[t.batchId]=[]),l[t.batchId].push(i)),t.proxyGroupId&&(o[i].proxyGroupId=t.proxyGroupId,void 0===s[t.proxyGroupId]&&(s[t.proxyGroupId]=[]),s[t.proxyGroupId].push(i)),o[i].id=i,r[t.uuid]=i,void 0===a[n]&&(a[n]=[]),a[n].push(i),t.onBeforeStatusChange&&t.onBeforeStatusChange(i),e.onStatusChange(i,null,n),i},retrieve:function(e){return qq.isObject(e)&&o.length?void 0!==e.id?t(e.id):void 0!==e.uuid?n(e.uuid):e.status?i(e.status):void 0:qq.extend([],o,!0)},reset:function(){o=[],r={},a={},l={}},setStatus:function(t,n){var i=o[t].status,r=qq.indexOf(a[i],t);a[i].splice(r,1),o[t].status=n,void 0===a[n]&&(a[n]=[]),a[n].push(t),e.onStatusChange(t,i,n)},uuidChanged:function(e,t){var n=o[e].uuid;o[e].uuid=t,r[t]=e,delete r[n]},updateName:function(e,t){o[e].name=t},updateSize:function(e,t){o[e].size=t},setParentId:function(e,t){o[e].parentId=t},getIdsInProxyGroup:function(e){var t=o[e].proxyGroupId;return t?s[t]:[]},getIdsInBatch:function(e){return l[o[e].batchId]}})},qq.status={SUBMITTING:"submitting",SUBMITTED:"submitted",REJECTED:"rejected",QUEUED:"queued",CANCELED:"canceled",PAUSED:"paused",UPLOADING:"uploading",UPLOAD_RETRYING:"retrying upload",UPLOAD_SUCCESSFUL:"upload successful",UPLOAD_FAILED:"upload failed",DELETE_FAILED:"delete failed",DELETING:"deleting",DELETED:"deleted"},function(){"use strict";qq.basePublicApi={addBlobs:function(e,t,n){this.addFiles(e,t,n)},addInitialFiles:function(e){var t=this;qq.each(e,function(e,n){t._addCannedFile(n)})},addFiles:function(e,t,n){this._maybeHandleIos8SafariWorkaround();var i=0===this._storedIds.length?qq.getUniqueId():this._currentBatchId,o=qq.bind(function(e){this._handleNewFile({blob:e,name:this._options.blobs.defaultName},i,d)},this),r=qq.bind(function(e){this._handleNewFile(e,i,d)},this),a=qq.bind(function(e){var t=qq.canvasToBlob(e);this._handleNewFile({blob:t,name:this._options.blobs.defaultName+".png"},i,d)},this),s=qq.bind(function(e){var t=e.quality&&e.quality/100,n=qq.canvasToBlob(e.canvas,e.type,t);this._handleNewFile({blob:n,name:e.name},i,d)},this),l=qq.bind(function(e){if(qq.isInput(e)&&qq.supportedFeatures.ajaxUploading){var t=Array.prototype.slice.call(e.files),n=this;qq.each(t,function(e,t){n._handleNewFile(t,i,d)})}else this._handleNewFile(e,i,d)},this),u=function(){qq.isFileList(e)&&(e=Array.prototype.slice.call(e)),e=[].concat(e)},c=this,d=[];this._currentBatchId=i,e&&(u(),qq.each(e,function(e,t){qq.isFileOrInput(t)?l(t):qq.isBlob(t)?o(t):qq.isObject(t)?t.blob&&t.name?r(t):t.canvas&&t.name&&s(t):t.tagName&&"canvas"===t.tagName.toLowerCase()?a(t):c.log(t+" is not a valid file container! Ignoring!","warn")}),this.log("Received "+d.length+" files."),this._prepareItemsForUpload(d,t,n))},cancel:function(e){this._handler.cancel(e)},cancelAll:function(){var e=[],t=this;qq.extend(e,this._storedIds),qq.each(e,function(e,n){t.cancel(n)}),this._handler.cancelAll()},clearStoredFiles:function(){this._storedIds=[]},continueUpload:function(e){var t=this._uploadData.retrieve({id:e});return!(!qq.supportedFeatures.pause||!this._options.chunking.enabled)&&(t.status===qq.status.PAUSED?(this.log(qq.format("Paused file ID {} ({}) will be continued. Not paused.",e,this.getName(e))),this._uploadFile(e),!0):(this.log(qq.format("Ignoring continue for file ID {} ({}). Not paused.",e,this.getName(e)),"error"),!1))},deleteFile:function(e){return this._onSubmitDelete(e)},doesExist:function(e){return this._handler.isValid(e)},drawThumbnail:function(e,t,n,i,o){var r,a,s=new qq.Promise;return this._imageGenerator?(r=this._thumbnailUrls[e],a={customResizeFunction:o,maxSize:n>0?n:null,scale:n>0},!i&&qq.supportedFeatures.imagePreviews&&(r=this.getFile(e)),null==r?s.failure({container:t,error:"File or URL not found."}):this._imageGenerator.generate(r,t,a).then(function(e){s.success(e)},function(e,t){s.failure({container:e,error:t||"Problem generating thumbnail"})})):s.failure({container:t,error:"Missing image generator module"}),s},getButton:function(e){return this._getButton(this._buttonIdsForFileIds[e])},getEndpoint:function(e){return this._endpointStore.get(e)},getFile:function(e){return this._handler.getFile(e)||null},getInProgress:function(){return this._uploadData.retrieve({status:[qq.status.UPLOADING,qq.status.UPLOAD_RETRYING,qq.status.QUEUED]}).length},getName:function(e){return this._uploadData.retrieve({id:e}).name},getParentId:function(e){var t=this.getUploads({id:e}),n=null;return t&&void 0!==t.parentId&&(n=t.parentId),n},getResumableFilesData:function(){return this._handler.getResumableFilesData()},getSize:function(e){return this._uploadData.retrieve({id:e}).size},getNetUploads:function(){return this._netUploaded},getRemainingAllowedItems:function(){var e=this._currentItemLimit;return e>0?e-this._netUploadedOrQueued:null},getUploads:function(e){return this._uploadData.retrieve(e)},getUuid:function(e){return this._uploadData.retrieve({id:e}).uuid},log:function(e,t){!this._options.debug||t&&"info"!==t?t&&"info"!==t&&qq.log("[Fine Uploader "+qq.version+"] "+e,t):qq.log("[Fine Uploader "+qq.version+"] "+e)},pauseUpload:function(e){var t=this._uploadData.retrieve({id:e});if(!qq.supportedFeatures.pause||!this._options.chunking.enabled)return!1;if(qq.indexOf([qq.status.UPLOADING,qq.status.UPLOAD_RETRYING],t.status)>=0){if(this._handler.pause(e))return this._uploadData.setStatus(e,qq.status.PAUSED),!0;this.log(qq.format("Unable to pause file ID {} ({}).",e,this.getName(e)),"error")}else this.log(qq.format("Ignoring pause for file ID {} ({}). Not in progress.",e,this.getName(e)),"error");return!1},removeFileRef:function(e){this._handler.expunge(e)},reset:function(){this.log("Resetting uploader..."),this._handler.reset(),this._storedIds=[],this._autoRetries=[],this._retryTimeouts=[],this._preventRetries=[],this._thumbnailUrls=[],qq.each(this._buttons,function(e,t){t.reset()}),this._paramsStore.reset(),this._endpointStore.reset(),this._netUploadedOrQueued=0,this._netUploaded=0,this._uploadData.reset(),this._buttonIdsForFileIds=[],this._pasteHandler&&this._pasteHandler.reset(),this._options.session.refreshOnReset&&this._refreshSessionData(),this._succeededSinceLastAllComplete=[],this._failedSinceLastAllComplete=[],this._totalProgress&&this._totalProgress.reset()},retry:function(e){return this._manualRetry(e)},scaleImage:function(e,t){var n=this;return qq.Scaler.prototype.scaleImage(e,t,{log:qq.bind(n.log,n),getFile:qq.bind(n.getFile,n),uploadData:n._uploadData})},setCustomHeaders:function(e,t){this._customHeadersStore.set(e,t)},setDeleteFileCustomHeaders:function(e,t){this._deleteFileCustomHeadersStore.set(e,t)},setDeleteFileEndpoint:function(e,t){this._deleteFileEndpointStore.set(e,t)},setDeleteFileParams:function(e,t){this._deleteFileParamsStore.set(e,t)},setEndpoint:function(e,t){this._endpointStore.set(e,t)},setForm:function(e){this._updateFormSupportAndParams(e)},setItemLimit:function(e){this._currentItemLimit=e},setName:function(e,t){this._uploadData.updateName(e,t)},setParams:function(e,t){this._paramsStore.set(e,t)},setUuid:function(e,t){return this._uploadData.uuidChanged(e,t)},setStatus:function(e,t){if(!this.getUploads({id:e}))throw new qq.Error(e+" is not a valid file ID.");switch(t){case qq.status.DELETED:this._onDeleteComplete(e,null,!1);break;case qq.status.DELETE_FAILED:this._onDeleteComplete(e,null,!0);break;default:var n="Method setStatus called on '"+name+"' not implemented yet for "+t;throw this.log(n),new qq.Error(n)}},uploadStoredFiles:function(){0===this._storedIds.length?this._itemError("noFilesError"):this._uploadStoredFiles()}},qq.basePrivateApi={_addCannedFile:function(e){var t=this;return this._uploadData.addFile({uuid:e.uuid,name:e.name,size:e.size,status:qq.status.UPLOAD_SUCCESSFUL,onBeforeStatusChange:function(n){e.deleteFileEndpoint&&t.setDeleteFileEndpoint(e.deleteFileEndpoint,n),e.deleteFileParams&&t.setDeleteFileParams(e.deleteFileParams,n),e.thumbnailUrl&&(t._thumbnailUrls[n]=e.thumbnailUrl),t._netUploaded++,t._netUploadedOrQueued++}})},_annotateWithButtonId:function(e,t){qq.isFile(e)&&(e.qqButtonId=this._getButtonId(t))},_batchError:function(e){this._options.callbacks.onError(null,null,e,void 0)},_createDeleteHandler:function(){var e=this;return new qq.DeleteFileAjaxRequester({method:this._options.deleteFile.method.toUpperCase(),maxConnections:this._options.maxConnections,uuidParamName:this._options.request.uuidName,customHeaders:this._deleteFileCustomHeadersStore,paramsStore:this._deleteFileParamsStore,endpointStore:this._deleteFileEndpointStore,cors:this._options.cors,log:qq.bind(e.log,e),onDelete:function(t){e._onDelete(t),e._options.callbacks.onDelete(t)},onDeleteComplete:function(t,n,i){e._onDeleteComplete(t,n,i),e._options.callbacks.onDeleteComplete(t,n,i)}})},_createPasteHandler:function(){var e=this;return new qq.PasteSupport({targetElement:this._options.paste.targetElement,callbacks:{log:qq.bind(e.log,e),pasteReceived:function(t){e._handleCheckedCallback({name:"onPasteReceived",callback:qq.bind(e._options.callbacks.onPasteReceived,e,t),onSuccess:qq.bind(e._handlePasteSuccess,e,t),identifier:"pasted image"})}}})},_createStore:function(e,t){var n={},i=e,o={},r=t,a=function(e){return qq.isObject(e)?qq.extend({},e):e},s=function(){return qq.isFunction(r)?r():r},l=function(e,t){r&&qq.isObject(t)&&qq.extend(t,s()),o[e]&&qq.extend(t,o[e])};return{set:function(e,t){null==t?(n={},i=a(e)):n[t]=a(e)},get:function(e){var t;return t=null!=e&&n[e]?n[e]:a(i),l(e,t),a(t)},addReadOnly:function(e,t){qq.isObject(n)&&(null===e?qq.isFunction(t)?r=t:(r=r||{},qq.extend(r,t)):(o[e]=o[e]||{},qq.extend(o[e],t)))},remove:function(e){return delete n[e]},reset:function(){n={},o={},i=e}}},_createUploadDataTracker:function(){var e=this;return new qq.UploadData({getName:function(t){return e.getName(t)},getUuid:function(t){return e.getUuid(t)},getSize:function(t){return e.getSize(t)},onStatusChange:function(t,n,i){e._onUploadStatusChange(t,n,i),e._options.callbacks.onStatusChange(t,n,i),e._maybeAllComplete(t,i),e._totalProgress&&setTimeout(function(){e._totalProgress.onStatusChange(t,n,i)},0)}})},_createUploadButton:function(e){function t(){return!!qq.supportedFeatures.ajaxUploading&&(!(i._options.workarounds.iosEmptyVideos&&qq.ios()&&!qq.ios6()&&i._isAllowedExtension(r,".mov"))&&(void 0===e.multiple?i._options.multiple:e.multiple))}var n,i=this,o=e.accept||this._options.validation.acceptFiles,r=e.allowedExtensions||this._options.validation.allowedExtensions;return n=new qq.UploadButton({acceptFiles:o,element:e.element,focusClass:this._options.classes.buttonFocus,folders:e.folders,hoverClass:this._options.classes.buttonHover,ios8BrowserCrashWorkaround:this._options.workarounds.ios8BrowserCrash,multiple:t(),name:this._options.request.inputName,onChange:function(e){i._onInputChange(e)},title:null==e.title?this._options.text.fileInputTitle:e.title}),this._disposeSupport.addDisposer(function(){n.dispose()}),i._buttons.push(n),n},_createUploadHandler:function(e,t){var n=this,i={},o={debug:this._options.debug,maxConnections:this._options.maxConnections,cors:this._options.cors,paramsStore:this._paramsStore,endpointStore:this._endpointStore,chunking:this._options.chunking,resume:this._options.resume,blobs:this._options.blobs,log:qq.bind(n.log,n),preventRetryParam:this._options.retry.preventRetryResponseProperty,onProgress:function(e,t,o,r){o<0||r<0||(i[e]?i[e].loaded===o&&i[e].total===r||(n._onProgress(e,t,o,r),n._options.callbacks.onProgress(e,t,o,r)):(n._onProgress(e,t,o,r),n._options.callbacks.onProgress(e,t,o,r)),i[e]={loaded:o,total:r})},onComplete:function(e,t,o,r){delete i[e];var a,s=n.getUploads({id:e}).status;s!==qq.status.UPLOAD_SUCCESSFUL&&s!==qq.status.UPLOAD_FAILED&&(a=n._onComplete(e,t,o,r),a instanceof qq.Promise?a.done(function(){n._options.callbacks.onComplete(e,t,o,r)}):n._options.callbacks.onComplete(e,t,o,r))},onCancel:function(e,t,i){var o=new qq.Promise;return n._handleCheckedCallback({name:"onCancel",callback:qq.bind(n._options.callbacks.onCancel,n,e,t),onFailure:o.failure,onSuccess:function(){i.then(function(){n._onCancel(e,t)}),o.success()},identifier:e}),o},onUploadPrep:qq.bind(this._onUploadPrep,this),onUpload:function(e,t){n._onUpload(e,t),n._options.callbacks.onUpload(e,t)},onUploadChunk:function(e,t,i){n._onUploadChunk(e,i),n._options.callbacks.onUploadChunk(e,t,i)},onUploadChunkSuccess:function(e,t,i,o){n._options.callbacks.onUploadChunkSuccess.apply(n,arguments)},onResume:function(e,t,i){return n._options.callbacks.onResume(e,t,i)},onAutoRetry:function(e,t,i,o){return n._onAutoRetry.apply(n,arguments)},onUuidChanged:function(e,t){n.log("Server requested UUID change from '"+n.getUuid(e)+"' to '"+t+"'"),n.setUuid(e,t)},getName:qq.bind(n.getName,n),getUuid:qq.bind(n.getUuid,n),getSize:qq.bind(n.getSize,n),setSize:qq.bind(n._setSize,n),getDataByUuid:function(e){return n.getUploads({uuid:e})},isQueued:function(e){var t=n.getUploads({id:e}).status;return t===qq.status.QUEUED||t===qq.status.SUBMITTED||t===qq.status.UPLOAD_RETRYING||t===qq.status.PAUSED},getIdsInProxyGroup:n._uploadData.getIdsInProxyGroup,getIdsInBatch:n._uploadData.getIdsInBatch};return qq.each(this._options.request,function(e,t){o[e]=t}),o.customHeaders=this._customHeadersStore,e&&qq.each(e,function(e,t){o[e]=t}),new qq.UploadHandlerController(o,t)},_fileOrBlobRejected:function(e){this._netUploadedOrQueued--,this._uploadData.setStatus(e,qq.status.REJECTED)},_formatSize:function(e){if(0===e)return e+this._options.text.sizeSymbols[0];var t=-1;do e/=1e3,t++;while(e>999);return Math.max(e,.1).toFixed(1)+this._options.text.sizeSymbols[t]},_generateExtraButtonSpecs:function(){var e=this;this._extraButtonSpecs={},qq.each(this._options.extraButtons,function(t,n){var i=n.multiple,o=qq.extend({},e._options.validation,!0),r=qq.extend({},n);void 0===i&&(i=e._options.multiple),r.validation&&qq.extend(o,n.validation,!0),qq.extend(r,{multiple:i,validation:o},!0),e._initExtraButton(r)})},_getButton:function(e){var t=this._extraButtonSpecs[e];return t?t.element:e===this._defaultButtonId?this._options.button:void 0},_getButtonId:function(e){var t,n,i=e;if(i instanceof qq.BlobProxy&&(i=i.referenceBlob),i&&!qq.isBlob(i)){if(qq.isFile(i))return i.qqButtonId;if("input"===i.tagName.toLowerCase()&&"file"===i.type.toLowerCase())return i.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME);if(t=i.getElementsByTagName("input"),qq.each(t,function(e,t){if("file"===t.getAttribute("type"))return n=t,!1}),n)return n.getAttribute(qq.UploadButton.BUTTON_ID_ATTR_NAME)}},_getNotFinished:function(){return this._uploadData.retrieve({status:[qq.status.UPLOADING,qq.status.UPLOAD_RETRYING,qq.status.QUEUED,qq.status.SUBMITTING,qq.status.SUBMITTED,qq.status.PAUSED]}).length},_getValidationBase:function(e){var t=this._extraButtonSpecs[e];return t?t.validation:this._options.validation},_getValidationDescriptor:function(e){return e.file instanceof qq.BlobProxy?{name:qq.getFilename(e.file.referenceBlob),size:e.file.referenceBlob.size}:{name:this.getUploads({id:e.id}).name,size:this.getUploads({id:e.id}).size}},_getValidationDescriptors:function(e){var t=this,n=[];return qq.each(e,function(e,i){n.push(t._getValidationDescriptor(i))}),n},_handleCameraAccess:function(){if(this._options.camera.ios&&qq.ios()){var e=this._options.camera.button,t=e?this._getButtonId(e):this._defaultButtonId,n=this._options;t&&t!==this._defaultButtonId&&(n=this._extraButtonSpecs[t]),n.multiple=!1,null===n.validation.acceptFiles?n.validation.acceptFiles="image/*;capture=camera":n.validation.acceptFiles+=",image/*;capture=camera",qq.each(this._buttons,function(e,i){if(i.getButtonId()===t)return i.setMultiple(n.multiple),i.setAcceptFiles(n.acceptFiles),!1})}},_handleCheckedCallback:function(e){var t=this,n=e.callback();return qq.isGenericPromise(n)?(this.log(e.name+" - waiting for "+e.name+" promise to be fulfilled for "+e.identifier),n.then(function(n){t.log(e.name+" promise success for "+e.identifier),e.onSuccess(n)},function(){e.onFailure?(t.log(e.name+" promise failure for "+e.identifier),e.onFailure()):t.log(e.name+" promise failure for "+e.identifier)})):(n!==!1?e.onSuccess(n):e.onFailure?(this.log(e.name+" - return value was 'false' for "+e.identifier+". Invoking failure callback."), +e.onFailure()):this.log(e.name+" - return value was 'false' for "+e.identifier+". Will not proceed."),n)},_handleNewFile:function(e,t,n){var i=this,o=qq.getUniqueId(),r=-1,a=qq.getFilename(e),s=e.blob||e,l=this._customNewFileHandler?this._customNewFileHandler:qq.bind(i._handleNewFileGeneric,i);!qq.isInput(s)&&s.size>=0&&(r=s.size),l(s,a,o,r,n,t,this._options.request.uuidName,{uploadData:i._uploadData,paramsStore:i._paramsStore,addFileToHandler:function(e,t){i._handler.add(e,t),i._netUploadedOrQueued++,i._trackButton(e)}})},_handleNewFileGeneric:function(e,t,n,i,o,r){var a=this._uploadData.addFile({uuid:n,name:t,size:i,batchId:r});this._handler.add(a,e),this._trackButton(a),this._netUploadedOrQueued++,o.push({id:a,file:e})},_handlePasteSuccess:function(e,t){var n=e.type.split("/")[1],i=t;null==i&&(i=this._options.paste.defaultName),i+="."+n,this.addFiles({name:i,blob:e})},_handleDeleteSuccess:function(e){if(this.getUploads({id:e}).status!==qq.status.DELETED){var t=this.getName(e);this._netUploadedOrQueued--,this._netUploaded--,this._handler.expunge(e),this._uploadData.setStatus(e,qq.status.DELETED),this.log("Delete request for '"+t+"' has succeeded.")}},_handleDeleteFailed:function(e,t){var n=this.getName(e);this._uploadData.setStatus(e,qq.status.DELETE_FAILED),this.log("Delete request for '"+n+"' has failed.","error"),t&&void 0!==t.withCredentials?this._options.callbacks.onError(e,n,"Delete request failed with response code "+t.status,t):this._options.callbacks.onError(e,n,"Delete request failed",t)},_initExtraButton:function(e){var t=this._createUploadButton({accept:e.validation.acceptFiles,allowedExtensions:e.validation.allowedExtensions,element:e.element,folders:e.folders,multiple:e.multiple,title:e.fileInputTitle});this._extraButtonSpecs[t.getButtonId()]=e},_initFormSupportAndParams:function(){this._formSupport=qq.FormSupport&&new qq.FormSupport(this._options.form,qq.bind(this.uploadStoredFiles,this),qq.bind(this.log,this)),this._formSupport&&this._formSupport.attachedToForm?(this._paramsStore=this._createStore(this._options.request.params,this._formSupport.getFormInputsAsObject),this._options.autoUpload=this._formSupport.newAutoUpload,this._formSupport.newEndpoint&&(this._options.request.endpoint=this._formSupport.newEndpoint)):this._paramsStore=this._createStore(this._options.request.params)},_isDeletePossible:function(){return!(!qq.DeleteFileAjaxRequester||!this._options.deleteFile.enabled)&&(!this._options.cors.expected||(!!qq.supportedFeatures.deleteFileCorsXhr||!(!qq.supportedFeatures.deleteFileCorsXdr||!this._options.cors.allowXdr)))},_isAllowedExtension:function(e,t){var n=!1;return!e.length||(qq.each(e,function(e,i){if(qq.isString(i)){var o=new RegExp("\\."+i+"$","i");if(null!=t.match(o))return n=!0,!1}}),n)},_itemError:function(e,t,n){function i(e,t){a=a.replace(e,t)}var o,r,a=this._options.messages[e],s=[],l=[].concat(t),u=l[0],c=this._getButtonId(n),d=this._getValidationBase(c);return qq.each(d.allowedExtensions,function(e,t){qq.isString(t)&&s.push(t)}),o=s.join(", ").toLowerCase(),i("{file}",this._options.formatFileName(u)),i("{extensions}",o),i("{sizeLimit}",this._formatSize(d.sizeLimit)),i("{minSizeLimit}",this._formatSize(d.minSizeLimit)),r=a.match(/(\{\w+\})/g),null!==r&&qq.each(r,function(e,t){i(t,l[e])}),this._options.callbacks.onError(null,u,a,void 0),a},_manualRetry:function(e,t){if(this._onBeforeManualRetry(e))return this._netUploadedOrQueued++,this._uploadData.setStatus(e,qq.status.UPLOAD_RETRYING),t?t(e):this._handler.retry(e),!0},_maybeAllComplete:function(e,t){var n=this,i=this._getNotFinished();t===qq.status.UPLOAD_SUCCESSFUL?this._succeededSinceLastAllComplete.push(e):t===qq.status.UPLOAD_FAILED&&this._failedSinceLastAllComplete.push(e),0===i&&(this._succeededSinceLastAllComplete.length||this._failedSinceLastAllComplete.length)&&setTimeout(function(){n._onAllComplete(n._succeededSinceLastAllComplete,n._failedSinceLastAllComplete)},0)},_maybeHandleIos8SafariWorkaround:function(){var e=this;if(this._options.workarounds.ios8SafariUploads&&qq.ios800()&&qq.iosSafari())throw setTimeout(function(){window.alert(e._options.messages.unsupportedBrowserIos8Safari)},0),new qq.Error(this._options.messages.unsupportedBrowserIos8Safari)},_maybeParseAndSendUploadError:function(e,t,n,i){if(!n.success)if(i&&200!==i.status&&!n.error)this._options.callbacks.onError(e,t,"XHR returned response code "+i.status,i);else{var o=n.error?n.error:this._options.text.defaultResponseError;this._options.callbacks.onError(e,t,o,i)}},_maybeProcessNextItemAfterOnValidateCallback:function(e,t,n,i,o){var r=this;if(t.length>n)if(e||!this._options.validation.stopOnFirstInvalidFile)setTimeout(function(){var e=r._getValidationDescriptor(t[n]),a=r._getButtonId(t[n].file),s=r._getButton(a);r._handleCheckedCallback({name:"onValidate",callback:qq.bind(r._options.callbacks.onValidate,r,e,s),onSuccess:qq.bind(r._onValidateCallbackSuccess,r,t,n,i,o),onFailure:qq.bind(r._onValidateCallbackFailure,r,t,n,i,o),identifier:"Item '"+e.name+"', size: "+e.size})},0);else if(!e)for(;n0&&this._netUploadedOrQueued+1>n?(this._itemError("retryFailTooManyItems"),!1):(this.log("Retrying upload for '"+t+"' (id: "+e+")..."),!0))):(this.log("'"+e+"' is not a valid file ID","error"),!1)},_onCancel:function(e,t){this._netUploadedOrQueued--,clearTimeout(this._retryTimeouts[e]);var n=qq.indexOf(this._storedIds,e);!this._options.autoUpload&&n>=0&&this._storedIds.splice(n,1),this._uploadData.setStatus(e,qq.status.CANCELED)},_onComplete:function(e,t,n,i){return n.success?(n.thumbnailUrl&&(this._thumbnailUrls[e]=n.thumbnailUrl),this._netUploaded++,this._uploadData.setStatus(e,qq.status.UPLOAD_SUCCESSFUL)):(this._netUploadedOrQueued--,this._uploadData.setStatus(e,qq.status.UPLOAD_FAILED),n[this._options.retry.preventRetryResponseProperty]===!0&&(this._preventRetries[e]=!0)),this._maybeParseAndSendUploadError(e,t,n,i),!!n.success},_onDelete:function(e){this._uploadData.setStatus(e,qq.status.DELETING)},_onDeleteComplete:function(e,t,n){this.getName(e);n?this._handleDeleteFailed(e,t):this._handleDeleteSuccess(e)},_onInputChange:function(e){var t;if(qq.supportedFeatures.ajaxUploading){for(t=0;t0&&this.addFiles(e);qq.each(this._buttons,function(e,t){t.reset()})},_onProgress:function(e,t,n,i){this._totalProgress&&this._totalProgress.onIndividualProgress(e,n,i)},_onSubmit:function(e,t){},_onSubmitCallbackSuccess:function(e,t){this._onSubmit.apply(this,arguments),this._uploadData.setStatus(e,qq.status.SUBMITTED),this._onSubmitted.apply(this,arguments),this._options.autoUpload?(this._options.callbacks.onSubmitted.apply(this,arguments),this._uploadFile(e)):(this._storeForLater(e),this._options.callbacks.onSubmitted.apply(this,arguments))},_onSubmitDelete:function(e,t,n){var i,o=this.getUuid(e);return t&&(i=qq.bind(t,this,e,o,n)),this._isDeletePossible()?(this._handleCheckedCallback({name:"onSubmitDelete",callback:qq.bind(this._options.callbacks.onSubmitDelete,this,e),onSuccess:i||qq.bind(this._deleteHandler.sendDelete,this,e,o,n),identifier:e}),!0):(this.log("Delete request ignored for ID "+e+", delete feature is disabled or request not possible due to CORS on a user agent that does not support pre-flighting.","warn"),!1)},_onSubmitted:function(e){},_onTotalProgress:function(e,t){this._options.callbacks.onTotalProgress(e,t)},_onUploadPrep:function(e){},_onUpload:function(e,t){this._uploadData.setStatus(e,qq.status.UPLOADING)},_onUploadChunk:function(e,t){},_onUploadStatusChange:function(e,t,n){n===qq.status.PAUSED&&clearTimeout(this._retryTimeouts[e])},_onValidateBatchCallbackFailure:function(e){var t=this;qq.each(e,function(e,n){t._fileOrBlobRejected(n.id)})},_onValidateBatchCallbackSuccess:function(e,t,n,i,o){var r,a=this._currentItemLimit,s=this._netUploadedOrQueued;0===a||s<=a?t.length>0?this._handleCheckedCallback({name:"onValidate",callback:qq.bind(this._options.callbacks.onValidate,this,e[0],o),onSuccess:qq.bind(this._onValidateCallbackSuccess,this,t,0,n,i),onFailure:qq.bind(this._onValidateCallbackFailure,this,t,0,n,i),identifier:"Item '"+t[0].file.name+"', size: "+t[0].file.size}):this._itemError("noFilesError"):(this._onValidateBatchCallbackFailure(t),r=this._options.messages.tooManyItemsError.replace(/\{netItems\}/g,s).replace(/\{itemLimit\}/g,a),this._batchError(r))},_onValidateCallbackFailure:function(e,t,n,i){var o=t+1;this._fileOrBlobRejected(e[t].id,e[t].file.name),this._maybeProcessNextItemAfterOnValidateCallback(!1,e,o,n,i)},_onValidateCallbackSuccess:function(e,t,n,i){var o=this,r=t+1,a=this._getValidationDescriptor(e[t]);this._validateFileOrBlobData(e[t],a).then(function(){o._upload(e[t].id,n,i),o._maybeProcessNextItemAfterOnValidateCallback(!0,e,r,n,i)},function(){o._maybeProcessNextItemAfterOnValidateCallback(!1,e,r,n,i)})},_prepareItemsForUpload:function(e,t,n){if(0===e.length)return void this._itemError("noFilesError");var i=this._getValidationDescriptors(e),o=this._getButtonId(e[0].file),r=this._getButton(o);this._handleCheckedCallback({name:"onValidateBatch",callback:qq.bind(this._options.callbacks.onValidateBatch,this,i,r),onSuccess:qq.bind(this._onValidateBatchCallbackSuccess,this,i,e,t,n,r),onFailure:qq.bind(this._onValidateBatchCallbackFailure,this,e),identifier:"batch validation"})},_preventLeaveInProgress:function(){var e=this;this._disposeSupport.attach(window,"beforeunload",function(t){if(e.getInProgress())return t=t||window.event,t.returnValue=e._options.messages.onLeave,e._options.messages.onLeave})},_refreshSessionData:function(){var e=this,t=this._options.session;qq.Session&&null!=this._options.session.endpoint&&(this._session||(qq.extend(t,{cors:this._options.cors}),t.log=qq.bind(this.log,this),t.addFileRecord=qq.bind(this._addCannedFile,this),this._session=new qq.Session(t)),setTimeout(function(){e._session.refresh().then(function(t,n){e._sessionRequestComplete(),e._options.callbacks.onSessionRequestComplete(t,!0,n)},function(t,n){e._options.callbacks.onSessionRequestComplete(t,!1,n)})},0))},_sessionRequestComplete:function(){},_setSize:function(e,t){this._uploadData.updateSize(e,t),this._totalProgress&&this._totalProgress.onNewSize(e)},_shouldAutoRetry:function(e,t,n){var i=this._uploadData.retrieve({id:e});return!!(!this._preventRetries[e]&&this._options.retry.enableAuto&&i.status!==qq.status.PAUSED&&(void 0===this._autoRetries[e]&&(this._autoRetries[e]=0),this._autoRetries[e]0&&s.sizeLimit&&r>s.sizeLimit?(this._itemError("sizeError",o,i),l.failure()):r>0&&r=0}function n(e){var t=!1;return qq.each(t,function(e,n){if(qq.indexOf(["Accept","Accept-Language","Content-Language","Content-Type"],n)<0)return t=!0,!1}),t}function i(e){return S.cors.expected&&void 0===e.withCredentials}function o(){var e;return(window.XMLHttpRequest||window.ActiveXObject)&&(e=qq.createXhrInstance(),void 0===e.withCredentials&&(e=new XDomainRequest,e.onload=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onprogress=function(){})),e}function r(e,t){var n=y[e].xhr;return n||(n=t?t:S.cors.expected?o():qq.createXhrInstance(),y[e].xhr=n),n}function a(e){var t,n=qq.indexOf(v,e),i=S.maxConnections;delete y[e],v.splice(n,1),v.length>=i&&n=0?o.send(qq.obj2url(s,"")):s&&S.contentType&&S.contentType.toLowerCase().indexOf("application/json")>=0?o.send(JSON.stringify(s)):o.send(s),o}function c(e,t,n){var i=S.endpointStore.get(e),o=y[e].addToPath;return void 0!=o&&(i+="/"+o),b&&t&&(i=qq.obj2url(t,i)),n&&(i=qq.obj2url(n,i)),i}function d(e){return function(){4===r(e).readyState&&s(e)}}function p(e){var t=S.onProgress;t&&(r(e).upload.onprogress=function(n){n.lengthComputable&&t(e,n.loaded,n.total)})}function h(e){return function(){s(e)}}function q(e){return function(){s(e,!0)}}function f(e){var o=r(e),a=S.customHeaders,s=y[e].additionalHeaders||{},l=S.method,u={};i(o)||(S.acceptHeader&&o.setRequestHeader("Accept",S.acceptHeader),S.allowXRequestedWithAndCacheControl&&(S.cors.expected&&t()&&!n(a)||(o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.setRequestHeader("Cache-Control","no-cache"))),!S.contentType||"POST"!==l&&"PUT"!==l||o.setRequestHeader("Content-Type",S.contentType),qq.extend(u,qq.isFunction(a)?a(e):a),qq.extend(u,s),qq.each(u,function(e,t){o.setRequestHeader(e,t)}))}function m(e){return qq.indexOf(S.successfulResponseCodes[S.method],e)>=0}function g(e,t,n,i,o,r,a){if(y[e]={addToPath:n,additionalParams:i,additionalQueryParams:o,additionalHeaders:r,payload:a},v.push(e)<=S.maxConnections)return u(e,t)}var _,b,v=[],y={},S={acceptHeader:null,validMethods:["PATCH","POST","PUT"],method:"POST",contentType:"application/x-www-form-urlencoded",maxConnections:3,customHeaders:{},endpointStore:{},paramsStore:{},mandatedParams:{},allowXRequestedWithAndCacheControl:!0,successfulResponseCodes:{DELETE:[200,202,204],PATCH:[200,201,202,203,204],POST:[200,201,202,203,204],PUT:[200,201,202,203,204],GET:[200]},cors:{expected:!1,sendCredentials:!1},log:function(e,t){},onSend:function(e){},onComplete:function(e,t,n){},onProgress:null};if(qq.extend(S,e),_=S.log,qq.indexOf(S.validMethods,S.method)<0)throw new Error("'"+S.method+"' is not a supported method for this type of request!");b="GET"===S.method||"DELETE"===S.method,qq.extend(this,{initTransport:function(e){var t,n,i,o,r,a;return{withPath:function(e){return t=e,this},withParams:function(e){return n=e,this},withQueryParams:function(e){return a=e,this},withHeaders:function(e){return i=e,this},withPayload:function(e){return o=e,this},withCacheBuster:function(){return r=!0,this},send:function(s){return r&&qq.indexOf(["GET","DELETE"],S.method)>=0&&(n.qqtimestamp=(new Date).getTime()),g(e,s,t,n,a,i,o)}}},canceled:function(e){a(e)}})},qq.UploadHandler=function(e){"use strict";var t=e.proxy,n={},i=t.onCancel,o=t.getName;qq.extend(this,{add:function(e,t){n[e]=t,n[e].temp={}},cancel:function(e){var t=this,r=new qq.Promise;i(e,o(e),r).then(function(){t.isValid(e)&&(n[e].canceled=!0,t.expunge(e)),r.success()})},expunge:function(e){delete n[e]},getThirdPartyFileId:function(e){return n[e].key},isValid:function(e){return void 0!==n[e]},reset:function(){n={}},_getFileState:function(e){return n[e]},_setThirdPartyFileId:function(e,t){n[e].key=t},_wasCanceled:function(e){return!!n[e].canceled}})},qq.UploadHandlerController=function(e,t){"use strict";var n,i,o,r=this,a=!1,s=!1,l={paramsStore:{},maxConnections:3,chunking:{enabled:!1,multiple:{enabled:!1}},log:function(e,t){},onProgress:function(e,t,n,i){},onComplete:function(e,t,n,i){},onCancel:function(e,t){},onUploadPrep:function(e){},onUpload:function(e,t){},onUploadChunk:function(e,t,n){},onUploadChunkSuccess:function(e,t,n,i){},onAutoRetry:function(e,t,n,i){},onResume:function(e,t,n){},onUuidChanged:function(e,t){},getName:function(e){},setSize:function(e,t){},isQueued:function(e){},getIdsInProxyGroup:function(e){},getIdsInBatch:function(e){}},u={done:function(e,t,n,i){var r=o._getChunkData(e,t);o._getFileState(e).attemptingResume=!1,delete o._getFileState(e).temp.chunkProgress[t],o._getFileState(e).loaded+=r.size,l.onUploadChunkSuccess(e,o._getChunkDataForCallback(r),n,i)},finalize:function(e){var t=l.getSize(e),n=l.getName(e);i("All chunks have been uploaded for "+e+" - finalizing...."),o.finalizeChunks(e).then(function(r,a){i("Finalize successful for "+e);var s=p.normalizeResponse(r,!0);l.onProgress(e,n,t,t),o._maybeDeletePersistedChunkData(e),p.cleanup(e,s,a)},function(t,o){var r=p.normalizeResponse(t,!1);i("Problem finalizing chunks for file ID "+e+" - "+r.error,"error"),r.reset&&u.reset(e),l.onAutoRetry(e,n,r,o)||p.cleanup(e,r,o)})},handleFailure:function(e,t,n,r){var a=l.getName(t);i("Chunked upload request failed for "+t+", chunk "+e),o.clearCachedChunk(t,e);var d,h=p.normalizeResponse(n,!1);h.reset?u.reset(t):(d=qq.indexOf(o._getFileState(t).chunking.inProgress,e),d>=0&&(o._getFileState(t).chunking.inProgress.splice(d,1),o._getFileState(t).chunking.remaining.unshift(e))),o._getFileState(t).temp.ignoreFailure||(s&&(o._getFileState(t).temp.ignoreFailure=!0,i(qq.format("Going to attempt to abort these chunks: {}. These are currently in-progress: {}.",JSON.stringify(Object.keys(o._getXhrs(t))),JSON.stringify(o._getFileState(t).chunking.inProgress))),qq.each(o._getXhrs(t),function(e,n){i(qq.format("Attempting to abort file {}.{}. XHR readyState {}. ",t,e,n.readyState)),n.abort(),n._cancelled=!0}),o.moveInProgressToRemaining(t),c.free(t,!0)),l.onAutoRetry(t,a,h,r)||p.cleanup(t,h,r))},hasMoreParts:function(e){return!!o._getFileState(e).chunking.remaining.length},nextPart:function(e){var t=o._getFileState(e).chunking.remaining.shift();return t>=o._getTotalChunks(e)&&(t=null),t},reset:function(e){i("Server or callback has ordered chunking effort to be restarted on next attempt for item ID "+e,"error"),o._maybeDeletePersistedChunkData(e),o.reevaluateChunking(e),o._getFileState(e).loaded=0},sendNext:function(e){var t=l.getSize(e),n=l.getName(e),r=u.nextPart(e),a=o._getChunkData(e,r),d=o._getFileState(e).attemptingResume,h=o._getFileState(e).chunking.inProgress||[];null==o._getFileState(e).loaded&&(o._getFileState(e).loaded=0),d&&l.onResume(e,n,a)===!1&&(u.reset(e),r=u.nextPart(e),a=o._getChunkData(e,r),d=!1),null==r&&0===h.length?u.finalize(e):(i(qq.format("Sending chunked upload request for item {}.{}, bytes {}-{} of {}.",e,r,a.start+1,a.end,t)),l.onUploadChunk(e,n,o._getChunkDataForCallback(a)),h.push(r),o._getFileState(e).chunking.inProgress=h,s&&c.open(e,r),s&&c.available()&&o._getFileState(e).chunking.remaining.length&&u.sendNext(e),0===a.blob.size?(i(qq.format("Chunk {} for file {} will not be uploaded, zero sized chunk.",r,e),"error"),u.handleFailure(r,e,"File is no longer available",null)):o.uploadChunk(e,r,d).then(function(t,n){i("Chunked upload request succeeded for "+e+", chunk "+r),o.clearCachedChunk(e,r);var a=o._getFileState(e).chunking.inProgress||[],s=p.normalizeResponse(t,!0),l=qq.indexOf(a,r);i(qq.format("Chunk {} for file {} uploaded successfully.",r,e)),u.done(e,r,s,n),l>=0&&a.splice(l,1),o._maybePersistChunkedState(e),u.hasMoreParts(e)||0!==a.length?u.hasMoreParts(e)?u.sendNext(e):i(qq.format("File ID {} has no more chunks to send and these chunk indexes are still marked as in-progress: {}",e,JSON.stringify(a))):u.finalize(e)},function(t,n){u.handleFailure(r,e,t,n)}).done(function(){o.clearXhr(e,r)}))}},c={_open:[],_openChunks:{},_waiting:[],available:function(){var e=l.maxConnections,t=0,n=0;return qq.each(c._openChunks,function(e,i){t++,n+=i.length}),e-(c._open.length-t+n)},free:function(e,t){var n,r=!t,a=qq.indexOf(c._waiting,e),s=qq.indexOf(c._open,e);delete c._openChunks[e],p.getProxyOrBlob(e)instanceof qq.BlobProxy&&(i("Generated blob upload has ended for "+e+", disposing generated blob."),delete o._getFileState(e).file),a>=0?c._waiting.splice(a,1):r&&s>=0&&(c._open.splice(s,1),n=c._waiting.shift(),n>=0&&(c._open.push(n),p.start(n)))},getWaitingOrConnected:function(){var e=[];return qq.each(c._openChunks,function(t,n){n&&n.length&&e.push(parseInt(t))}),qq.each(c._open,function(t,n){c._openChunks[n]||e.push(parseInt(n))}),e=e.concat(c._waiting)},isUsingConnection:function(e){return qq.indexOf(c._open,e)>=0},open:function(e,t){return null==t&&c._waiting.push(e),!!c.available()&&(null==t?(c._waiting.pop(),c._open.push(e)):function(){var n=c._openChunks[e]||[];n.push(t),c._openChunks[e]=n}(),!0)},reset:function(){c._waiting=[],c._open=[]}},d={send:function(e,t){o._getFileState(e).loaded=0,i("Sending simple upload request for "+e),o.uploadFile(e).then(function(n,o){i("Simple upload request succeeded for "+e);var r=p.normalizeResponse(n,!0),a=l.getSize(e);l.onProgress(e,t,a,a),p.maybeNewUuid(e,r),p.cleanup(e,r,o)},function(n,o){i("Simple upload request failed for "+e);var r=p.normalizeResponse(n,!1);l.onAutoRetry(e,t,r,o)||p.cleanup(e,r,o)})}},p={cancel:function(e){i("Cancelling "+e),l.paramsStore.remove(e),c.free(e)},cleanup:function(e,t,n){var i=l.getName(e);l.onComplete(e,i,t,n),o._getFileState(e)&&o._clearXhrs&&o._clearXhrs(e),c.free(e)},getProxyOrBlob:function(e){return o.getProxy&&o.getProxy(e)||o.getFile&&o.getFile(e)},initHandler:function(){o=new(t?qq[t]:qq.traditional)[(qq.supportedFeatures.ajaxUploading?"Xhr":"Form")+"UploadHandler"](l,{getDataByUuid:l.getDataByUuid,getName:l.getName,getSize:l.getSize,getUuid:l.getUuid,log:i,onCancel:l.onCancel,onProgress:l.onProgress,onUuidChanged:l.onUuidChanged}),o._removeExpiredChunkingRecords&&o._removeExpiredChunkingRecords()},isDeferredEligibleForUpload:function(e){return l.isQueued(e)},maybeDefer:function(e,t){return t&&!o.getFile(e)&&t instanceof qq.BlobProxy?(l.onUploadPrep(e),i("Attempting to generate a blob on-demand for "+e),t.create().then(function(t){i("Generated an on-demand blob for "+e),o.updateBlob(e,t),l.setSize(e,t.size),o.reevaluateChunking(e),p.maybeSendDeferredFiles(e)},function(t){var o={};t&&(o.error=t),i(qq.format("Failed to generate blob for ID {}. Error message: {}.",e,t),"error"),l.onComplete(e,l.getName(e),qq.extend(o,n),null),p.maybeSendDeferredFiles(e),c.free(e)}),!1):p.maybeSendDeferredFiles(e)},maybeSendDeferredFiles:function(e){var t=l.getIdsInProxyGroup(e),n=!1;return t&&t.length?(i("Maybe ready to upload proxy group file "+e),qq.each(t,function(t,i){if(p.isDeferredEligibleForUpload(i)&&o.getFile(i))n=i===e,p.now(i);else if(p.isDeferredEligibleForUpload(i))return!1})):(n=!0,p.now(e)),n},maybeNewUuid:function(e,t){void 0!==t.newUuid&&l.onUuidChanged(e,t.newUuid)},normalizeResponse:function(e,t){var n=e;return qq.isObject(e)||(n={},qq.isString(e)&&!t&&(n.error=e)),n.success=t,n},now:function(e){var t=l.getName(e) +;if(!r.isValid(e))throw new qq.Error(e+" is not a valid file ID to upload!");l.onUpload(e,t),a&&o._shouldChunkThisFile(e)?u.sendNext(e):d.send(e,t)},start:function(e){var t=p.getProxyOrBlob(e);return t?p.maybeDefer(e,t):(p.now(e),!0)}};qq.extend(this,{add:function(e,t){o.add.apply(this,arguments)},upload:function(e){return!!c.open(e)&&p.start(e)},retry:function(e){return s&&(o._getFileState(e).temp.ignoreFailure=!1),c.isUsingConnection(e)?p.start(e):r.upload(e)},cancel:function(e){var t=o.cancel(e);qq.isGenericPromise(t)?t.then(function(){p.cancel(e)}):t!==!1&&p.cancel(e)},cancelAll:function(){var e,t=c.getWaitingOrConnected();if(t.length)for(e=t.length-1;e>=0;e--)r.cancel(t[e]);c.reset()},getFile:function(e){return o.getProxy&&o.getProxy(e)?o.getProxy(e).referenceBlob:o.getFile&&o.getFile(e)},isProxied:function(e){return!(!o.getProxy||!o.getProxy(e))},getInput:function(e){if(o.getInput)return o.getInput(e)},reset:function(){i("Resetting upload handler"),r.cancelAll(),c.reset(),o.reset()},expunge:function(e){if(r.isValid(e))return o.expunge(e)},isValid:function(e){return o.isValid(e)},getResumableFilesData:function(){return o.getResumableFilesData?o.getResumableFilesData():[]},getThirdPartyFileId:function(e){if(r.isValid(e))return o.getThirdPartyFileId(e)},pause:function(e){return!!(r.isResumable(e)&&o.pause&&r.isValid(e)&&o.pause(e))&&(c.free(e),o.moveInProgressToRemaining(e),!0)},isResumable:function(e){return!!o.isResumable&&o.isResumable(e)}}),qq.extend(l,e),i=l.log,a=l.chunking.enabled&&qq.supportedFeatures.chunking,s=a&&l.chunking.concurrent.enabled,n=function(){var e={};return e[l.preventRetryParam]=!0,e}(),p.initHandler()},qq.WindowReceiveMessage=function(e){"use strict";var t={log:function(e,t){}},n={};qq.extend(t,e),qq.extend(this,{receiveMessage:function(e,t){var i=function(e){t(e.data)};window.postMessage?n[e]=qq(window).attach("message",i):log("iframe message passing not supported in this browser!","error")},stopReceivingMessages:function(e){if(window.postMessage){var t=n[e];t&&t()}}})},qq.FormUploadHandler=function(e){"use strict";function t(e){delete c[e],p&&(clearTimeout(d[e]),delete d[e],m.stopReceivingMessages(e));var t=document.getElementById(a._getIframeName(e));t&&(t.setAttribute("src","javascript:false;"),qq(t).remove())}function n(e){return e.split("_")[0]}function i(e){var t=qq.toElement("'); + } else { + var url = "http://api.map.baidu.com/staticimage?center=" + center.lng + ',' + center.lat + + "&zoom=" + zoom + "&width=" + size.width + '&height=' + size.height + "&markers=" + point.lng + ',' + point.lat; + editor.execCommand('inserthtml', ''); + } + }; + document.getElementById("address").focus(); + + + + + diff --git a/express/Campari-vue/www/public/ueditor/dialogs/map/show.html b/express/Campari-vue/www/public/ueditor/dialogs/map/show.html new file mode 100644 index 0000000..329cfeb --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/map/show.html @@ -0,0 +1,118 @@ + + + + + + + 百度地图API自定义地图 + + + + + + + +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/music/music.css b/express/Campari-vue/www/public/ueditor/dialogs/music/music.css new file mode 100644 index 0000000..8fb7a94 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/music/music.css @@ -0,0 +1,30 @@ +.wrapper{margin: 5px 10px;} + +.searchBar{height:30px;padding:7px 0 3px;text-align:center;} +.searchBtn{font-size:13px;height:24px;} + +.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;} + +.listPanel{overflow: hidden;} +.panelon{display:block;} +.paneloff{display:none} + +.page{width:220px;margin:20px auto;overflow: hidden;} +.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center} +.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff; + border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;} + +.m-box{width:460px;} +.m-m{float: left;line-height: 20px;height: 20px;} +.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;} +.m-l{float:left;width:40px; } +.m-t{float:left;width:140px;} +.m-s{float:left;width:110px;} +.m-z{float:left;width:100px;} +.m-try-t{float: left;width: 60px;;} + +.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;} +.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;} + +.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat} +.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/music/music.html b/express/Campari-vue/www/public/ueditor/dialogs/music/music.html new file mode 100644 index 0000000..e7ef04f --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/music/music.html @@ -0,0 +1,32 @@ + + + + + 插入音乐 + + + + +
    + +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/music/music.js b/express/Campari-vue/www/public/ueditor/dialogs/music/music.js new file mode 100644 index 0000000..1c538bf --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/music/music.js @@ -0,0 +1,192 @@ +function Music() { + this.init(); +} +(function () { + var pages = [], + panels = [], + selectedItem = null; + Music.prototype = { + total:70, + pageSize:10, + dataUrl:"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common", + playerUrl:"http://box.baidu.com/widget/flash/bdspacesong.swf", + + init:function () { + var me = this; + domUtils.on($G("J_searchName"), "keyup", function (event) { + var e = window.event || event; + if (e.keyCode == 13) { + me.dosearch(); + } + }); + domUtils.on($G("J_searchBtn"), "click", function () { + me.dosearch(); + }); + }, + callback:function (data) { + var me = this; + me.data = data.song_list; + setTimeout(function () { + $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list); + }, 300); + }, + dosearch:function () { + var me = this; + selectedItem = null; + var key = $G('J_searchName').value; + if (utils.trim(key) == "")return false; + key = encodeURIComponent(key); + me._sent(key); + }, + doselect:function (i) { + var me = this; + if (typeof i == 'object') { + selectedItem = i; + } else if (typeof i == 'number') { + selectedItem = me.data[i]; + } + }, + onpageclick:function (id) { + var me = this; + for (var i = 0; i < pages.length; i++) { + $G(pages[i]).className = 'pageoff'; + $G(panels[i]).className = 'paneloff'; + } + $G('page' + id).className = 'pageon'; + $G('panel' + id).className = 'panelon'; + }, + listenTest:function (elem) { + var me = this, + view = $G('J_preview'), + is_play_action = (elem.className == 'm-try'), + old_trying = me._getTryingElem(); + + if (old_trying) { + old_trying.className = 'm-try'; + view.innerHTML = ''; + } + if (is_play_action) { + elem.className = 'm-trying'; + view.innerHTML = me._buildMusicHtml(me._getUrl(true)); + } + }, + _sent:function (param) { + var me = this; + $G('J_resultBar').innerHTML = '
    '; + + utils.loadFile(document, { + src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(), + tag:"script", + type:"text/javascript", + defer:"defer" + }); + }, + _removeHtml:function (str) { + var reg = /<\s*\/?\s*[^>]*\s*>/gi; + return str.replace(reg, ""); + }, + _getUrl:function (isTryListen) { + var me = this; + var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist=' + + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra=' + + encodeURIComponent(me._removeHtml(selectedItem.album_title)) + + '&autoPlay='+isTryListen+'' + '&loop=true'; + return me.playerUrl + "?" + param; + }, + _getTryingElem:function () { + var s = $G('J_listPanel').getElementsByTagName('span'); + + for (var i = 0; i < s.length; i++) { + if (s[i].className == 'm-trying') + return s[i]; + } + return null; + }, + _buildMusicHtml:function (playerUrl) { + var html = ' 12) + return s.substring(0, 5) + '...'; + if (!s) s = " "; + return s; + }, + _rebuildData:function (data) { + var me = this, + newData = [], + d = me.pageSize, + itembox; + for (var i = 0; i < data.length; i++) { + if ((i + d) % d == 0) { + itembox = []; + newData.push(itembox) + } + itembox.push(data[i]); + } + return newData; + }, + _renderTemplate:function (data) { + var me = this; + if (data.length == 0)return '
    ' + lang.emptyTxt + '
    '; + data = me._rebuildData(data); + var s = [], p = [], t = []; + s.push('
    '); + p.push('
    '); + for (var i = 0, tmpList; tmpList = data[i++];) { + panels.push('panel' + i); + pages.push('page' + i); + if (i == 1) { + s.push('
    '); + if (data.length != 1) { + t.push('
    ' + (i ) + '
    '); + } + } else { + s.push('
    '); + t.push('
    ' + (i ) + '
    '); + } + s.push('
    '); + s.push('
    ' + lang.chapter + '' + lang.singer + + '' + lang.special + '' + lang.listenTest + '
    '); + for (var j = 0, tmpObj; tmpObj = tmpList[j++];) { + s.push(''); + } + s.push('
    '); + s.push('
    '); + } + t.reverse(); + p.push(t.join('')); + s.push('
    '); + p.push('
    '); + return s.join('') + p.join(''); + }, + exec:function () { + var me = this; + if (selectedItem == null) return; + $G('J_preview').innerHTML = ""; + editor.execCommand('music', { + url:me._getUrl(false), + width:400, + height:95 + }); + } + }; +})(); + + + diff --git a/express/Campari-vue/www/public/ueditor/dialogs/preview/preview.html b/express/Campari-vue/www/public/ueditor/dialogs/preview/preview.html new file mode 100644 index 0000000..f6b433b --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/preview/preview.html @@ -0,0 +1,40 @@ + + + + + + + + + + +
    + +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/addimg.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/addimg.png new file mode 100644 index 0000000..03a8713 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/addimg.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/brush.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/brush.png new file mode 100644 index 0000000..efa6fdb Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/brush.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/delimg.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/delimg.png new file mode 100644 index 0000000..5a892e4 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/delimg.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/delimgH.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/delimgH.png new file mode 100644 index 0000000..2f0c5c9 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/delimgH.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/empty.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/empty.png new file mode 100644 index 0000000..0375196 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/empty.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/emptyH.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/emptyH.png new file mode 100644 index 0000000..838ca72 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/emptyH.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/eraser.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/eraser.png new file mode 100644 index 0000000..63e87ce Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/eraser.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/redo.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/redo.png new file mode 100644 index 0000000..12cd9bb Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/redo.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/redoH.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/redoH.png new file mode 100644 index 0000000..d9f33d3 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/redoH.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/scale.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/scale.png new file mode 100644 index 0000000..935a3f3 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/scale.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/scaleH.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/scaleH.png new file mode 100644 index 0000000..72e64a9 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/scaleH.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/size.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/size.png new file mode 100644 index 0000000..8366845 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/size.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/undo.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/undo.png new file mode 100644 index 0000000..084c7cc Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/undo.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/undoH.png b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/undoH.png new file mode 100644 index 0000000..fde7eb3 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/images/undoH.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.css b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.css new file mode 100644 index 0000000..b18430d --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.css @@ -0,0 +1,72 @@ +/*common +*/ +body{margin: 0;} +table{width:100%;} +table td{padding:2px 4px;vertical-align: middle;} +a{text-decoration: none;} +em{font-style: normal;} +.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;} +/*module +*/ +.main{margin: 8px;overflow: hidden;} + +.hot{float:left;height:335px;} +.drawBoard{position: relative; cursor: crosshair;} +.brushBorad{position: absolute;left:0;top:0;z-index: 998;} +.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;} +.operateBar{margin-top:10px;font-size:12px;text-align: center;} +.operateBar span{margin-left: 10px;} + +.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;} +.colorBar{margin-top:10px;font-size: 12px;text-align: center;} +.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3} +.sectionBar{margin-top:15px;font-size: 12px;text-align: center;} +.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3} +.size1{background: url('images/size.png') 1px center no-repeat ;} +.size2{background: url('images/size.png') -10px center no-repeat;} +.size3{background: url('images/size.png') -22px center no-repeat;} +.size4{background: url('images/size.png') -35px center no-repeat;} + +.addImgH{position: relative;} +.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;} +.addImgH_form input{width: 100%;} +/*scrawl遮罩层 +*/ +.maskLayerNull{display: none;} +.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7; + background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;} +/*btn state +*/ +.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;} +.previousStepH .text{color:#888;cursor:pointer;} +.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;} +.previousStep .text{color:#ccc;cursor:default;} + +.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;} +.nextStepH .text{color:#888;cursor:pointer;} +.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;} +.nextStep .text{color:#ccc;cursor:default;} + +.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;} +.clearBoardH .text{color:#888;cursor:pointer;} +.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;} +.clearBoard .text{color:#ccc;cursor:default;} + +.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;} +.scaleBoardH .text{color:#888;cursor:pointer;} +.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;} +.scaleBoard .text{color:#ccc;cursor:default;} + +.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;} +.removeImgH .text{color:#888;cursor:pointer;} +.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;} +.removeImg .text{color:#ccc;cursor:default;} + +.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')} +.addImgH .text{color:#888;cursor:pointer;} +/*icon +*/ +.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')} +.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')} + + diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.html b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.html new file mode 100644 index 0000000..9371abd --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.html @@ -0,0 +1,95 @@ + + + + + + + + + + +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + + 1 + 3 + 5 + 7 +
    +
    + + 1 + 3 + 5 + 7 +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + + +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.js b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.js new file mode 100644 index 0000000..e0c005e --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/scrawl/scrawl.js @@ -0,0 +1,671 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-5-22 + * Time: 上午11:38 + * To change this template use File | Settings | File Templates. + */ +var scrawl = function (options) { + options && this.initOptions(options); +}; +(function () { + var canvas = $G("J_brushBoard"), + context = canvas.getContext('2d'), + drawStep = [], //undo redo存储 + drawStepIndex = 0; //undo redo指针 + + scrawl.prototype = { + isScrawl:false, //是否涂鸦 + brushWidth:-1, //画笔粗细 + brushColor:"", //画笔颜色 + + initOptions:function (options) { + var me = this; + me.originalState(options);//初始页面状态 + me._buildToolbarColor(options.colorList);//动态生成颜色选择集合 + + me._addBoardListener(options.saveNum);//添加画板处理 + me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理 + me._addColorBarListener();//添加颜色选择处理 + me._addBrushBarListener();//添加画笔大小处理 + me._addEraserBarListener();//添加橡皮大小处理 + me._addAddImgListener();//添加增添背景图片处理 + me._addRemoveImgListenter();//删除背景图片处理 + me._addScalePicListenter();//添加缩放处理 + me._addClearSelectionListenter();//添加清楚选中状态处理 + + me._originalColorSelect(options.drawBrushColor);//初始化颜色选中 + me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中 + me._clearSelection();//清楚选中状态 + }, + + originalState:function (options) { + var me = this; + + me.brushWidth = options.drawBrushSize;//同步画笔粗细 + me.brushColor = options.drawBrushColor;//同步画笔颜色 + + context.lineWidth = me.brushWidth;//初始画笔大小 + context.strokeStyle = me.brushColor;//初始画笔颜色 + context.fillStyle = "transparent";//初始画布背景颜色 + context.lineCap = "round";//去除锯齿 + context.fill(); + }, + _buildToolbarColor:function (colorList) { + var tmp = null, arr = []; + arr.push(""); + for (var i = 0, color; color = colorList[i++];) { + if ((i - 1) % 5 == 0) { + if (i != 1) { + arr.push(""); + } + arr.push(""); + } + tmp = '#' + color; + arr.push(""); + } + arr.push("
    "); + $G("J_colorBar").innerHTML = arr.join(""); + }, + + _addBoardListener:function (saveNum) { + var me = this, + margin = 0, + startX = -1, + startY = -1, + isMouseDown = false, + isMouseMove = false, + isMouseUp = false, + buttonPress = 0, button, flag = ''; + + margin = parseInt(domUtils.getComputedStyle($G("J_wrap"), "margin-left")); + drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height)); + drawStepIndex += 1; + + domUtils.on(canvas, ["mousedown", "mousemove", "mouseup", "mouseout"], function (e) { + button = browser.webkit ? e.which : buttonPress; + switch (e.type) { + case 'mousedown': + buttonPress = 1; + flag = 1; + isMouseDown = true; + isMouseUp = false; + isMouseMove = false; + me.isScrawl = true; + startX = e.clientX - margin;//10为外边距总和 + startY = e.clientY - margin; + context.beginPath(); + break; + case 'mousemove' : + if (!flag && button == 0) { + return; + } + if (!flag && button) { + startX = e.clientX - margin;//10为外边距总和 + startY = e.clientY - margin; + context.beginPath(); + flag = 1; + } + if (isMouseUp || !isMouseDown) { + return; + } + var endX = e.clientX - margin, + endY = e.clientY - margin; + + context.moveTo(startX, startY); + context.lineTo(endX, endY); + context.stroke(); + startX = endX; + startY = endY; + isMouseMove = true; + break; + case 'mouseup': + buttonPress = 0; + if (!isMouseDown)return; + if (!isMouseMove) { + context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false); + context.fillStyle = context.strokeStyle; + context.fill(); + } + context.closePath(); + me._saveOPerate(saveNum); + isMouseDown = false; + isMouseMove = false; + isMouseUp = true; + startX = -1; + startY = -1; + break; + case 'mouseout': + flag = ''; + buttonPress = 0; + if (button == 1) return; + context.closePath(); + break; + } + }); + }, + _addOPerateListener:function (saveNum) { + var me = this; + domUtils.on($G("J_previousStep"), "click", function () { + if (drawStepIndex > 1) { + drawStepIndex -= 1; + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + context.putImageData(drawStep[drawStepIndex - 1], 0, 0); + me.btn2Highlight("J_nextStep"); + drawStepIndex == 1 && me.btn2disable("J_previousStep"); + } + }); + domUtils.on($G("J_nextStep"), "click", function () { + if (drawStepIndex > 0 && drawStepIndex < drawStep.length) { + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + context.putImageData(drawStep[drawStepIndex], 0, 0); + drawStepIndex += 1; + me.btn2Highlight("J_previousStep"); + drawStepIndex == drawStep.length && me.btn2disable("J_nextStep"); + } + }); + domUtils.on($G("J_clearBoard"), "click", function () { + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + drawStep = []; + me._saveOPerate(saveNum); + drawStepIndex = 1; + me.isScrawl = false; + me.btn2disable("J_previousStep"); + me.btn2disable("J_nextStep"); + me.btn2disable("J_clearBoard"); + }); + }, + _addColorBarListener:function () { + var me = this; + domUtils.on($G("J_colorBar"), "click", function (e) { + var target = me.getTarget(e), + color = target.title; + if (!!color) { + me._addColorSelect(target); + + me.brushColor = color; + context.globalCompositeOperation = "source-over"; + context.lineWidth = me.brushWidth; + context.strokeStyle = color; + } + }); + }, + _addBrushBarListener:function () { + var me = this; + domUtils.on($G("J_brushBar"), "click", function (e) { + var target = me.getTarget(e), + size = browser.ie ? target.innerText : target.text; + if (!!size) { + me._addBESelect(target); + + context.globalCompositeOperation = "source-over"; + context.lineWidth = parseInt(size); + context.strokeStyle = me.brushColor; + me.brushWidth = context.lineWidth; + } + }); + }, + _addEraserBarListener:function () { + var me = this; + domUtils.on($G("J_eraserBar"), "click", function (e) { + var target = me.getTarget(e), + size = browser.ie ? target.innerText : target.text; + if (!!size) { + me._addBESelect(target); + + context.lineWidth = parseInt(size); + context.globalCompositeOperation = "destination-out"; + context.strokeStyle = "#FFF"; + } + }); + }, + _addAddImgListener:function () { + var file = $G("J_imgTxt"); + if (!window.FileReader) { + $G("J_addImg").style.display = 'none'; + $G("J_removeImg").style.display = 'none'; + $G("J_sacleBoard").style.display = 'none'; + } + domUtils.on(file, "change", function (e) { + var frm = file.parentNode; + addMaskLayer(lang.backgroundUploading); + + var target = e.target || e.srcElement, + reader = new FileReader(); + reader.onload = function(evt){ + var target = evt.target || evt.srcElement; + ue_callback(target.result, 'SUCCESS'); + }; + reader.readAsDataURL(target.files[0]); + frm.reset(); + }); + }, + _addRemoveImgListenter:function () { + var me = this; + domUtils.on($G("J_removeImg"), "click", function () { + $G("J_picBoard").innerHTML = ""; + me.btn2disable("J_removeImg"); + me.btn2disable("J_sacleBoard"); + }); + }, + _addScalePicListenter:function () { + domUtils.on($G("J_sacleBoard"), "click", function () { + var picBoard = $G("J_picBoard"), + scaleCon = $G("J_scaleCon"), + img = picBoard.children[0]; + + if (img) { + if (!scaleCon) { + picBoard.style.cssText = "position:relative;z-index:999;"+picBoard.style.cssText; + img.style.cssText = "position: absolute;top:" + (canvas.height - img.height) / 2 + "px;left:" + (canvas.width - img.width) / 2 + "px;"; + var scale = new ScaleBoy(); + picBoard.appendChild(scale.init()); + scale.startScale(img); + } else { + if (scaleCon.style.visibility == "visible") { + scaleCon.style.visibility = "hidden"; + picBoard.style.position = ""; + picBoard.style.zIndex = ""; + } else { + scaleCon.style.visibility = "visible"; + picBoard.style.cssText += "position:relative;z-index:999"; + } + } + } + }); + }, + _addClearSelectionListenter:function () { + var doc = document; + domUtils.on(doc, 'mousemove', function (e) { + if (browser.ie && browser.version < 11) + doc.selection.clear(); + else + window.getSelection().removeAllRanges(); + }); + }, + _clearSelection:function () { + var list = ["J_operateBar", "J_colorBar", "J_brushBar", "J_eraserBar", "J_picBoard"]; + for (var i = 0, group; group = list[i++];) { + domUtils.unSelectable($G(group)); + } + }, + + _saveOPerate:function (saveNum) { + var me = this; + if (drawStep.length <= saveNum) { + if(drawStepIndex"); + } + scale.innerHTML = arr.join(""); + return scale; + } + + var rect = [ + //[left, top, width, height] + [1, 1, -1, -1], + [0, 1, 0, -1], + [0, 1, 1, -1], + [1, 0, -1, 0], + [0, 0, 1, 0], + [1, 0, -1, 1], + [0, 0, 0, 1], + [0, 0, 1, 1] + ]; + ScaleBoy.prototype = { + init:function () { + _appendStyle(); + var me = this, + scale = me.dom = _getDom(); + + me.scaleMousemove.fp = me; + domUtils.on(scale, 'mousedown', function (e) { + var target = e.target || e.srcElement; + me.start = {x:e.clientX, y:e.clientY}; + if (target.className.indexOf('hand') != -1) { + me.dir = target.className.replace('hand', ''); + } + domUtils.on(document.body, 'mousemove', me.scaleMousemove); + e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; + }); + domUtils.on(document.body, 'mouseup', function (e) { + if (me.start) { + domUtils.un(document.body, 'mousemove', me.scaleMousemove); + if (me.moved) { + me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}}); + } + delete me.start; + delete me.moved; + delete me.dir; + } + }); + return scale; + }, + startScale:function (objElement) { + var me = this, Idom = me.dom; + + Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;'; + me.scalingElement = objElement; + }, + updateScaledElement:function (objStyle) { + var cur = this.scalingElement, + pos = objStyle.position, + size = objStyle.size; + if (pos) { + typeof pos.x != 'undefined' && (cur.style.left = pos.x); + typeof pos.y != 'undefined' && (cur.style.top = pos.y); + } + if (size) { + size.w && (cur.style.width = size.w); + size.h && (cur.style.height = size.h); + } + }, + updateStyleByDir:function (dir, offset) { + var me = this, + dom = me.dom, tmp; + + rect['def'] = [1, 1, 0, 0]; + if (rect[dir][0] != 0) { + tmp = parseInt(dom.style.left) + offset.x; + dom.style.left = me._validScaledProp('left', tmp) + 'px'; + } + if (rect[dir][1] != 0) { + tmp = parseInt(dom.style.top) + offset.y; + dom.style.top = me._validScaledProp('top', tmp) + 'px'; + } + if (rect[dir][2] != 0) { + tmp = dom.clientWidth + rect[dir][2] * offset.x; + dom.style.width = me._validScaledProp('width', tmp) + 'px'; + } + if (rect[dir][3] != 0) { + tmp = dom.clientHeight + rect[dir][3] * offset.y; + dom.style.height = me._validScaledProp('height', tmp) + 'px'; + } + if (dir === 'def') { + me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}}); + } + }, + scaleMousemove:function (e) { + var me = arguments.callee.fp, + start = me.start, + dir = me.dir || 'def', + offset = {x:e.clientX - start.x, y:e.clientY - start.y}; + + me.updateStyleByDir(dir, offset); + arguments.callee.fp.start = {x:e.clientX, y:e.clientY}; + arguments.callee.fp.moved = 1; + }, + _validScaledProp:function (prop, value) { + var ele = this.dom, + wrap = $G("J_picBoard"); + + value = isNaN(value) ? 0 : value; + switch (prop) { + case 'left': + return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value; + case 'top': + return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value; + case 'width': + return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value; + case 'height': + return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value; + } + } + }; +})(); + +//后台回调 +function ue_callback(url, state) { + var doc = document, + picBorard = $G("J_picBoard"), + img = doc.createElement("img"); + + //图片缩放 + function scale(img, max, oWidth, oHeight) { + var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight; + if (ow > max || oh > max) { + if (ow >= oh) { + if (width = ow - max) { + percent = (width / ow).toFixed(2); + img.height = oh - oh * percent; + img.width = max; + } + } else { + if (height = oh - max) { + percent = (height / oh).toFixed(2); + img.width = ow - ow * percent; + img.height = max; + } + } + } + } + + //移除遮罩层 + removeMaskLayer(); + //状态响应 + if (state == "SUCCESS") { + picBorard.innerHTML = ""; + img.onload = function () { + scale(this, 300); + picBorard.appendChild(img); + + var obj = new scrawl(); + obj.btn2Highlight("J_removeImg"); + //trace 2457 + obj.btn2Highlight("J_sacleBoard"); + }; + img.src = url; + } else { + alert(state); + } +} +//去掉遮罩层 +function removeMaskLayer() { + var maskLayer = $G("J_maskLayer"); + maskLayer.className = "maskLayerNull"; + maskLayer.innerHTML = ""; + dialog.buttons[0].setDisabled(false); +} +//添加遮罩层 +function addMaskLayer(html) { + var maskLayer = $G("J_maskLayer"); + dialog.buttons[0].setDisabled(true); + maskLayer.className = "maskLayer"; + maskLayer.innerHTML = html; +} +//执行确认按钮方法 +function exec(scrawlObj) { + if (scrawlObj.isScrawl) { + addMaskLayer(lang.scrawlUpLoading); + var base64 = scrawlObj.getCanvasData(); + if (!!base64) { + var options = { + timeout:100000, + onsuccess:function (xhr) { + if (!scrawlObj.isCancelScrawl) { + var responseObj; + responseObj = eval("(" + xhr.responseText + ")"); + if (responseObj.state == "SUCCESS") { + var imgObj = {}, + url = editor.options.scrawlUrlPrefix + responseObj.url; + imgObj.src = url; + imgObj._src = url; + imgObj.alt = responseObj.original || ''; + imgObj.title = responseObj.title || ''; + editor.execCommand("insertImage", imgObj); + dialog.close(); + } else { + alert(responseObj.state); + } + + } + }, + onerror:function () { + alert(lang.imageError); + dialog.close(); + } + }; + options[editor.getOpt('scrawlFieldName')] = base64; + + var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')), + params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params); + ajax.request(url, options); + } + } else { + addMaskLayer(lang.noScarwl + "   "); + } +} + diff --git a/express/Campari-vue/www/public/ueditor/dialogs/searchreplace/searchreplace.html b/express/Campari-vue/www/public/ueditor/dialogs/searchreplace/searchreplace.html new file mode 100644 index 0000000..b91f190 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/searchreplace/searchreplace.html @@ -0,0 +1,102 @@ + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    :
    + +
    + + +
    +   +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    :
    + +
    + + + + +
    +   +
    + +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/searchreplace/searchreplace.js b/express/Campari-vue/www/public/ueditor/dialogs/searchreplace/searchreplace.js new file mode 100644 index 0000000..1b52857 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/searchreplace/searchreplace.js @@ -0,0 +1,164 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-9-26 + * Time: 下午12:29 + * To change this template use File | Settings | File Templates. + */ + +//清空上次查选的痕迹 +editor.firstForSR = 0; +editor.currentRangeForSR = null; +//给tab注册切换事件 +/** + * tab点击处理事件 + * @param tabHeads + * @param tabBodys + * @param obj + */ +function clickHandler( tabHeads,tabBodys,obj ) { + //head样式更改 + for ( var k = 0, len = tabHeads.length; k < len; k++ ) { + tabHeads[k].className = ""; + } + obj.className = "focus"; + //body显隐 + var tabSrc = obj.getAttribute( "tabSrc" ); + for ( var j = 0, length = tabBodys.length; j < length; j++ ) { + var body = tabBodys[j], + id = body.getAttribute( "id" ); + if ( id != tabSrc ) { + body.style.zIndex = 1; + } else { + body.style.zIndex = 200; + } + } + +} + +/** + * TAB切换 + * @param tabParentId tab的父节点ID或者对象本身 + */ +function switchTab( tabParentId ) { + var tabElements = $G( tabParentId ).children, + tabHeads = tabElements[0].children, + tabBodys = tabElements[1].children; + + for ( var i = 0, length = tabHeads.length; i < length; i++ ) { + var head = tabHeads[i]; + if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head ); + head.onclick = function () { + clickHandler(tabHeads,tabBodys,this); + } + } +} +$G('searchtab').onmousedown = function(){ + $G('search-msg').innerHTML = ''; + $G('replace-msg').innerHTML = '' +} +//是否区分大小写 +function getMatchCase(id) { + return $G(id).checked ? true : false; +} +//查找 +$G("nextFindBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:1, + casesensitive:getMatchCase("matchCase") + }; + if (!frCommond(obj)) { + var bk = editor.selection.getRange().createBookmark(); + $G('search-msg').innerHTML = lang.getEnd; + editor.selection.getRange().moveToBookmark(bk).select(); + + + } +}; +$G("nextReplaceBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt1").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:1, + casesensitive:getMatchCase("matchCase1") + }; + frCommond(obj); +}; +$G("preFindBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:-1, + casesensitive:getMatchCase("matchCase") + }; + if (!frCommond(obj)) { + $G('search-msg').innerHTML = lang.getStart; + } +}; +$G("preReplaceBtn").onclick = function (txt, dir, mcase) { + var findtxt = $G("findtxt1").value, obj; + if (!findtxt) { + return false; + } + obj = { + searchStr:findtxt, + dir:-1, + casesensitive:getMatchCase("matchCase1") + }; + frCommond(obj); +}; +//替换 +$G("repalceBtn").onclick = function () { + var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj, + replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, ""); + if (!findtxt) { + return false; + } + if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) { + return false; + } + obj = { + searchStr:findtxt, + dir:1, + casesensitive:getMatchCase("matchCase1"), + replaceStr:replacetxt + }; + frCommond(obj); +}; +//全部替换 +$G("repalceAllBtn").onclick = function () { + var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj, + replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, ""); + if (!findtxt) { + return false; + } + if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) { + return false; + } + obj = { + searchStr:findtxt, + casesensitive:getMatchCase("matchCase1"), + replaceStr:replacetxt, + all:true + }; + var num = frCommond(obj); + if (num) { + $G('replace-msg').innerHTML = lang.countMsg.replace("{#count}", num); + } +}; +//执行 +var frCommond = function (obj) { + return editor.execCommand("searchreplace", obj); +}; +switchTab("searchtab"); \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/snapscreen/snapscreen.html b/express/Campari-vue/www/public/ueditor/dialogs/snapscreen/snapscreen.html new file mode 100644 index 0000000..cf8209e --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/snapscreen/snapscreen.html @@ -0,0 +1,58 @@ + + + + + + + + + +
    +

    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/spechars/spechars.html b/express/Campari-vue/www/public/ueditor/dialogs/spechars/spechars.html new file mode 100644 index 0000000..0b5c416 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/spechars/spechars.html @@ -0,0 +1,21 @@ + + + + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/spechars/spechars.js b/express/Campari-vue/www/public/ueditor/dialogs/spechars/spechars.js new file mode 100644 index 0000000..f4c155e --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/spechars/spechars.js @@ -0,0 +1,57 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-9-26 + * Time: 下午1:09 + * To change this template use File | Settings | File Templates. + */ +var charsContent = [ + { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")}, + { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")}, + { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")}, + { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")}, + { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")}, + { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")}, + { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")}, + { name:"yyyb", title:lang.yyyb, content:toArray("i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,")}, + { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")} +]; +(function createTab(content) { + for (var i = 0, ci; ci = content[i++];) { + var span = document.createElement("span"); + span.setAttribute("tabSrc", ci.name); + span.innerHTML = ci.title; + if (i == 1)span.className = "focus"; + domUtils.on(span, "click", function () { + var tmps = $G("tabHeads").children; + for (var k = 0, sk; sk = tmps[k++];) { + sk.className = ""; + } + tmps = $G("tabBodys").children; + for (var k = 0, sk; sk = tmps[k++];) { + sk.style.display = "none"; + } + this.className = "focus"; + $G(this.getAttribute("tabSrc")).style.display = ""; + }); + $G("tabHeads").appendChild(span); + domUtils.insertAfter(span, document.createTextNode("\n")); + var div = document.createElement("div"); + div.id = ci.name; + div.style.display = (i == 1) ? "" : "none"; + var cons = ci.content; + for (var j = 0, con; con = cons[j++];) { + var charSpan = document.createElement("span"); + charSpan.innerHTML = con; + domUtils.on(charSpan, "click", function () { + editor.execCommand("insertHTML", this.innerHTML); + dialog.close(); + }); + div.appendChild(charSpan); + } + $G("tabBodys").appendChild(div); + } +})(charsContent); +function toArray(str) { + return str.split(","); +} diff --git a/express/Campari-vue/www/public/ueditor/dialogs/table/dragicon.png b/express/Campari-vue/www/public/ueditor/dialogs/table/dragicon.png new file mode 100644 index 0000000..f26203b Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/table/dragicon.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.css b/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.css new file mode 100644 index 0000000..c6f9396 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.css @@ -0,0 +1,84 @@ +body{ + overflow: hidden; + width: 540px; +} +.wrapper { + margin: 10px auto 0; + font-size: 12px; + overflow: hidden; + width: 520px; + height: 315px; +} + +.clear { + clear: both; +} + +.wrapper .left { + float: left; + margin-left: 10px;; +} + +.wrapper .right { + float: right; + border-left: 2px dotted #EDEDED; + padding-left: 15px; +} + +.section { + margin-bottom: 15px; + width: 240px; + overflow: hidden; +} + +.section h3 { + font-weight: bold; + padding: 5px 0; + margin-bottom: 10px; + border-bottom: 1px solid #EDEDED; + font-size: 12px; +} + +.section ul { + list-style: none; + overflow: hidden; + clear: both; + +} + +.section li { + float: left; + width: 120px;; +} + +.section .tone { + width: 80px;; +} + +.section .preview { + width: 220px; +} + +.section .preview table { + text-align: center; + vertical-align: middle; + color: #666; +} + +.section .preview caption { + font-weight: bold; +} + +.section .preview td { + border-width: 1px; + border-style: solid; + height: 22px; +} + +.section .preview th { + border-style: solid; + border-color: #DDD; + border-width: 2px 1px 1px 1px; + height: 22px; + background-color: #F7F7F7; +} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.html b/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.html new file mode 100644 index 0000000..3c412fb --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.html @@ -0,0 +1,64 @@ + + + + + + + + +
    +
    +
    +

    +
      +
    • + +
    • +
    • + +
    • +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +

    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +

    +
      +
    • + + +
    • +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.js b/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.js new file mode 100644 index 0000000..11dbee7 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/table/edittable.js @@ -0,0 +1,237 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-12-19 + * Time: 下午4:55 + * To change this template use File | Settings | File Templates. + */ +(function () { + var title = $G("J_title"), + titleCol = $G("J_titleCol"), + caption = $G("J_caption"), + sorttable = $G("J_sorttable"), + autoSizeContent = $G("J_autoSizeContent"), + autoSizePage = $G("J_autoSizePage"), + tone = $G("J_tone"), + me, + preview = $G("J_preview"); + + var editTable = function () { + me = this; + me.init(); + }; + editTable.prototype = { + init:function () { + var colorPiker = new UE.ui.ColorPicker({ + editor:editor + }), + colorPop = new UE.ui.Popup({ + editor:editor, + content:colorPiker + }); + + title.checked = editor.queryCommandState("inserttitle") == -1; + titleCol.checked = editor.queryCommandState("inserttitlecol") == -1; + caption.checked = editor.queryCommandState("insertcaption") == -1; + sorttable.checked = editor.queryCommandState("enablesort") == 1; + + var enablesortState = editor.queryCommandState("enablesort"), + disablesortState = editor.queryCommandState("disablesort"); + + sorttable.checked = !!(enablesortState < 0 && disablesortState >=0); + sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0); + sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:''; + + me.createTable(title.checked, titleCol.checked, caption.checked); + me.setAutoSize(); + me.setColor(me.getColor()); + + domUtils.on(title, "click", me.titleHanler); + domUtils.on(titleCol, "click", me.titleColHanler); + domUtils.on(caption, "click", me.captionHanler); + domUtils.on(sorttable, "click", me.sorttableHanler); + domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler); + domUtils.on(autoSizePage, "click", me.autoSizePageHanler); + + domUtils.on(tone, "click", function () { + colorPop.showAnchor(tone); + }); + domUtils.on(document, 'mousedown', function () { + colorPop.hide(); + }); + colorPiker.addListener("pickcolor", function () { + me.setColor(arguments[1]); + colorPop.hide(); + }); + colorPiker.addListener("picknocolor", function () { + me.setColor(""); + colorPop.hide(); + }); + }, + + createTable:function (hasTitle, hasTitleCol, hasCaption) { + var arr = [], + sortSpan = '^'; + arr.push(""); + if (hasCaption) { + arr.push("") + } + if (hasTitle) { + arr.push(""); + if(hasTitleCol) { arr.push(""); } + for (var j = 0; j < 5; j++) { + arr.push(""); + } + arr.push(""); + } + for (var i = 0; i < 6; i++) { + arr.push(""); + if(hasTitleCol) { arr.push("") } + for (var k = 0; k < 5; k++) { + arr.push("") + } + arr.push(""); + } + arr.push("
    " + lang.captionName + "
    " + lang.titleName + "" + lang.titleName + "
    " + lang.titleName + "" + lang.cellsName + "
    "); + preview.innerHTML = arr.join(""); + this.updateSortSpan(); + }, + titleHanler:function () { + var example = $G("J_example"), + frg=document.createDocumentFragment(), + color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), + colCount = example.rows[0].children.length; + + if (title.checked) { + example.insertRow(0); + for (var i = 0, node; i < colCount; i++) { + node = document.createElement("th"); + node.innerHTML = lang.titleName; + frg.appendChild(node); + } + example.rows[0].appendChild(frg); + + } else { + domUtils.remove(example.rows[0]); + } + me.setColor(color); + me.updateSortSpan(); + }, + titleColHanler:function () { + var example = $G("J_example"), + color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"), + colArr = example.rows, + colCount = colArr.length; + + if (titleCol.checked) { + for (var i = 0, node; i < colCount; i++) { + node = document.createElement("th"); + node.innerHTML = lang.titleName; + colArr[i].insertBefore(node, colArr[i].children[0]); + } + } else { + for (var i = 0; i < colCount; i++) { + domUtils.remove(colArr[i].children[0]); + } + } + me.setColor(color); + me.updateSortSpan(); + }, + captionHanler:function () { + var example = $G("J_example"); + if (caption.checked) { + var row = document.createElement('caption'); + row.innerHTML = lang.captionName; + example.insertBefore(row, example.firstChild); + } else { + domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]); + } + }, + sorttableHanler:function(){ + me.updateSortSpan(); + }, + autoSizeContentHanler:function () { + var example = $G("J_example"); + example.removeAttribute("width"); + }, + autoSizePageHanler:function () { + var example = $G("J_example"); + var tds = example.getElementsByTagName(example, "td"); + utils.each(tds, function (td) { + td.removeAttribute("width"); + }); + example.setAttribute('width', '100%'); + }, + updateSortSpan: function(){ + var example = $G("J_example"), + row = example.rows[0]; + + var spans = domUtils.getElementsByTagName(example,"span"); + utils.each(spans,function(span){ + span.parentNode.removeChild(span); + }); + if (sorttable.checked) { + utils.each(row.cells, function(cell, i){ + var span = document.createElement("span"); + span.innerHTML = "^"; + cell.appendChild(span); + }); + } + }, + getColor:function () { + var start = editor.selection.getStart(), color, + cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true); + color = cell && domUtils.getComputedStyle(cell, "border-color"); + if (!color) color = "#DDDDDD"; + return color; + }, + setColor:function (color) { + var example = $G("J_example"), + arr = domUtils.getElementsByTagName(example, "td").concat( + domUtils.getElementsByTagName(example, "th"), + domUtils.getElementsByTagName(example, "caption") + ); + + tone.value = color; + utils.each(arr, function (node) { + node.style.borderColor = color; + }); + + }, + setAutoSize:function () { + var me = this; + autoSizePage.checked = true; + me.autoSizePageHanler(); + } + }; + + new editTable; + + dialog.onok = function () { + editor.__hasEnterExecCommand = true; + + var checks = { + title:"inserttitle deletetitle", + titleCol:"inserttitlecol deletetitlecol", + caption:"insertcaption deletecaption", + sorttable:"enablesort disablesort" + }; + editor.fireEvent('saveScene'); + for(var i in checks){ + var cmds = checks[i].split(" "), + input = $G("J_" + i); + if(input["checked"]){ + editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]); + }else{ + editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]); + } + } + + editor.execCommand("edittable", tone.value); + autoSizeContent.checked ?editor.execCommand('adaptbytext') : ""; + autoSizePage.checked ? editor.execCommand("adaptbywindow") : ""; + editor.fireEvent('saveScene'); + + editor.__hasEnterExecCommand = false; + }; +})(); \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/table/edittd.html b/express/Campari-vue/www/public/ueditor/dialogs/table/edittd.html new file mode 100644 index 0000000..49a52f7 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/table/edittd.html @@ -0,0 +1,61 @@ + + + + + + + + +
    + + +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/table/edittip.html b/express/Campari-vue/www/public/ueditor/dialogs/table/edittip.html new file mode 100644 index 0000000..954f7bb --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/table/edittip.html @@ -0,0 +1,33 @@ + + + + 表格删除提示 + + + + +
    +
    + +
    +
    + +
    +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/config.js b/express/Campari-vue/www/public/ueditor/dialogs/template/config.js new file mode 100644 index 0000000..417b8f7 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/template/config.js @@ -0,0 +1,42 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-8-8 + * Time: 下午2:00 + * To change this template use File | Settings | File Templates. + */ +var templates = [ + { + "pre":"pre0.png", + 'title':lang.blank, + 'preHtml':'

     欢迎使用UEditor!

    ', + "html":'

    欢迎使用UEditor!

    ' + + }, + { + "pre":"pre1.png", + 'title':lang.blog, + 'preHtml':'

    深入理解Range

    UEditor二次开发

    什么是Range

    对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。


    Range能干什么

    在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。

    ', + "html":'

    [键入文档标题]

    [键入文档副标题]

    [标题 1]

    对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。

    [标题 2]

    在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观,还是使用某种直接指定的格式。

    [标题 3]

    对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。


    ' + + }, + { + "pre":"pre2.png", + 'title':lang.resume, + 'preHtml':'

    WEB前端开发简历


    联系电话:[键入您的电话]

    电子邮件:[键入您的电子邮件地址]

    家庭住址:[键入您的地址]

    目标职位

    WEB前端研发工程师

    学历

    1. [起止时间] [学校名称] [所学专业] [所获学位]

    工作经验


    ', + "html":'

    [此处键入简历标题]


    【此处插入照片】


    联系电话:[键入您的电话]


    电子邮件:[键入您的电子邮件地址]


    家庭住址:[键入您的地址]


    目标职位

    [此处键入您的期望职位]

    学历

    1. [键入起止时间] [键入学校名称] [键入所学专业] [键入所获学位]

    2. [键入起止时间] [键入学校名称] [键入所学专业] [键入所获学位]

    工作经验

    1. [键入起止时间] [键入公司名称] [键入职位名称]

      1. [键入负责项目] [键入项目简介]

      2. [键入负责项目] [键入项目简介]

    2. [键入起止时间] [键入公司名称] [键入职位名称]

      1. [键入负责项目] [键入项目简介]

    掌握技能

     [这里可以键入您所掌握的技能]

    ' + + }, + { + "pre":"pre3.png", + 'title':lang.richText, + 'preHtml':'

    [此处键入文章标题]

    图文混排方法

    图片居左,文字围绕图片排版

    方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文


    还有没有什么其他的环绕方式呢?这里是居右环绕


    欢迎大家多多尝试,为UEditor提供更多高质量模板!

    ', + "html":'


    [此处键入文章标题]

    图文混排方法

    1. 图片居左,文字围绕图片排版

    方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文本


    2. 图片居右,文字围绕图片排版

    方法:在文字前面插入图片,设置居右对齐,然后即可在左边输入多行文本


    3. 图片居中环绕排版

    方法:亲,这个真心没有办法。。。



    还有没有什么其他的环绕方式呢?这里是居右环绕


    欢迎大家多多尝试,为UEditor提供更多高质量模板!


    占位


    占位


    占位


    占位


    占位



    ' + }, + { + "pre":"pre4.png", + 'title':lang.sciPapers, + 'preHtml':'

    [键入文章标题]

    摘要:这里可以输入很长很长很长很长很长很长很长很长很差的摘要

    标题 1

    这里可以输入很多内容,可以图文混排,可以有列表等。

    标题 2

    1. 列表 1

    2. 列表 2

      1. 多级列表 1

      2. 多级列表 2

    3. 列表 3

    标题 3

    来个文字图文混排的


    ', + 'html':'

    [键入文章标题]

    摘要:这里可以输入很长很长很长很长很长很长很长很长很差的摘要

    标题 1

    这里可以输入很多内容,可以图文混排,可以有列表等。

    标题 2

    来个列表瞅瞅:

    1. 列表 1

    2. 列表 2

      1. 多级列表 1

      2. 多级列表 2

    3. 列表 3

    标题 3

    来个文字图文混排的

    这里可以多行

    右边是图片

    绝对没有问题的,不信你也可以试试看


    ' + } +]; \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/images/bg.gif b/express/Campari-vue/www/public/ueditor/dialogs/template/images/bg.gif new file mode 100644 index 0000000..8c1d10a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/template/images/bg.gif differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre0.png b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre0.png new file mode 100644 index 0000000..8f3c16a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre0.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre1.png b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre1.png new file mode 100644 index 0000000..5a03f96 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre1.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre2.png b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre2.png new file mode 100644 index 0000000..5a55672 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre2.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre3.png b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre3.png new file mode 100644 index 0000000..d852d29 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre3.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre4.png b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre4.png new file mode 100644 index 0000000..0d7bc72 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/template/images/pre4.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/template.css b/express/Campari-vue/www/public/ueditor/dialogs/template/template.css new file mode 100644 index 0000000..6c1608d --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/template/template.css @@ -0,0 +1,18 @@ +.wrap{ padding: 5px;font-size: 14px;} +.left{width:425px;float: left;} +.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;} +.right .pre{height: 332px;overflow-y: auto;} +.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;} +.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;} +.right .preitem img{display: block;margin: 0 auto;width:100px;} +.clear{clear: both;} +.top{height:26px;line-height: 26px;padding: 5px;} +.bottom{height:320px;width:100%;margin: 0 auto;} +.transparent{ background: url("images/bg.gif") repeat;} +.bottom table tr td{border:1px dashed #ccc;} +#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;} +.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;} +p{margin: 5px 0} +table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;} +li{clear:both} +ol{padding-left:40px; } \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/template.html b/express/Campari-vue/www/public/ueditor/dialogs/template/template.html new file mode 100644 index 0000000..d9903a4 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/template/template.html @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + diff --git a/express/Campari-vue/www/public/ueditor/dialogs/template/template.js b/express/Campari-vue/www/public/ueditor/dialogs/template/template.js new file mode 100644 index 0000000..80a334b --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/template/template.js @@ -0,0 +1,53 @@ +/** + * Created with JetBrains PhpStorm. + * User: xuheng + * Date: 12-8-8 + * Time: 下午2:09 + * To change this template use File | Settings | File Templates. + */ +(function () { + var me = editor, + preview = $G( "preview" ), + preitem = $G( "preitem" ), + tmps = templates, + currentTmp; + var initPre = function () { + var str = ""; + for ( var i = 0, tmp; tmp = tmps[i++]; ) { + str += '
    '; + } + preitem.innerHTML = str; + }; + var pre = function ( n ) { + var tmp = tmps[n - 1]; + currentTmp = tmp; + clearItem(); + domUtils.setStyles( preitem.childNodes[n - 1], { + "background-color":"lemonChiffon", + "border":"#ccc 1px solid" + } ); + preview.innerHTML = tmp.preHtml ? tmp.preHtml : ""; + }; + var clearItem = function () { + var items = preitem.children; + for ( var i = 0, item; item = items[i++]; ) { + domUtils.setStyles( item, { + "background-color":"", + "border":"white 1px solid" + } ); + } + }; + dialog.onok = function () { + if ( !$G( "issave" ).checked ){ + me.execCommand( "cleardoc" ); + } + var obj = { + html:currentTmp && currentTmp.html + }; + me.execCommand( "template", obj ); + }; + initPre(); + window.pre = pre; + pre(2) + +})(); \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/bg.png b/express/Campari-vue/www/public/ueditor/dialogs/video/images/bg.png new file mode 100644 index 0000000..580be0a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/bg.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/center_focus.jpg b/express/Campari-vue/www/public/ueditor/dialogs/video/images/center_focus.jpg new file mode 100644 index 0000000..262b029 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/center_focus.jpg differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/file-icons.gif b/express/Campari-vue/www/public/ueditor/dialogs/video/images/file-icons.gif new file mode 100644 index 0000000..d8c02c2 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/file-icons.gif differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/file-icons.png b/express/Campari-vue/www/public/ueditor/dialogs/video/images/file-icons.png new file mode 100644 index 0000000..3ff82c8 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/file-icons.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/icons.gif b/express/Campari-vue/www/public/ueditor/dialogs/video/images/icons.gif new file mode 100644 index 0000000..78459de Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/icons.gif differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/icons.png b/express/Campari-vue/www/public/ueditor/dialogs/video/images/icons.png new file mode 100644 index 0000000..12e4700 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/icons.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/image.png b/express/Campari-vue/www/public/ueditor/dialogs/video/images/image.png new file mode 100644 index 0000000..19699f6 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/image.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/left_focus.jpg b/express/Campari-vue/www/public/ueditor/dialogs/video/images/left_focus.jpg new file mode 100644 index 0000000..7886d27 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/left_focus.jpg differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/none_focus.jpg b/express/Campari-vue/www/public/ueditor/dialogs/video/images/none_focus.jpg new file mode 100644 index 0000000..7c768dc Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/none_focus.jpg differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/progress.png b/express/Campari-vue/www/public/ueditor/dialogs/video/images/progress.png new file mode 100644 index 0000000..717c486 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/progress.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/right_focus.jpg b/express/Campari-vue/www/public/ueditor/dialogs/video/images/right_focus.jpg new file mode 100644 index 0000000..173e10d Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/right_focus.jpg differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/success.gif b/express/Campari-vue/www/public/ueditor/dialogs/video/images/success.gif new file mode 100644 index 0000000..8d4f311 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/success.gif differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/images/success.png b/express/Campari-vue/www/public/ueditor/dialogs/video/images/success.png new file mode 100644 index 0000000..94f968d Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/video/images/success.png differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/video.css b/express/Campari-vue/www/public/ueditor/dialogs/video/video.css new file mode 100644 index 0000000..5870e7a --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/video/video.css @@ -0,0 +1,635 @@ +@charset "utf-8"; +.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative} +.tabbody{height: 335px;} +.tabbody .panel { + position: absolute; + width: 0; + height: 0; + background: #fff; + overflow: hidden; + display: none; +} +.tabbody .panel.focus { + width: 100%; + height: 335px; + display: block; +} + +.tabbody .panel table td{vertical-align: middle;} +#videoUrl { + width: 490px; + height: 21px; + line-height: 21px; + margin: 8px 5px; + background: #FFF; + border: 1px solid #d7d7d7; +} +#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;} +#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;} +#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;} +#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/ +#searchList p{margin-left: 10px;} +#videoType{ + width: 65px; + height: 23px; + line-height: 22px; + border: 1px solid #d7d7d7; +} +#videoSearchBtn,#videoSearchReset{ + /*width: 80px;*/ + height: 25px; + line-height: 25px; + background: #eee; + border: 1px solid #d7d7d7; + cursor: pointer; + padding: 0 5px; +} + + + +#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left} +#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;} +#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;} +#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;} +.edui-video-wrapper fieldset{ + border: 1px solid #ddd; + padding-left: 5px; + margin-bottom: 20px; + padding-bottom: 5px; + width: 115px; +} + +#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;} +fieldset{ + border: 1px solid #ddd; + padding-left: 5px; + margin-bottom: 20px; + padding-bottom: 5px; + width: 115px; +} +fieldset legend{font-weight: bold;} +fieldset p{line-height: 30px;} +fieldset input.txt{ + width: 65px; + height: 21px; + line-height: 21px; + margin: 8px 5px; + background: #FFF; + border: 1px solid #d7d7d7; +} +label.url{font-weight: bold;margin-left: 5px;color: #06c;} +#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;} +#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)} +span.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue} + + + + +/* upload video */ +.tabbody #upload.panel { + width: 0; + height: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + background: #fff; + display: block; +} +.tabbody #upload.panel.focus { + width: 100%; + height: 335px; + display: block; + clip: auto; +} +#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;} +#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)} +#upload_left { width:427px; float:left; } +#upload_left .controller { height: 30px; clear: both; } +#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;} + +#upload .queueList { + margin: 0; +} + +#upload p { + margin: 0; +} + +.element-invisible { + width: 0 !important; + height: 0 !important; + border: 0; + padding: 0; + margin: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); +} + +#upload .placeholder { + margin: 10px; + margin-right:0; + border: 2px dashed #e6e6e6; + *border: 0px dashed #e6e6e6; + height: 161px; + padding-top: 150px; + text-align: center; + width: 97%; + float: left; + background: url(./images/image.png) center 70px no-repeat; + color: #cccccc; + font-size: 18px; + position: relative; + top:0; + *margin-left: 0; + *left: 10px; +} + +#upload .placeholder .webuploader-pick { + font-size: 18px; + background: #00b7ee; + border-radius: 3px; + line-height: 44px; + padding: 0 30px; + *width: 120px; + color: #fff; + display: inline-block; + margin: 0 auto 20px auto; + cursor: pointer; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} + +#upload .placeholder .webuploader-pick-hover { + background: #00a2d4; +} + + +#filePickerContainer { + text-align: center; +} + +#upload .placeholder .flashTip { + color: #666666; + font-size: 12px; + position: absolute; + width: 100%; + text-align: center; + bottom: 20px; +} + +#upload .placeholder .flashTip a { + color: #0785d1; + text-decoration: none; +} + +#upload .placeholder .flashTip a:hover { + text-decoration: underline; +} + +#upload .placeholder.webuploader-dnd-over { + border-color: #999999; +} + +#upload .filelist { + list-style: none; + margin: 0; + padding: 0; + overflow-x: hidden; + overflow-y: auto; + position: relative; + height: 285px; +} + +#upload .filelist:after { + content: ''; + display: block; + width: 0; + height: 0; + overflow: hidden; + clear: both; +} + +#upload .filelist li { + width: 113px; + height: 113px; + background: url(./images/bg.png); + text-align: center; + margin: 15px 0 0 20px; + *margin: 15px 0 0 15px; + position: relative; + display: block; + float: left; + overflow: hidden; + font-size: 12px; +} + +#upload .filelist li p.log { + position: relative; + top: -45px; +} + +#upload .filelist li p.title { + position: absolute; + top: 0; + left: 0; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + top: 5px; + text-indent: 5px; + text-align: left; +} + +#upload .filelist li p.progress { + position: absolute; + width: 100%; + bottom: 0; + left: 0; + height: 8px; + overflow: hidden; + z-index: 50; + margin: 0; + border-radius: 0; + background: none; + -webkit-box-shadow: 0 0 0; +} + +#upload .filelist li p.progress span { + display: none; + overflow: hidden; + width: 0; + height: 100%; + background: #1483d8 url(./images/progress.png) repeat-x; + + -webit-transition: width 200ms linear; + -moz-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; + transition: width 200ms linear; + + -webkit-animation: progressmove 2s linear infinite; + -moz-animation: progressmove 2s linear infinite; + -o-animation: progressmove 2s linear infinite; + -ms-animation: progressmove 2s linear infinite; + animation: progressmove 2s linear infinite; + + -webkit-transform: translateZ(0); +} + +@-webkit-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@-moz-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +#upload .filelist li p.imgWrap { + position: relative; + z-index: 2; + line-height: 113px; + vertical-align: middle; + overflow: hidden; + width: 113px; + height: 113px; + + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + -webit-transition: 200ms ease-out; + -moz-transition: 200ms ease-out; + -o-transition: 200ms ease-out; + -ms-transition: 200ms ease-out; + transition: 200ms ease-out; +} +#upload .filelist li p.imgWrap.notimage { + margin-top: 0; + width: 111px; + height: 111px; + border: 1px #eeeeee solid; +} +#upload .filelist li p.imgWrap.notimage i.file-preview { + margin-top: 15px; +} + +#upload .filelist li img { + width: 100%; +} + +#upload .filelist li p.error { + background: #f43838; + color: #fff; + position: absolute; + bottom: 0; + left: 0; + height: 28px; + line-height: 28px; + width: 100%; + z-index: 100; + display:none; +} + +#upload .filelist li .success { + display: block; + position: absolute; + left: 0; + bottom: 0; + height: 40px; + width: 100%; + z-index: 200; + background: url(./images/success.png) no-repeat right bottom; + background-image: url(./images/success.gif) \9; +} + +#upload .filelist li.filePickerBlock { + width: 113px; + height: 113px; + background: url(./images/image.png) no-repeat center 12px; + border: 1px solid #eeeeee; + border-radius: 0; +} +#upload .filelist li.filePickerBlock div.webuploader-pick { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + opacity: 0; + background: none; + font-size: 0; +} + +#upload .filelist div.file-panel { + position: absolute; + height: 0; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0; + background: rgba(0, 0, 0, 0.5); + width: 100%; + top: 0; + left: 0; + overflow: hidden; + z-index: 300; +} + +#upload .filelist div.file-panel span { + width: 24px; + height: 24px; + display: inline; + float: right; + text-indent: -9999px; + overflow: hidden; + background: url(./images/icons.png) no-repeat; + background: url(./images/icons.gif) no-repeat \9; + margin: 5px 1px 1px; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#upload .filelist div.file-panel span.rotateLeft { + display:none; + background-position: 0 -24px; +} + +#upload .filelist div.file-panel span.rotateLeft:hover { + background-position: 0 0; +} + +#upload .filelist div.file-panel span.rotateRight { + display:none; + background-position: -24px -24px; +} + +#upload .filelist div.file-panel span.rotateRight:hover { + background-position: -24px 0; +} + +#upload .filelist div.file-panel span.cancel { + background-position: -48px -24px; +} + +#upload .filelist div.file-panel span.cancel:hover { + background-position: -48px 0; +} + +#upload .statusBar { + height: 45px; + border-bottom: 1px solid #dadada; + margin: 0 10px; + padding: 0; + line-height: 45px; + vertical-align: middle; + position: relative; +} + +#upload .statusBar .progress { + border: 1px solid #1483d8; + width: 198px; + background: #fff; + height: 18px; + position: absolute; + top: 12px; + display: none; + text-align: center; + line-height: 18px; + color: #6dbfff; + margin: 0 10px 0 0; +} +#upload .statusBar .progress span.percentage { + width: 0; + height: 100%; + left: 0; + top: 0; + background: #1483d8; + position: absolute; +} +#upload .statusBar .progress span.text { + position: relative; + z-index: 10; +} + +#upload .statusBar .info { + display: inline-block; + font-size: 14px; + color: #666666; +} + +#upload .statusBar .btns { + position: absolute; + top: 7px; + right: 0; + line-height: 30px; +} + +#filePickerBtn { + display: inline-block; + float: left; +} +#upload .statusBar .btns .webuploader-pick, +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-uploading, +#upload .statusBar .btns .uploadBtn.state-paused { + background: #ffffff; + border: 1px solid #cfcfcf; + color: #565656; + padding: 0 18px; + display: inline-block; + border-radius: 3px; + margin-left: 10px; + cursor: pointer; + font-size: 14px; + float: left; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#upload .statusBar .btns .webuploader-pick-hover, +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-uploading:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover { + background: #f0f0f0; +} + +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-paused{ + background: #00b7ee; + color: #fff; + border-color: transparent; +} +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover{ + background: #00a2d4; +} + +#upload .statusBar .btns .uploadBtn.disabled { + pointer-events: none; + filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; +} + + +/* 在线文件的文件预览图标 */ +i.file-preview { + display: block; + margin: 10px auto; + width: 70px; + height: 70px; + background-image: url("./images/file-icons.png"); + background-image: url("./images/file-icons.gif") \9; + background-position: -140px center; + background-repeat: no-repeat; +} +i.file-preview.file-type-dir{ + background-position: 0 center; +} +i.file-preview.file-type-file{ + background-position: -140px center; +} +i.file-preview.file-type-filelist{ + background-position: -210px center; +} +i.file-preview.file-type-zip, +i.file-preview.file-type-rar, +i.file-preview.file-type-7z, +i.file-preview.file-type-tar, +i.file-preview.file-type-gz, +i.file-preview.file-type-bz2{ + background-position: -280px center; +} +i.file-preview.file-type-xls, +i.file-preview.file-type-xlsx{ + background-position: -350px center; +} +i.file-preview.file-type-doc, +i.file-preview.file-type-docx{ + background-position: -420px center; +} +i.file-preview.file-type-ppt, +i.file-preview.file-type-pptx{ + background-position: -490px center; +} +i.file-preview.file-type-vsd{ + background-position: -560px center; +} +i.file-preview.file-type-pdf{ + background-position: -630px center; +} +i.file-preview.file-type-txt, +i.file-preview.file-type-md, +i.file-preview.file-type-json, +i.file-preview.file-type-htm, +i.file-preview.file-type-xml, +i.file-preview.file-type-html, +i.file-preview.file-type-js, +i.file-preview.file-type-css, +i.file-preview.file-type-php, +i.file-preview.file-type-jsp, +i.file-preview.file-type-asp{ + background-position: -700px center; +} +i.file-preview.file-type-apk{ + background-position: -770px center; +} +i.file-preview.file-type-exe{ + background-position: -840px center; +} +i.file-preview.file-type-ipa{ + background-position: -910px center; +} +i.file-preview.file-type-mp4, +i.file-preview.file-type-swf, +i.file-preview.file-type-mkv, +i.file-preview.file-type-avi, +i.file-preview.file-type-flv, +i.file-preview.file-type-mov, +i.file-preview.file-type-mpg, +i.file-preview.file-type-mpeg, +i.file-preview.file-type-ogv, +i.file-preview.file-type-webm, +i.file-preview.file-type-rm, +i.file-preview.file-type-rmvb{ + background-position: -980px center; +} +i.file-preview.file-type-ogg, +i.file-preview.file-type-wav, +i.file-preview.file-type-wmv, +i.file-preview.file-type-mid, +i.file-preview.file-type-mp3{ + background-position: -1050px center; +} +i.file-preview.file-type-jpg, +i.file-preview.file-type-jpeg, +i.file-preview.file-type-gif, +i.file-preview.file-type-bmp, +i.file-preview.file-type-png, +i.file-preview.file-type-psd{ + background-position: -140px center; +} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/video.html b/express/Campari-vue/www/public/ueditor/dialogs/video/video.html new file mode 100644 index 0000000..5007882 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/video/video.html @@ -0,0 +1,86 @@ + + + + + + + + + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + 0% + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
      +
    • +
    +
    +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/video/video.js b/express/Campari-vue/www/public/ueditor/dialogs/video/video.js new file mode 100644 index 0000000..a8c34d9 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/video/video.js @@ -0,0 +1,791 @@ +/** + * Created by JetBrains PhpStorm. + * User: taoqili + * Date: 12-2-20 + * Time: 上午11:19 + * To change this template use File | Settings | File Templates. + */ + +(function(){ + + var video = {}, + uploadVideoList = [], + isModifyUploadVideo = false, + uploadFile; + + window.onload = function(){ + $focus($G("videoUrl")); + initTabs(); + initVideo(); + initUpload(); + }; + + /* 初始化tab标签 */ + function initTabs(){ + var tabs = $G('tabHeads').children; + for (var i = 0; i < tabs.length; i++) { + domUtils.on(tabs[i], "click", function (e) { + var j, bodyId, target = e.target || e.srcElement; + for (j = 0; j < tabs.length; j++) { + bodyId = tabs[j].getAttribute('data-content-id'); + if(tabs[j] == target){ + domUtils.addClass(tabs[j], 'focus'); + domUtils.addClass($G(bodyId), 'focus'); + }else { + domUtils.removeClasses(tabs[j], 'focus'); + domUtils.removeClasses($G(bodyId), 'focus'); + } + } + }); + } + } + + function initVideo(){ + createAlignButton( ["videoFloat", "upload_alignment"] ); + addUrlChangeListener($G("videoUrl")); + addOkListener(); + + //编辑视频时初始化相关信息 + (function(){ + var img = editor.selection.getRange().getClosedNode(),url; + if(img && img.className){ + var hasFakedClass = (img.className == "edui-faked-video"), + hasUploadClass = img.className.indexOf("edui-upload-video")!=-1; + if(hasFakedClass || hasUploadClass) { + $G("videoUrl").value = url = img.getAttribute("_url"); + $G("videoWidth").value = img.width; + $G("videoHeight").value = img.height; + var align = domUtils.getComputedStyle(img,"float"), + parentAlign = domUtils.getComputedStyle(img.parentNode,"text-align"); + updateAlignButton(parentAlign==="center"?"center":align); + } + if(hasUploadClass) { + isModifyUploadVideo = true; + } + } + createPreviewVideo(url); + })(); + } + + /** + * 监听确认和取消两个按钮事件,用户执行插入或者清空正在播放的视频实例操作 + */ + function addOkListener(){ + dialog.onok = function(){ + $G("preview").innerHTML = ""; + var currentTab = findFocus("tabHeads","tabSrc"); + switch(currentTab){ + case "video": + return insertSingle(); + break; + case "videoSearch": + return insertSearch("searchList"); + break; + case "upload": + return insertUpload(); + break; + } + }; + dialog.oncancel = function(){ + $G("preview").innerHTML = ""; + }; + } + + /** + * 依据传入的align值更新按钮信息 + * @param align + */ + function updateAlignButton( align ) { + var aligns = $G( "videoFloat" ).children; + for ( var i = 0, ci; ci = aligns[i++]; ) { + if ( ci.getAttribute( "name" ) == align ) { + if ( ci.className !="focus" ) { + ci.className = "focus"; + } + } else { + if ( ci.className =="focus" ) { + ci.className = ""; + } + } + } + } + + /** + * 将单个视频信息插入编辑器中 + */ + function insertSingle(){ + var width = $G("videoWidth"), + height = $G("videoHeight"), + url=$G('videoUrl').value, + align = findFocus("videoFloat","name"); + if(!url) return false; + if ( !checkNum( [width, height] ) ) return false; + editor.execCommand('insertvideo', { + url: convert_url(url), + width: width.value, + height: height.value, + align: align + }, isModifyUploadVideo ? 'upload':null); + } + + /** + * 将元素id下的所有代表视频的图片插入编辑器中 + * @param id + */ + function insertSearch(id){ + var imgs = domUtils.getElementsByTagName($G(id),"img"), + videoObjs=[]; + for(var i=0,img; img=imgs[i++];){ + if(img.getAttribute("selected")){ + videoObjs.push({ + url:img.getAttribute("ue_video_url"), + width:420, + height:280, + align:"none" + }); + } + } + editor.execCommand('insertvideo',videoObjs); + } + + /** + * 找到id下具有focus类的节点并返回该节点下的某个属性 + * @param id + * @param returnProperty + */ + function findFocus( id, returnProperty ) { + var tabs = $G( id ).children, + property; + for ( var i = 0, ci; ci = tabs[i++]; ) { + if ( ci.className=="focus" ) { + property = ci.getAttribute( returnProperty ); + break; + } + } + return property; + } + function convert_url(url){ + if ( !url ) return ''; + url = utils.trim(url) + .replace(/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i, 'player.youku.com/player.php/sid/$1/v.swf') + .replace(/(www\.)?youtube\.com\/watch\?v=([\w\-]+)/i, "www.youtube.com/v/$2") + .replace(/youtu.be\/(\w+)$/i, "www.youtube.com/v/$1") + .replace(/v\.ku6\.com\/.+\/([\w\.]+)\.html.*$/i, "player.ku6.com/refer/$1/v.swf") + .replace(/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "player.56.com/v_$1.swf") + .replace(/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "player.56.com/v_$1.swf") + .replace(/v\.pps\.tv\/play_([\w]+)\.html.*$/i, "player.pps.tv/player/sid/$1/v.swf") + .replace(/www\.letv\.com\/ptv\/vplay\/([\d]+)\.html.*$/i, "i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0") + .replace(/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i, "www.tudou.com/v/$1") + .replace(/v\.qq\.com\/cover\/[\w]+\/[\w]+\/([\w]+)\.html/i, "static.video.qq.com/TPout.swf?vid=$1") + .replace(/v\.qq\.com\/.+[\?\&]vid=([^&]+).*$/i, "static.video.qq.com/TPout.swf?vid=$1") + .replace(/my\.tv\.sohu\.com\/[\w]+\/[\d]+\/([\d]+)\.shtml.*$/i, "share.vrs.sohu.com/my/v.swf&id=$1"); + + return url; + } + + /** + * 检测传入的所有input框中输入的长宽是否是正数 + * @param nodes input框集合, + */ + function checkNum( nodes ) { + for ( var i = 0, ci; ci = nodes[i++]; ) { + var value = ci.value; + if ( !isNumber( value ) && value) { + alert( lang.numError ); + ci.value = ""; + ci.focus(); + return false; + } + } + return true; + } + + /** + * 数字判断 + * @param value + */ + function isNumber( value ) { + return /(0|^[1-9]\d*$)/.test( value ); + } + + /** + * 创建图片浮动选择按钮 + * @param ids + */ + function createAlignButton( ids ) { + for ( var i = 0, ci; ci = ids[i++]; ) { + var floatContainer = $G( ci ), + nameMaps = {"none":lang['default'], "left":lang.floatLeft, "right":lang.floatRight, "center":lang.block}; + for ( var j in nameMaps ) { + var div = document.createElement( "div" ); + div.setAttribute( "name", j ); + if ( j == "none" ) div.className="focus"; + div.style.cssText = "background:url(images/" + j + "_focus.jpg);"; + div.setAttribute( "title", nameMaps[j] ); + floatContainer.appendChild( div ); + } + switchSelect( ci ); + } + } + + /** + * 选择切换 + * @param selectParentId + */ + function switchSelect( selectParentId ) { + var selects = $G( selectParentId ).children; + for ( var i = 0, ci; ci = selects[i++]; ) { + domUtils.on( ci, "click", function () { + for ( var j = 0, cj; cj = selects[j++]; ) { + cj.className = ""; + cj.removeAttribute && cj.removeAttribute( "class" ); + } + this.className = "focus"; + } ) + } + } + + /** + * 监听url改变事件 + * @param url + */ + function addUrlChangeListener(url){ + if (browser.ie) { + url.onpropertychange = function () { + createPreviewVideo( this.value ); + } + } else { + url.addEventListener( "input", function () { + createPreviewVideo( this.value ); + }, false ); + } + } + + /** + * 根据url生成视频预览 + * @param url + */ + function createPreviewVideo(url){ + if ( !url )return; + + var conUrl = convert_url(url); + + conUrl = utils.unhtmlForUrl(conUrl); + + $G("preview").innerHTML = '
    '+lang.urlError+'
    '+ + '' + + ''; + } + + + /* 插入上传视频 */ + function insertUpload(){ + var videoObjs=[], + uploadDir = editor.getOpt('videoUrlPrefix'), + width = parseInt($G('upload_width').value, 10) || 420, + height = parseInt($G('upload_height').value, 10) || 280, + align = findFocus("upload_alignment","name") || 'none'; + for(var key in uploadVideoList) { + var file = uploadVideoList[key]; + videoObjs.push({ + url: uploadDir + file.url, + width:width, + height:height, + align:align + }); + } + + var count = uploadFile.getQueueCount(); + if (count) { + $('.info', '#queueList').html('' + '还有2个未上传文件'.replace(/[\d]/, count) + ''); + return false; + } else { + editor.execCommand('insertvideo', videoObjs, 'upload'); + } + } + + /*初始化上传标签*/ + function initUpload(){ + uploadFile = new UploadFile('queueList'); + } + + + /* 上传附件 */ + function UploadFile(target) { + this.$wrap = target.constructor == String ? $('#' + target) : $(target); + this.init(); + } + UploadFile.prototype = { + init: function () { + this.fileList = []; + this.initContainer(); + this.initUploader(); + }, + initContainer: function () { + this.$queue = this.$wrap.find('.filelist'); + }, + /* 初始化容器 */ + initUploader: function () { + var _this = this, + $ = jQuery, // just in case. Make sure it's not an other libaray. + $wrap = _this.$wrap, + // 图片容器 + $queue = $wrap.find('.filelist'), + // 状态栏,包括进度和控制按钮 + $statusBar = $wrap.find('.statusBar'), + // 文件总体选择信息。 + $info = $statusBar.find('.info'), + // 上传按钮 + $upload = $wrap.find('.uploadBtn'), + // 上传按钮 + $filePickerBtn = $wrap.find('.filePickerBtn'), + // 上传按钮 + $filePickerBlock = $wrap.find('.filePickerBlock'), + // 没选择文件之前的内容。 + $placeHolder = $wrap.find('.placeholder'), + // 总体进度条 + $progress = $statusBar.find('.progress').hide(), + // 添加的文件数量 + fileCount = 0, + // 添加的文件总大小 + fileSize = 0, + // 优化retina, 在retina下这个值是2 + ratio = window.devicePixelRatio || 1, + // 缩略图大小 + thumbnailWidth = 113 * ratio, + thumbnailHeight = 113 * ratio, + // 可能有pedding, ready, uploading, confirm, done. + state = '', + // 所有文件的进度信息,key为file id + percentages = {}, + supportTransition = (function () { + var s = document.createElement('p').style, + r = 'transition' in s || + 'WebkitTransition' in s || + 'MozTransition' in s || + 'msTransition' in s || + 'OTransition' in s; + s = null; + return r; + })(), + // WebUploader实例 + uploader, + actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')), + fileMaxSize = editor.getOpt('videoMaxSize'), + acceptExtensions = (editor.getOpt('videoAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');; + + if (!WebUploader.Uploader.support()) { + $('#filePickerReady').after($('
    ').html(lang.errorNotSupport)).hide(); + return; + } else if (!editor.getOpt('videoActionName')) { + $('#filePickerReady').after($('
    ').html(lang.errorLoadConfig)).hide(); + return; + } + + uploader = _this.uploader = WebUploader.create({ + pick: { + id: '#filePickerReady', + label: lang.uploadSelectFile + }, + swf: '../../third-party/webuploader/Uploader.swf', + server: actionUrl, + fileVal: editor.getOpt('videoFieldName'), + duplicate: true, + fileSingleSizeLimit: fileMaxSize, + compress: false + }); + uploader.addButton({ + id: '#filePickerBlock' + }); + uploader.addButton({ + id: '#filePickerBtn', + label: lang.uploadAddFile + }); + + setState('pedding'); + + // 当有文件添加进来时执行,负责view的创建 + function addFile(file) { + var $li = $('
  • ' + + '

    ' + file.name + '

    ' + + '

    ' + + '

    ' + + '
  • '), + + $btns = $('
    ' + + '' + lang.uploadDelete + '' + + '' + lang.uploadTurnRight + '' + + '' + lang.uploadTurnLeft + '
    ').appendTo($li), + $prgress = $li.find('p.progress span'), + $wrap = $li.find('p.imgWrap'), + $info = $('

    ').hide().appendTo($li), + + showError = function (code) { + switch (code) { + case 'exceed_size': + text = lang.errorExceedSize; + break; + case 'interrupt': + text = lang.errorInterrupt; + break; + case 'http': + text = lang.errorHttp; + break; + case 'not_allow_type': + text = lang.errorFileType; + break; + default: + text = lang.errorUploadRetry; + break; + } + $info.text(text).show(); + }; + + if (file.getStatus() === 'invalid') { + showError(file.statusText); + } else { + $wrap.text(lang.uploadPreview); + if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) { + $wrap.empty().addClass('notimage').append('' + + '' + file.name + ''); + } else { + if (browser.ie && browser.version <= 7) { + $wrap.text(lang.uploadNoPreview); + } else { + uploader.makeThumb(file, function (error, src) { + if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) { + $wrap.text(lang.uploadNoPreview); + } else { + var $img = $(''); + $wrap.empty().append($img); + $img.on('error', function () { + $wrap.text(lang.uploadNoPreview); + }); + } + }, thumbnailWidth, thumbnailHeight); + } + } + percentages[ file.id ] = [ file.size, 0 ]; + file.rotation = 0; + + /* 检查文件格式 */ + if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) { + showError('not_allow_type'); + uploader.removeFile(file); + } + } + + file.on('statuschange', function (cur, prev) { + if (prev === 'progress') { + $prgress.hide().width(0); + } else if (prev === 'queued') { + $li.off('mouseenter mouseleave'); + $btns.remove(); + } + // 成功 + if (cur === 'error' || cur === 'invalid') { + showError(file.statusText); + percentages[ file.id ][ 1 ] = 1; + } else if (cur === 'interrupt') { + showError('interrupt'); + } else if (cur === 'queued') { + percentages[ file.id ][ 1 ] = 0; + } else if (cur === 'progress') { + $info.hide(); + $prgress.css('display', 'block'); + } else if (cur === 'complete') { + } + + $li.removeClass('state-' + prev).addClass('state-' + cur); + }); + + $li.on('mouseenter', function () { + $btns.stop().animate({height: 30}); + }); + $li.on('mouseleave', function () { + $btns.stop().animate({height: 0}); + }); + + $btns.on('click', 'span', function () { + var index = $(this).index(), + deg; + + switch (index) { + case 0: + uploader.removeFile(file); + return; + case 1: + file.rotation += 90; + break; + case 2: + file.rotation -= 90; + break; + } + + if (supportTransition) { + deg = 'rotate(' + file.rotation + 'deg)'; + $wrap.css({ + '-webkit-transform': deg, + '-mos-transform': deg, + '-o-transform': deg, + 'transform': deg + }); + } else { + $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')'); + } + + }); + + $li.insertBefore($filePickerBlock); + } + + // 负责view的销毁 + function removeFile(file) { + var $li = $('#' + file.id); + delete percentages[ file.id ]; + updateTotalProgress(); + $li.off().find('.file-panel').off().end().remove(); + } + + function updateTotalProgress() { + var loaded = 0, + total = 0, + spans = $progress.children(), + percent; + + $.each(percentages, function (k, v) { + total += v[ 0 ]; + loaded += v[ 0 ] * v[ 1 ]; + }); + + percent = total ? loaded / total : 0; + + spans.eq(0).text(Math.round(percent * 100) + '%'); + spans.eq(1).css('width', Math.round(percent * 100) + '%'); + updateStatus(); + } + + function setState(val, files) { + + if (val != state) { + + var stats = uploader.getStats(); + + $upload.removeClass('state-' + state); + $upload.addClass('state-' + val); + + switch (val) { + + /* 未选择文件 */ + case 'pedding': + $queue.addClass('element-invisible'); + $statusBar.addClass('element-invisible'); + $placeHolder.removeClass('element-invisible'); + $progress.hide(); $info.hide(); + uploader.refresh(); + break; + + /* 可以开始上传 */ + case 'ready': + $placeHolder.addClass('element-invisible'); + $queue.removeClass('element-invisible'); + $statusBar.removeClass('element-invisible'); + $progress.hide(); $info.show(); + $upload.text(lang.uploadStart); + uploader.refresh(); + break; + + /* 上传中 */ + case 'uploading': + $progress.show(); $info.hide(); + $upload.text(lang.uploadPause); + break; + + /* 暂停上传 */ + case 'paused': + $progress.show(); $info.hide(); + $upload.text(lang.uploadContinue); + break; + + case 'confirm': + $progress.show(); $info.hide(); + $upload.text(lang.uploadStart); + + stats = uploader.getStats(); + if (stats.successNum && !stats.uploadFailNum) { + setState('finish'); + return; + } + break; + + case 'finish': + $progress.hide(); $info.show(); + if (stats.uploadFailNum) { + $upload.text(lang.uploadRetry); + } else { + $upload.text(lang.uploadStart); + } + break; + } + + state = val; + updateStatus(); + + } + + if (!_this.getQueueCount()) { + $upload.addClass('disabled') + } else { + $upload.removeClass('disabled') + } + + } + + function updateStatus() { + var text = '', stats; + + if (state === 'ready') { + text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)); + } else if (state === 'confirm') { + stats = uploader.getStats(); + if (stats.uploadFailNum) { + text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum); + } + } else { + stats = uploader.getStats(); + text = lang.updateStatusFinish.replace('_', fileCount). + replace('_KB', WebUploader.formatSize(fileSize)). + replace('_', stats.successNum); + + if (stats.uploadFailNum) { + text += lang.updateStatusError.replace('_', stats.uploadFailNum); + } + } + + $info.html(text); + } + + uploader.on('fileQueued', function (file) { + fileCount++; + fileSize += file.size; + + if (fileCount === 1) { + $placeHolder.addClass('element-invisible'); + $statusBar.show(); + } + + addFile(file); + }); + + uploader.on('fileDequeued', function (file) { + fileCount--; + fileSize -= file.size; + + removeFile(file); + updateTotalProgress(); + }); + + uploader.on('filesQueued', function (file) { + if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) { + setState('ready'); + } + updateTotalProgress(); + }); + + uploader.on('all', function (type, files) { + switch (type) { + case 'uploadFinished': + setState('confirm', files); + break; + case 'startUpload': + /* 添加额外的GET参数 */ + var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params); + uploader.option('server', url); + setState('uploading', files); + break; + case 'stopUpload': + setState('paused', files); + break; + } + }); + + uploader.on('uploadBeforeSend', function (file, data, header) { + //这里可以通过data对象添加POST参数 + header['X_Requested_With'] = 'XMLHttpRequest'; + }); + + uploader.on('uploadProgress', function (file, percentage) { + var $li = $('#' + file.id), + $percent = $li.find('.progress span'); + + $percent.css('width', percentage * 100 + '%'); + percentages[ file.id ][ 1 ] = percentage; + updateTotalProgress(); + }); + + uploader.on('uploadSuccess', function (file, ret) { + var $file = $('#' + file.id); + try { + var responseText = (ret._raw || ret), + json = utils.str2json(responseText); + if (json.state == 'SUCCESS') { + uploadVideoList.push({ + 'url': json.url, + 'type': json.type, + 'original':json.original + }); + $file.append(''); + } else { + $file.find('.error').text(json.state).show(); + } + } catch (e) { + $file.find('.error').text(lang.errorServerUpload).show(); + } + }); + + uploader.on('uploadError', function (file, code) { + }); + uploader.on('error', function (code, file) { + if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') { + addFile(file); + } + }); + uploader.on('uploadComplete', function (file, ret) { + }); + + $upload.on('click', function () { + if ($(this).hasClass('disabled')) { + return false; + } + + if (state === 'ready') { + uploader.upload(); + } else if (state === 'paused') { + uploader.upload(); + } else if (state === 'uploading') { + uploader.stop(); + } + }); + + $upload.addClass('state-' + state); + updateTotalProgress(); + }, + getQueueCount: function () { + var file, i, status, readyFile = 0, files = this.uploader.getFiles(); + for (i = 0; file = files[i++]; ) { + status = file.getStatus(); + if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++; + } + return readyFile; + }, + refresh: function(){ + this.uploader.refresh(); + } + }; + +})(); diff --git a/express/Campari-vue/www/public/ueditor/dialogs/webapp/webapp.html b/express/Campari-vue/www/public/ueditor/dialogs/webapp/webapp.html new file mode 100644 index 0000000..1614377 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/webapp/webapp.html @@ -0,0 +1,53 @@ + + + + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/wordimage/fClipboard_ueditor.swf b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/fClipboard_ueditor.swf new file mode 100644 index 0000000..ac5d27f Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/fClipboard_ueditor.swf differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/wordimage/imageUploader.swf b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/imageUploader.swf new file mode 100644 index 0000000..2a554ca Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/imageUploader.swf differ diff --git a/express/Campari-vue/www/public/ueditor/dialogs/wordimage/tangram.js b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/tangram.js new file mode 100644 index 0000000..2ebd8fd --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/tangram.js @@ -0,0 +1,1495 @@ +// Copyright (c) 2009, Baidu Inc. All rights reserved. +// +// Licensed under the BSD License +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http:// tangram.baidu.com/license.html +// +// 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. + /** + * @namespace T Tangram七巧板 + * @name T + * @version 1.6.0 +*/ + +/** + * 声明baidu包 + * @author: allstar, erik, meizz, berg + */ +var T, + baidu = T = baidu || {version: "1.5.0"}; +baidu.guid = "$BAIDU$"; +baidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}}; + +/** + * 使用flash资源封装的一些功能 + * @namespace baidu.flash + */ +baidu.flash = baidu.flash || {}; + +/** + * 操作dom的方法 + * @namespace baidu.dom + */ +baidu.dom = baidu.dom || {}; + + +/** + * 从文档中获取指定的DOM元素 + * @name baidu.dom.g + * @function + * @grammar baidu.dom.g(id) + * @param {string|HTMLElement} id 元素的id或DOM元素. + * @shortcut g,T.G + * @meta standard + * @see baidu.dom.q + * + * @return {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数. + */ +baidu.dom.g = function(id) { + if (!id) return null; + if ('string' == typeof id || id instanceof String) { + return document.getElementById(id); + } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) { + return id; + } + return null; +}; +baidu.g = baidu.G = baidu.dom.g; + + +/** + * 操作数组的方法 + * @namespace baidu.array + */ + +baidu.array = baidu.array || {}; + + +/** + * 遍历数组中所有元素 + * @name baidu.array.each + * @function + * @grammar baidu.array.each(source, iterator[, thisObject]) + * @param {Array} source 需要遍历的数组 + * @param {Function} iterator 对每个数组元素进行调用的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index)。 + * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组 + * @remark + * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。 + * @shortcut each + * @meta standard + * + * @returns {Array} 遍历的数组 + */ + +baidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) { + var returnValue, item, i, len = source.length; + + if ('function' == typeof iterator) { + for (i = 0; i < len; i++) { + item = source[i]; + returnValue = iterator.call(thisObject || source, item, i); + + if (returnValue === false) { + break; + } + } + } + return source; +}; + +/** + * 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。 + * @namespace baidu.lang + */ +baidu.lang = baidu.lang || {}; + + +/** + * 判断目标参数是否为function或Function实例 + * @name baidu.lang.isFunction + * @function + * @grammar baidu.lang.isFunction(source) + * @param {Any} source 目标参数 + * @version 1.2 + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * @meta standard + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isFunction = function (source) { + return '[object Function]' == Object.prototype.toString.call(source); +}; + +/** + * 判断目标参数是否string类型或String对象 + * @name baidu.lang.isString + * @function + * @grammar baidu.lang.isString(source) + * @param {Any} source 目标参数 + * @shortcut isString + * @meta standard + * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isString = function (source) { + return '[object String]' == Object.prototype.toString.call(source); +}; +baidu.isString = baidu.lang.isString; + + +/** + * 判断浏览器类型和特性的属性 + * @namespace baidu.browser + */ +baidu.browser = baidu.browser || {}; + + +/** + * 判断是否为opera浏览器 + * @property opera opera版本号 + * @grammar baidu.browser.opera + * @meta standard + * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome + * @returns {Number} opera版本号 + */ + +/** + * opera 从10开始不是用opera后面的字符串进行版本的判断 + * 在Browser identification最后添加Version + 数字进行版本标识 + * opera后面的数字保持在9.80不变 + */ +baidu.browser.opera = /opera(\/| )(\d+(\.\d+)?)(.+?(version\/(\d+(\.\d+)?)))?/i.test(navigator.userAgent) ? + ( RegExp["\x246"] || RegExp["\x242"] ) : undefined; + + +/** + * 在目标元素的指定位置插入HTML代码 + * @name baidu.dom.insertHTML + * @function + * @grammar baidu.dom.insertHTML(element, position, html) + * @param {HTMLElement|string} element 目标元素或目标元素的id + * @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd + * @param {string} html 要插入的html + * @remark + * + * 对于position参数,大小写不敏感
    + * 参数的意思:beforeBegin<span>afterBegin this is span! beforeEnd</span> afterEnd
    + * 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。 + * + * @shortcut insertHTML + * @meta standard + * + * @returns {HTMLElement} 目标元素 + */ +baidu.dom.insertHTML = function (element, position, html) { + element = baidu.dom.g(element); + var range,begin; + if (element.insertAdjacentHTML && !baidu.browser.opera) { + element.insertAdjacentHTML(position, html); + } else { + range = element.ownerDocument.createRange(); + position = position.toUpperCase(); + if (position == 'AFTERBEGIN' || position == 'BEFOREEND') { + range.selectNodeContents(element); + range.collapse(position == 'AFTERBEGIN'); + } else { + begin = position == 'BEFOREBEGIN'; + range[begin ? 'setStartBefore' : 'setEndAfter'](element); + range.collapse(begin); + } + range.insertNode(range.createContextualFragment(html)); + } + return element; +}; + +baidu.insertHTML = baidu.dom.insertHTML; + +/** + * 操作flash对象的方法,包括创建flash对象、获取flash对象以及判断flash插件的版本号 + * @namespace baidu.swf + */ +baidu.swf = baidu.swf || {}; + + +/** + * 浏览器支持的flash插件版本 + * @property version 浏览器支持的flash插件版本 + * @grammar baidu.swf.version + * @return {String} 版本号 + * @meta standard + */ +baidu.swf.version = (function () { + var n = navigator; + if (n.plugins && n.mimeTypes.length) { + var plugin = n.plugins["Shockwave Flash"]; + if (plugin && plugin.description) { + return plugin.description + .replace(/([a-zA-Z]|\s)+/, "") + .replace(/(\s)+r/, ".") + ".0"; + } + } else if (window.ActiveXObject && !window.opera) { + for (var i = 12; i >= 2; i--) { + try { + var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i); + if (c) { + var version = c.GetVariable("$version"); + return version.replace(/WIN/g,'').replace(/,/g,'.'); + } + } catch(e) {} + } + } +})(); + +/** + * 操作字符串的方法 + * @namespace baidu.string + */ +baidu.string = baidu.string || {}; + + +/** + * 对目标字符串进行html编码 + * @name baidu.string.encodeHTML + * @function + * @grammar baidu.string.encodeHTML(source) + * @param {string} source 目标字符串 + * @remark + * 编码字符有5个:&<>"' + * @shortcut encodeHTML + * @meta standard + * @see baidu.string.decodeHTML + * + * @returns {string} html编码后的字符串 + */ +baidu.string.encodeHTML = function (source) { + return String(source) + .replace(/&/g,'&') + .replace(//g,'>') + .replace(/"/g, """) + .replace(/'/g, "'"); +}; + +baidu.encodeHTML = baidu.string.encodeHTML; + +/** + * 创建flash对象的html字符串 + * @name baidu.swf.createHTML + * @function + * @grammar baidu.swf.createHTML(options) + * + * @param {Object} options 创建flash的选项参数 + * @param {string} options.id 要创建的flash的标识 + * @param {string} options.url flash文件的url + * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示 + * @param {string} options.ver 最低需要的flash player版本号 + * @param {string} options.width flash的宽度 + * @param {string} options.height flash的高度 + * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom + * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL + * @param {string} options.bgcolor swf文件的背景色 + * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br + * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false + * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false + * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false + * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best + * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit + * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent + * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain + * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none + * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false + * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false + * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false + * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false + * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。 + * + * @see baidu.swf.create + * @meta standard + * @returns {string} flash对象的html字符串 + */ +baidu.swf.createHTML = function (options) { + options = options || {}; + var version = baidu.swf.version, + needVersion = options['ver'] || '6.0.0', + vUnit1, vUnit2, i, k, len, item, tmpOpt = {}, + encodeHTML = baidu.string.encodeHTML; + for (k in options) { + tmpOpt[k] = options[k]; + } + options = tmpOpt; + if (version) { + version = version.split('.'); + needVersion = needVersion.split('.'); + for (i = 0; i < 3; i++) { + vUnit1 = parseInt(version[i], 10); + vUnit2 = parseInt(needVersion[i], 10); + if (vUnit2 < vUnit1) { + break; + } else if (vUnit2 > vUnit1) { + return ''; + } + } + } else { + return ''; + } + + var vars = options['vars'], + objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align']; + options['align'] = options['align'] || 'middle'; + options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'; + options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0'; + options['movie'] = options['url'] || ''; + delete options['vars']; + delete options['url']; + if ('string' == typeof vars) { + options['flashvars'] = vars; + } else { + var fvars = []; + for (k in vars) { + item = vars[k]; + fvars.push(k + "=" + encodeURIComponent(item)); + } + options['flashvars'] = fvars.join('&'); + } + var str = [''); + var params = { + 'wmode' : 1, + 'scale' : 1, + 'quality' : 1, + 'play' : 1, + 'loop' : 1, + 'menu' : 1, + 'salign' : 1, + 'bgcolor' : 1, + 'base' : 1, + 'allowscriptaccess' : 1, + 'allownetworking' : 1, + 'allowfullscreen' : 1, + 'seamlesstabbing' : 1, + 'devicefont' : 1, + 'swliveconnect' : 1, + 'flashvars' : 1, + 'movie' : 1 + }; + + for (k in options) { + item = options[k]; + k = k.toLowerCase(); + if (params[k] && (item || item === false || item === 0)) { + str.push(''); + } + } + options['src'] = options['movie']; + options['name'] = options['id']; + delete options['id']; + delete options['movie']; + delete options['classid']; + delete options['codebase']; + options['type'] = 'application/x-shockwave-flash'; + options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer'; + str.push(''); + + return str.join(''); +}; + + +/** + * 在页面中创建一个flash对象 + * @name baidu.swf.create + * @function + * @grammar baidu.swf.create(options[, container]) + * + * @param {Object} options 创建flash的选项参数 + * @param {string} options.id 要创建的flash的标识 + * @param {string} options.url flash文件的url + * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示 + * @param {string} options.ver 最低需要的flash player版本号 + * @param {string} options.width flash的宽度 + * @param {string} options.height flash的高度 + * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom + * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL + * @param {string} options.bgcolor swf文件的背景色 + * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br + * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false + * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false + * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false + * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best + * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit + * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent + * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain + * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none + * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false + * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false + * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false + * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false + * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。 + * + * @param {HTMLElement|string} [container] flash对象的父容器元素,不传递该参数时在当前代码位置创建flash对象。 + * @meta standard + * @see baidu.swf.createHTML,baidu.swf.getMovie + */ +baidu.swf.create = function (options, target) { + options = options || {}; + var html = baidu.swf.createHTML(options) + || options['errorMessage'] + || ''; + + if (target && 'string' == typeof target) { + target = document.getElementById(target); + } + baidu.dom.insertHTML( target || document.body ,'beforeEnd',html ); +}; +/** + * 判断是否为ie浏览器 + * @name baidu.browser.ie + * @field + * @grammar baidu.browser.ie + * @returns {Number} IE版本号 + */ +baidu.browser.ie = baidu.ie = /msie (\d+\.\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\x241']) : undefined; + +/** + * 移除数组中的项 + * @name baidu.array.remove + * @function + * @grammar baidu.array.remove(source, match) + * @param {Array} source 需要移除项的数组 + * @param {Any} match 要移除的项 + * @meta standard + * @see baidu.array.removeAt + * + * @returns {Array} 移除后的数组 + */ +baidu.array.remove = function (source, match) { + var len = source.length; + + while (len--) { + if (len in source && source[len] === match) { + source.splice(len, 1); + } + } + return source; +}; + +/** + * 判断目标参数是否Array对象 + * @name baidu.lang.isArray + * @function + * @grammar baidu.lang.isArray(source) + * @param {Any} source 目标参数 + * @meta standard + * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate + * + * @returns {boolean} 类型判断结果 + */ +baidu.lang.isArray = function (source) { + return '[object Array]' == Object.prototype.toString.call(source); +}; + + + +/** + * 将一个变量转换成array + * @name baidu.lang.toArray + * @function + * @grammar baidu.lang.toArray(source) + * @param {mix} source 需要转换成array的变量 + * @version 1.3 + * @meta standard + * @returns {array} 转换后的array + */ +baidu.lang.toArray = function (source) { + if (source === null || source === undefined) + return []; + if (baidu.lang.isArray(source)) + return source; + if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) { + return [source]; + } + if (source.item) { + var l = source.length, array = new Array(l); + while (l--) + array[l] = source[l]; + return array; + } + + return [].slice.call(source); +}; + +/** + * 获得flash对象的实例 + * @name baidu.swf.getMovie + * @function + * @grammar baidu.swf.getMovie(name) + * @param {string} name flash对象的名称 + * @see baidu.swf.create + * @meta standard + * @returns {HTMLElement} flash对象的实例 + */ +baidu.swf.getMovie = function (name) { + var movie = document[name], ret; + return baidu.browser.ie == 9 ? + movie && movie.length ? + (ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){ + return item.tagName.toLowerCase() != "embed"; + })).length == 1 ? ret[0] : ret + : movie + : movie || window[name]; +}; + + +baidu.flash._Base = (function(){ + + var prefix = 'bd__flash__'; + + /** + * 创建一个随机的字符串 + * @private + * @return {String} + */ + function _createString(){ + return prefix + Math.floor(Math.random() * 2147483648).toString(36); + }; + + /** + * 检查flash状态 + * @private + * @param {Object} target flash对象 + * @return {Boolean} + */ + function _checkReady(target){ + if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){ + return true; + }else{ + return false; + } + }; + + /** + * 调用之前进行压栈的函数 + * @private + * @param {Array} callQueue 调用队列 + * @param {Object} target flash对象 + * @return {Null} + */ + function _callFn(callQueue, target){ + var result = null; + + callQueue = callQueue.reverse(); + baidu.each(callQueue, function(item){ + result = target.call(item.fnName, item.params); + item.callBack(result); + }); + }; + + /** + * 为传入的匿名函数创建函数名 + * @private + * @param {String|Function} fun 传入的匿名函数或者函数名 + * @return {String} + */ + function _createFunName(fun){ + var name = ''; + + if(baidu.lang.isFunction(fun)){ + name = _createString(); + window[name] = function(){ + fun.apply(window, arguments); + }; + + return name; + }else if(baidu.lang.isString){ + return fun; + } + }; + + /** + * 绘制flash + * @private + * @param {Object} options 创建参数 + * @return {Object} + */ + function _render(options){ + if(!options.id){ + options.id = _createString(); + } + + var container = options.container || ''; + delete(options.container); + + baidu.swf.create(options, container); + + return baidu.swf.getMovie(options.id); + }; + + return function(options, callBack){ + var me = this, + autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true), + createOptions = options.createOptions || {}, + target = null, + isReady = false, + callQueue = [], + timeHandle = null, + callBack = callBack || []; + + /** + * 将flash文件绘制到页面上 + * @public + * @return {Null} + */ + me.render = function(){ + target = _render(createOptions); + + if(callBack.length > 0){ + baidu.each(callBack, function(funName, index){ + callBack[index] = _createFunName(options[funName] || new Function()); + }); + } + me.call('setJSFuncName', [callBack]); + }; + + /** + * 返回flash状态 + * @return {Boolean} + */ + me.isReady = function(){ + return isReady; + }; + + /** + * 调用flash接口的统一入口 + * @param {String} fnName 调用的函数名 + * @param {Array} params 传入的参数组成的数组,若不许要参数,需传入空数组 + * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数,如无返回值,可以不传入此参数 + * @return {Null} + */ + me.call = function(fnName, params, callBack){ + if(!fnName) return null; + callBack = callBack || new Function(); + + var result = null; + + if(isReady){ + result = target.call(fnName, params); + callBack(result); + }else{ + callQueue.push({ + fnName: fnName, + params: params, + callBack: callBack + }); + + (!timeHandle) && (timeHandle = setInterval(_check, 200)); + } + }; + + /** + * 为传入的匿名函数创建函数名 + * @public + * @param {String|Function} fun 传入的匿名函数或者函数名 + * @return {String} + */ + me.createFunName = function(fun){ + return _createFunName(fun); + }; + + /** + * 检查flash是否ready, 并进行调用 + * @private + * @return {Null} + */ + function _check(){ + if(_checkReady(target)){ + clearInterval(timeHandle); + timeHandle = null; + _call(); + + isReady = true; + } + }; + + /** + * 调用之前进行压栈的函数 + * @private + * @return {Null} + */ + function _call(){ + _callFn(callQueue, target); + callQueue = []; + } + + autoRender && me.render(); + }; +})(); + + + +/** + * 创建flash based imageUploader + * @class + * @grammar baidu.flash.imageUploader(options) + * @param {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档 + * @config {Object} vars 创建imageUploader时所需要的参数 + * @config {Number} vars.gridWidth 每一个预览图片所占的宽度,应该为flash寛的整除 + * @config {Number} vars.gridHeight 每一个预览图片所占的高度,应该为flash高的整除 + * @config {Number} vars.picWidth 单张预览图片的宽度 + * @config {Number} vars.picHeight 单张预览图片的高度 + * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata' + * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc' + * @config {Number} vars.maxSize 文件的最大体积,单位'MB' + * @config {Number} vars.compressSize 上传前如果图片体积超过该值,会先压缩 + * @config {Number} vars.maxNum:32 最大上传多少个文件 + * @config {Number} vars.compressLength 能接受的最大边长,超过该值会等比压缩 + * @config {String} vars.url 上传的url地址 + * @config {Number} vars.mode mode == 0时,是使用滚动条,mode == 1时,拉伸flash, 默认值为0 + * @see baidu.swf.createHTML + * @param {String} backgroundUrl 背景图片路径 + * @param {String} listBacgroundkUrl 布局控件背景 + * @param {String} buttonUrl 按钮图片不背景 + * @param {String|Function} selectFileCallback 选择文件的回调 + * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调 + * @param {String|Function} deleteFileCallback 删除文件的回调 + * @param {String|Function} startUploadCallback 开始上传某个文件时的回调 + * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调 + * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调 + * @param {String|Function} allCompleteCallback 全部上传完成时的回调 + * @param {String|Function} changeFlashHeight 改变Flash的高度,mode==1的时候才有用 + */ +baidu.flash.imageUploader = baidu.flash.imageUploader || function(options){ + + var me = this, + options = options || {}, + _flash = new baidu.flash._Base(options, [ + 'selectFileCallback', + 'exceedFileCallback', + 'deleteFileCallback', + 'startUploadCallback', + 'uploadCompleteCallback', + 'uploadErrorCallback', + 'allCompleteCallback', + 'changeFlashHeight' + ]); + /** + * 开始或回复上传图片 + * @public + * @return {Null} + */ + me.upload = function(){ + _flash.call('upload'); + }; + + /** + * 暂停上传图片 + * @public + * @return {Null} + */ + me.pause = function(){ + _flash.call('pause'); + }; + me.addCustomizedParams = function(index,obj){ + _flash.call('addCustomizedParams',[index,obj]); + } +}; + +/** + * 操作原生对象的方法 + * @namespace baidu.object + */ +baidu.object = baidu.object || {}; + + +/** + * 将源对象的所有属性拷贝到目标对象中 + * @author erik + * @name baidu.object.extend + * @function + * @grammar baidu.object.extend(target, source) + * @param {Object} target 目标对象 + * @param {Object} source 源对象 + * @see baidu.array.merge + * @remark + * +1.目标对象中,与源对象key相同的成员将会被覆盖。
    +2.源对象的prototype成员不会拷贝。 + + * @shortcut extend + * @meta standard + * + * @returns {Object} 目标对象 + */ +baidu.extend = +baidu.object.extend = function (target, source) { + for (var p in source) { + if (source.hasOwnProperty(p)) { + target[p] = source[p]; + } + } + + return target; +}; + + + + + +/** + * 创建flash based fileUploader + * @class + * @grammar baidu.flash.fileUploader(options) + * @param {Object} options + * @config {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档 + * @config {String} createOptions.width + * @config {String} createOptions.height + * @config {Number} maxNum 最大可选文件数 + * @config {Function|String} selectFile + * @config {Function|String} exceedMaxSize + * @config {Function|String} deleteFile + * @config {Function|String} uploadStart + * @config {Function|String} uploadComplete + * @config {Function|String} uploadError + * @config {Function|String} uploadProgress + */ +baidu.flash.fileUploader = baidu.flash.fileUploader || function(options){ + var me = this, + options = options || {}; + + options.createOptions = baidu.extend({ + wmod: 'transparent' + },options.createOptions || {}); + + var _flash = new baidu.flash._Base(options, [ + 'selectFile', + 'exceedMaxSize', + 'deleteFile', + 'uploadStart', + 'uploadComplete', + 'uploadError', + 'uploadProgress' + ]); + + _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]); + + /** + * 设置当鼠标移动到flash上时,是否变成手型 + * @public + * @param {Boolean} isCursor + * @return {Null} + */ + me.setHandCursor = function(isCursor){ + _flash.call('setHandCursor', [isCursor || false]); + }; + + /** + * 设置鼠标相应函数名 + * @param {String|Function} fun + */ + me.setMSFunName = function(fun){ + _flash.call('setMSFunName',[_flash.createFunName(fun)]); + }; + + /** + * 执行上传操作 + * @param {String} url 上传的url + * @param {String} fieldName 上传的表单字段名 + * @param {Object} postData 键值对,上传的POST数据 + * @param {Number|Array|null|-1} [index]上传的文件序列 + * Int值上传该文件 + * Array一次串行上传该序列文件 + * -1/null上传所有文件 + * @return {Null} + */ + me.upload = function(url, fieldName, postData, index){ + + if(typeof url !== 'string' || typeof fieldName !== 'string') return null; + if(typeof index === 'undefined') index = -1; + + _flash.call('upload', [url, fieldName, postData, index]); + }; + + /** + * 取消上传操作 + * @public + * @param {Number|-1} index + */ + me.cancel = function(index){ + if(typeof index === 'undefined') index = -1; + _flash.call('cancel', [index]); + }; + + /** + * 删除文件 + * @public + * @param {Number|Array} [index] 要删除的index,不传则全部删除 + * @param {Function} callBack + * */ + me.deleteFile = function(index, callBack){ + + var callBackAll = function(list){ + callBack && callBack(list); + }; + + if(typeof index === 'undefined'){ + _flash.call('deleteFilesAll', [], callBackAll); + return; + }; + + if(typeof index === 'Number') index = [index]; + index.sort(function(a,b){ + return b-a; + }); + baidu.each(index, function(item){ + _flash.call('deleteFileBy', item, callBackAll); + }); + }; + + /** + * 添加文件类型,支持macType + * @public + * @param {Object|Array[Object]} type {description:String, extention:String} + * @return {Null}; + */ + me.addFileType = function(type){ + var type = type || [[]]; + + if(type instanceof Array) type = [type]; + else type = [[type]]; + _flash.call('addFileTypes', type); + }; + + /** + * 设置文件类型,支持macType + * @public + * @param {Object|Array[Object]} type {description:String, extention:String} + * @return {Null}; + */ + me.setFileType = function(type){ + var type = type || [[]]; + + if(type instanceof Array) type = [type]; + else type = [[type]]; + _flash.call('setFileTypes', type); + }; + + /** + * 设置可选文件的数量限制 + * @public + * @param {Number} num + * @return {Null} + */ + me.setMaxNum = function(num){ + _flash.call('setMaxNum', [num]); + }; + + /** + * 设置可选文件大小限制,以兆M为单位 + * @public + * @param {Number} num,0为无限制 + * @return {Null} + */ + me.setMaxSize = function(num){ + _flash.call('setMaxSize', [num]); + }; + + /** + * @public + */ + me.getFileAll = function(callBack){ + _flash.call('getFileAll', [], callBack); + }; + + /** + * @public + * @param {Number} index + * @param {Function} [callBack] + */ + me.getFileByIndex = function(index, callBack){ + _flash.call('getFileByIndex', [], callBack); + }; + + /** + * @public + * @param {Number} index + * @param {function} [callBack] + */ + me.getStatusByIndex = function(index, callBack){ + _flash.call('getStatusByIndex', [], callBack); + }; +}; + +/** + * 使用动态script标签请求服务器资源,包括由服务器端的回调和浏览器端的回调 + * @namespace baidu.sio + */ +baidu.sio = baidu.sio || {}; + +/** + * + * @param {HTMLElement} src script节点 + * @param {String} url script节点的地址 + * @param {String} [charset] 编码 + */ +baidu.sio._createScriptTag = function(scr, url, charset){ + scr.setAttribute('type', 'text/javascript'); + charset && scr.setAttribute('charset', charset); + scr.setAttribute('src', url); + document.getElementsByTagName('head')[0].appendChild(scr); +}; + +/** + * 删除script的属性,再删除script标签,以解决修复内存泄漏的问题 + * + * @param {HTMLElement} src script节点 + */ +baidu.sio._removeScriptTag = function(scr){ + if (scr.clearAttributes) { + scr.clearAttributes(); + } else { + for (var attr in scr) { + if (scr.hasOwnProperty(attr)) { + delete scr[attr]; + } + } + } + if(scr && scr.parentNode){ + scr.parentNode.removeChild(scr); + } + scr = null; +}; + + +/** + * 通过script标签加载数据,加载完成由浏览器端触发回调 + * @name baidu.sio.callByBrowser + * @function + * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options) + * @param {string} url 加载数据的url + * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名 + * @param {Object} opt_options 其他可选项 + * @config {String} [charset] script的字符集 + * @config {Integer} [timeOut] 超时时间,超过这个时间将不再响应本请求,并触发onfailure函数 + * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数 + * @remark + * 1、与callByServer不同,callback参数只支持Function类型,不支持string。 + * 2、如果请求了一个不存在的页面,callback函数在IE/opera下也会被调用,因此使用者需要在onsuccess函数中判断数据是否正确加载。 + * @meta standard + * @see baidu.sio.callByServer + */ +baidu.sio.callByBrowser = function (url, opt_callback, opt_options) { + var scr = document.createElement("SCRIPT"), + scriptLoaded = 0, + options = opt_options || {}, + charset = options['charset'], + callback = opt_callback || function(){}, + timeOut = options['timeOut'] || 0, + timer; + scr.onload = scr.onreadystatechange = function () { + if (scriptLoaded) { + return; + } + + var readyState = scr.readyState; + if ('undefined' == typeof readyState + || readyState == "loaded" + || readyState == "complete") { + scriptLoaded = 1; + try { + callback(); + clearTimeout(timer); + } finally { + scr.onload = scr.onreadystatechange = null; + baidu.sio._removeScriptTag(scr); + } + } + }; + + if( timeOut ){ + timer = setTimeout(function(){ + scr.onload = scr.onreadystatechange = null; + baidu.sio._removeScriptTag(scr); + options.onfailure && options.onfailure(); + }, timeOut); + } + + baidu.sio._createScriptTag(scr, url, charset); +}; + +/** + * 通过script标签加载数据,加载完成由服务器端触发回调 + * @name baidu.sio.callByServer + * @function + * @grammar baidu.sio.callByServer(url, callback[, opt_options]) + * @param {string} url 加载数据的url. + * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数,将在URL中寻找options['queryField']做为callback的方法名. + * @param {Object} opt_options 加载数据时的选项. + * @config {string} [charset] script的字符集 + * @config {string} [queryField] 服务器端callback请求字段名,默认为callback + * @config {Integer} [timeOut] 超时时间(单位:ms),超过这个时间将不再响应本请求,并触发onfailure函数 + * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数 + * @remark + * 如果url中已经包含key为“options['queryField']”的query项,将会被替换成callback中参数传递或自动生成的函数名。 + * @meta standard + * @see baidu.sio.callByBrowser + */ +baidu.sio.callByServer = /**@function*/function(url, callback, opt_options) { + var scr = document.createElement('SCRIPT'), + prefix = 'bd__cbs__', + callbackName, + callbackImpl, + options = opt_options || {}, + charset = options['charset'], + queryField = options['queryField'] || 'callback', + timeOut = options['timeOut'] || 0, + timer, + reg = new RegExp('(\\?|&)' + queryField + '=([^&]*)'), + matches; + + if (baidu.lang.isFunction(callback)) { + callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36); + window[callbackName] = getCallBack(0); + } else if(baidu.lang.isString(callback)){ + callbackName = callback; + } else { + if (matches = reg.exec(url)) { + callbackName = matches[2]; + } + } + + if( timeOut ){ + timer = setTimeout(getCallBack(1), timeOut); + } + url = url.replace(reg, '\x241' + queryField + '=' + callbackName); + + if (url.search(reg) < 0) { + url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName; + } + baidu.sio._createScriptTag(scr, url, charset); + + /* + * 返回一个函数,用于立即(挂在window上)或者超时(挂在setTimeout中)时执行 + */ + function getCallBack(onTimeOut){ + /*global callbackName, callback, scr, options;*/ + return function(){ + try { + if( onTimeOut ){ + options.onfailure && options.onfailure(); + }else{ + callback.apply(window, arguments); + clearTimeout(timer); + } + window[callbackName] = null; + delete window[callbackName]; + } catch (exception) { + } finally { + baidu.sio._removeScriptTag(scr); + } + } + } +}; + +/** + * 通过请求一个图片的方式令服务器存储一条日志 + * @function + * @grammar baidu.sio.log(url) + * @param {string} url 要发送的地址. + * @author: int08h,leeight + */ +baidu.sio.log = function(url) { + var img = new Image(), + key = 'tangram_sio_log_' + Math.floor(Math.random() * + 2147483648).toString(36); + window[key] = img; + + img.onload = img.onerror = img.onabort = function() { + img.onload = img.onerror = img.onabort = null; + + window[key] = null; + img = null; + }; + img.src = url; +}; + + + +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json.js + * author: erik + * version: 1.1.0 + * date: 2009/12/02 + */ + + +/** + * 操作json对象的方法 + * @namespace baidu.json + */ +baidu.json = baidu.json || {}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/parse.js + * author: erik, berg + * version: 1.2 + * date: 2009/11/23 + */ + + + +/** + * 将字符串解析成json对象。注:不会自动祛除空格 + * @name baidu.json.parse + * @function + * @grammar baidu.json.parse(data) + * @param {string} source 需要解析的字符串 + * @remark + * 该方法的实现与ecma-262第五版中规定的JSON.parse不同,暂时只支持传入一个参数。后续会进行功能丰富。 + * @meta standard + * @see baidu.json.stringify,baidu.json.decode + * + * @returns {JSON} 解析结果json对象 + */ +baidu.json.parse = function (data) { + //2010/12/09:更新至不使用原生parse,不检测用户输入是否正确 + return (new Function("return (" + data + ")"))(); +}; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/decode.js + * author: erik, cat + * version: 1.3.4 + * date: 2010/12/23 + */ + + + +/** + * 将字符串解析成json对象,为过时接口,今后会被baidu.json.parse代替 + * @name baidu.json.decode + * @function + * @grammar baidu.json.decode(source) + * @param {string} source 需要解析的字符串 + * @meta out + * @see baidu.json.encode,baidu.json.parse + * + * @returns {JSON} 解析结果json对象 + */ +baidu.json.decode = baidu.json.parse; +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/stringify.js + * author: erik + * version: 1.1.0 + * date: 2010/01/11 + */ + + + +/** + * 将json对象序列化 + * @name baidu.json.stringify + * @function + * @grammar baidu.json.stringify(value) + * @param {JSON} value 需要序列化的json对象 + * @remark + * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同,暂时只支持传入一个参数。后续会进行功能丰富。 + * @meta standard + * @see baidu.json.parse,baidu.json.encode + * + * @returns {string} 序列化后的字符串 + */ +baidu.json.stringify = (function () { + /** + * 字符串处理时需要转义的字符表 + * @private + */ + var escapeMap = { + "\b": '\\b', + "\t": '\\t', + "\n": '\\n', + "\f": '\\f', + "\r": '\\r', + '"' : '\\"', + "\\": '\\\\' + }; + + /** + * 字符串序列化 + * @private + */ + function encodeString(source) { + if (/["\\\x00-\x1f]/.test(source)) { + source = source.replace( + /["\\\x00-\x1f]/g, + function (match) { + var c = escapeMap[match]; + if (c) { + return c; + } + c = match.charCodeAt(); + return "\\u00" + + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }); + } + return '"' + source + '"'; + } + + /** + * 数组序列化 + * @private + */ + function encodeArray(source) { + var result = ["["], + l = source.length, + preComma, i, item; + + for (i = 0; i < l; i++) { + item = source[i]; + + switch (typeof item) { + case "undefined": + case "function": + case "unknown": + break; + default: + if(preComma) { + result.push(','); + } + result.push(baidu.json.stringify(item)); + preComma = 1; + } + } + result.push("]"); + return result.join(""); + } + + /** + * 处理日期序列化时的补零 + * @private + */ + function pad(source) { + return source < 10 ? '0' + source : source; + } + + /** + * 日期序列化 + * @private + */ + function encodeDate(source){ + return '"' + source.getFullYear() + "-" + + pad(source.getMonth() + 1) + "-" + + pad(source.getDate()) + "T" + + pad(source.getHours()) + ":" + + pad(source.getMinutes()) + ":" + + pad(source.getSeconds()) + '"'; + } + + return function (value) { + switch (typeof value) { + case 'undefined': + return 'undefined'; + + case 'number': + return isFinite(value) ? String(value) : "null"; + + case 'string': + return encodeString(value); + + case 'boolean': + return String(value); + + default: + if (value === null) { + return 'null'; + } else if (value instanceof Array) { + return encodeArray(value); + } else if (value instanceof Date) { + return encodeDate(value); + } else { + var result = ['{'], + encode = baidu.json.stringify, + preComma, + item; + + for (var key in value) { + if (Object.prototype.hasOwnProperty.call(value, key)) { + item = value[key]; + switch (typeof item) { + case 'undefined': + case 'unknown': + case 'function': + break; + default: + if (preComma) { + result.push(','); + } + preComma = 1; + result.push(encode(key) + ':' + encode(item)); + } + } + } + result.push('}'); + return result.join(''); + } + } + }; +})(); +/* + * Tangram + * Copyright 2009 Baidu Inc. All rights reserved. + * + * path: baidu/json/encode.js + * author: erik, cat + * version: 1.3.4 + * date: 2010/12/23 + */ + + + +/** + * 将json对象序列化,为过时接口,今后会被baidu.json.stringify代替 + * @name baidu.json.encode + * @function + * @grammar baidu.json.encode(value) + * @param {JSON} value 需要序列化的json对象 + * @meta out + * @see baidu.json.decode,baidu.json.stringify + * + * @returns {string} 序列化后的字符串 + */ +baidu.json.encode = baidu.json.stringify; diff --git a/express/Campari-vue/www/public/ueditor/dialogs/wordimage/wordimage.html b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/wordimage.html new file mode 100644 index 0000000..6cf6067 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/wordimage.html @@ -0,0 +1,111 @@ + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    + +
    + : +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/dialogs/wordimage/wordimage.js b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/wordimage.js new file mode 100644 index 0000000..98f3a22 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/dialogs/wordimage/wordimage.js @@ -0,0 +1,157 @@ +/** + * Created by JetBrains PhpStorm. + * User: taoqili + * Date: 12-1-30 + * Time: 下午12:50 + * To change this template use File | Settings | File Templates. + */ + + + +var wordImage = {}; +//(function(){ +var g = baidu.g, + flashObj,flashContainer; + +wordImage.init = function(opt, callbacks) { + showLocalPath("localPath"); + //createCopyButton("clipboard","localPath"); + createFlashUploader(opt, callbacks); + addUploadListener(); + addOkListener(); +}; + +function hideFlash(){ + flashObj = null; + flashContainer.innerHTML = ""; +} +function addOkListener() { + dialog.onok = function() { + if (!imageUrls.length) return; + var urlPrefix = editor.getOpt('imageUrlPrefix'), + images = domUtils.getElementsByTagName(editor.document,"img"); + editor.fireEvent('saveScene'); + for (var i = 0,img; img = images[i++];) { + var src = img.getAttribute("word_img"); + if (!src) continue; + for (var j = 0,url; url = imageUrls[j++];) { + if (src.indexOf(url.original.replace(" ","")) != -1) { + img.src = urlPrefix + url.url; + img.setAttribute("_src", urlPrefix + url.url); //同时修改"_src"属性 + img.setAttribute("title",url.title); + domUtils.removeAttributes(img, ["word_img","style","width","height"]); + editor.fireEvent("selectionchange"); + break; + } + } + } + editor.fireEvent('saveScene'); + hideFlash(); + }; + dialog.oncancel = function(){ + hideFlash(); + } +} + +/** + * 绑定开始上传事件 + */ +function addUploadListener() { + g("upload").onclick = function () { + flashObj.upload(); + this.style.display = "none"; + }; +} + +function showLocalPath(id) { + //单张编辑 + var img = editor.selection.getRange().getClosedNode(); + var images = editor.execCommand('wordimage'); + if(images.length==1 || img && img.tagName == 'IMG'){ + g(id).value = images[0]; + return; + } + var path = images[0]; + var leftSlashIndex = path.lastIndexOf("/")||0, //不同版本的doc和浏览器都可能影响到这个符号,故直接判断两种 + rightSlashIndex = path.lastIndexOf("\\")||0, + separater = leftSlashIndex > rightSlashIndex ? "/":"\\" ; + + path = path.substring(0, path.lastIndexOf(separater)+1); + g(id).value = path; +} + +function createFlashUploader(opt, callbacks) { + //由于lang.flashI18n是静态属性,不可以直接进行修改,否则会影响到后续内容 + var i18n = utils.extend({},lang.flashI18n); + //处理图片资源地址的编码,补全等问题 + for(var i in i18n){ + if(!(i in {"lang":1,"uploadingTF":1,"imageTF":1,"textEncoding":1}) && i18n[i]){ + i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + "/images/" + i18n[i]); + } + } + opt = utils.extend(opt,i18n,false); + var option = { + createOptions:{ + id:'flash', + url:opt.flashUrl, + width:opt.width, + height:opt.height, + errorMessage:lang.flashError, + wmode:browser.safari ? 'transparent' : 'window', + ver:'10.0.0', + vars:opt, + container:opt.container + } + }; + + option = extendProperty(callbacks, option); + flashObj = new baidu.flash.imageUploader(option); + flashContainer = $G(opt.container); +} + +function extendProperty(fromObj, toObj) { + for (var i in fromObj) { + if (!toObj[i]) { + toObj[i] = fromObj[i]; + } + } + return toObj; +} + +//})(); + +function getPasteData(id) { + baidu.g("msg").innerHTML = lang.copySuccess + "
    "; + setTimeout(function() { + baidu.g("msg").innerHTML = ""; + }, 5000); + return baidu.g(id).value; +} + +function createCopyButton(id, dataFrom) { + baidu.swf.create({ + id:"copyFlash", + url:"fClipboard_ueditor.swf", + width:"58", + height:"25", + errorMessage:"", + bgColor:"#CBCBCB", + wmode:"transparent", + ver:"10.0.0", + vars:{ + tid:dataFrom + } + }, id + ); + + var clipboard = baidu.swf.getMovie("copyFlash"); + var clipinterval = setInterval(function() { + if (clipboard && clipboard.flashInit) { + clearInterval(clipinterval); + clipboard.setHandCursor(true); + clipboard.setContentFuncName("getPasteData"); + //clipboard.setMEFuncName("mouseEventHandler"); + } + }, 500); +} +createCopyButton("clipboard", "localPath"); \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/index.html b/express/Campari-vue/www/public/ueditor/index.html new file mode 100644 index 0000000..a416418 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/index.html @@ -0,0 +1,175 @@ + + + + 完整demo + + + + + + + + + + +
    +

    完整demo

    + +
    +
    +
    + + + + + + + + + + + +
    +
    + + + + + + + +
    + +
    + + +
    + +
    +
    + + +
    + + + + \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/jsp/config.json b/express/Campari-vue/www/public/ueditor/jsp/config.json new file mode 100644 index 0000000..53b6c97 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/jsp/config.json @@ -0,0 +1,94 @@ +/* 前后端通信相关的配置,注释只允许使用多行方式 */ +{ + /* 上传图片配置项 */ + "imageActionName": "uploadimage", /* 执行上传图片的action名称 */ + "imageFieldName": "upfile", /* 提交的图片表单名称 */ + "imageMaxSize": 2048000, /* 上传大小限制,单位B */ + "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */ + "imageCompressEnable": true, /* 是否压缩图片,默认是true */ + "imageCompressBorder": 1600, /* 图片压缩最长边限制 */ + "imageInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageUrlPrefix": "", /* 图片访问路径前缀 */ + "imagePathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ + /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ + /* {time} 会替换成时间戳 */ + /* {yyyy} 会替换成四位年份 */ + /* {yy} 会替换成两位年份 */ + /* {mm} 会替换成两位月份 */ + /* {dd} 会替换成两位日期 */ + /* {hh} 会替换成两位小时 */ + /* {ii} 会替换成两位分钟 */ + /* {ss} 会替换成两位秒 */ + /* 非法字符 \ : * ? " < > | */ + /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ + + /* 涂鸦图片上传配置项 */ + "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */ + "scrawlFieldName": "upfile", /* 提交的图片表单名称 */ + "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */ + "scrawlUrlPrefix": "", /* 图片访问路径前缀 */ + "scrawlInsertAlign": "none", + + /* 截图工具上传 */ + "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */ + "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */ + "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */ + + /* 抓取远程图片配置 */ + "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], + "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */ + "catcherFieldName": "source", /* 提交的图片列表表单名称 */ + "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "catcherUrlPrefix": "", /* 图片访问路径前缀 */ + "catcherMaxSize": 2048000, /* 上传大小限制,单位B */ + "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */ + + /* 上传视频配置 */ + "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */ + "videoFieldName": "upfile", /* 提交的视频表单名称 */ + "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "videoUrlPrefix": "", /* 视频访问路径前缀 */ + "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */ + "videoAllowFiles": [ + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */ + + /* 上传文件配置 */ + "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */ + "fileFieldName": "upfile", /* 提交的文件表单名称 */ + "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "fileUrlPrefix": "", /* 文件访问路径前缀 */ + "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */ + "fileAllowFiles": [ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", + ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", + ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" + ], /* 上传文件格式显示 */ + + /* 列出指定目录下的图片 */ + "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */ + "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */ + "imageManagerListSize": 20, /* 每次列出文件数量 */ + "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */ + "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */ + + /* 列出指定目录下的文件 */ + "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */ + "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */ + "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */ + "fileManagerListSize": 20, /* 每次列出文件数量 */ + "fileManagerAllowFiles": [ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", + ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", + ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" + ] /* 列出的文件类型 */ + +} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/jsp/controller.jsp b/express/Campari-vue/www/public/ueditor/jsp/controller.jsp new file mode 100644 index 0000000..6a3ef2f --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/jsp/controller.jsp @@ -0,0 +1,14 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + import="com.baidu.ueditor.ActionEnter" + pageEncoding="UTF-8"%> +<%@ page trimDirectiveWhitespaces="true" %> +<% + + request.setCharacterEncoding( "utf-8" ); + response.setHeader("Content-Type" , "text/html"); + + String rootPath = application.getRealPath( "/" ); + + out.write( new ActionEnter( request, rootPath ).exec() ); + +%> \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/jsp/lib/commons-codec-1.9.jar b/express/Campari-vue/www/public/ueditor/jsp/lib/commons-codec-1.9.jar new file mode 100644 index 0000000..ef35f1c Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/jsp/lib/commons-codec-1.9.jar differ diff --git a/express/Campari-vue/www/public/ueditor/jsp/lib/commons-fileupload-1.3.1.jar b/express/Campari-vue/www/public/ueditor/jsp/lib/commons-fileupload-1.3.1.jar new file mode 100644 index 0000000..af0cda2 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/jsp/lib/commons-fileupload-1.3.1.jar differ diff --git a/express/Campari-vue/www/public/ueditor/jsp/lib/commons-io-2.4.jar b/express/Campari-vue/www/public/ueditor/jsp/lib/commons-io-2.4.jar new file mode 100644 index 0000000..90035a4 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/jsp/lib/commons-io-2.4.jar differ diff --git a/express/Campari-vue/www/public/ueditor/jsp/lib/json.jar b/express/Campari-vue/www/public/ueditor/jsp/lib/json.jar new file mode 100644 index 0000000..ed0bc93 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/jsp/lib/json.jar differ diff --git a/express/Campari-vue/www/public/ueditor/jsp/lib/ueditor-1.1.2.jar b/express/Campari-vue/www/public/ueditor/jsp/lib/ueditor-1.1.2.jar new file mode 100644 index 0000000..4819fe0 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/jsp/lib/ueditor-1.1.2.jar differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/en.js b/express/Campari-vue/www/public/ueditor/lang/en/en.js new file mode 100644 index 0000000..c7e22f5 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/lang/en/en.js @@ -0,0 +1,684 @@ +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-6-12 + * Time: 下午6:57 + * To change this template use File | Settings | File Templates. + */ +UE.I18N['en'] = { + 'labelMap':{ + 'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen', + 'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border', + 'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote', + 'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview', + 'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date', + 'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown', + 'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code', + 'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle', + 'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':"InsertParagraphBeforeTable", + 'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link', + 'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap', + 'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter', + 'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL', + 'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight', + 'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default', + 'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage', + 'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset', + 'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable', + 'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts' + }, + 'insertorderedlist':{ + 'num':'1,2,3...', + 'num1':'1),2),3)...', + 'num2':'(1),(2),(3)...', + 'cn':'一,二,三....', + 'cn1':'一),二),三)....', + 'cn2':'(一),(二),(三)....', + 'decimal':'1,2,3...', + 'lower-alpha':'a,b,c...', + 'lower-roman':'i,ii,iii...', + 'upper-alpha':'A,B,C...', + 'upper-roman':'I,II,III...' + }, + 'insertunorderedlist':{ + 'circle':'○ Circle', + 'disc':'● Circle dot', + 'square':'■ Rectangle ', + 'dash' :'- Dash', + 'dot' : '。dot' + }, + 'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'}, + 'fontfamily':{ + 'songti':'Sim Sun', + 'kaiti':'Sim Kai', + 'heiti':'Sim Hei', + 'lishu':'Sim Li', + 'yahei': 'Microsoft YaHei', + 'andaleMono':'Andale Mono', + 'arial': 'Arial', + 'arialBlack':'Arial Black', + 'comicSansMs':'Comic Sans MS', + 'impact':'Impact', + 'timesNewRoman':'Times New Roman' + }, + 'customstyle':{ + 'tc':'Title center', + 'tl':'Title left', + 'im':'Important', + 'hi':'Highlight' + }, + 'autoupload': { + 'exceedSizeError': 'File Size Exceed', + 'exceedTypeError': 'File Type Not Allow', + 'jsonEncodeError': 'Server Return Format Error', + 'loading':"loading...", + 'loadError':"load error", + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + }, + 'simpleupload':{ + 'exceedSizeError': 'File Size Exceed', + 'exceedTypeError': 'File Type Not Allow', + 'jsonEncodeError': 'Server Return Format Error', + 'loading':"loading...", + 'loadError':"load error", + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + }, + 'elementPathTip':"Path", + 'wordCountTip':"Word Count", + 'wordCountMsg':'{#count} characters entered,{#leave} left. ', + 'wordOverFlowMsg':'The number of characters has exceeded allowable maximum values, the server may refuse to save!', + 'ok':"OK", + 'cancel':"Cancel", + 'closeDialog':"closeDialog", + 'tableDrag':"You must import the file uiUtils.js before drag! ", + 'autofloatMsg':"The plugin AutoFloat depends on EditorUI!", + 'loadconfigError': 'Get server config error.', + 'loadconfigFormatError': 'Server config format error.', + 'loadconfigHttpError': 'Get server config http error.', + 'snapScreen_plugin':{ + 'browserMsg':"Only IE supported!", + 'callBackErrorMsg':"The callback data is wrong,please check the config!", + 'uploadErrorMsg':"Upload error,please check your server environment! " + }, + 'insertcode':{ + 'as3':'ActionScript 3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'CSS', + 'cf':'ColdFusion', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'HTML', + 'java':'Java', + 'jfx':'JavaFX', + 'js':'JavaScript', + 'pl':'Perl', + 'php':'PHP', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'SQL', + 'vb':'Visual Basic', + 'xml':'XML' + }, + 'confirmClear':"Do you confirm to clear the Document?", + 'contextMenu':{ + 'delete':"Delete", + 'selectall':"Select all", + 'deletecode':"Delete Code", + 'cleardoc':"Clear Document", + 'confirmclear':"Do you confirm to clear the Document?", + 'unlink':"Unlink", + 'paragraph':"Paragraph", + 'edittable':"Table property", + 'aligncell':'Align cell', + 'aligntable':'Table alignment', + 'tableleft':'Left float', + 'tablecenter':'Center', + 'tableright':'Right float', + 'aligntd':'Cell alignment', + 'edittd':"Cell property", + 'setbordervisible':'set table edge visible', + 'table':"Table", + 'justifyleft':'Justify Left', + 'justifyright':'Justify Right', + 'justifycenter':'Justify Center', + 'justifyjustify':'Default', + 'deletetable':"Delete table", + 'insertparagraphbefore':"InsertedBeforeLine", + 'insertparagraphafter':'InsertedAfterLine', + 'inserttable':'Insert table', + 'insertcaption':'Insert caption', + 'deletecaption':'Delete Caption', + 'inserttitle':'Insert Title', + 'deletetitle':'Delete Title', + 'inserttitlecol':'Insert Title Col', + 'deletetitlecol':'Delete Title Col', + 'averageDiseRow':'AverageDise Row', + 'averageDisCol':'AverageDis Col', + 'deleterow':"Delete row", + 'deletecol':"Delete col", + 'insertrow':"Insert row", + 'insertcol':"Insert col", + 'insertrownext':'Insert Row Next', + 'insertcolnext':'Insert Col Next', + 'mergeright':"Merge right", + 'mergeleft':"Merge left", + 'mergedown':"Merge down", + 'mergecells':"Merge cells", + 'splittocells':"Split to cells", + 'splittocols':"Split to Cols", + 'splittorows':"Split to Rows", + 'tablesort':'Table sorting', + 'enablesort':'Sorting Enable', + 'disablesort':'Sorting Disable', + 'reversecurrent':'Reverse current', + 'orderbyasc':'Order By ASCII', + 'reversebyasc':'Reverse By ASCII', + 'orderbynum':'Order By Num', + 'reversebynum':'Reverse By Num', + 'borderbk':'Border shading', + 'setcolor':'interlaced color', + 'unsetcolor':'Cancel interlacedcolor', + 'setbackground':'Background interlaced', + 'unsetbackground':'Cancel Bk interlaced', + 'redandblue':'Blue and red', + 'threecolorgradient':'Three-color gradient', + 'copy':"Copy(Ctrl + c)", + 'copymsg':"Browser does not support. Please use 'Ctrl + c' instead!", + 'paste':"Paste(Ctrl + v)", + 'pastemsg':"Browser does not support. Please use 'Ctrl + v' instead!" + }, + 'copymsg': "Browser does not support. Please use 'Ctrl + c' instead!", + 'pastemsg': "Browser does not support. Please use 'Ctrl + v' instead!", + 'anthorMsg':"Link", + 'clearColor':'Clear', + 'standardColor':'Standard color', + 'themeColor':'Theme color', + 'property':'Property', + 'default':'Default', + 'modify':'Modify', + 'justifyleft':'Justify Left', + 'justifyright':'Justify Right', + 'justifycenter':'Justify Center', + 'justify':'Default', + 'clear':'Clear', + 'anchorMsg':'Anchor', + 'delete':'Delete', + 'clickToUpload':"Click to upload", + 'unset':'Language hasn\'t been set!', + 't_row':'row', + 't_col':'col', + 'pasteOpt':'Paste Option', + 'pasteSourceFormat':"Keep Source Formatting", + 'tagFormat':'Keep tag', + 'pasteTextFormat':'Keep Text only', + 'more':'More', + 'autoTypeSet':{ + 'mergeLine':"Merge empty line", + 'delLine':"Del empty line", + 'removeFormat':"Remove format", + 'indent':"Indent", + 'alignment':"Alignment", + 'imageFloat':"Image float", + 'removeFontsize':"Remove font size", + 'removeFontFamily':"Remove fontFamily", + 'removeHtml':"Remove redundant HTML code", + 'pasteFilter':"Paste filter", + 'run':"Done", + 'symbol':'Symbol Conversion', + 'bdc2sb':'Full-width to Half-width', + 'tobdc':'Half-width to Full-width' + }, + + 'background':{ + 'static':{ + 'lang_background_normal':'Normal', + 'lang_background_local':'Online', + 'lang_background_set':'Background Set', + 'lang_background_none':'No Background', + 'lang_background_colored':'Colored Background', + 'lang_background_color':'Color Set', + 'lang_background_netimg':'Net-Image', + 'lang_background_align':'Align Type', + 'lang_background_position':'Position', + 'repeatType':{'options':["Center", "Repeat-x", "Repeat-y", "Tile","Custom"]} + }, + 'noUploadImage':"No pictures has been uploaded!", + 'toggleSelect':'Change the active state by click!\n Image Size: ' + }, + //===============dialog i18N======================= + 'insertimage':{ + 'static':{ + 'lang_tab_remote':"Insert", + 'lang_tab_upload':"Local", + 'lang_tab_online':"Manager", + 'lang_tab_search':"Search", + 'lang_input_url':"Address:", + 'lang_input_size':"Size:", + 'lang_input_width':"Width", + 'lang_input_height':"Height", + 'lang_input_border':"Border:", + 'lang_input_vhspace':"Margins:", + 'lang_input_title':"Title:", + 'lang_input_align':'Image Float Style:', + 'lang_imgLoading':"Loading...", + 'lang_start_upload':"Start Upload", + 'lock':{'title':"Lock rate"}, + 'searchType':{'title':"ImageType", 'options':["News", "Wallpaper", "emotions", "photo"]}, + 'searchTxt':{'value':"Enter the search keyword!"}, + 'searchBtn':{'value':"Search"}, + 'searchReset':{'value':"Clear"}, + 'noneAlign':{'title':'None Float'}, + 'leftAlign':{'title':'Left Float'}, + 'rightAlign':{'title':'Right Float'}, + 'centerAlign':{'title':'Center In A Line'} + }, + 'uploadSelectFile':'Select File', + 'uploadAddFile':'Add File', + 'uploadStart':'Start Upload', + 'uploadPause':'Pause Upload', + 'uploadContinue':'Continue Upload', + 'uploadRetry':'Retry Upload', + 'uploadDelete':'Delete', + 'uploadTurnLeft':'Turn Left', + 'uploadTurnRight':'Turn Right', + 'uploadPreview':'Doing Preview', + 'uploadNoPreview':'Can Not Preview', + 'updateStatusReady': 'Selected _ pictures, total _KB.', + 'updateStatusConfirm': '_ uploaded successfully and _ upload failed', + 'updateStatusFinish': 'Total _ pictures (_KB), _ uploaded successfully', + 'updateStatusError': ' and _ upload failed', + 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player', + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + 'errorExceedSize':'File Size Exceed', + 'errorFileType':'File Type Not Allow', + 'errorInterrupt':'File Upload Interrupted', + 'errorUploadRetry':'Upload Error, Please Retry.', + 'errorHttp':'Http Error', + 'errorServerUpload':'Server Result Error.', + 'remoteLockError':"Cannot Lock the Proportion between width and height", + 'numError':"Please enter the correct Num. e.g 123,400", + 'imageUrlError':"The image format may be wrong!", + 'imageLoadError':"Error,please check the network or URL!", + 'searchRemind':"Enter the search keyword!", + 'searchLoading':"Image is loading,please wait...", + 'searchRetry':" Sorry,can't find the image,please try again!" + }, + 'attachment':{ + 'static':{ + 'lang_tab_upload': 'Upload', + 'lang_tab_online': 'Online', + 'lang_start_upload':"Start upload", + 'lang_drop_remind':"You can drop files here, a single maximum of 300 files" + }, + 'uploadSelectFile':'Select File', + 'uploadAddFile':'Add File', + 'uploadStart':'Start Upload', + 'uploadPause':'Pause Upload', + 'uploadContinue':'Continue Upload', + 'uploadRetry':'Retry Upload', + 'uploadDelete':'Delete', + 'uploadTurnLeft':'Turn Left', + 'uploadTurnRight':'Turn Right', + 'uploadPreview':'Doing Preview', + 'updateStatusReady': 'Selected _ files, total _KB.', + 'updateStatusConfirm': '_ uploaded successfully and _ upload failed', + 'updateStatusFinish': 'Total _ files (_KB), _ uploaded successfully', + 'updateStatusError': ' and _ upload failed', + 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player', + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + 'errorExceedSize':'File Size Exceed', + 'errorFileType':'File Type Not Allow', + 'errorInterrupt':'File Upload Interrupted', + 'errorUploadRetry':'Upload Error, Please Retry.', + 'errorHttp':'Http Error', + 'errorServerUpload':'Server Result Error.' + }, + + 'insertvideo':{ + 'static':{ + 'lang_tab_insertV':"Video", + 'lang_tab_searchV':"Search", + 'lang_tab_uploadV':"Upload", + 'lang_video_url':" URL ", + 'lang_video_size':"Video Size", + 'lang_videoW':"Width", + 'lang_videoH':"Height", + 'lang_alignment':"Alignment", + 'videoSearchTxt':{'value':"Enter the search keyword!"}, + 'videoType':{'options':["All", "Hot", "Entertainment", "Funny", "Sports", "Science", "variety"]}, + 'videoSearchBtn':{'value':"Search in Baidu"}, + 'videoSearchReset':{'value':"Clear result"}, + + 'lang_input_fileStatus':' No file uploaded!', + 'startUpload':{'style':"background:url(upload.png) no-repeat;"}, + + 'lang_upload_size':"Video Size", + 'lang_upload_width':"Width", + 'lang_upload_height':"Height", + 'lang_upload_alignment':"Alignment", + 'lang_format_advice':"Recommends mp4 format." + }, + 'numError':"Please enter the correct Num. e.g 123,400", + 'floatLeft':"Float left", + 'floatRight':"Float right", + 'default':"Default", + 'block':"Display in block", + 'urlError':"The video url format may be wrong!", + 'loading':"  The video is loading, please wait…", + 'clickToSelect':"Click to select", + 'goToSource':'Visit source video ', + 'noVideo':"    Sorry,can't find the video,please try again!", + + 'browseFiles':'Open files', + 'uploadSuccess':'Upload Successful!', + 'delSuccessFile':'Remove from the success of the queue', + 'delFailSaveFile':'Remove the save failed file', + 'statusPrompt':' file(s) uploaded! ', + 'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!', + 'flashLoadingError':'The Flash failed loading! Please check the path or network state', + 'fileUploadReady':'Wait for uploading...', + 'delUploadQueue':'Remove from the uploading queue ', + 'limitPrompt1':'Can not choose more than single', + 'limitPrompt2':'file(s)!Please choose again!', + 'delFailFile':'Remove failure file', + 'fileSizeLimit':'File size exceeds the limit!', + 'emptyFile':'Can not upload an empty file!', + 'fileTypeError':'File type error!', + 'unknownError':'Unknown error!', + 'fileUploading':'Uploading,please wait...', + 'cancelUpload':'Cancel upload', + 'netError':'Network error', + 'failUpload':'Upload failed', + 'serverIOError':'Server IO error!', + 'noAuthority':'No Permission!', + 'fileNumLimit':'Upload limit to the number', + 'failCheck':'Authentication fails, the upload is skipped!', + 'fileCanceling':'Cancel, please wait...', + 'stopUploading':'Upload has stopped...', + + 'uploadSelectFile':'Select File', + 'uploadAddFile':'Add File', + 'uploadStart':'Start Upload', + 'uploadPause':'Pause Upload', + 'uploadContinue':'Continue Upload', + 'uploadRetry':'Retry Upload', + 'uploadDelete':'Delete', + 'uploadTurnLeft':'Turn Left', + 'uploadTurnRight':'Turn Right', + 'uploadPreview':'Doing Preview', + 'updateStatusReady': 'Selected _ files, total _KB.', + 'updateStatusConfirm': '_ uploaded successfully and _ upload failed', + 'updateStatusFinish': 'Total _ files (_KB), _ uploaded successfully', + 'updateStatusError': ' and _ upload failed', + 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player', + 'errorLoadConfig': 'Server config not loaded, upload can not work.', + 'errorExceedSize':'File Size Exceed', + 'errorFileType':'File Type Not Allow', + 'errorInterrupt':'File Upload Interrupted', + 'errorUploadRetry':'Upload Error, Please Retry.', + 'errorHttp':'Http Error', + 'errorServerUpload':'Server Result Error.' + }, + 'webapp':{ + 'tip1':"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!", + 'tip2':"And then open the file ueditor.config.js to set it! ", + 'applyFor':"APPLY FOR", + 'anthorApi':"Baidu API" + }, + 'template':{ + 'static':{ + 'lang_template_bkcolor':'Background Color', + 'lang_template_clear' : 'Keep Content', + 'lang_template_select':'Select Template' + }, + 'blank':"Blank", + 'blog':"Blog", + 'resume':"Resume", + 'richText':"Rich Text", + 'scrPapers':"Scientific Papers" + }, + scrawl:{ + 'static':{ + 'lang_input_previousStep':"Previous", + 'lang_input_nextsStep':"Next", + 'lang_input_clear':'Clear', + 'lang_input_addPic':'AddImage', + 'lang_input_ScalePic':'ScaleImage', + 'lang_input_removePic':'RemoveImage', + 'J_imgTxt':{title:'Add background image'} + }, + 'noScarwl':"No paint, a white paper...", + 'scrawlUpLoading':"Image is uploading, please wait...", + 'continueBtn':"Try again", + 'imageError':"Image failed to load!", + 'backgroundUploading':'Image is uploading,please wait...' + }, + 'music':{ + 'static':{ + 'lang_input_tips':"Input singer/song/album, search you interested in music!", + 'J_searchBtn':{value:'Search songs'} + }, + 'emptyTxt':'Not search to the relevant music results, please change a keyword try.', + 'chapter':'Songs', + 'singer':'Singer', + 'special':'Album', + 'listenTest':'Audition' + }, + anchor:{ + 'static':{ + 'lang_input_anchorName':'Anchor Name:' + } + }, + 'charts':{ + 'static':{ + 'lang_data_source':'Data source:', + 'lang_chart_format': 'Chart format:', + 'lang_data_align': 'Align', + 'lang_chart_align_same': 'Consistent with the X-axis Y-axis', + 'lang_chart_align_reverse': 'X-axis Y-axis opposite', + 'lang_chart_title': 'Title', + 'lang_chart_main_title': 'main title:', + 'lang_chart_sub_title': 'sub title:', + 'lang_chart_x_title': 'X-axis title:', + 'lang_chart_y_title': 'Y-axis title:', + 'lang_chart_tip': 'Prompt', + 'lang_cahrt_tip_prefix': 'prefix:', + 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀', + 'lang_chart_data_unit': 'Unit', + 'lang_chart_data_unit_title': 'unit:', + 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃', + 'lang_chart_type': 'Chart type:', + 'lang_prev_btn': 'Previous', + 'lang_next_btn': 'Next' + } + }, + emotion:{ + 'static':{ + 'lang_input_choice':'Choice', + 'lang_input_Tuzki':'Tuzki', + 'lang_input_lvdouwa':'LvDouWa', + 'lang_input_BOBO':'BOBO', + 'lang_input_babyCat':'BabyCat', + 'lang_input_bubble':'Bubble', + 'lang_input_youa':'YouA' + } + }, + gmap:{ + 'static':{ + 'lang_input_address':'Address:', + 'lang_input_search':'Search', + 'address':{value:"Beijing"} + }, + searchError:'Unable to locate the address!' + }, + help:{ + 'static':{ + 'lang_input_about':'About', + 'lang_input_shortcuts':'Shortcuts', + 'lang_input_introduction':"UEditor is developed by Baidu Co.ltd. It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.", + 'lang_Txt_shortcuts':'Shortcuts', + 'lang_Txt_func':'Function', + 'lang_Txt_bold':'Bold', + 'lang_Txt_copy':'Copy', + 'lang_Txt_cut':'Cut', + 'lang_Txt_Paste':'Paste', + 'lang_Txt_undo':'Undo', + 'lang_Txt_redo':'Redo', + 'lang_Txt_italic':'Italic', + 'lang_Txt_underline':'Underline', + 'lang_Txt_selectAll':'Select All', + 'lang_Txt_visualEnter':'Submit', + 'lang_Txt_fullscreen':'Fullscreen' + } + }, + insertframe:{ + 'static':{ + 'lang_input_address':'Address:', + 'lang_input_width':'Width:', + 'lang_input_height':'height:', + 'lang_input_isScroll':'Enable scrollbars:', + 'lang_input_frameborder':'Show frame border:', + 'lang_input_alignMode':'Alignment:', + 'align':{title:"Alignment", options:["Default", "Left", "Right", "Center"]} + }, + 'enterAddress':'Please enter an address!' + }, + link:{ + 'static':{ + 'lang_input_text':'Text:', + 'lang_input_url':'URL:', + 'lang_input_title':'Title:', + 'lang_input_target':'open in new window:' + }, + 'validLink':'Supports only effective when a link is selected', + 'httpPrompt':'The hyperlink you enter should start with "http|https|ftp://"!' + }, + map:{ + 'static':{ + lang_city:"City", + lang_address:"Address", + city:{value:"Beijing"}, + lang_search:"Search", + lang_dynamicmap:"Dynamic map" + }, + cityMsg:"Please enter the city name!", + errorMsg:"Can't find the place!" + }, + searchreplace:{ + 'static':{ + lang_tab_search:"Search", + lang_tab_replace:"Replace", + lang_search1:"Search", + lang_search2:"Search", + lang_replace:"Replace", + lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"', + lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"', + lang_case_sensitive1:"Case sense", + lang_case_sensitive2:"Case sense", + nextFindBtn:{value:"Next"}, + preFindBtn:{value:"Preview"}, + nextReplaceBtn:{value:"Next"}, + preReplaceBtn:{value:"Preview"}, + repalceBtn:{value:"Replace"}, + repalceAllBtn:{value:"Replace all"} + }, + getEnd:"Has the search to the bottom!", + getStart:"Has the search to the top!", + countMsg:"Altogether replaced {#count} character(s)!" + }, + snapscreen:{ + 'static':{ + lang_showMsg:"You should install the UEditor screenshots program first!", + lang_download:"Download!", + lang_step1:"Step1:Download the program and then run it", + lang_step2:"Step2:After complete install,try to click the button again" + } + }, + spechars:{ + 'static':{}, + tsfh:"Special", + lmsz:"Roman", + szfh:"Numeral", + rwfh:"Japanese", + xlzm:"The Greek", + ewzm:"Russian", + pyzm:"Phonetic", + yyyb:"English", + zyzf:"Others" + }, + 'edittable':{ + 'static':{ + 'lang_tableStyle':'Table style', + 'lang_insertCaption':'Add table header row', + 'lang_insertTitle':'Add table title row', + 'lang_insertTitleCol':'Add table title col', + 'lang_tableSize':'Automatically adjust table size', + 'lang_autoSizeContent':'Adaptive by form text', + 'lang_orderbycontent':"Table of contents sortable", + 'lang_autoSizePage':'Page width adaptive', + 'lang_example':'Example', + 'lang_borderStyle':'Table Border', + 'lang_color':'Color:' + }, + captionName:'Caption', + titleName:'Title', + cellsName:'text', + errorMsg:'There are merged cells, can not sort.' + }, + 'edittip':{ + 'static':{ + lang_delRow:'Delete entire row', + lang_delCol:'Delete entire col' + } + }, + 'edittd':{ + 'static':{ + lang_tdBkColor:'Background Color:' + } + }, + 'formula':{ + 'static':{ + } + }, + wordimage:{ + 'static':{ + lang_resave:"The re-save step", + uploadBtn:{src:"upload.png", alt:"Upload"}, + clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"}, + lang_step:" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process." + }, + fileType:"Image", + flashError:"Flash initialization failed!", + netError:"Network error! Please try again!", + copySuccess:"URL has been copied!", + + 'flashI18n':{ + lang:encodeURI( '{"UploadingState":"totalNum: ${a},uploadComplete: ${b}", "BeforeUpload":"waitingNum: ${a}", "ExceedSize":"Size exceed${a}", "ErrorInPreview":"Preview failed", "DefaultDescription":"Description", "LoadingImage":"Loading..."}' ), + uploadingTF:encodeURI( '{"font":"Arial", "size":12, "color":"0x000", "bold":"true", "italic":"false", "underline":"false"}' ), + imageTF:encodeURI( '{"font":"Arial", "size":11, "color":"red", "bold":"false", "italic":"false", "underline":"false"}' ), + textEncoding:"utf-8", + addImageSkinURL:"addImage.png", + allDeleteBtnUpSkinURL:"allDeleteBtnUpSkin.png", + allDeleteBtnHoverSkinURL:"allDeleteBtnHoverSkin.png", + rotateLeftBtnEnableSkinURL:"rotateLeftEnable.png", + rotateLeftBtnDisableSkinURL:"rotateLeftDisable.png", + rotateRightBtnEnableSkinURL:"rotateRightEnable.png", + rotateRightBtnDisableSkinURL:"rotateRightDisable.png", + deleteBtnEnableSkinURL:"deleteEnable.png", + deleteBtnDisableSkinURL:"deleteDisable.png", + backgroundURL:'', + listBackgroundURL:'', + buttonURL:'button.png' + } + }, + 'autosave': { + 'success':'Local conservation success' + } +}; diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/addimage.png b/express/Campari-vue/www/public/ueditor/lang/en/images/addimage.png new file mode 100644 index 0000000..3a2fd17 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/addimage.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/alldeletebtnhoverskin.png b/express/Campari-vue/www/public/ueditor/lang/en/images/alldeletebtnhoverskin.png new file mode 100644 index 0000000..355eeab Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/alldeletebtnhoverskin.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/alldeletebtnupskin.png b/express/Campari-vue/www/public/ueditor/lang/en/images/alldeletebtnupskin.png new file mode 100644 index 0000000..61658ce Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/alldeletebtnupskin.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/background.png b/express/Campari-vue/www/public/ueditor/lang/en/images/background.png new file mode 100644 index 0000000..d5bf5fd Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/background.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/button.png b/express/Campari-vue/www/public/ueditor/lang/en/images/button.png new file mode 100644 index 0000000..098874c Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/button.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/copy.png b/express/Campari-vue/www/public/ueditor/lang/en/images/copy.png new file mode 100644 index 0000000..f982e8b Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/copy.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/deletedisable.png b/express/Campari-vue/www/public/ueditor/lang/en/images/deletedisable.png new file mode 100644 index 0000000..c8ee750 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/deletedisable.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/deleteenable.png b/express/Campari-vue/www/public/ueditor/lang/en/images/deleteenable.png new file mode 100644 index 0000000..26acc88 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/deleteenable.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/listbackground.png b/express/Campari-vue/www/public/ueditor/lang/en/images/listbackground.png new file mode 100644 index 0000000..4f82ccd Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/listbackground.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/localimage.png b/express/Campari-vue/www/public/ueditor/lang/en/images/localimage.png new file mode 100644 index 0000000..12c8e6a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/localimage.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/music.png b/express/Campari-vue/www/public/ueditor/lang/en/images/music.png new file mode 100644 index 0000000..2f495fe Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/music.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/rotateleftdisable.png b/express/Campari-vue/www/public/ueditor/lang/en/images/rotateleftdisable.png new file mode 100644 index 0000000..741526e Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/rotateleftdisable.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/rotateleftenable.png b/express/Campari-vue/www/public/ueditor/lang/en/images/rotateleftenable.png new file mode 100644 index 0000000..e164ddb Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/rotateleftenable.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/rotaterightdisable.png b/express/Campari-vue/www/public/ueditor/lang/en/images/rotaterightdisable.png new file mode 100644 index 0000000..5a78c26 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/rotaterightdisable.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/rotaterightenable.png b/express/Campari-vue/www/public/ueditor/lang/en/images/rotaterightenable.png new file mode 100644 index 0000000..d768531 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/rotaterightenable.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/en/images/upload.png b/express/Campari-vue/www/public/ueditor/lang/en/images/upload.png new file mode 100644 index 0000000..7bb15b3 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/en/images/upload.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/copy.png b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/copy.png new file mode 100644 index 0000000..b2536aa Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/copy.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/localimage.png b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/localimage.png new file mode 100644 index 0000000..7303c36 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/localimage.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/music.png b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/music.png new file mode 100644 index 0000000..354edeb Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/music.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/upload.png b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/upload.png new file mode 100644 index 0000000..08d4d92 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/lang/zh-cn/images/upload.png differ diff --git a/express/Campari-vue/www/public/ueditor/lang/zh-cn/zh-cn.js b/express/Campari-vue/www/public/ueditor/lang/zh-cn/zh-cn.js new file mode 100644 index 0000000..4d5178f --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/lang/zh-cn/zh-cn.js @@ -0,0 +1,669 @@ +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-6-12 + * Time: 下午5:02 + * To change this template use File | Settings | File Templates. + */ +UE.I18N['zh-cn'] = { + 'labelMap':{ + 'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图', + 'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框', + 'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用', + 'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览', + 'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期', + 'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格', + 'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行', + 'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题', + 'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言', + 'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接', + 'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图', + 'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐', + 'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表', + 'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入', + 'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认', + 'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存', + 'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版', + 'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦', + 'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表' + }, + 'insertorderedlist':{ + 'num':'1,2,3...', + 'num1':'1),2),3)...', + 'num2':'(1),(2),(3)...', + 'cn':'一,二,三....', + 'cn1':'一),二),三)....', + 'cn2':'(一),(二),(三)....', + 'decimal':'1,2,3...', + 'lower-alpha':'a,b,c...', + 'lower-roman':'i,ii,iii...', + 'upper-alpha':'A,B,C...', + 'upper-roman':'I,II,III...' + }, + 'insertunorderedlist':{ + 'circle':'○ 大圆圈', + 'disc':'● 小黑点', + 'square':'■ 小方块 ', + 'dash' :'— 破折号', + 'dot':' 。 小圆圈' + }, + 'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'}, + 'fontfamily':{ + 'songti':'宋体', + 'kaiti':'楷体', + 'heiti':'黑体', + 'lishu':'隶书', + 'yahei':'微软雅黑', + 'andaleMono':'andale mono', + 'arial': 'arial', + 'arialBlack':'arial black', + 'comicSansMs':'comic sans ms', + 'impact':'impact', + 'timesNewRoman':'times new roman' + }, + 'customstyle':{ + 'tc':'标题居中', + 'tl':'标题居左', + 'im':'强调', + 'hi':'明显强调' + }, + 'autoupload': { + 'exceedSizeError': '文件大小超出限制', + 'exceedTypeError': '文件格式不允许', + 'jsonEncodeError': '服务器返回格式错误', + 'loading':"正在上传...", + 'loadError':"上传错误", + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!' + }, + 'simpleupload':{ + 'exceedSizeError': '文件大小超出限制', + 'exceedTypeError': '文件格式不允许', + 'jsonEncodeError': '服务器返回格式错误', + 'loading':"正在上传...", + 'loadError':"上传错误", + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!' + }, + 'elementPathTip':"元素路径", + 'wordCountTip':"字数统计", + 'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ', + 'wordOverFlowMsg':'字数超出最大允许值,服务器可能拒绝保存!', + 'ok':"确认", + 'cancel':"取消", + 'closeDialog':"关闭对话框", + 'tableDrag':"表格拖动必须引入uiUtils.js文件!", + 'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!", + 'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!', + 'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!', + 'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!', + 'snapScreen_plugin':{ + 'browserMsg':"仅支持IE浏览器!", + 'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。", + 'uploadErrorMsg':"截图上传失败,请检查服务器端环境! " + }, + 'insertcode':{ + 'as3':'ActionScript 3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'CSS', + 'cf':'ColdFusion', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'HTML', + 'java':'Java', + 'jfx':'JavaFX', + 'js':'JavaScript', + 'pl':'Perl', + 'php':'PHP', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'SQL', + 'vb':'Visual Basic', + 'xml':'XML' + }, + 'confirmClear':"确定清空当前文档么?", + 'contextMenu':{ + 'delete':"删除", + 'selectall':"全选", + 'deletecode':"删除代码", + 'cleardoc':"清空文档", + 'confirmclear':"确定清空当前文档么?", + 'unlink':"删除超链接", + 'paragraph':"段落格式", + 'edittable':"表格属性", + 'aligntd':"单元格对齐方式", + 'aligntable':'表格对齐方式', + 'tableleft':'左浮动', + 'tablecenter':'居中显示', + 'tableright':'右浮动', + 'edittd':"单元格属性", + 'setbordervisible':'设置表格边线可见', + 'justifyleft':'左对齐', + 'justifyright':'右对齐', + 'justifycenter':'居中对齐', + 'justifyjustify':'两端对齐', + 'table':"表格", + 'inserttable':'插入表格', + 'deletetable':"删除表格", + 'insertparagraphbefore':"前插入段落", + 'insertparagraphafter':'后插入段落', + 'deleterow':"删除当前行", + 'deletecol':"删除当前列", + 'insertrow':"前插入行", + 'insertcol':"左插入列", + 'insertrownext':'后插入行', + 'insertcolnext':'右插入列', + 'insertcaption':'插入表格名称', + 'deletecaption':'删除表格名称', + 'inserttitle':'插入表格标题行', + 'deletetitle':'删除表格标题行', + 'inserttitlecol':'插入表格标题列', + 'deletetitlecol':'删除表格标题列', + 'averageDiseRow':'平均分布各行', + 'averageDisCol':'平均分布各列', + 'mergeright':"向右合并", + 'mergeleft':"向左合并", + 'mergedown':"向下合并", + 'mergecells':"合并单元格", + 'splittocells':"完全拆分单元格", + 'splittocols':"拆分成列", + 'splittorows':"拆分成行", + 'tablesort':'表格排序', + 'enablesort':'设置表格可排序', + 'disablesort':'取消表格可排序', + 'reversecurrent':'逆序当前', + 'orderbyasc':'按ASCII字符升序', + 'reversebyasc':'按ASCII字符降序', + 'orderbynum':'按数值大小升序', + 'reversebynum':'按数值大小降序', + 'borderbk':'边框底纹', + 'setcolor':'表格隔行变色', + 'unsetcolor':'取消表格隔行变色', + 'setbackground':'选区背景隔行', + 'unsetbackground':'取消选区背景', + 'redandblue':'红蓝相间', + 'threecolorgradient':'三色渐变', + 'copy':"复制(Ctrl + c)", + 'copymsg': "浏览器不支持,请使用 'Ctrl + c'", + 'paste':"粘贴(Ctrl + v)", + 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'" + }, + 'copymsg': "浏览器不支持,请使用 'Ctrl + c'", + 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'", + 'anthorMsg':"链接", + 'clearColor':'清空颜色', + 'standardColor':'标准颜色', + 'themeColor':'主题颜色', + 'property':'属性', + 'default':'默认', + 'modify':'修改', + 'justifyleft':'左对齐', + 'justifyright':'右对齐', + 'justifycenter':'居中', + 'justify':'默认', + 'clear':'清除', + 'anchorMsg':'锚点', + 'delete':'删除', + 'clickToUpload':"点击上传", + 'unset':'尚未设置语言文件', + 't_row':'行', + 't_col':'列', + 'more':'更多', + 'pasteOpt':'粘贴选项', + 'pasteSourceFormat':"保留源格式", + 'tagFormat':'只保留标签', + 'pasteTextFormat':'只保留文本', + 'autoTypeSet':{ + 'mergeLine':"合并空行", + 'delLine':"清除空行", + 'removeFormat':"清除格式", + 'indent':"首行缩进", + 'alignment':"对齐方式", + 'imageFloat':"图片浮动", + 'removeFontsize':"清除字号", + 'removeFontFamily':"清除字体", + 'removeHtml':"清除冗余HTML代码", + 'pasteFilter':"粘贴过滤", + 'run':"执行", + 'symbol':'符号转换', + 'bdc2sb':'全角转半角', + 'tobdc':'半角转全角' + }, + + 'background':{ + 'static':{ + 'lang_background_normal':'背景设置', + 'lang_background_local':'在线图片', + 'lang_background_set':'选项', + 'lang_background_none':'无背景色', + 'lang_background_colored':'有背景色', + 'lang_background_color':'颜色设置', + 'lang_background_netimg':'网络图片', + 'lang_background_align':'对齐方式', + 'lang_background_position':'精确定位', + 'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]} + + }, + 'noUploadImage':"当前未上传过任何图片!", + 'toggleSelect':"单击可切换选中状态\n原图尺寸: " + }, + //===============dialog i18N======================= + 'insertimage':{ + 'static':{ + 'lang_tab_remote':"插入图片", //节点 + 'lang_tab_upload':"本地上传", + 'lang_tab_online':"在线管理", + 'lang_tab_search':"图片搜索", + 'lang_input_url':"地 址:", + 'lang_input_size':"大 小:", + 'lang_input_width':"宽度", + 'lang_input_height':"高度", + 'lang_input_border':"边 框:", + 'lang_input_vhspace':"边 距:", + 'lang_input_title':"描 述:", + 'lang_input_align':'图片浮动方式:', + 'lang_imgLoading':" 图片加载中……", + 'lang_start_upload':"开始上传", + 'lock':{'title':"锁定宽高比例"}, //属性 + 'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option + 'searchTxt':{'value':"请输入搜索关键词"}, + 'searchBtn':{'value':"百度一下"}, + 'searchReset':{'value':"清空搜索"}, + 'noneAlign':{'title':'无浮动'}, + 'leftAlign':{'title':'左浮动'}, + 'rightAlign':{'title':'右浮动'}, + 'centerAlign':{'title':'居中独占一行'} + }, + 'uploadSelectFile':'点击选择图片', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'uploadNoPreview':'不能预览', + 'updateStatusReady': '选中_张图片,共_KB。', + 'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败', + 'updateStatusFinish': '共_张(_KB),_张上传成功', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错', + 'remoteLockError':"宽高不正确,不能所定比例", + 'numError':"请输入正确的长度或者宽度值!例如:123,400", + 'imageUrlError':"不允许的图片格式或者图片域!", + 'imageLoadError':"图片加载失败!请检查链接地址或网络状态!", + 'searchRemind':"请输入搜索关键词", + 'searchLoading':"图片加载中,请稍后……", + 'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!" + }, + 'attachment':{ + 'static':{ + 'lang_tab_upload': '上传附件', + 'lang_tab_online': '在线附件', + 'lang_start_upload':"开始上传", + 'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件" + }, + 'uploadSelectFile':'点击选择文件', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'updateStatusReady': '选中_个文件,共_KB。', + 'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败', + 'updateStatusFinish': '共_个(_KB),_个上传成功', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错' + }, + 'insertvideo':{ + 'static':{ + 'lang_tab_insertV':"插入视频", + 'lang_tab_searchV':"搜索视频", + 'lang_tab_uploadV':"上传视频", + 'lang_video_url':"视频网址", + 'lang_video_size':"视频尺寸", + 'lang_videoW':"宽度", + 'lang_videoH':"高度", + 'lang_alignment':"对齐方式", + 'videoSearchTxt':{'value':"请输入搜索关键字!"}, + 'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]}, + 'videoSearchBtn':{'value':"百度一下"}, + 'videoSearchReset':{'value':"清空结果"}, + + 'lang_input_fileStatus':' 当前未上传文件', + 'startUpload':{'style':"background:url(upload.png) no-repeat;"}, + + 'lang_upload_size':"视频尺寸", + 'lang_upload_width':"宽度", + 'lang_upload_height':"高度", + 'lang_upload_alignment':"对齐方式", + 'lang_format_advice':"建议使用mp4格式." + + }, + 'numError':"请输入正确的数值,如123,400", + 'floatLeft':"左浮动", + 'floatRight':"右浮动", + '"default"':"默认", + 'block':"独占一行", + 'urlError':"输入的视频地址有误,请检查后再试!", + 'loading':"  视频加载中,请等待……", + 'clickToSelect':"点击选中", + 'goToSource':'访问源视频', + 'noVideo':"    抱歉,找不到对应的视频,请重试!", + + 'browseFiles':'浏览文件', + 'uploadSuccess':'上传成功!', + 'delSuccessFile':'从成功队列中移除', + 'delFailSaveFile':'移除保存失败文件', + 'statusPrompt':' 个文件已上传! ', + 'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!', + 'flashLoadingError':'Flash加载失败!请检查路径或网络状态', + 'fileUploadReady':'等待上传……', + 'delUploadQueue':'从上传队列中移除', + 'limitPrompt1':'单次不能选择超过', + 'limitPrompt2':'个文件!请重新选择!', + 'delFailFile':'移除失败文件', + 'fileSizeLimit':'文件大小超出限制!', + 'emptyFile':'空文件无法上传!', + 'fileTypeError':'文件类型不允许!', + 'unknownError':'未知错误!', + 'fileUploading':'上传中,请等待……', + 'cancelUpload':'取消上传', + 'netError':'网络错误', + 'failUpload':'上传失败!', + 'serverIOError':'服务器IO错误!', + 'noAuthority':'无权限!', + 'fileNumLimit':'上传个数限制', + 'failCheck':'验证失败,本次上传被跳过!', + 'fileCanceling':'取消中,请等待……', + 'stopUploading':'上传已停止……', + + 'uploadSelectFile':'点击选择文件', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'updateStatusReady': '选中_个文件,共_KB。', + 'updateStatusConfirm': '成功上传_个,_个失败', + 'updateStatusFinish': '共_个(_KB),_个成功上传', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错' + }, + 'webapp':{ + 'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!", + 'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ", + 'applyFor':"点此申请", + 'anthorApi':"百度API" + }, + 'template':{ + 'static':{ + 'lang_template_bkcolor':'背景颜色', + 'lang_template_clear' : '保留原有内容', + 'lang_template_select' : '选择模板' + }, + 'blank':"空白文档", + 'blog':"博客文章", + 'resume':"个人简历", + 'richText':"图文混排", + 'sciPapers':"科技论文" + + + }, + 'scrawl':{ + 'static':{ + 'lang_input_previousStep':"上一步", + 'lang_input_nextsStep':"下一步", + 'lang_input_clear':'清空', + 'lang_input_addPic':'添加背景', + 'lang_input_ScalePic':'缩放背景', + 'lang_input_removePic':'删除背景', + 'J_imgTxt':{title:'添加背景图片'} + }, + 'noScarwl':"尚未作画,白纸一张~", + 'scrawlUpLoading':"涂鸦上传中,别急哦~", + 'continueBtn':"继续", + 'imageError':"糟糕,图片读取失败了!", + 'backgroundUploading':'背景图片上传中,别急哦~' + }, + 'music':{ + 'static':{ + 'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!", + 'J_searchBtn':{value:'搜索歌曲'} + }, + 'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。', + 'chapter':'歌曲', + 'singer':'歌手', + 'special':'专辑', + 'listenTest':'试听' + }, + 'anchor':{ + 'static':{ + 'lang_input_anchorName':'锚点名字:' + } + }, + 'charts':{ + 'static':{ + 'lang_data_source':'数据源:', + 'lang_chart_format': '图表格式:', + 'lang_data_align': '数据对齐方式', + 'lang_chart_align_same': '数据源与图表X轴Y轴一致', + 'lang_chart_align_reverse': '数据源与图表X轴Y轴相反', + 'lang_chart_title': '图表标题', + 'lang_chart_main_title': '主标题:', + 'lang_chart_sub_title': '子标题:', + 'lang_chart_x_title': 'X轴标题:', + 'lang_chart_y_title': 'Y轴标题:', + 'lang_chart_tip': '提示文字', + 'lang_cahrt_tip_prefix': '提示文字前缀:', + 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀', + 'lang_chart_data_unit': '数据单位', + 'lang_chart_data_unit_title': '单位:', + 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃', + 'lang_chart_type': '图表类型:', + 'lang_prev_btn': '上一个', + 'lang_next_btn': '下一个' + } + }, + 'emotion':{ + 'static':{ + 'lang_input_choice':'精选', + 'lang_input_Tuzki':'兔斯基', + 'lang_input_BOBO':'BOBO', + 'lang_input_lvdouwa':'绿豆蛙', + 'lang_input_babyCat':'baby猫', + 'lang_input_bubble':'泡泡', + 'lang_input_youa':'有啊' + } + }, + 'gmap':{ + 'static':{ + 'lang_input_address':'地址', + 'lang_input_search':'搜索', + 'address':{value:"北京"} + }, + searchError:'无法定位到该地址!' + }, + 'help':{ + 'static':{ + 'lang_input_about':'关于UEditor', + 'lang_input_shortcuts':'快捷键', + 'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。', + 'lang_Txt_shortcuts':'快捷键', + 'lang_Txt_func':'功能', + 'lang_Txt_bold':'给选中字设置为加粗', + 'lang_Txt_copy':'复制选中内容', + 'lang_Txt_cut':'剪切选中内容', + 'lang_Txt_Paste':'粘贴', + 'lang_Txt_undo':'重新执行上次操作', + 'lang_Txt_redo':'撤销上一次操作', + 'lang_Txt_italic':'给选中字设置为斜体', + 'lang_Txt_underline':'给选中字加下划线', + 'lang_Txt_selectAll':'全部选中', + 'lang_Txt_visualEnter':'软回车', + 'lang_Txt_fullscreen':'全屏' + } + }, + 'insertframe':{ + 'static':{ + 'lang_input_address':'地址:', + 'lang_input_width':'宽度:', + 'lang_input_height':'高度:', + 'lang_input_isScroll':'允许滚动条:', + 'lang_input_frameborder':'显示框架边框:', + 'lang_input_alignMode':'对齐方式:', + 'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]} + }, + 'enterAddress':'请输入地址!' + }, + 'link':{ + 'static':{ + 'lang_input_text':'文本内容:', + 'lang_input_url':'链接地址:', + 'lang_input_title':'标题:', + 'lang_input_target':'是否在新窗口打开:' + }, + 'validLink':'只支持选中一个链接时生效', + 'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀' + }, + 'map':{ + 'static':{ + lang_city:"城市", + lang_address:"地址", + city:{value:"北京"}, + lang_search:"搜索", + lang_dynamicmap:"插入动态地图" + }, + cityMsg:"请选择城市", + errorMsg:"抱歉,找不到该位置!" + }, + 'searchreplace':{ + 'static':{ + lang_tab_search:"查找", + lang_tab_replace:"替换", + lang_search1:"查找", + lang_search2:"查找", + lang_replace:"替换", + lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”', + lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”', + lang_case_sensitive1:"区分大小写", + lang_case_sensitive2:"区分大小写", + nextFindBtn:{value:"下一个"}, + preFindBtn:{value:"上一个"}, + nextReplaceBtn:{value:"下一个"}, + preReplaceBtn:{value:"上一个"}, + repalceBtn:{value:"替换"}, + repalceAllBtn:{value:"全部替换"} + }, + getEnd:"已经搜索到文章末尾!", + getStart:"已经搜索到文章头部", + countMsg:"总共替换了{#count}处!" + }, + 'snapscreen':{ + 'static':{ + lang_showMsg:"截图功能需要首先安装UEditor截图插件! ", + lang_download:"点此下载", + lang_step1:"第一步,下载UEditor截图插件并运行安装。", + lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!" + } + }, + 'spechars':{ + 'static':{}, + tsfh:"特殊字符", + lmsz:"罗马字符", + szfh:"数学字符", + rwfh:"日文字符", + xlzm:"希腊字母", + ewzm:"俄文字符", + pyzm:"拼音字母", + yyyb:"英语音标", + zyzf:"其他" + }, + 'edittable':{ + 'static':{ + 'lang_tableStyle':'表格样式', + 'lang_insertCaption':'添加表格名称行', + 'lang_insertTitle':'添加表格标题行', + 'lang_insertTitleCol':'添加表格标题列', + 'lang_orderbycontent':"使表格内容可排序", + 'lang_tableSize':'自动调整表格尺寸', + 'lang_autoSizeContent':'按表格文字自适应', + 'lang_autoSizePage':'按页面宽度自适应', + 'lang_example':'示例', + 'lang_borderStyle':'表格边框', + 'lang_color':'颜色:' + }, + captionName:'表格名称', + titleName:'标题', + cellsName:'内容', + errorMsg:'有合并单元格,不可排序' + }, + 'edittip':{ + 'static':{ + lang_delRow:'删除整行', + lang_delCol:'删除整列' + } + }, + 'edittd':{ + 'static':{ + lang_tdBkColor:'背景颜色:' + } + }, + 'formula':{ + 'static':{ + } + }, + 'wordimage':{ + 'static':{ + lang_resave:"转存步骤", + uploadBtn:{src:"upload.png",alt:"上传"}, + clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"}, + lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。" + }, + 'fileType':"图片", + 'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!", + 'netError':"网络连接错误,请重试!", + 'copySuccess':"图片地址已经复制!", + 'flashI18n':{} //留空默认中文 + }, + 'autosave': { + 'saving':'保存中...', + 'success':'本地保存成功' + } +}; diff --git a/express/Campari-vue/www/public/ueditor/themes/default/css/ueditor.css b/express/Campari-vue/www/public/ueditor/themes/default/css/ueditor.css new file mode 100644 index 0000000..44ae805 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/themes/default/css/ueditor.css @@ -0,0 +1,1903 @@ +/*基础UI构建 +*/ +/* common layer */ +.edui-default .edui-box { + border: none; + padding: 0; + margin: 0; + overflow: hidden; +} + +.edui-default a.edui-box { + display: block; + text-decoration: none; + color: black; +} + +.edui-default a.edui-box:hover { + text-decoration: none; +} + +.edui-default a.edui-box:active { + text-decoration: none; +} + +.edui-default table.edui-box { + border-collapse: collapse; +} + +.edui-default ul.edui-box { + list-style-type: none; +} + +div.edui-box { + position: relative; + display: -moz-inline-box !important; + display: inline-block !important; + vertical-align: top; +} + +.edui-default .edui-clearfix { + zoom: 1 +} + +.edui-default .edui-clearfix:after { + content: '\20'; + display: block; + clear: both; +} + + * html div.edui-box { + display: inline !important; +} + +*:first-child+html div.edui-box { + display: inline !important; +} + +/* control layout */ +.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body { + position: relative; +} + +.edui-default .edui-popup { + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; +} + +.edui-default .edui-popup .edui-shadow { + position: absolute; + z-index: -1; +} + +.edui-default .edui-popup .edui-bordereraser { + position: absolute; + overflow: hidden; +} + +.edui-default .edui-tablepicker .edui-canvas { + position: relative; +} + +.edui-default .edui-tablepicker .edui-canvas .edui-overlay { + position: absolute; +} + +.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.edui-default .edui-toolbar { + position: relative; +} + +/* + * default theme + */ +.edui-default .edui-label { + cursor: default; +} + +.edui-default span.edui-clickable { + color: blue; + cursor: pointer; + text-decoration: underline; +} + +.edui-default span.edui-unclickable { + color: gray; + cursor: default; +} +/* 工具栏 */ +.edui-default .edui-toolbar { + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + padding: 1px; + overflow: hidden; /*全屏下单独一行不占位*/ + zoom: 1; + width:auto; + height:auto; +} + +.edui-default .edui-toolbar .edui-button, +.edui-default .edui-toolbar .edui-splitbutton, +.edui-default .edui-toolbar .edui-menubutton, +.edui-default .edui-toolbar .edui-combox { + margin: 1px; +} +/*UI工具栏、编辑区域、底部*/ +.edui-default .edui-editor { + border: 1px solid #d4d4d4; + background-color: white; + position: relative; + overflow: visible; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.edui-editor div{ + width:auto; + height:auto; +} +.edui-default .edui-editor-toolbarbox { + position: relative; + zoom: 1; + -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + border-top-left-radius:2px; + border-top-right-radius:2px; +} + +.edui-default .edui-editor-toolbarboxouter { + border-bottom: 1px solid #d4d4d4; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + /*border: 1px solid #d4d4d4;*/ + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.edui-default .edui-editor-toolbarboxinner { + padding: 2px; +} + +.edui-default .edui-editor-iframeholder { + position: relative; + /*for fix ie6 toolbarmsg under iframe bug. relative -> static */ + /*_position: static !important;* +} + +.edui-default .edui-editor-iframeholder textarea { + font-family: consolas, "Courier New", "lucida console", monospace; + font-size: 12px; + line-height: 18px; +} + +.edui-default .edui-editor-bottombar { + /*border-top: 1px solid #ccc;*/ + /*height: 20px;*/ + /*width: 40%;*/ + /*float: left;*/ + /*overflow: hidden;*/ +} + +.edui-default .edui-editor-bottomContainer { + overflow: hidden; +} + +.edui-default .edui-editor-bottomContainer table { + width: 100%; + height: 0; + overflow: hidden; + border-spacing: 0; +} + +.edui-default .edui-editor-bottomContainer td { + white-space: nowrap; + border-top: 1px solid #ccc; + line-height: 20px; + font-size: 12px; + font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif; +} + +.edui-default .edui-editor-wordcount { + text-align: right; + margin-right: 5px; + color: #aaa; +} +.edui-default .edui-editor-scale { + width: 12px; +} +.edui-default .edui-editor-scale .edui-editor-icon { + float: right; + width: 100%; + height: 12px; + margin-top: 10px; + background: url(../images/scale.png) no-repeat; + cursor: se-resize; +} +.edui-default .edui-editor-breadcrumb { + margin: 2px 0 0 3px; +} + +.edui-default .edui-editor-breadcrumb span { + cursor: pointer; + text-decoration: underline; + color: blue; +} + +.edui-default .edui-toolbar .edui-for-fullscreen { + float: right; +} + +.edui-default .edui-bubble .edui-popup-content { + border: 1px solid #DCAC6C; + background-color: #fff6d9; + padding: 5px; + font-size: 10pt; + font-family: "宋体"; +} + +.edui-default .edui-bubble .edui-shadow { + /*box-shadow: 1px 1px 3px #818181;*/ + /*-webkit-box-shadow: 2px 2px 3px #818181;*/ + /*-moz-box-shadow: 2px 2px 3px #818181;*/ + /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/ +} + +.edui-default .edui-editor-toolbarmsg { + background-color: #FFF6D9; + border-bottom: 1px solid #ccc; + position: absolute; + bottom: -25px; + left: 0; + z-index: 1009; + width: 99.9%; +} + +.edui-default .edui-editor-toolbarmsg-upload { + font-size: 14px; + color: blue; + width: 100px; + height: 16px; + line-height: 16px; + cursor: pointer; + position: absolute; + top: 5px; + left: 350px; +} + +.edui-default .edui-editor-toolbarmsg-label { + font-size: 12px; + line-height: 16px; + padding: 4px; +} + +.edui-default .edui-editor-toolbarmsg-close { + float: right; + width: 20px; + height: 16px; + line-height: 16px; + cursor: pointer; + color: red; +} +/*可选中菜单按钮*/ +.edui-default .edui-list .edui-bordereraser { + display: none; +} + +.edui-default .edui-listitem { + padding: 1px; + white-space: nowrap; +} + +.edui-default .edui-list .edui-state-hover { + position: relative; + background-color: #fff5d4; + border: 1px solid #dcac6c; + padding: 0; +} + +.edui-default .edui-for-fontfamily .edui-listitem-label { + min-width: 130px; + _width: 120px; + font-size: 12px; + height: 22px; + line-height: 22px; + padding-left: 5px; +} +.edui-default .edui-for-insertcode .edui-listitem-label { + min-width: 120px; + _width: 120px; + font-size: 12px; + height: 22px; + line-height: 22px; + padding-left: 5px; +} +.edui-default .edui-for-underline .edui-listitem-label { + min-width: 120px; + _width: 120px; + padding: 3px 5px; + font-size: 12px; +} + +.edui-default .edui-for-fontsize .edui-listitem-label { + min-width: 120px; + _width: 120px; + padding: 3px 5px; + +} + +.edui-default .edui-for-paragraph .edui-listitem-label { + min-width: 200px; + _width: 200px; + padding: 2px 5px; +} + +.edui-default .edui-for-rowspacingtop .edui-listitem-label, +.edui-default .edui-for-rowspacingbottom .edui-listitem-label { + min-width: 53px; + _width: 53px; + padding: 2px 5px; +} + +.edui-default .edui-for-lineheight .edui-listitem-label { + min-width: 53px; + _width: 53px; + padding: 2px 5px; +} + +.edui-default .edui-for-customstyle .edui-listitem-label { + min-width: 200px; + _width: 200px; + width: 200px !important; + padding: 2px 5px; +} +/* 可选中按钮弹出菜单*/ +.edui-default .edui-menu { + z-index: 3000; +} + +.edui-default .edui-menu .edui-popup-content { + padding: 3px; +} + +.edui-default .edui-menu-body { + _width: 150px; + min-width: 170px; + background: url("../images/sparator_v.png") repeat-y 25px; +} + +.edui-default .edui-menuitem-body { +} + +.edui-default .edui-menuitem { + height: 20px; + cursor: default; + vertical-align: top; +} + +.edui-default .edui-menuitem .edui-icon { + width: 20px !important; + height: 20px !important; + background: url(../images/icons.png) 0 -4000px; + background: url(../images/icons.gif) 0 -4000px\9; +} + +.edui-default .edui-menuitem .edui-label { + font-size: 12px; + line-height: 20px; + height: 20px; + padding-left: 10px; +} + +.edui-default .edui-state-checked .edui-menuitem-body { + background: url("../images/icons-all.gif") no-repeat 6px -205px; +} + +.edui-default .edui-state-disabled .edui-menuitem-label { + color: gray; +} + + +/*不可选中菜单按钮 */ +.edui-default .edui-toolbar .edui-combox-body .edui-button-body { + width: 60px; + font-size: 12px; + height: 20px; + line-height: 20px; + padding-left: 5px; + white-space: nowrap; + margin: 0 3px 0 0; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-arrow { + background: url(../images/icons.png) -741px 0; + _background: url(../images/icons.gif) -741px 0; + height: 20px; + width: 9px; +} + +.edui-default .edui-toolbar .edui-combox .edui-combox-body { + border: 1px solid #CCC; + background-color: white; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-splitborder { + display: none; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-arrow { + border-left: 1px solid #CCC; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-combox-body { + background-color: #fff5d4; + border: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow { + border-left: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-checked .edui-combox-body { + background-color: #FFE69F; + border: 1px solid #DCAC6C; +} + +.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow { + border-left: 1px solid #DCAC6C; +} + +.edui-toolbar .edui-state-disabled .edui-combox-body { + background-color: #F0F0EE; + opacity: 0.3; + filter: alpha(opacity = 30); +} + +.edui-toolbar .edui-state-opened .edui-combox-body { + background-color: white; + border: 1px solid gray; +} +/*普通按钮样式及状态*/ +.edui-default .edui-toolbar .edui-button .edui-icon, +.edui-default .edui-toolbar .edui-menubutton .edui-icon, +.edui-default .edui-toolbar .edui-splitbutton .edui-icon { + height: 20px !important; + width: 20px !important; + background-image: url(../images/icons.png); + background-image: url(../images/icons.gif) \9; +} + +.edui-default .edui-toolbar .edui-button .edui-button-wrap { + padding: 1px; + position: relative; +} + +.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap { + background-color: #fff5d4; + padding: 0; + border: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap { + background-color: #ffe69f; + padding: 0; + border: 1px solid #dcac6c; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap { + background-color: #ffffff; + padding: 0; + border: 1px solid gray; +} +.edui-default .edui-toolbar .edui-state-disabled .edui-label { + color: #ccc; +} +.edui-default .edui-toolbar .edui-state-disabled .edui-icon { + opacity: 0.3; + filter: alpha(opacity = 30); +} + +/* toolbar icons */ +.edui-default .edui-for-undo .edui-icon { + background-position: -160px 0; +} + +.edui-default .edui-for-redo .edui-icon { + background-position: -100px 0; +} + +.edui-default .edui-for-bold .edui-icon { + background-position: 0 0; +} + +.edui-default .edui-for-italic .edui-icon { + background-position: -60px 0; +} + +.edui-default .edui-for-fontborder .edui-icon { + background-position:-160px -40px; +} +.edui-default .edui-for-underline .edui-icon { + background-position: -140px 0; +} + +.edui-default .edui-for-strikethrough .edui-icon { + background-position: -120px 0; +} + +.edui-default .edui-for-subscript .edui-icon { + background-position: -600px 0; +} + +.edui-default .edui-for-superscript .edui-icon { + background-position: -620px 0; +} + +.edui-default .edui-for-blockquote .edui-icon { + background-position: -220px 0; +} + +.edui-default .edui-for-forecolor .edui-icon { + background-position: -720px 0; +} + +.edui-default .edui-for-backcolor .edui-icon { + background-position: -760px 0; +} + +.edui-default .edui-for-inserttable .edui-icon { + background-position: -580px -20px; +} + +.edui-default .edui-for-autotypeset .edui-icon { + background-position: -640px -40px; +} + +.edui-default .edui-for-justifyleft .edui-icon { + background-position: -460px 0; +} + +.edui-default .edui-for-justifycenter .edui-icon { + background-position: -420px 0; +} + +.edui-default .edui-for-justifyright .edui-icon { + background-position: -480px 0; +} + +.edui-default .edui-for-justifyjustify .edui-icon { + background-position: -440px 0; +} + +.edui-default .edui-for-insertorderedlist .edui-icon { + background-position: -80px 0; +} + +.edui-default .edui-for-insertunorderedlist .edui-icon { + background-position: -20px 0; +} + +.edui-default .edui-for-lineheight .edui-icon { + background-position: -725px -40px; +} + +.edui-default .edui-for-rowspacingbottom .edui-icon { + background-position: -745px -40px; +} + +.edui-default .edui-for-rowspacingtop .edui-icon { + background-position: -765px -40px; +} + +.edui-default .edui-for-horizontal .edui-icon { + background-position: -360px 0; +} + +.edui-default .edui-for-link .edui-icon { + background-position: -500px 0; +} + +.edui-default .edui-for-code .edui-icon { + background-position: -440px -40px; +} + +.edui-default .edui-for-insertimage .edui-icon { + background-position: -726px -77px; +} + +.edui-default .edui-for-insertframe .edui-icon { + background-position: -240px -40px; +} + +.edui-default .edui-for-emoticon .edui-icon { + background-position: -60px -20px; +} + +.edui-default .edui-for-spechars .edui-icon { + background-position: -240px 0; +} + +.edui-default .edui-for-help .edui-icon { + background-position: -340px 0; +} + +.edui-default .edui-for-print .edui-icon { + background-position: -440px -20px; +} + +.edui-default .edui-for-preview .edui-icon { + background-position: -420px -20px; +} + +.edui-default .edui-for-selectall .edui-icon { + background-position: -400px -20px; +} + +.edui-default .edui-for-searchreplace .edui-icon { + background-position: -520px -20px; +} + +.edui-default .edui-for-map .edui-icon { + background-position: -40px -40px; +} + +.edui-default .edui-for-gmap .edui-icon { + background-position: -260px -40px; +} + +.edui-default .edui-for-insertvideo .edui-icon { + background-position: -320px -20px; +} + +.edui-default .edui-for-time .edui-icon { + background-position: -160px -20px; +} + +.edui-default .edui-for-date .edui-icon { + background-position: -140px -20px; +} + +.edui-default .edui-for-cut .edui-icon { + background-position: -680px 0; +} + +.edui-default .edui-for-copy .edui-icon { + background-position: -700px 0; +} + +.edui-default .edui-for-paste .edui-icon { + background-position: -560px 0; +} + +.edui-default .edui-for-formatmatch .edui-icon { + background-position: -40px 0; +} + +.edui-default .edui-for-pasteplain .edui-icon { + background-position: -360px -20px; +} + +.edui-default .edui-for-directionalityltr .edui-icon { + background-position: -20px -20px; +} + +.edui-default .edui-for-directionalityrtl .edui-icon { + background-position: -40px -20px; +} + +.edui-default .edui-for-source .edui-icon { + background-position: -261px -0px; +} + +.edui-default .edui-for-removeformat .edui-icon { + background-position: -580px 0; +} + +.edui-default .edui-for-unlink .edui-icon { + background-position: -640px 0; +} + +.edui-default .edui-for-touppercase .edui-icon { + background-position: -786px 0; +} + +.edui-default .edui-for-tolowercase .edui-icon { + background-position: -806px 0; +} + +.edui-default .edui-for-insertrow .edui-icon { + background-position: -478px -76px; +} + +.edui-default .edui-for-insertrownext .edui-icon { + background-position: -498px -76px; +} + +.edui-default .edui-for-insertcol .edui-icon { + background-position: -455px -76px; +} + +.edui-default .edui-for-insertcolnext .edui-icon { + background-position: -429px -76px; +} + +.edui-default .edui-for-mergeright .edui-icon { + background-position: -60px -40px; +} + +.edui-default .edui-for-mergedown .edui-icon { + background-position: -80px -40px; +} + +.edui-default .edui-for-splittorows .edui-icon { + background-position: -100px -40px; +} + +.edui-default .edui-for-splittocols .edui-icon { + background-position: -120px -40px; +} + +.edui-default .edui-for-insertparagraphbeforetable .edui-icon { + background-position: -140px -40px; +} + +.edui-default .edui-for-deleterow .edui-icon { + background-position: -660px -20px; +} + +.edui-default .edui-for-deletecol .edui-icon { + background-position: -640px -20px; +} + +.edui-default .edui-for-splittocells .edui-icon { + background-position: -800px -20px; +} + +.edui-default .edui-for-mergecells .edui-icon { + background-position: -760px -20px; +} + +.edui-default .edui-for-deletetable .edui-icon { + background-position: -620px -20px; +} + +.edui-default .edui-for-cleardoc .edui-icon { + background-position: -520px 0; +} + +.edui-default .edui-for-fullscreen .edui-icon { + background-position: -100px -20px; +} + +.edui-default .edui-for-anchor .edui-icon { + background-position: -200px 0; +} + +.edui-default .edui-for-pagebreak .edui-icon { + background-position: -460px -40px; +} + +.edui-default .edui-for-imagenone .edui-icon { + background-position: -480px -40px; +} + +.edui-default .edui-for-imageleft .edui-icon { + background-position: -500px -40px; +} + +.edui-default .edui-for-wordimage .edui-icon { + background-position: -660px -40px; +} + +.edui-default .edui-for-imageright .edui-icon { + background-position: -520px -40px; +} + +.edui-default .edui-for-imagecenter .edui-icon { + background-position: -540px -40px; +} + +.edui-default .edui-for-indent .edui-icon { + background-position: -400px 0; +} + +.edui-default .edui-for-outdent .edui-icon { + background-position: -540px 0; +} + +.edui-default .edui-for-webapp .edui-icon { + background-position: -601px -40px +} + +.edui-default .edui-for-table .edui-icon { + background-position: -580px -20px; +} + +.edui-default .edui-for-edittable .edui-icon { + background-position: -420px -40px; +} + +.edui-default .edui-for-template .edui-icon { + background-position: -339px -40px; +} + +.edui-default .edui-for-delete .edui-icon { + background-position: -360px -40px; +} + +.edui-default .edui-for-attachment .edui-icon { + background-position: -620px -40px; +} + +.edui-default .edui-for-edittd .edui-icon { + background-position: -700px -40px; +} + +.edui-default .edui-for-snapscreen .edui-icon { + background-position: -581px -40px +} + +.edui-default .edui-for-scrawl .edui-icon { + background-position: -801px -41px +} + +.edui-default .edui-for-background .edui-icon { + background-position: -680px -40px; +} + +.edui-default .edui-for-music .edui-icon { + background-position: -18px -40px +} + +.edui-default .edui-for-formula .edui-icon { + background-position: -200px -40px +} + +.edui-default .edui-for-aligntd .edui-icon { + background-position: -236px -76px; +} + +.edui-default .edui-for-insertparagraphtrue .edui-icon { + background-position: -625px -76px; +} + +.edui-default .edui-for-insertparagraph .edui-icon { + background-position: -602px -76px; +} + +.edui-default .edui-for-insertcaption .edui-icon { + background-position: -336px -76px; +} + +.edui-default .edui-for-deletecaption .edui-icon { + background-position: -362px -76px; +} + +.edui-default .edui-for-inserttitle .edui-icon { + background-position: -286px -76px; +} + +.edui-default .edui-for-deletetitle .edui-icon { + background-position: -311px -76px; +} + +.edui-default .edui-for-aligntable .edui-icon { + background-position: -440px 0; +} + +.edui-default .edui-for-tablealignment-left .edui-icon { + background-position: -460px 0; +} + +.edui-default .edui-for-tablealignment-center .edui-icon { + background-position: -420px 0; +} + +.edui-default .edui-for-tablealignment-right .edui-icon { + background-position: -480px 0; +} + +.edui-default .edui-for-drafts .edui-icon { + background-position: -560px 0; +} + +.edui-default .edui-for-charts .edui-icon { + background: url( ../images/charts.png ) no-repeat 2px 3px!important; +} + +.edui-default .edui-for-inserttitlecol .edui-icon { + background-position: -673px -76px; +} + +.edui-default .edui-for-deletetitlecol .edui-icon { + background-position: -698px -76px; +} + +.edui-default .edui-for-simpleupload .edui-icon { + background-position: -380px 0px; +} +/*splitbutton*/ +.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow, +.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow { + background: url(../images/icons.png) -741px 0; + _background: url(../images/icons.gif) -741px 0; + height: 20px; + width: 9px; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body { + padding: 1px; +} + +.edui-default .edui-toolbar .edui-splitborder { + width: 1px; + height: 20px; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-splitborder { + width: 1px; + border-left: 0px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-active .edui-splitborder { + width: 0; + border-left: 1px solid gray; +} + +.edui-default .edui-toolbar .edui-state-opened .edui-splitborder { + width: 1px; + border: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body { + background-color: #fff5d4; + border: 1px solid #dcac6c; + padding: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body { + background-color: #FFE69F; + border: 1px solid #DCAC6C; + padding: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body { + background-color: #ffffff; + border: 1px solid gray; + padding: 0; +} + +.edui-default .edui-state-disabled .edui-arrow { + opacity: 0.3; + _filter: alpha(opacity = 30); +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body { + background-color: white; + border: 1px solid gray; + padding: 0; +} + +.edui-default .edui-for-insertorderedlist .edui-bordereraser, +.edui-default .edui-for-lineheight .edui-bordereraser, +.edui-default .edui-for-rowspacingtop .edui-bordereraser, +.edui-default .edui-for-rowspacingbottom .edui-bordereraser, +.edui-default .edui-for-insertunorderedlist .edui-bordereraser { + background-color: white; +} + +/* 解决嵌套导致的图标问题 */ +.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon, +.edui-default .edui-for-lineheight .edui-popup-body .edui-icon, +.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon, +.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon, +.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon { + /*background-position: 0 -40px;*/ + background-image: none ; +} + +/* 弹出菜单 */ +.edui-default .edui-popup { + z-index: 3000; + background-color: #ffffff; + width:auto; + height:auto; + +} + +.edui-default .edui-popup .edui-shadow { + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.edui-default .edui-popup-content { + border:1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + padding: 5px; + background:#ffffff; +} + +.edui-default .edui-popup .edui-bordereraser { + background-color: white; + height: 3px; +} + +.edui-default .edui-menu .edui-bordereraser { + height: 3px; +} + +.edui-default .edui-anchor-topleft .edui-bordereraser { + left: 1px; + top: -2px; +} + +.edui-default .edui-anchor-topright .edui-bordereraser { + right: 1px; + top: -2px; +} + +.edui-default .edui-anchor-bottomleft .edui-bordereraser { + left: 0; + bottom: -6px; + height: 7px; + border-left: 1px solid gray; + border-right: 1px solid gray; +} + +.edui-default .edui-anchor-bottomright .edui-bordereraser { + right: 0; + bottom: -6px; + height: 7px; + border-left: 1px solid gray; + border-right: 1px solid gray; +} + +.edui-popup div{ + width:auto; + height:auto; +} +.edui-default .edui-editor-messageholder { + display: block; + width: 150px; + height: auto; + border: 0; + margin: 0; + padding: 0; + position: absolute; + top: 28px; + right: 3px; +} + +.edui-default .edui-message{ + min-height: 10px; + text-shadow: 0 1px 0 rgba(255,255,255,0.5); + padding: 0; + margin-bottom: 3px; + position: relative; +} +.edui-default .edui-message-body{ + border-radius: 3px; + padding: 8px 15px 8px 8px; + color: #c09853; + background-color: #fcf8e3; + border: 1px solid #fbeed5; +} +.edui-default .edui-message-type-info{ + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1 +} +.edui-default .edui-message-type-success{ + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6 +} +.edui-default .edui-message-type-danger, +.edui-default .edui-message-type-error{ + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7 +} +.edui-default .edui-message .edui-message-closer { + display: block; + width: 16px; + height: 16px; + line-height: 16px; + position: absolute; + top: 0; + right: 0; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + float: right; + font-size: 20px; + font-weight: bold; + color: #999; + text-shadow: 0 1px 0 #fff; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.edui-default .edui-message .edui-message-content { + font-size: 10pt; + word-wrap: break-word; + word-break: normal; +} +/* 弹出对话框按钮和对话框大小 */ +.edui-default .edui-dialog { + z-index: 2000; + position: absolute; + +} + +.edui-dialog div{ + width:auto; +} + +.edui-default .edui-dialog-wrap { + margin-right: 6px; + margin-bottom: 6px; +} + +.edui-default .edui-dialog-fullscreen-flag { + margin-right: 0; + margin-bottom: 0; +} + +.edui-default .edui-dialog-body { + position: relative; + padding:2px 0 0 2px; + _zoom: 1; +} + +.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body { + padding: 0; +} + +.edui-default .edui-dialog-shadow { + position: absolute; + z-index: -1; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.edui-default .edui-dialog-foot { + background-color: white; +} + +.edui-default .edui-dialog-titlebar { + height: 26px; + border-bottom: 1px solid #c6c6c6; + background: url(../images/dialog-title-bg.png) repeat-x bottom; + position: relative; + cursor: move; +} +.edui-default .edui-dialog-caption { + font-weight: bold; + font-size: 12px; + line-height: 26px; + padding-left: 5px; +} + +.edui-default .edui-dialog-draghandle { + height: 26px; +} + +.edui-default .edui-dialog-closebutton { + position: absolute !important; + right: 5px; + top: 3px; +} + +.edui-default .edui-dialog-closebutton .edui-button-body { + height: 20px; + width: 20px; + cursor: pointer; + background: url("../images/icons-all.gif") no-repeat 0 -59px; +} + +.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body { + background: url("../images/icons-all.gif") no-repeat 0 -89px; +} + +.edui-default .edui-dialog-foot { + height: 40px; +} + +.edui-default .edui-dialog-buttons { + position: absolute; + right: 0; +} + +.edui-default .edui-dialog-buttons .edui-button { + margin-right: 10px; +} + +.edui-default .edui-dialog-buttons .edui-button .edui-button-body { + background: url("../images/icons-all.gif") no-repeat; + height: 24px; + width: 96px; + font-size: 12px; + line-height: 24px; + text-align: center; + cursor: default; +} + +.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body { + background: url("../images/icons-all.gif") no-repeat 0 -30px; +} + +.edui-default .edui-dialog iframe { + border: 0; + padding: 0; + margin: 0; + vertical-align: top; +} + +.edui-default .edui-dialog-modalmask { + opacity: 0.3; + filter: alpha(opacity = 30); + background-color: #ccc; + position: absolute; + /*z-index: 1999;*/ +} + +.edui-default .edui-dialog-dragmask { + position: absolute; + /*z-index: 2001;*/ + background-color: transparent; + cursor: move; +} + +.edui-default .edui-dialog-content { + position: relative; +} + +.edui-default .dialogcontmask { + cursor: move; + visibility: hidden; + display: block; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + filter: alpha(opacity = 0); +} + +/*link-dialog*/ +.edui-default .edui-for-link .edui-dialog-content { + width: 420px; + height: 200px; + overflow: hidden; +} +/*background-dialog*/ +.edui-default .edui-for-background .edui-dialog-content { + width: 440px; + height: 280px; + overflow: hidden; +} + +/*template-dialog*/ +.edui-default .edui-for-template .edui-dialog-content { + width: 630px; + height: 390px; + overflow: hidden; +} + +/*scrawl-dialog*/ +.edui-default .edui-for-scrawl .edui-dialog-content { + width: 515px; + *width: 506px; + height: 360px; +} + +/*spechars-dialog*/ +.edui-default .edui-for-spechars .edui-dialog-content { + width: 620px; + height: 500px; + *width: 630px; + *height: 570px; +} + +/*image-dialog*/ +.edui-default .edui-for-insertimage .edui-dialog-content { + width: 650px; + height: 400px; + overflow: hidden; +} +/*webapp-dialog*/ +.edui-default .edui-for-webapp .edui-dialog-content { + width: 560px; + _width: 565px; + height: 450px; + overflow: hidden; +} + +/*image-insertframe*/ +.edui-default .edui-for-insertframe .edui-dialog-content { + width: 350px; + height: 200px; + overflow: hidden; +} + +/*wordImage-dialog*/ +.edui-default .edui-for-wordimage .edui-dialog-content { + width: 620px; + height: 380px; + overflow: hidden; +} + +/*attachment-dialog*/ +.edui-default .edui-for-attachment .edui-dialog-content { + width: 650px; + height: 400px; + overflow: hidden; +} + + +/*map-dialog*/ +.edui-default .edui-for-map .edui-dialog-content { + width: 550px; + height: 400px; +} + +/*gmap-dialog*/ +.edui-default .edui-for-gmap .edui-dialog-content { + width: 550px; + height: 400px; +} + +/*video-dialog*/ +.edui-default .edui-for-insertvideo .edui-dialog-content { + width: 590px; + height: 390px; +} + +/*anchor-dialog*/ +.edui-default .edui-for-anchor .edui-dialog-content { + width: 320px; + height: 60px; + overflow: hidden; +} + +/*searchreplace-dialog*/ +.edui-default .edui-for-searchreplace .edui-dialog-content { + width: 400px; + height: 220px; +} + +/*help-dialog*/ +.edui-default .edui-for-help .edui-dialog-content { + width: 400px; + height: 420px; +} + +/*edittable-dialog*/ +.edui-default .edui-for-edittable .edui-dialog-content { + width: 540px; + _width:590px; + height: 335px; +} + +/*edittip-dialog*/ +.edui-default .edui-for-edittip .edui-dialog-content { + width: 225px; + height: 60px; +} + +/*edittd-dialog*/ +.edui-default .edui-for-edittd .edui-dialog-content { + width: 240px; + height: 50px; +} +/*snapscreen-dialog*/ +.edui-default .edui-for-snapscreen .edui-dialog-content { + width: 400px; + height: 220px; +} + +/*music-dialog*/ +.edui-default .edui-for-music .edui-dialog-content { + width: 515px; + height: 360px; +} + +/*段落弹出菜单*/ +.edui-default .edui-for-paragraph .edui-listitem-label { + font-family: Tahoma, Verdana, Arial, Helvetica; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p { + font-size: 22px; + line-height: 27px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 { + font-weight: bolder; + font-size: 32px; + line-height: 36px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 { + font-weight: bolder; + font-size: 27px; + line-height: 29px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 { + font-weight: bolder; + font-size: 19px; + line-height: 23px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 { + font-weight: bolder; + font-size: 16px; + line-height: 19px +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 { + font-weight: bolder; + font-size: 13px; + line-height: 16px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 { + font-weight: bolder; + font-size: 12px; + line-height: 14px; +} +/* 表格弹出菜单 */ +.edui-default .edui-for-inserttable .edui-splitborder { + display: none +} +.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow { + width: 0 +} +.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{ + border-left: 1px solid transparent; +} +.edui-default .edui-tablepicker .edui-infoarea { + height: 14px; + line-height: 14px; + font-size: 12px; + width: 220px; + margin-bottom: 3px; + clear: both; +} + +.edui-default .edui-tablepicker .edui-infoarea .edui-label { + float: left; +} + +.edui-default .edui-dialog-buttons .edui-label { + line-height: 24px; +} + +.edui-default .edui-tablepicker .edui-infoarea .edui-clickable { + float: right; +} + +.edui-default .edui-tablepicker .edui-pickarea { + background: url("../images/unhighlighted.gif") repeat; + height: 220px; + width: 220px; +} + +.edui-default .edui-tablepicker .edui-pickarea .edui-overlay { + background: url("../images/highlighted.gif") repeat; +} + +/* 颜色弹出菜单 */ +.edui-default .edui-colorpicker-topbar { + height: 27px; + width: 200px; + /*border-bottom: 1px gray dashed;*/ +} + +.edui-default .edui-colorpicker-preview { + height: 20px; + border: 1px inset black; + margin-left: 1px; + width: 128px; + float: left; +} + +.edui-default .edui-colorpicker-nocolor { + float: right; + margin-right: 1px; + font-size: 12px; + line-height: 14px; + height: 14px; + border: 1px solid #333; + padding: 3px 5px; + cursor: pointer; +} + +.edui-default .edui-colorpicker-tablefirstrow { + height: 30px; +} + +.edui-default .edui-colorpicker-colorcell { + width: 14px; + height: 14px; + display: block; + margin: 0; + cursor: pointer; +} + +.edui-default .edui-colorpicker-colorcell:hover { + width: 14px; + height: 14px; + margin: 0; +} +.edui-default .edui-colorpicker-advbtn{ + display: block; + text-align: center; + cursor: pointer; + height:20px; +} +.arrow_down{ + background: white url('../images/arrow_down.png') no-repeat center; +} +.arrow_up{ + background: white url('../images/arrow_up.png') no-repeat center; +} +/*高级的样式*/ +.edui-colorpicker-adv{ + position: relative; + overflow: hidden; + height: 180px; + display: none; +} +.edui-colorpicker-plant, .edui-colorpicker-hue { + border: solid 1px #666; +} +.edui-colorpicker-pad { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: red; + overflow: hidden; + cursor: crosshair; +} +.edui-colorpicker-cover{ + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url("../images/tangram-colorpicker.png") -160px -200px; +} +.edui-colorpicker-padDot{ + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x; + z-index: 1000; + +} +.edui-colorpicker-sliderMain { + position: absolute; + left: 171px; + top: 13px; + width: 19px; + height: 152px; + background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat; + +} +.edui-colorpicker-slider { + width: 100%; + height: 100%; + cursor: pointer; +} +.edui-colorpicker-thumb{ + position: absolute; + top: 0; + cursor: pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid black; + background: white; + opacity: .8; +} +/*自动排版弹出菜单*/ +.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body { + font-size: 12px; + margin-bottom: 3px; + clear: both; +} + +.edui-default .edui-autotypesetpicker-body table { + border-collapse: separate; + border-spacing: 2px; +} + +.edui-default .edui-autotypesetpicker-body td { + font-size: 12px; + word-wrap:break-word; +} + +.edui-default .edui-autotypesetpicker-body td input { + margin: 3px 3px 3px 4px; + *margin: 1px 0 0 0; +} +/*自动排版弹出菜单*/ +.edui-default .edui-cellalignpicker .edui-cellalignpicker-body { + width: 70px; + font-size: 12px; + cursor: default; +} + +.edui-default .edui-cellalignpicker-body table { + border-collapse: separate; + border-spacing: 0; +} +.edui-default .edui-cellalignpicker-body td{ + padding: 1px; +} +.edui-default .edui-cellalignpicker-body .edui-icon{ + height: 20px; + width: 20px; + padding: 1px; + background-image: url(../images/table-cell-align.png); +} + +.edui-default .edui-cellalignpicker-body .edui-left{ + background-position: 0 0; +} + +.edui-default .edui-cellalignpicker-body .edui-center{ + background-position: -25px 0; +} +.edui-default .edui-cellalignpicker-body .edui-right{ + background-position: -51px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{ + background-position: -73px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{ + background-position: -98px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{ + background-position: -124px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left { + background-position: -146px 0; + background-color: #f1f4f5; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center { + background-position: -245px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right { + background-position: -271px 0; +} +/*分隔线*/ +.edui-default .edui-toolbar .edui-separator { + width: 2px; + height: 20px; + margin: 2px 4px 2px 3px; + background: url(../images/icons.png) -181px 0; + background: url(../images/icons.gif) -181px 0 \9; +} + +/*颜色按钮 */ +.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump { + position: absolute; + overflow: hidden; + bottom: 1px; + left: 1px; + width: 18px; + height: 4px; +} +/*表情按钮及弹出菜单*/ +/*去除了表情的下拉箭头*/ +.edui-default .edui-for-emotion .edui-icon { + background-position: -60px -20px; +} +.edui-default .edui-for-emotion .edui-popup-content iframe +{ + width: 514px; + height: 380px; + overflow: hidden; +} +.edui-default .edui-for-emotion .edui-popup-content +{ + position: relative; + z-index: 555 +} + +.edui-default .edui-for-emotion .edui-splitborder { + display: none +} + +.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow +{ + width: 0 +} +.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder +{ + border-left: 1px solid transparent; +} +/*contextmenu*/ +.edui-default .edui-hassubmenu .edui-arrow { + height: 20px; + width: 20px; + float: right; + background: url("../images/icons-all.gif") no-repeat 10px -233px; +} + +.edui-default .edui-menu-body .edui-menuitem { + padding: 1px; +} + +.edui-default .edui-menuseparator { + margin: 2px 0; + height: 1px; + overflow: hidden; +} + +.edui-default .edui-menuseparator-inner { + border-bottom: 1px solid #e2e3e3; + margin-left: 29px; + margin-right: 1px; +} + +.edui-default .edui-menu-body .edui-state-hover { + padding: 0 !important; + background-color: #fff5d4; + border: 1px solid #dcac6c; +} +/*弹出菜单*/ +.edui-default .edui-shortcutmenu { + padding: 2px; + width: 190px; + height: 50px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 5px; +} + +/*粘贴弹出菜单*/ +.edui-default .edui-wordpastepop .edui-popup-content{ + border: none; + padding: 0; + width: 54px; + height: 21px; +} +.edui-default .edui-pasteicon { + width: 100%; + height: 100%; + background-image: url('../images/wordpaste.png'); + background-position: 0 0; +} + +.edui-default .edui-pasteicon.edui-state-opened { + background-position: 0 -34px; +} + +.edui-default .edui-pastecontainer { + position: relative; + visibility: hidden; + width: 97px; + background: #fff; + border: 1px solid #ccc; +} + +.edui-default .edui-pastecontainer .edui-title { + font-weight: bold; + background: #F8F8FF; + height: 25px; + line-height: 25px; + font-size: 12px; + padding-left: 5px; +} + +.edui-default .edui-pastecontainer .edui-button { + overflow: hidden; + margin: 3px 0; +} + +.edui-default .edui-pastecontainer .edui-button .edui-richtxticon, +.edui-default .edui-pastecontainer .edui-button .edui-tagicon, +.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{ + float: left; + cursor: pointer; + width: 29px; + height: 29px; + margin-left: 5px; + background-image: url('../images/wordpaste.png'); + background-repeat: no-repeat; +} +.edui-default .edui-pastecontainer .edui-button .edui-richtxticon { + margin-left: 0; + background-position: -109px 0; +} +.edui-default .edui-pastecontainer .edui-button .edui-tagicon { + background-position: -148px 1px; +} + +.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon { + background-position: -72px 0; +} + +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon { + background-position: -109px -34px; +} +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{ + background-position: -148px -34px; +} +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{ + background-position: -72px -34px; +} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/themes/default/css/ueditor.min.css b/express/Campari-vue/www/public/ueditor/themes/default/css/ueditor.min.css new file mode 100644 index 0000000..eb2e7af --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/themes/default/css/ueditor.min.css @@ -0,0 +1,8 @@ +/*! + * UEditor + * version: ueditor + * build: Wed Aug 10 2016 11:06:16 GMT+0800 (CST) + */ + + +.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:-moz-inline-box!important;display:inline-block!important;vertical-align:top}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:default}.edui-default span.edui-clickable{color:#00f;cursor:pointer;text-decoration:underline}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid #d4d4d4;background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;-webkit-box-shadow:0 1px 4px rgba(204,204,204,.6);-moz-box-shadow:0 1px 4px rgba(204,204,204,.6);box-shadow:0 1px 4px rgba(204,204,204,.6);border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid #d4d4d4;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid #ccc;line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px}.edui-default .edui-editor-breadcrumb span{cursor:pointer;text-decoration:underline;color:#00f}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{border:1px solid #DCAC6C;background-color:#fff6d9;padding:5px;font-size:10pt;font-family:"宋体"}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:20px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;background:url(../images/icons.png) 0 -4000px;background:url(../images/icons.gif) 0 -4000px\9}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body{background:url(../images/icons-all.gif) no-repeat 6px -205px}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:20px;line-height:20px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid #CCC;background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid #CCC}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{border-left:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3;filter:alpha(opacity=30)}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:20px!important;width:20px!important;background-image:url(../images/icons.png);background-image:url(../images/icons.gif) \9}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#fff5d4;padding:0;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#ffe69f;padding:0;border:1px solid #dcac6c;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#fff;padding:0;border:1px solid gray}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-for-undo .edui-icon{background-position:-160px 0}.edui-default .edui-for-redo .edui-icon{background-position:-100px 0}.edui-default .edui-for-bold .edui-icon{background-position:0 0}.edui-default .edui-for-italic .edui-icon{background-position:-60px 0}.edui-default .edui-for-fontborder .edui-icon{background-position:-160px -40px}.edui-default .edui-for-underline .edui-icon{background-position:-140px 0}.edui-default .edui-for-strikethrough .edui-icon{background-position:-120px 0}.edui-default .edui-for-subscript .edui-icon{background-position:-600px 0}.edui-default .edui-for-superscript .edui-icon{background-position:-620px 0}.edui-default .edui-for-blockquote .edui-icon{background-position:-220px 0}.edui-default .edui-for-forecolor .edui-icon{background-position:-720px 0}.edui-default .edui-for-backcolor .edui-icon{background-position:-760px 0}.edui-default .edui-for-inserttable .edui-icon{background-position:-580px -20px}.edui-default .edui-for-autotypeset .edui-icon{background-position:-640px -40px}.edui-default .edui-for-justifyleft .edui-icon{background-position:-460px 0}.edui-default .edui-for-justifycenter .edui-icon{background-position:-420px 0}.edui-default .edui-for-justifyright .edui-icon{background-position:-480px 0}.edui-default .edui-for-justifyjustify .edui-icon{background-position:-440px 0}.edui-default .edui-for-insertorderedlist .edui-icon{background-position:-80px 0}.edui-default .edui-for-insertunorderedlist .edui-icon{background-position:-20px 0}.edui-default .edui-for-lineheight .edui-icon{background-position:-725px -40px}.edui-default .edui-for-rowspacingbottom .edui-icon{background-position:-745px -40px}.edui-default .edui-for-rowspacingtop .edui-icon{background-position:-765px -40px}.edui-default .edui-for-horizontal .edui-icon{background-position:-360px 0}.edui-default .edui-for-link .edui-icon{background-position:-500px 0}.edui-default .edui-for-code .edui-icon{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon{background-position:-726px -77px}.edui-default .edui-for-insertframe .edui-icon{background-position:-240px -40px}.edui-default .edui-for-emoticon .edui-icon{background-position:-60px -20px}.edui-default .edui-for-spechars .edui-icon{background-position:-240px 0}.edui-default .edui-for-help .edui-icon{background-position:-340px 0}.edui-default .edui-for-print .edui-icon{background-position:-440px -20px}.edui-default .edui-for-preview .edui-icon{background-position:-420px -20px}.edui-default .edui-for-selectall .edui-icon{background-position:-400px -20px}.edui-default .edui-for-searchreplace .edui-icon{background-position:-520px -20px}.edui-default .edui-for-map .edui-icon{background-position:-40px -40px}.edui-default .edui-for-gmap .edui-icon{background-position:-260px -40px}.edui-default .edui-for-insertvideo .edui-icon{background-position:-320px -20px}.edui-default .edui-for-time .edui-icon{background-position:-160px -20px}.edui-default .edui-for-date .edui-icon{background-position:-140px -20px}.edui-default .edui-for-cut .edui-icon{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon{background-position:-40px 0}.edui-default .edui-for-pasteplain .edui-icon{background-position:-360px -20px}.edui-default .edui-for-directionalityltr .edui-icon{background-position:-20px -20px}.edui-default .edui-for-directionalityrtl .edui-icon{background-position:-40px -20px}.edui-default .edui-for-source .edui-icon{background-position:-261px -0px}.edui-default .edui-for-removeformat .edui-icon{background-position:-580px 0}.edui-default .edui-for-unlink .edui-icon{background-position:-640px 0}.edui-default .edui-for-touppercase .edui-icon{background-position:-786px 0}.edui-default .edui-for-tolowercase .edui-icon{background-position:-806px 0}.edui-default .edui-for-insertrow .edui-icon{background-position:-478px -76px}.edui-default .edui-for-insertrownext .edui-icon{background-position:-498px -76px}.edui-default .edui-for-insertcol .edui-icon{background-position:-455px -76px}.edui-default .edui-for-insertcolnext .edui-icon{background-position:-429px -76px}.edui-default .edui-for-mergeright .edui-icon{background-position:-60px -40px}.edui-default .edui-for-mergedown .edui-icon{background-position:-80px -40px}.edui-default .edui-for-splittorows .edui-icon{background-position:-100px -40px}.edui-default .edui-for-splittocols .edui-icon{background-position:-120px -40px}.edui-default .edui-for-insertparagraphbeforetable .edui-icon{background-position:-140px -40px}.edui-default .edui-for-deleterow .edui-icon{background-position:-660px -20px}.edui-default .edui-for-deletecol .edui-icon{background-position:-640px -20px}.edui-default .edui-for-splittocells .edui-icon{background-position:-800px -20px}.edui-default .edui-for-mergecells .edui-icon{background-position:-760px -20px}.edui-default .edui-for-deletetable .edui-icon{background-position:-620px -20px}.edui-default .edui-for-cleardoc .edui-icon{background-position:-520px 0}.edui-default .edui-for-fullscreen .edui-icon{background-position:-100px -20px}.edui-default .edui-for-anchor .edui-icon{background-position:-200px 0}.edui-default .edui-for-pagebreak .edui-icon{background-position:-460px -40px}.edui-default .edui-for-imagenone .edui-icon{background-position:-480px -40px}.edui-default .edui-for-imageleft .edui-icon{background-position:-500px -40px}.edui-default .edui-for-wordimage .edui-icon{background-position:-660px -40px}.edui-default .edui-for-imageright .edui-icon{background-position:-520px -40px}.edui-default .edui-for-imagecenter .edui-icon{background-position:-540px -40px}.edui-default .edui-for-indent .edui-icon{background-position:-400px 0}.edui-default .edui-for-outdent .edui-icon{background-position:-540px 0}.edui-default .edui-for-webapp .edui-icon{background-position:-601px -40px}.edui-default .edui-for-table .edui-icon{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon{background-position:-339px -40px}.edui-default .edui-for-delete .edui-icon{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon{background-position:-620px -40px}.edui-default .edui-for-edittd .edui-icon{background-position:-700px -40px}.edui-default .edui-for-snapscreen .edui-icon{background-position:-581px -40px}.edui-default .edui-for-scrawl .edui-icon{background-position:-801px -41px}.edui-default .edui-for-background .edui-icon{background-position:-680px -40px}.edui-default .edui-for-music .edui-icon{background-position:-18px -40px}.edui-default .edui-for-formula .edui-icon{background-position:-200px -40px}.edui-default .edui-for-aligntd .edui-icon{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon{background-position:-480px 0}.edui-default .edui-for-drafts .edui-icon{background-position:-560px 0}.edui-default .edui-for-charts .edui-icon{background:url( ../images/charts.png ) no-repeat 2px 3px!important}.edui-default .edui-for-inserttitlecol .edui-icon{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon{background-position:-380px 0}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px}.edui-default .edui-toolbar .edui-splitborder{width:1px;height:20px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{width:1px;border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0;border-left:1px solid gray}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{width:1px;border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#FFE69F;border:1px solid #DCAC6C;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 4px rgba(0,0,0,.2);-moz-box-shadow:0 3px 4px rgba(0,0,0,.2);box-shadow:0 3px 4px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;padding:5px;background:#fff}.edui-default .edui-popup .edui-bordereraser{background-color:#fff;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative;padding:2px 0 0 2px;_zoom:1}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff}.edui-default .edui-dialog-titlebar{height:26px;border-bottom:1px solid #c6c6c6;background:url(../images/dialog-title-bg.png) repeat-x bottom;position:relative;cursor:move}.edui-default .edui-dialog-caption{font-weight:700;font-size:12px;line-height:26px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:26px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:5px;top:3px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer;background:url(../images/icons-all.gif) no-repeat 0 -59px}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -89px}.edui-default .edui-dialog-foot{height:40px}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{background:url(../images/icons-all.gif) no-repeat;height:24px;width:96px;font-size:12px;line-height:24px;text-align:center;cursor:default}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -30px}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-webapp .edui-dialog-content{width:560px;_width:565px;height:450px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:200px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-gmap .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:390px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-snapscreen .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-music .edui-dialog-content{width:515px;height:360px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:24px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:14px;height:14px;border:1px solid #333;padding:3px 5px;cursor:pointer}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:2px;height:20px;margin:2px 4px 2px 3px;background:url(../images/icons.png) -181px 0;background:url(../images/icons.gif) -181px 0 \9}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:1px;width:18px;height:4px}.edui-default .edui-for-emotion .edui-icon{background-position:-60px -20px}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;background:url(../images/icons-all.gif) no-repeat 10px -233px}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-shortcutmenu{padding:2px;width:190px;height:50px;background-color:#fff;border:1px solid #ccc;border-radius:5px}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/themes/default/dialogbase.css b/express/Campari-vue/www/public/ueditor/themes/default/dialogbase.css new file mode 100644 index 0000000..cd663d5 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/themes/default/dialogbase.css @@ -0,0 +1,100 @@ +/*弹出对话框页面样式组件 +*/ + +/*reset +*/ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + outline: 0; + font-size: 100%; +} + +body { + line-height: 1; +} + +ol, ul { + list-style: none; +} + +blockquote, q { + quotes: none; +} + +ins { + text-decoration: none; +} + +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/*module +*/ +body { + background-color: #fff; + font: 12px/1.5 sans-serif, "宋体", "Arial Narrow", HELVETICA; + color: #646464; +} + +/*tab*/ +.tabhead { + position: relative; + z-index: 10; +} + +.tabhead span { + display: inline-block; + padding: 0 5px; + height: 30px; + border: 1px solid #ccc; + background: url("images/dialog-title-bg.png") repeat-x; + text-align: center; + line-height: 30px; + cursor: pointer; + *margin-right: 5px; +} + +.tabhead span.focus { + height: 31px; + border-bottom: none; + background: #fff; +} + +.tabbody { + position: relative; + top: -1px; + margin: 0 auto; + border: 1px solid #ccc; +} + +/*button*/ +a.button { + display: block; + text-align: center; + line-height: 24px; + text-decoration: none; + height: 24px; + width: 95px; + border: 0; + color: #838383; + background: url(../../themes/default/images/icons-all.gif) no-repeat; +} + +a.button:hover { + background-position: 0 -30px; +} \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/anchor.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/anchor.gif new file mode 100644 index 0000000..5aa797b Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/anchor.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/arrow.png b/express/Campari-vue/www/public/ueditor/themes/default/images/arrow.png new file mode 100644 index 0000000..d900886 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/arrow.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/arrow_down.png b/express/Campari-vue/www/public/ueditor/themes/default/images/arrow_down.png new file mode 100644 index 0000000..e9257e8 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/arrow_down.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/arrow_up.png b/express/Campari-vue/www/public/ueditor/themes/default/images/arrow_up.png new file mode 100644 index 0000000..74277af Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/arrow_up.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/button-bg.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/button-bg.gif new file mode 100644 index 0000000..ec7fa2e Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/button-bg.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/cancelbutton.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/cancelbutton.gif new file mode 100644 index 0000000..df4bc2c Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/cancelbutton.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/charts.png b/express/Campari-vue/www/public/ueditor/themes/default/images/charts.png new file mode 100644 index 0000000..713965c Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/charts.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_h.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_h.gif new file mode 100644 index 0000000..d7c3e7e Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_h.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_h.png b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_h.png new file mode 100644 index 0000000..2088fc2 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_h.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_v.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_v.gif new file mode 100644 index 0000000..bb508db Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_v.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_v.png b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_v.png new file mode 100644 index 0000000..6f39ca3 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/cursor_v.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/dialog-title-bg.png b/express/Campari-vue/www/public/ueditor/themes/default/images/dialog-title-bg.png new file mode 100644 index 0000000..f744f26 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/dialog-title-bg.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/filescan.png b/express/Campari-vue/www/public/ueditor/themes/default/images/filescan.png new file mode 100644 index 0000000..1d27158 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/filescan.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/highlighted.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/highlighted.gif new file mode 100644 index 0000000..9272b49 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/highlighted.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/icons-all.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/icons-all.gif new file mode 100644 index 0000000..21915e5 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/icons-all.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/icons.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/icons.gif new file mode 100644 index 0000000..7abd30a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/icons.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/icons.png b/express/Campari-vue/www/public/ueditor/themes/default/images/icons.png new file mode 100644 index 0000000..c015e3a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/icons.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/loaderror.png b/express/Campari-vue/www/public/ueditor/themes/default/images/loaderror.png new file mode 100644 index 0000000..35ff333 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/loaderror.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/loading.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/loading.gif new file mode 100644 index 0000000..b713e27 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/loading.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/lock.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/lock.gif new file mode 100644 index 0000000..b4e6d78 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/lock.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/neweditor-tab-bg.png b/express/Campari-vue/www/public/ueditor/themes/default/images/neweditor-tab-bg.png new file mode 100644 index 0000000..8f398b0 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/neweditor-tab-bg.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/pagebreak.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/pagebreak.gif new file mode 100644 index 0000000..8d1cffd Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/pagebreak.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/scale.png b/express/Campari-vue/www/public/ueditor/themes/default/images/scale.png new file mode 100644 index 0000000..f45adb5 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/scale.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/sortable.png b/express/Campari-vue/www/public/ueditor/themes/default/images/sortable.png new file mode 100644 index 0000000..1bca649 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/sortable.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/spacer.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/spacer.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/sparator_v.png b/express/Campari-vue/www/public/ueditor/themes/default/images/sparator_v.png new file mode 100644 index 0000000..8cf5662 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/sparator_v.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/table-cell-align.png b/express/Campari-vue/www/public/ueditor/themes/default/images/table-cell-align.png new file mode 100644 index 0000000..ddf4285 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/table-cell-align.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/tangram-colorpicker.png b/express/Campari-vue/www/public/ueditor/themes/default/images/tangram-colorpicker.png new file mode 100644 index 0000000..738e500 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/tangram-colorpicker.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/toolbar_bg.png b/express/Campari-vue/www/public/ueditor/themes/default/images/toolbar_bg.png new file mode 100644 index 0000000..7ab685f Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/toolbar_bg.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/unhighlighted.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/unhighlighted.gif new file mode 100644 index 0000000..7ad0b67 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/unhighlighted.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/upload.png b/express/Campari-vue/www/public/ueditor/themes/default/images/upload.png new file mode 100644 index 0000000..08d4d92 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/upload.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/videologo.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/videologo.gif new file mode 100644 index 0000000..555af74 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/videologo.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/word.gif b/express/Campari-vue/www/public/ueditor/themes/default/images/word.gif new file mode 100644 index 0000000..9ef5d09 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/word.gif differ diff --git a/express/Campari-vue/www/public/ueditor/themes/default/images/wordpaste.png b/express/Campari-vue/www/public/ueditor/themes/default/images/wordpaste.png new file mode 100644 index 0000000..9367758 Binary files /dev/null and b/express/Campari-vue/www/public/ueditor/themes/default/images/wordpaste.png differ diff --git a/express/Campari-vue/www/public/ueditor/themes/iframe.css b/express/Campari-vue/www/public/ueditor/themes/iframe.css new file mode 100644 index 0000000..774013a --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/themes/iframe.css @@ -0,0 +1 @@ +/*可以在这里添加你自己的css*/ diff --git a/express/Campari-vue/www/public/ueditor/third-party/SyntaxHighlighter/shCore.js b/express/Campari-vue/www/public/ueditor/third-party/SyntaxHighlighter/shCore.js new file mode 100644 index 0000000..3249184 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/third-party/SyntaxHighlighter/shCore.js @@ -0,0 +1,3655 @@ +// XRegExp 1.5.1 +// (c) 2007-2012 Steven Levithan +// MIT License +// +// Provides an augmented, extensible, cross-browser implementation of regular expressions, +// including support for additional syntax, flags, and methods + +var XRegExp; + +if (XRegExp) { + // Avoid running twice, since that would break references to native globals + throw Error("can't load XRegExp twice in the same frame"); +} + +// Run within an anonymous function to protect variables and avoid new globals +(function (undefined) { + + //--------------------------------- + // Constructor + //--------------------------------- + + // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native + // regular expression in that additional syntax and flags are supported and cross-browser + // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and + // converts to type XRegExp + XRegExp = function (pattern, flags) { + var output = [], + currScope = XRegExp.OUTSIDE_CLASS, + pos = 0, + context, tokenResult, match, chr, regex; + + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) + throw TypeError("can't supply flags when constructing one RegExp from another"); + return clone(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite + // recursion when an XRegExp is constructed within a token handler or trigger + if (isInsideConstructor) + throw Error("can't call the XRegExp constructor within token definition functions"); + + flags = flags || ""; + context = { // `this` object for custom tokens + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, + setFlag: function (flag) {flags += flag;} + }; + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, currScope, context); + + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native multicharacter metasequences (excluding character classes) at + // the current position + if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") + currScope = XRegExp.INSIDE_CLASS; + else if (chr === "]") + currScope = XRegExp.OUTSIDE_CLASS; + // Advance position one character + output.push(chr); + pos++; + } + } + } + + regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, "")); + regex._xregexp = { + source: pattern, + captureNames: context.hasNamedCapture ? context.captureNames : null + }; + return regex; + }; + + + //--------------------------------- + // Public properties + //--------------------------------- + + XRegExp.version = "1.5.1"; + + // Token scope bitflags + XRegExp.INSIDE_CLASS = 1; + XRegExp.OUTSIDE_CLASS = 2; + + + //--------------------------------- + // Private variables + //--------------------------------- + + var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, + flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + isInsideConstructor = false, + tokens = [], + // Copy native globals for reference ("native" is an ES3 reserved keyword) + nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + nativ.test.call(x, ""); + return !x.lastIndex; + }(), + hasNativeY = RegExp.prototype.sticky !== undefined, + nativeTokens = {}; + + // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, + // excluding character classes) + nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; + nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; + + + //--------------------------------- + // Public methods + //--------------------------------- + + // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by + // the XRegExp library and can be used to create XRegExp plugins. This function is intended for + // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can + // be disabled by `XRegExp.freezeTokens` + XRegExp.addToken = function (regex, handler, scope, trigger) { + tokens.push({ + pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: scope || XRegExp.OUTSIDE_CLASS, + trigger: trigger || null + }); + }; + + // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag + // combination has previously been cached, the cached copy is returned; otherwise the newly + // created regex is cached + XRegExp.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); + }; + + // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh + // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` + // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve + // special properties required for named capture + XRegExp.copyAsGlobal = function (regex) { + return clone(regex, "g"); + }; + + // Accepts a string; returns the string with regex metacharacters escaped. The returned string + // can safely be used at any point within a regex to match the provided literal string. Escaped + // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace + XRegExp.escape = function (str) { + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + + // Accepts a string to search, regex to search with, position to start the search within the + // string (default: 0), and an optional Boolean indicating whether matches must start at-or- + // after the position or at the specified position only. This function ignores the `lastIndex` + // of the provided regex in its own handling, but updates the property for compatibility + XRegExp.execAt = function (str, regex, pos, anchored) { + var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")), + match; + r2.lastIndex = pos = pos || 0; + match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (anchored && match && match.index !== pos) + match = null; + if (regex.global) + regex.lastIndex = match ? r2.lastIndex : 0; + return match; + }; + + // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing + // syntax and flag changes. Should be run after XRegExp and any plugins are loaded + XRegExp.freezeTokens = function () { + XRegExp.addToken = function () { + throw Error("can't run addToken after freezeTokens"); + }; + }; + + // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. + // Note that this is also `true` for regex literals and regexes created by the `XRegExp` + // constructor. This works correctly for variables created in another frame, when `instanceof` + // and `constructor` checks would fail to work as intended + XRegExp.isRegExp = function (o) { + return Object.prototype.toString.call(o) === "[object RegExp]"; + }; + + // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to + // iterate over regex matches compared to the traditional approaches of subverting + // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop + XRegExp.iterate = function (str, regex, callback, context) { + var r2 = clone(regex, "g"), + i = -1, match; + while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (regex.global) + regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback` + callback.call(context, match, ++i, str, regex); + if (r2.lastIndex === match.index) + r2.lastIndex++; + } + if (regex.global) + regex.lastIndex = 0; + }; + + // Accepts a string and an array of regexes; returns the result of using each successive regex + // to search within the matches of the previous regex. The array of regexes can also contain + // objects with `regex` and `backref` properties, in which case the named or numbered back- + // references specified are passed forward to the next regex or returned. E.g.: + // var xregexpImgFileNames = XRegExp.matchChain(html, [ + // {regex: /]+)>/i, backref: 1}, // tag attributes + // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values + // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths + // /[^\/]+$/ // filenames (strip directory paths) + // ]); + XRegExp.matchChain = function (str, chain) { + return function recurseChain (values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + regex = clone(item.regex, "g"), + matches = [], i; + for (i = 0; i < values.length; i++) { + XRegExp.iterate(values[i], regex, function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : recurseChain(matches, level + 1); + }([str], 0); + }; + + + //--------------------------------- + // New RegExp prototype methods + //--------------------------------- + + // Accepts a context object and arguments array; returns the result of calling `exec` with the + // first value in the arguments array. the context is ignored but is accepted for congruity + // with `Function.prototype.apply` + RegExp.prototype.apply = function (context, args) { + return this.exec(args[0]); + }; + + // Accepts a context object and string; returns the result of calling `exec` with the provided + // string. the context is ignored but is accepted for congruity with `Function.prototype.call` + RegExp.prototype.call = function (context, str) { + return this.exec(str); + }; + + + //--------------------------------- + // Overriden native methods + //--------------------------------- + + // Adds named capture support (with backreferences returned as `result.name`), and fixes two + // cross-browser issues per ES3: + // - Captured values for nonparticipating capturing groups should be returned as `undefined`, + // rather than the empty string. + // - `lastIndex` should not be incremented after zero-length matches. + RegExp.prototype.exec = function (str) { + var match, name, r2, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.apply(this, arguments); + if (match) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call((str + "").slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + // Attach named capture properties + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return match; + }; + + // Fix browser bugs in native method + RegExp.prototype.test = function (str) { + // Use the native `exec` to skip some processing overhead, even though the altered + // `exec` would take care of the `lastIndex` fixes + var match, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.call(this, str); + // Fix browsers that increment `lastIndex` after zero-length matches + if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return !!match; + }; + + // Adds named capture support and fixes browser bugs in native method + String.prototype.match = function (regex) { + if (!XRegExp.isRegExp(regex)) + regex = RegExp(regex); // Native `RegExp` + if (regex.global) { + var result = nativ.match.apply(this, arguments); + regex.lastIndex = 0; // Fix IE bug + return result; + } + return regex.exec(this); // Run the altered `exec` + }; + + // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, + // and provides named backreferences to replacement functions as `arguments[0].name`. Also + // fixes cross-browser differences in replacement text syntax when performing a replacement + // using a nonregex search value, and the value of replacement regexes' `lastIndex` property + // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary + // third (`flags`) parameter + String.prototype.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search), + captureNames, result, str, origLastIndex; + + // There are too many combinations of search/replacement types/values and browser bugs that + // preclude passing to native `replace`, so don't try + //if (...) + // return nativ.replace.apply(this, arguments); + + if (isRegex) { + if (search._xregexp) + captureNames = search._xregexp.captureNames; // Array or `null` + if (!search.global) + origLastIndex = search.lastIndex; + } else { + search = search + ""; // Type conversion + } + + if (Object.prototype.toString.call(replacement) === "[object Function]") { + result = nativ.replace.call(this + "", search, function () { + if (captureNames) { + // Change the `arguments[0]` string primitive to a String object which can store properties + arguments[0] = new String(arguments[0]); + // Store named backreferences on `arguments[0]` + for (var i = 0; i < captureNames.length; i++) { + if (captureNames[i]) + arguments[0][captureNames[i]] = arguments[i + 1]; + } + } + // Update `lastIndex` before calling `replacement` (fix browsers) + if (isRegex && search.global) + search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; + return replacement.apply(null, arguments); + }); + } else { + str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) + result = nativ.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) { + // Numbered backreference (without delimiters) or special variable + if ($1) { + switch ($1) { + case "$": return "$"; + case "&": return args[0]; + case "`": return args[args.length - 1].slice(0, args[args.length - 2]); + case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Numbered backreference + default: + // What does "$10" mean? + // - Backreference 10, if 10 or more capturing groups exist + // - Backreference 1 followed by "0", if 1-9 capturing groups exist + // - Otherwise, it's the string "$10" + // Also note: + // - Backreferences cannot be more than two digits (enforced by `replacementToken`) + // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" + // - There is no "$0" token ("$&" is the entire match) + var literalNumbers = ""; + $1 = +$1; // Type conversion; drop leading zero + if (!$1) // `$1` was "0" or "00" + return $0; + while ($1 > args.length - 3) { + literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; + $1 = Math.floor($1 / 10); // Drop the last digit + } + return ($1 ? args[$1] || "" : "$") + literalNumbers; + } + // Named backreference or delimited numbered backreference + } else { + // What does "${n}" mean? + // - Backreference to numbered capture n. Two differences from "$n": + // - n can be more than two digits + // - Backreference 0 is allowed, and is the entire match + // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture + // - Otherwise, it's the string "${n}" + var n = +$2; // Type conversion; drop leading zeros + if (n <= args.length - 3) + return args[n]; + n = captureNames ? indexOf(captureNames, $2) : -1; + return n > -1 ? args[n + 1] : $0; + } + }); + }); + } + + if (isRegex) { + if (search.global) + search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows) + else + search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + } + + return result; + }; + + // A consistent cross-browser, ES3 compliant `split` + String.prototype.split = function (s /* separator */, limit) { + // If separator `s` is not a regex, use the native `split` + if (!XRegExp.isRegExp(s)) + return nativ.split.apply(this, arguments); + + var str = this + "", // Type conversion + output = [], + lastLastIndex = 0, + match, lastLength; + + // Behavior for `limit`: if it's... + // - `undefined`: No limit + // - `NaN` or zero: Return an empty array + // - A positive number: Use `Math.floor(limit)` + // - A negative number: No limit + // - Other: Type-convert, then use the above rules + if (limit === undefined || +limit < 0) { + limit = Infinity; + } else { + limit = Math.floor(+limit); + if (!limit) + return []; + } + + // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero + // and restore it to its original value when we're done using the regex + s = XRegExp.copyAsGlobal(s); + + while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (s.lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) + Array.prototype.push.apply(output, match.slice(1)); + + lastLength = match[0].length; + lastLastIndex = s.lastIndex; + + if (output.length >= limit) + break; + } + + if (s.lastIndex === match.index) + s.lastIndex++; + } + + if (lastLastIndex === str.length) { + if (!nativ.test.call(s, "") || lastLength) + output.push(""); + } else { + output.push(str.slice(lastLastIndex)); + } + + return output.length > limit ? output.slice(0, limit) : output; + }; + + + //--------------------------------- + // Private helper functions + //--------------------------------- + + // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` + // instance with a fresh `lastIndex` (set to zero), preserving properties required for named + // capture. Also allows adding new flags in the process of copying the regex + function clone (regex, additionalFlags) { + if (!XRegExp.isRegExp(regex)) + throw TypeError("type RegExp expected"); + var x = regex._xregexp; + regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); + if (x) { + regex._xregexp = { + source: x.source, + captureNames: x.captureNames ? x.captureNames.slice(0) : null + }; + } + return regex; + } + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + } + + function runTokens (pattern, index, scope, context) { + var i = tokens.length, + result, match, t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = index; + match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. + if (match && match.index === index) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + } + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + } + + + //--------------------------------- + // Built-in tokens + //--------------------------------- + + // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the + // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` + + // Comment pattern: (?# ) + XRegExp.addToken( + /\(\?#[^)]*\)/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + } + ); + + // Capturing group (match the opening parenthesis only). + // Required for support of named capturing groups + XRegExp.addToken( + /\((?!\?)/, + function () { + this.captureNames.push(null); + return "("; + } + ); + + // Named capturing group (match the opening delimiter only): (? + XRegExp.addToken( + /\(\?<([$\w]+)>/, + function (match) { + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + } + ); + + // Named backreference: \k + XRegExp.addToken( + /\\k<([\w$]+)>/, + function (match) { + var index = indexOf(this.captureNames, match[1]); + // Keep backreferences separate from subsequent literal numbers. Preserve back- + // references to named groups that are undefined at this point as literal strings + return index > -1 ? + "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : + match[0]; + } + ); + + // Empty character class: [] or [^] + XRegExp.addToken( + /\[\^?]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; + } + ); + + // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) + // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. + XRegExp.addToken( + /^\(\?([imsx]+)\)/, + function (match) { + this.setFlag(match[1]); + return ""; + } + ); + + // Whitespace and comments, in free-spacing (aka extended) mode only + XRegExp.addToken( + /(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("x");} + ); + + // Dot, in dotall (aka singleline) mode only + XRegExp.addToken( + /\./, + function () {return "[\\s\\S]";}, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("s");} + ); + + + //--------------------------------- + // Backward compatibility + //--------------------------------- + + // Uncomment the following block for compatibility with XRegExp 1.0-1.2: + /* + XRegExp.matchWithinChain = XRegExp.matchChain; + RegExp.prototype.addFlags = function (s) {return clone(this, s);}; + RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; + RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; + RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; + */ + +})(); + +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +if (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() { + +// CommonJS + if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined') + { + XRegExp = require('XRegExp').XRegExp; + } + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... + var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : false, + + /** Lines to highlight. */ + 'highlight' : false, + + /** Title to be displayed above the code block. */ + 'title' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Enables quick code copy and paste from double click. */ + 'quick-code' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : false, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + 'unindent' : true, + + 'html-script' : false + }, + + config : { + space : ' ', + + /** Enables use of + * + * ``` + */ + findParent:function (node, filterFn, includeSelf) { + if (node && !domUtils.isBody(node)) { + node = includeSelf ? node : node.parentNode; + while (node) { + if (!filterFn || filterFn(node) || domUtils.isBody(node)) { + return filterFn && !filterFn(node) && domUtils.isBody(node) ? null : node; + } + node = node.parentNode; + } + } + return null; + }, + /** + * 查找node的节点名为tagName的第一个祖先节点, 查找的起点是node节点的父节点。 + * @method findParentByTagName + * @param { Node } node 需要查找的节点对象 + * @param { Array } tagNames 需要查找的父节点的名称数组 + * @warning 查找的终点是到body节点为止 + * @return { Node | NULL } 如果找到符合条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var node = UE.dom.domUtils.findParentByTagName( document.getElementsByTagName("div")[0], [ "BODY" ] ); + * //output: BODY + * console.log( node.tagName ); + * ``` + */ + + /** + * 查找node的节点名为tagName的祖先节点, 如果includeSelf的值为true,则查找的起点是给定的节点node, + * 否则, 起点是node的父节点。 + * @method findParentByTagName + * @param { Node } node 需要查找的节点对象 + * @param { Array } tagNames 需要查找的父节点的名称数组 + * @param { Boolean } includeSelf 查找过程是否包含node节点自身 + * @warning 查找的终点是到body节点为止 + * @return { Node | NULL } 如果找到符合条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var queryTarget = document.getElementsByTagName("div")[0]; + * var node = UE.dom.domUtils.findParentByTagName( queryTarget, [ "DIV" ], true ); + * //output: true + * console.log( queryTarget === node ); + * ``` + */ + findParentByTagName:function (node, tagNames, includeSelf, excludeFn) { + tagNames = utils.listToMap(utils.isArray(tagNames) ? tagNames : [tagNames]); + return domUtils.findParent(node, function (node) { + return tagNames[node.tagName] && !(excludeFn && excludeFn(node)); + }, includeSelf); + }, + /** + * 查找节点node的祖先节点集合, 查找的起点是给定节点的父节点,结果集中不包含给定的节点。 + * @method findParents + * @param { Node } node 需要查找的节点对象 + * @return { Array } 给定节点的祖先节点数组 + * @grammar UE.dom.domUtils.findParents(node) => Array //返回一个祖先节点数组集合,不包含自身 + * @grammar UE.dom.domUtils.findParents(node,includeSelf) => Array //返回一个祖先节点数组集合,includeSelf指定是否包含自身 + * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn) => Array //返回一个祖先节点数组集合,filterFn指定过滤条件,返回true的node将被选取 + * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn,closerFirst) => Array //返回一个祖先节点数组集合,closerFirst为true的话,node的直接父亲节点是数组的第0个 + */ + + /** + * 查找节点node的祖先节点集合, 如果includeSelf的值为true, + * 则返回的结果集中允许出现当前给定的节点, 否则, 该节点不会出现在其结果集中。 + * @method findParents + * @param { Node } node 需要查找的节点对象 + * @param { Boolean } includeSelf 查找的结果中是否允许包含当前查找的节点对象 + * @return { Array } 给定节点的祖先节点数组 + */ + findParents:function (node, includeSelf, filterFn, closerFirst) { + var parents = includeSelf && ( filterFn && filterFn(node) || !filterFn ) ? [node] : []; + while (node = domUtils.findParent(node, filterFn)) { + parents.push(node); + } + return closerFirst ? parents : parents.reverse(); + }, + + /** + * 在节点node后面插入新节点newNode + * @method insertAfter + * @param { Node } node 目标节点 + * @param { Node } newNode 新插入的节点, 该节点将置于目标节点之后 + * @return { Node } 新插入的节点 + */ + insertAfter:function (node, newNode) { + return node.nextSibling ? node.parentNode.insertBefore(newNode, node.nextSibling): + node.parentNode.appendChild(newNode); + }, + + /** + * 删除节点node及其下属的所有节点 + * @method remove + * @param { Node } node 需要删除的节点对象 + * @return { Node } 返回刚删除的节点对象 + * @example + * ```html + *
    + *
    你好
    + *
    + * + * ``` + */ + + /** + * 删除节点node,并根据keepChildren的值决定是否保留子节点 + * @method remove + * @param { Node } node 需要删除的节点对象 + * @param { Boolean } keepChildren 是否需要保留子节点 + * @return { Node } 返回刚删除的节点对象 + * @example + * ```html + *
    + *
    你好
    + *
    + * + * ``` + */ + remove:function (node, keepChildren) { + var parent = node.parentNode, + child; + if (parent) { + if (keepChildren && node.hasChildNodes()) { + while (child = node.firstChild) { + parent.insertBefore(child, node); + } + } + parent.removeChild(node); + } + return node; + }, + + /** + * 取得node节点的下一个兄弟节点, 如果该节点其后没有兄弟节点, 则递归查找其父节点之后的第一个兄弟节点, + * 直到找到满足条件的节点或者递归到BODY节点之后才会结束。 + * @method getNextDomNode + * @param { Node } node 需要获取其后的兄弟节点的节点对象 + * @return { Node | NULL } 如果找满足条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```html + * + *
    + * + *
    + * xxx + * + * + * ``` + * @example + * ```html + * + *
    + * + * xxx + *
    + * xxx + * + * + * ``` + */ + + /** + * 取得node节点的下一个兄弟节点, 如果startFromChild的值为ture,则先获取其子节点, + * 如果有子节点则直接返回第一个子节点;如果没有子节点或者startFromChild的值为false, + * 则执行getNextDomNode(Node node)的查找过程。 + * @method getNextDomNode + * @param { Node } node 需要获取其后的兄弟节点的节点对象 + * @param { Boolean } startFromChild 查找过程是否从其子节点开始 + * @return { Node | NULL } 如果找满足条件的节点, 则返回该节点, 否则返回NULL + * @see UE.dom.domUtils.getNextDomNode(Node) + */ + getNextDomNode:function (node, startFromChild, filterFn, guard) { + return getDomNode(node, 'firstChild', 'nextSibling', startFromChild, filterFn, guard); + }, + getPreDomNode:function (node, startFromChild, filterFn, guard) { + return getDomNode(node, 'lastChild', 'previousSibling', startFromChild, filterFn, guard); + }, + /** + * 检测节点node是否属是UEditor定义的bookmark节点 + * @method isBookmarkNode + * @private + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 是否是bookmark节点 + * @example + * ```html + * + * + * ``` + */ + isBookmarkNode:function (node) { + return node.nodeType == 1 && node.id && /^_baidu_bookmark_/i.test(node.id); + }, + /** + * 获取节点node所属的window对象 + * @method getWindow + * @param { Node } node 节点对象 + * @return { Window } 当前节点所属的window对象 + * @example + * ```javascript + * //output: true + * console.log( UE.dom.domUtils.getWindow( document.body ) === window ); + * ``` + */ + getWindow:function (node) { + var doc = node.ownerDocument || node; + return doc.defaultView || doc.parentWindow; + }, + /** + * 获取离nodeA与nodeB最近的公共的祖先节点 + * @method getCommonAncestor + * @param { Node } nodeA 第一个节点 + * @param { Node } nodeB 第二个节点 + * @remind 如果给定的两个节点是同一个节点, 将直接返回该节点。 + * @return { Node | NULL } 如果未找到公共节点, 返回NULL, 否则返回最近的公共祖先节点。 + * @example + * ```javascript + * var commonAncestor = UE.dom.domUtils.getCommonAncestor( document.body, document.body.firstChild ); + * //output: true + * console.log( commonAncestor.tagName.toLowerCase() === 'body' ); + * ``` + */ + getCommonAncestor:function (nodeA, nodeB) { + if (nodeA === nodeB) + return nodeA; + var parentsA = [nodeA] , parentsB = [nodeB], parent = nodeA, i = -1; + while (parent = parent.parentNode) { + if (parent === nodeB) { + return parent; + } + parentsA.push(parent); + } + parent = nodeB; + while (parent = parent.parentNode) { + if (parent === nodeA) + return parent; + parentsB.push(parent); + } + parentsA.reverse(); + parentsB.reverse(); + while (i++, parentsA[i] === parentsB[i]) { + } + return i == 0 ? null : parentsA[i - 1]; + + }, + /** + * 清除node节点左右连续为空的兄弟inline节点 + * @method clearEmptySibling + * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点, + * 则这些兄弟节点将被删除 + * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext) //ignoreNext指定是否忽略右边空节点 + * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext,ignorePre) //ignorePre指定是否忽略左边空节点 + * @example + * ```html + * + *
    + * + * + * + * xxx + * + * + * + * ``` + */ + + /** + * 清除node节点左右连续为空的兄弟inline节点, 如果ignoreNext的值为true, + * 则忽略对右边兄弟节点的操作。 + * @method clearEmptySibling + * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点, + * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作 + * 则这些兄弟节点将被删除 + * @see UE.dom.domUtils.clearEmptySibling(Node) + */ + + /** + * 清除node节点左右连续为空的兄弟inline节点, 如果ignoreNext的值为true, + * 则忽略对右边兄弟节点的操作, 如果ignorePre的值为true,则忽略对左边兄弟节点的操作。 + * @method clearEmptySibling + * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点, + * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作 + * @param { Boolean } ignorePre 是否忽略忽略对左边的兄弟节点的操作 + * 则这些兄弟节点将被删除 + * @see UE.dom.domUtils.clearEmptySibling(Node) + */ + clearEmptySibling:function (node, ignoreNext, ignorePre) { + function clear(next, dir) { + var tmpNode; + while (next && !domUtils.isBookmarkNode(next) && (domUtils.isEmptyInlineElement(next) + //这里不能把空格算进来会吧空格干掉,出现文字间的空格丢掉了 + || !new RegExp('[^\t\n\r' + domUtils.fillChar + ']').test(next.nodeValue) )) { + tmpNode = next[dir]; + domUtils.remove(next); + next = tmpNode; + } + } + !ignoreNext && clear(node.nextSibling, 'nextSibling'); + !ignorePre && clear(node.previousSibling, 'previousSibling'); + }, + /** + * 将一个文本节点textNode拆分成两个文本节点,offset指定拆分位置 + * @method split + * @param { Node } textNode 需要拆分的文本节点对象 + * @param { int } offset 需要拆分的位置, 位置计算从0开始 + * @return { Node } 拆分后形成的新节点 + * @example + * ```html + *
    abcdef
    + * + * ``` + */ + split:function (node, offset) { + var doc = node.ownerDocument; + if (browser.ie && offset == node.nodeValue.length) { + var next = doc.createTextNode(''); + return domUtils.insertAfter(node, next); + } + var retval = node.splitText(offset); + //ie8下splitText不会跟新childNodes,我们手动触发他的更新 + if (browser.ie8) { + var tmpNode = doc.createTextNode(''); + domUtils.insertAfter(retval, tmpNode); + domUtils.remove(tmpNode); + } + return retval; + }, + + /** + * 检测文本节点textNode是否为空节点(包括空格、换行、占位符等字符) + * @method isWhitespace + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 检测的节点是否为空 + * @example + * ```html + *
    + * + *
    + * + * ``` + */ + isWhitespace:function (node) { + return !new RegExp('[^ \t\n\r' + domUtils.fillChar + ']').test(node.nodeValue); + }, + /** + * 获取元素element相对于viewport的位置坐标 + * @method getXY + * @param { Node } element 需要计算位置的节点对象 + * @return { Object } 返回形如{x:left,y:top}的一个key-value映射对象, 其中键x代表水平偏移距离, + * y代表垂直偏移距离。 + * + * @example + * ```javascript + * var location = UE.dom.domUtils.getXY( document.getElementById("test") ); + * //output: test的坐标为: 12, 24 + * console.log( 'test的坐标为: ', location.x, ',', location.y ); + * ``` + */ + getXY:function (element) { + var x = 0, y = 0; + while (element.offsetParent) { + y += element.offsetTop; + x += element.offsetLeft; + element = element.offsetParent; + } + return { 'x':x, 'y':y}; + }, + /** + * 为元素element绑定原生DOM事件,type为事件类型,handler为处理函数 + * @method on + * @param { Node } element 需要绑定事件的节点对象 + * @param { String } type 绑定的事件类型 + * @param { Function } handler 事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.on(document.body,"click",function(e){ + * //e为事件对象,this为被点击元素对戏那个 + * }); + * ``` + */ + + /** + * 为元素element绑定原生DOM事件,type为事件类型,handler为处理函数 + * @method on + * @param { Node } element 需要绑定事件的节点对象 + * @param { Array } type 绑定的事件类型数组 + * @param { Function } handler 事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.on(document.body,["click","mousedown"],function(evt){ + * //evt为事件对象,this为被点击元素对象 + * }); + * ``` + */ + on:function (element, type, handler) { + + var types = utils.isArray(type) ? type : utils.trim(type).split(/\s+/), + k = types.length; + if (k) while (k--) { + type = types[k]; + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + if (!handler._d) { + handler._d = { + els : [] + }; + } + var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element); + if (!handler._d[key] || index == -1) { + if(index == -1){ + handler._d.els.push(element); + } + if(!handler._d[key]){ + handler._d[key] = function (evt) { + return handler.call(evt.srcElement, evt || window.event); + }; + } + + + element.attachEvent('on' + type, handler._d[key]); + } + } + } + element = null; + }, + /** + * 解除DOM事件绑定 + * @method un + * @param { Node } element 需要解除事件绑定的节点对象 + * @param { String } type 需要接触绑定的事件类型 + * @param { Function } handler 对应的事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.un(document.body,"click",function(evt){ + * //evt为事件对象,this为被点击元素对象 + * }); + * ``` + */ + + /** + * 解除DOM事件绑定 + * @method un + * @param { Node } element 需要解除事件绑定的节点对象 + * @param { Array } type 需要接触绑定的事件类型数组 + * @param { Function } handler 对应的事件处理器 + * @example + * ```javascript + * UE.dom.domUtils.un(document.body, ["click","mousedown"],function(evt){ + * //evt为事件对象,this为被点击元素对象 + * }); + * ``` + */ + un:function (element, type, handler) { + var types = utils.isArray(type) ? type : utils.trim(type).split(/\s+/), + k = types.length; + if (k) while (k--) { + type = types[k]; + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + var key = type + handler.toString(); + try{ + element.detachEvent('on' + type, handler._d ? handler._d[key] : handler); + }catch(e){} + if (handler._d && handler._d[key]) { + var index = utils.indexOf(handler._d.els,element); + if(index!=-1){ + handler._d.els.splice(index,1); + } + handler._d.els.length == 0 && delete handler._d[key]; + } + } + } + }, + + /** + * 比较节点nodeA与节点nodeB是否具有相同的标签名、属性名以及属性值 + * @method isSameElement + * @param { Node } nodeA 需要比较的节点 + * @param { Node } nodeB 需要比较的节点 + * @return { Boolean } 两个节点是否具有相同的标签名、属性名以及属性值 + * @example + * ```html + * ssss + * bbbbb + * ssss + * bbbbb + * + * + * ``` + */ + isSameElement:function (nodeA, nodeB) { + if (nodeA.tagName != nodeB.tagName) { + return false; + } + var thisAttrs = nodeA.attributes, + otherAttrs = nodeB.attributes; + if (!ie && thisAttrs.length != otherAttrs.length) { + return false; + } + var attrA, attrB, al = 0, bl = 0; + for (var i = 0; attrA = thisAttrs[i++];) { + if (attrA.nodeName == 'style') { + if (attrA.specified) { + al++; + } + if (domUtils.isSameStyle(nodeA, nodeB)) { + continue; + } else { + return false; + } + } + if (ie) { + if (attrA.specified) { + al++; + attrB = otherAttrs.getNamedItem(attrA.nodeName); + } else { + continue; + } + } else { + attrB = nodeB.attributes[attrA.nodeName]; + } + if (!attrB.specified || attrA.nodeValue != attrB.nodeValue) { + return false; + } + } + // 有可能attrB的属性包含了attrA的属性之外还有自己的属性 + if (ie) { + for (i = 0; attrB = otherAttrs[i++];) { + if (attrB.specified) { + bl++; + } + } + if (al != bl) { + return false; + } + } + return true; + }, + + /** + * 判断节点nodeA与节点nodeB的元素的style属性是否一致 + * @method isSameStyle + * @param { Node } nodeA 需要比较的节点 + * @param { Node } nodeB 需要比较的节点 + * @return { Boolean } 两个节点是否具有相同的style属性值 + * @example + * ```html + * ssss + * bbbbb + * ssss + * bbbbb + * + * + * ``` + */ + isSameStyle:function (nodeA, nodeB) { + var styleA = nodeA.style.cssText.replace(/( ?; ?)/g, ';').replace(/( ?: ?)/g, ':'), + styleB = nodeB.style.cssText.replace(/( ?; ?)/g, ';').replace(/( ?: ?)/g, ':'); + if (browser.opera) { + styleA = nodeA.style; + styleB = nodeB.style; + if (styleA.length != styleB.length) + return false; + for (var p in styleA) { + if (/^(\d+|csstext)$/i.test(p)) { + continue; + } + if (styleA[p] != styleB[p]) { + return false; + } + } + return true; + } + if (!styleA || !styleB) { + return styleA == styleB; + } + styleA = styleA.split(';'); + styleB = styleB.split(';'); + if (styleA.length != styleB.length) { + return false; + } + for (var i = 0, ci; ci = styleA[i++];) { + if (utils.indexOf(styleB, ci) == -1) { + return false; + } + } + return true; + }, + /** + * 检查节点node是否为block元素 + * @method isBlockElm + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 是否是block元素节点 + * @warning 该方法的判断规则如下: 如果该元素原本是block元素, 则不论该元素当前的css样式是什么都会返回true; + * 否则,检测该元素的css样式, 如果该元素当前是block元素, 则返回true。 其余情况下都返回false。 + * @example + * ```html + * + * + *
    + * + * + * ``` + */ + isBlockElm:function (node) { + return node.nodeType == 1 && (dtd.$block[node.tagName] || styleBlock[domUtils.getComputedStyle(node, 'display')]) && !dtd.$nonChild[node.tagName]; + }, + /** + * 检测node节点是否为body节点 + * @method isBody + * @param { Element } node 需要检测的dom元素 + * @return { Boolean } 给定的元素是否是body元素 + * @example + * ```javascript + * //output: true + * console.log( UE.dom.domUtils.isBody( document.body ) ); + * ``` + */ + isBody:function (node) { + return node && node.nodeType == 1 && node.tagName.toLowerCase() == 'body'; + }, + /** + * 以node节点为分界,将该节点的指定祖先节点parent拆分成两个独立的节点, + * 拆分形成的两个节点之间是node节点 + * @method breakParent + * @param { Node } node 作为分界的节点对象 + * @param { Node } parent 该节点必须是node节点的祖先节点, 且是block节点。 + * @return { Node } 给定的node分界节点 + * @example + * ```javascript + * + * var node = document.createElement("span"), + * wrapNode = document.createElement( "div" ), + * parent = document.createElement("p"); + * + * parent.appendChild( node ); + * wrapNode.appendChild( parent ); + * + * //拆分前 + * //output:

    + * console.log( wrapNode.innerHTML ); + * + * + * UE.dom.domUtils.breakParent( node, parent ); + * //拆分后 + * //output:

    + * console.log( wrapNode.innerHTML ); + * + * ``` + */ + breakParent:function (node, parent) { + var tmpNode, + parentClone = node, + clone = node, + leftNodes, + rightNodes; + do { + parentClone = parentClone.parentNode; + if (leftNodes) { + tmpNode = parentClone.cloneNode(false); + tmpNode.appendChild(leftNodes); + leftNodes = tmpNode; + tmpNode = parentClone.cloneNode(false); + tmpNode.appendChild(rightNodes); + rightNodes = tmpNode; + } else { + leftNodes = parentClone.cloneNode(false); + rightNodes = leftNodes.cloneNode(false); + } + while (tmpNode = clone.previousSibling) { + leftNodes.insertBefore(tmpNode, leftNodes.firstChild); + } + while (tmpNode = clone.nextSibling) { + rightNodes.appendChild(tmpNode); + } + clone = parentClone; + } while (parent !== parentClone); + tmpNode = parent.parentNode; + tmpNode.insertBefore(leftNodes, parent); + tmpNode.insertBefore(rightNodes, parent); + tmpNode.insertBefore(node, rightNodes); + domUtils.remove(parent); + return node; + }, + /** + * 检查节点node是否是空inline节点 + * @method isEmptyInlineElement + * @param { Node } node 需要检测的节点对象 + * @return { Number } 如果给定的节点是空的inline节点, 则返回1, 否则返回0。 + * @example + * ```html + * => 1 + * => 1 + * => 1 + * xx => 0 + * ``` + */ + isEmptyInlineElement:function (node) { + if (node.nodeType != 1 || !dtd.$removeEmpty[ node.tagName ]) { + return 0; + } + node = node.firstChild; + while (node) { + //如果是创建的bookmark就跳过 + if (domUtils.isBookmarkNode(node)) { + return 0; + } + if (node.nodeType == 1 && !domUtils.isEmptyInlineElement(node) || + node.nodeType == 3 && !domUtils.isWhitespace(node) + ) { + return 0; + } + node = node.nextSibling; + } + return 1; + + }, + + /** + * 删除node节点下首尾两端的空白文本子节点 + * @method trimWhiteTextNode + * @param { Element } node 需要执行删除操作的元素对象 + * @example + * ```javascript + * var node = document.createElement("div"); + * + * node.appendChild( document.createTextNode( "" ) ); + * + * node.appendChild( document.createElement("div") ); + * + * node.appendChild( document.createTextNode( "" ) ); + * + * //3 + * console.log( node.childNodes.length ); + * + * UE.dom.domUtils.trimWhiteTextNode( node ); + * + * //1 + * console.log( node.childNodes.length ); + * ``` + */ + trimWhiteTextNode:function (node) { + function remove(dir) { + var child; + while ((child = node[dir]) && child.nodeType == 3 && domUtils.isWhitespace(child)) { + node.removeChild(child); + } + } + remove('firstChild'); + remove('lastChild'); + }, + + /** + * 合并node节点下相同的子节点 + * @name mergeChild + * @desc + * UE.dom.domUtils.mergeChild(node,tagName) //tagName要合并的子节点的标签 + * @example + *

    xxaaxx

    + * ==> UE.dom.domUtils.mergeChild(node,'span') + *

    xxaaxx

    + */ + mergeChild:function (node, tagName, attrs) { + var list = domUtils.getElementsByTagName(node, node.tagName.toLowerCase()); + for (var i = 0, ci; ci = list[i++];) { + if (!ci.parentNode || domUtils.isBookmarkNode(ci)) { + continue; + } + //span单独处理 + if (ci.tagName.toLowerCase() == 'span') { + if (node === ci.parentNode) { + domUtils.trimWhiteTextNode(node); + if (node.childNodes.length == 1) { + node.style.cssText = ci.style.cssText + ";" + node.style.cssText; + domUtils.remove(ci, true); + continue; + } + } + ci.style.cssText = node.style.cssText + ';' + ci.style.cssText; + if (attrs) { + var style = attrs.style; + if (style) { + style = style.split(';'); + for (var j = 0, s; s = style[j++];) { + ci.style[utils.cssStyleToDomStyle(s.split(':')[0])] = s.split(':')[1]; + } + } + } + if (domUtils.isSameStyle(ci, node)) { + domUtils.remove(ci, true); + } + continue; + } + if (domUtils.isSameElement(node, ci)) { + domUtils.remove(ci, true); + } + } + }, + + /** + * 原生方法getElementsByTagName的封装 + * @method getElementsByTagName + * @param { Node } node 目标节点对象 + * @param { String } tagName 需要查找的节点的tagName, 多个tagName以空格分割 + * @return { Array } 符合条件的节点集合 + */ + getElementsByTagName:function (node, name,filter) { + if(filter && utils.isString(filter)){ + var className = filter; + filter = function(node){return domUtils.hasClass(node,className)} + } + name = utils.trim(name).replace(/[ ]{2,}/g,' ').split(' '); + var arr = []; + for(var n = 0,ni;ni=name[n++];){ + var list = node.getElementsByTagName(ni); + for (var i = 0, ci; ci = list[i++];) { + if(!filter || filter(ci)) + arr.push(ci); + } + } + + return arr; + }, + /** + * 将节点node提取到父节点上 + * @method mergeToParent + * @param { Element } node 需要提取的元素对象 + * @example + * ```html + *
    + *
    + * + *
    + *
    + * + * + * ``` + */ + mergeToParent:function (node) { + var parent = node.parentNode; + while (parent && dtd.$removeEmpty[parent.tagName]) { + if (parent.tagName == node.tagName || parent.tagName == 'A') {//针对a标签单独处理 + domUtils.trimWhiteTextNode(parent); + //span需要特殊处理 不处理这样的情况 xxxxxxxxx + if (parent.tagName == 'SPAN' && !domUtils.isSameStyle(parent, node) + || (parent.tagName == 'A' && node.tagName == 'SPAN')) { + if (parent.childNodes.length > 1 || parent !== node.parentNode) { + node.style.cssText = parent.style.cssText + ";" + node.style.cssText; + parent = parent.parentNode; + continue; + } else { + parent.style.cssText += ";" + node.style.cssText; + //trace:952 a标签要保持下划线 + if (parent.tagName == 'A') { + parent.style.textDecoration = 'underline'; + } + } + } + if (parent.tagName != 'A') { + parent === node.parentNode && domUtils.remove(node, true); + break; + } + } + parent = parent.parentNode; + } + }, + /** + * 合并节点node的左右兄弟节点 + * @method mergeSibling + * @param { Element } node 需要合并的目标节点 + * @example + * ```html + * xxxxoooxxxx + * + * + * ``` + */ + + /** + * 合并节点node的左右兄弟节点, 可以根据给定的条件选择是否忽略合并左节点。 + * @method mergeSibling + * @param { Element } node 需要合并的目标节点 + * @param { Boolean } ignorePre 是否忽略合并左节点 + * @example + * ```html + * xxxxoooxxxx + * + * + * ``` + */ + + /** + * 合并节点node的左右兄弟节点,可以根据给定的条件选择是否忽略合并左右节点。 + * @method mergeSibling + * @param { Element } node 需要合并的目标节点 + * @param { Boolean } ignorePre 是否忽略合并左节点 + * @param { Boolean } ignoreNext 是否忽略合并右节点 + * @remind 如果同时忽略左右节点, 则该操作什么也不会做 + * @example + * ```html + * xxxxoooxxxx + * + * + * ``` + */ + mergeSibling:function (node, ignorePre, ignoreNext) { + function merge(rtl, start, node) { + var next; + if ((next = node[rtl]) && !domUtils.isBookmarkNode(next) && next.nodeType == 1 && domUtils.isSameElement(node, next)) { + while (next.firstChild) { + if (start == 'firstChild') { + node.insertBefore(next.lastChild, node.firstChild); + } else { + node.appendChild(next.firstChild); + } + } + domUtils.remove(next); + } + } + !ignorePre && merge('previousSibling', 'firstChild', node); + !ignoreNext && merge('nextSibling', 'lastChild', node); + }, + + /** + * 设置节点node及其子节点不会被选中 + * @method unSelectable + * @param { Element } node 需要执行操作的dom元素 + * @remind 执行该操作后的节点, 将不能被鼠标选中 + * @example + * ```javascript + * UE.dom.domUtils.unSelectable( document.body ); + * ``` + */ + unSelectable:ie && browser.ie9below || browser.opera ? function (node) { + //for ie9 + node.onselectstart = function () { + return false; + }; + node.onclick = node.onkeyup = node.onkeydown = function () { + return false; + }; + node.unselectable = 'on'; + node.setAttribute("unselectable", "on"); + for (var i = 0, ci; ci = node.all[i++];) { + switch (ci.tagName.toLowerCase()) { + case 'iframe' : + case 'textarea' : + case 'input' : + case 'select' : + break; + default : + ci.unselectable = 'on'; + node.setAttribute("unselectable", "on"); + } + } + } : function (node) { + node.style.MozUserSelect = + node.style.webkitUserSelect = + node.style.msUserSelect = + node.style.KhtmlUserSelect = 'none'; + }, + /** + * 删除节点node上的指定属性名称的属性 + * @method removeAttributes + * @param { Node } node 需要删除属性的节点对象 + * @param { String } attrNames 可以是空格隔开的多个属性名称,该操作将会依次删除相应的属性 + * @example + * ```html + *
    + * xxxxx + *
    + * + * + * ``` + */ + + /** + * 删除节点node上的指定属性名称的属性 + * @method removeAttributes + * @param { Node } node 需要删除属性的节点对象 + * @param { Array } attrNames 需要删除的属性名数组 + * @example + * ```html + *
    + * xxxxx + *
    + * + * + * ``` + */ + removeAttributes:function (node, attrNames) { + attrNames = utils.isArray(attrNames) ? attrNames : utils.trim(attrNames).replace(/[ ]{2,}/g,' ').split(' '); + for (var i = 0, ci; ci = attrNames[i++];) { + ci = attrFix[ci] || ci; + switch (ci) { + case 'className': + node[ci] = ''; + break; + case 'style': + node.style.cssText = ''; + var val = node.getAttributeNode('style'); + !browser.ie && val && node.removeAttributeNode(val); + } + node.removeAttribute(ci); + } + }, + /** + * 在doc下创建一个标签名为tag,属性为attrs的元素 + * @method createElement + * @param { DomDocument } doc 新创建的元素属于该document节点创建 + * @param { String } tagName 需要创建的元素的标签名 + * @param { Object } attrs 新创建的元素的属性key-value集合 + * @return { Element } 新创建的元素对象 + * @example + * ```javascript + * var ele = UE.dom.domUtils.createElement( document, 'div', { + * id: 'test' + * } ); + * + * //output: DIV + * console.log( ele.tagName ); + * + * //output: test + * console.log( ele.id ); + * + * ``` + */ + createElement:function (doc, tag, attrs) { + return domUtils.setAttributes(doc.createElement(tag), attrs) + }, + /** + * 为节点node添加属性attrs,attrs为属性键值对 + * @method setAttributes + * @param { Element } node 需要设置属性的元素对象 + * @param { Object } attrs 需要设置的属性名-值对 + * @return { Element } 设置属性的元素对象 + * @example + * ```html + * + * + * + * + */ + setAttributes:function (node, attrs) { + for (var attr in attrs) { + if(attrs.hasOwnProperty(attr)){ + var value = attrs[attr]; + switch (attr) { + case 'class': + //ie下要这样赋值,setAttribute不起作用 + node.className = value; + break; + case 'style' : + node.style.cssText = node.style.cssText + ";" + value; + break; + case 'innerHTML': + node[attr] = value; + break; + case 'value': + node.value = value; + break; + default: + node.setAttribute(attrFix[attr] || attr, value); + } + } + } + return node; + }, + + /** + * 获取元素element经过计算后的样式值 + * @method getComputedStyle + * @param { Element } element 需要获取样式的元素对象 + * @param { String } styleName 需要获取的样式名 + * @return { String } 获取到的样式值 + * @example + * ```html + * + * + * + * + * + * ``` + */ + getComputedStyle:function (element, styleName) { + //一下的属性单独处理 + var pros = 'width height top left'; + + if(pros.indexOf(styleName) > -1){ + return element['offset' + styleName.replace(/^\w/,function(s){return s.toUpperCase()})] + 'px'; + } + //忽略文本节点 + if (element.nodeType == 3) { + element = element.parentNode; + } + //ie下font-size若body下定义了font-size,则从currentStyle里会取到这个font-size. 取不到实际值,故此修改. + if (browser.ie && browser.version < 9 && styleName == 'font-size' && !element.style.fontSize && + !dtd.$empty[element.tagName] && !dtd.$nonChild[element.tagName]) { + var span = element.ownerDocument.createElement('span'); + span.style.cssText = 'padding:0;border:0;font-family:simsun;'; + span.innerHTML = '.'; + element.appendChild(span); + var result = span.offsetHeight; + element.removeChild(span); + span = null; + return result + 'px'; + } + try { + var value = domUtils.getStyle(element, styleName) || + (window.getComputedStyle ? domUtils.getWindow(element).getComputedStyle(element, '').getPropertyValue(styleName) : + ( element.currentStyle || element.style )[utils.cssStyleToDomStyle(styleName)]); + + } catch (e) { + return ""; + } + return utils.transUnitToPx(utils.fixColor(styleName, value)); + }, + /** + * 删除元素element指定的className + * @method removeClasses + * @param { Element } ele 需要删除class的元素节点 + * @param { String } classNames 需要删除的className, 多个className之间以空格分开 + * @example + * ```html + * xxx + * + * + * ``` + */ + + /** + * 删除元素element指定的className + * @method removeClasses + * @param { Element } ele 需要删除class的元素节点 + * @param { Array } classNames 需要删除的className数组 + * @example + * ```html + * xxx + * + * + * ``` + */ + removeClasses:function (elm, classNames) { + classNames = utils.isArray(classNames) ? classNames : + utils.trim(classNames).replace(/[ ]{2,}/g,' ').split(' '); + for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){ + cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'') + } + cls = utils.trim(cls).replace(/[ ]{2,}/g,' '); + if(cls){ + elm.className = cls; + }else{ + domUtils.removeAttributes(elm,['class']); + } + }, + /** + * 给元素element添加className + * @method addClass + * @param { Node } ele 需要增加className的元素 + * @param { String } classNames 需要添加的className, 多个className之间以空格分割 + * @remind 相同的类名不会被重复添加 + * @example + * ```html + * + * + * + * ``` + */ + + /** + * 判断元素element是否包含给定的样式类名className + * @method hasClass + * @param { Node } ele 需要检测的元素 + * @param { Array } classNames 需要检测的className数组 + * @return { Boolean } 元素是否包含所有给定的className + * @example + * ```html + * + * + * + * ``` + */ + hasClass:function (element, className) { + if(utils.isRegExp(className)){ + return className.test(element.className) + } + className = utils.trim(className).replace(/[ ]{2,}/g,' ').split(' '); + for(var i = 0,ci,cls = element.className;ci=className[i++];){ + if(!new RegExp('\\b' + ci + '\\b','i').test(cls)){ + return false; + } + } + return i - 1 == className.length; + }, + + /** + * 阻止事件默认行为 + * @method preventDefault + * @param { Event } evt 需要阻止默认行为的事件对象 + * @example + * ```javascript + * UE.dom.domUtils.preventDefault( evt ); + * ``` + */ + preventDefault:function (evt) { + evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false); + }, + /** + * 删除元素element指定的样式 + * @method removeStyle + * @param { Element } element 需要删除样式的元素 + * @param { String } styleName 需要删除的样式名 + * @example + * ```html + * + * + * + * ``` + */ + removeStyle:function (element, name) { + if(browser.ie ){ + //针对color先单独处理一下 + if(name == 'color'){ + name = '(^|;)' + name; + } + element.style.cssText = element.style.cssText.replace(new RegExp(name + '[^:]*:[^;]+;?','ig'),'') + }else{ + if (element.style.removeProperty) { + element.style.removeProperty (name); + }else { + element.style.removeAttribute (utils.cssStyleToDomStyle(name)); + } + } + + + if (!element.style.cssText) { + domUtils.removeAttributes(element, ['style']); + } + }, + /** + * 获取元素element的style属性的指定值 + * @method getStyle + * @param { Element } element 需要获取属性值的元素 + * @param { String } styleName 需要获取的style的名称 + * @warning 该方法仅获取元素style属性中所标明的值 + * @return { String } 该元素包含指定的style属性值 + * @example + * ```html + *
    + * + * + * ``` + */ + getStyle:function (element, name) { + var value = element.style[ utils.cssStyleToDomStyle(name) ]; + return utils.fixColor(name, value); + }, + /** + * 为元素element设置样式属性值 + * @method setStyle + * @param { Element } element 需要设置样式的元素 + * @param { String } styleName 样式名 + * @param { String } styleValue 样式值 + * @example + * ```html + *
    + * + * + * ``` + */ + setStyle:function (element, name, value) { + element.style[utils.cssStyleToDomStyle(name)] = value; + if(!utils.trim(element.style.cssText)){ + this.removeAttributes(element,'style') + } + }, + /** + * 为元素element设置多个样式属性值 + * @method setStyles + * @param { Element } element 需要设置样式的元素 + * @param { Object } styles 样式名值对 + * @example + * ```html + *
    + * + * + * ``` + */ + setStyles:function (element, styles) { + for (var name in styles) { + if (styles.hasOwnProperty(name)) { + domUtils.setStyle(element, name, styles[name]); + } + } + }, + /** + * 删除_moz_dirty属性 + * @private + * @method removeDirtyAttr + */ + removeDirtyAttr:function (node) { + for (var i = 0, ci, nodes = node.getElementsByTagName('*'); ci = nodes[i++];) { + ci.removeAttribute('_moz_dirty'); + } + node.removeAttribute('_moz_dirty'); + }, + /** + * 获取子节点的数量 + * @method getChildCount + * @param { Element } node 需要检测的元素 + * @return { Number } 给定的node元素的子节点数量 + * @example + * ```html + *
    + * + *
    + * + * + * ``` + */ + + /** + * 根据给定的过滤规则, 获取符合条件的子节点的数量 + * @method getChildCount + * @param { Element } node 需要检测的元素 + * @param { Function } fn 过滤器, 要求对符合条件的子节点返回true, 反之则要求返回false + * @return { Number } 符合过滤条件的node元素的子节点数量 + * @example + * ```html + *
    + * + *
    + * + * + * ``` + */ + getChildCount:function (node, fn) { + var count = 0, first = node.firstChild; + fn = fn || function () { + return 1; + }; + while (first) { + if (fn(first)) { + count++; + } + first = first.nextSibling; + } + return count; + }, + + /** + * 判断给定节点是否为空节点 + * @method isEmptyNode + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 节点是否为空 + * @example + * ```javascript + * UE.dom.domUtils.isEmptyNode( document.body ); + * ``` + */ + isEmptyNode:function (node) { + return !node.firstChild || domUtils.getChildCount(node, function (node) { + return !domUtils.isBr(node) && !domUtils.isBookmarkNode(node) && !domUtils.isWhitespace(node) + }) == 0 + }, + clearSelectedArr:function (nodes) { + var node; + while (node = nodes.pop()) { + domUtils.removeAttributes(node, ['class']); + } + }, + /** + * 将显示区域滚动到指定节点的位置 + * @method scrollToView + * @param {Node} node 节点 + * @param {window} win window对象 + * @param {Number} offsetTop 距离上方的偏移量 + */ + scrollToView:function (node, win, offsetTop) { + var getViewPaneSize = function () { + var doc = win.document, + mode = doc.compatMode == 'CSS1Compat'; + return { + width:( mode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0, + height:( mode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0 + }; + }, + getScrollPosition = function (win) { + if ('pageXOffset' in win) { + return { + x:win.pageXOffset || 0, + y:win.pageYOffset || 0 + }; + } + else { + var doc = win.document; + return { + x:doc.documentElement.scrollLeft || doc.body.scrollLeft || 0, + y:doc.documentElement.scrollTop || doc.body.scrollTop || 0 + }; + } + }; + var winHeight = getViewPaneSize().height, offset = winHeight * -1 + offsetTop; + offset += (node.offsetHeight || 0); + var elementPosition = domUtils.getXY(node); + offset += elementPosition.y; + var currentScroll = getScrollPosition(win).y; + // offset += 50; + if (offset > currentScroll || offset < currentScroll - winHeight) { + win.scrollTo(0, offset + (offset < 0 ? -20 : 20)); + } + }, + /** + * 判断给定节点是否为br + * @method isBr + * @param { Node } node 需要判断的节点对象 + * @return { Boolean } 给定的节点是否是br节点 + */ + isBr:function (node) { + return node.nodeType == 1 && node.tagName == 'BR'; + }, + /** + * 判断给定的节点是否是一个“填充”节点 + * @private + * @method isFillChar + * @param { Node } node 需要判断的节点 + * @param { Boolean } isInStart 是否从节点内容的开始位置匹配 + * @returns { Boolean } 节点是否是填充节点 + */ + isFillChar:function (node,isInStart) { + if(node.nodeType != 3) + return false; + var text = node.nodeValue; + if(isInStart){ + return new RegExp('^' + domUtils.fillChar).test(text) + } + return !text.replace(new RegExp(domUtils.fillChar,'g'), '').length + }, + isStartInblock:function (range) { + var tmpRange = range.cloneRange(), + flag = 0, + start = tmpRange.startContainer, + tmp; + if(start.nodeType == 1 && start.childNodes[tmpRange.startOffset]){ + start = start.childNodes[tmpRange.startOffset]; + var pre = start.previousSibling; + while(pre && domUtils.isFillChar(pre)){ + start = pre; + pre = pre.previousSibling; + } + } + if(this.isFillChar(start,true) && tmpRange.startOffset == 1){ + tmpRange.setStartBefore(start); + start = tmpRange.startContainer; + } + + while (start && domUtils.isFillChar(start)) { + tmp = start; + start = start.previousSibling + } + if (tmp) { + tmpRange.setStartBefore(tmp); + start = tmpRange.startContainer; + } + if (start.nodeType == 1 && domUtils.isEmptyNode(start) && tmpRange.startOffset == 1) { + tmpRange.setStart(start, 0).collapse(true); + } + while (!tmpRange.startOffset) { + start = tmpRange.startContainer; + if (domUtils.isBlockElm(start) || domUtils.isBody(start)) { + flag = 1; + break; + } + var pre = tmpRange.startContainer.previousSibling, + tmpNode; + if (!pre) { + tmpRange.setStartBefore(tmpRange.startContainer); + } else { + while (pre && domUtils.isFillChar(pre)) { + tmpNode = pre; + pre = pre.previousSibling; + } + if (tmpNode) { + tmpRange.setStartBefore(tmpNode); + } else { + tmpRange.setStartBefore(tmpRange.startContainer); + } + } + } + return flag && !domUtils.isBody(tmpRange.startContainer) ? 1 : 0; + }, + + /** + * 判断给定的元素是否是一个空元素 + * @method isEmptyBlock + * @param { Element } node 需要判断的元素 + * @return { Boolean } 是否是空元素 + * @example + * ```html + *
    + * + * + * ``` + */ + + /** + * 根据指定的判断规则判断给定的元素是否是一个空元素 + * @method isEmptyBlock + * @param { Element } node 需要判断的元素 + * @param { RegExp } reg 对内容执行判断的正则表达式对象 + * @return { Boolean } 是否是空元素 + */ + isEmptyBlock:function (node,reg) { + if(node.nodeType != 1) + return 0; + reg = reg || new RegExp('[ \xa0\t\r\n' + domUtils.fillChar + ']', 'g'); + + if (node[browser.ie ? 'innerText' : 'textContent'].replace(reg, '').length > 0) { + return 0; + } + for (var n in dtd.$isNotEmpty) { + if (node.getElementsByTagName(n).length) { + return 0; + } + } + return 1; + }, + + /** + * 移动元素使得该元素的位置移动指定的偏移量的距离 + * @method setViewportOffset + * @param { Element } element 需要设置偏移量的元素 + * @param { Object } offset 偏移量, 形如{ left: 100, top: 50 }的一个键值对, 表示该元素将在 + * 现有的位置上向水平方向偏移offset.left的距离, 在竖直方向上偏移 + * offset.top的距离 + * @example + * ```html + *
    + * + * + * ``` + */ + setViewportOffset:function (element, offset) { + var left = parseInt(element.style.left) | 0; + var top = parseInt(element.style.top) | 0; + var rect = element.getBoundingClientRect(); + var offsetLeft = offset.left - rect.left; + var offsetTop = offset.top - rect.top; + if (offsetLeft) { + element.style.left = left + offsetLeft + 'px'; + } + if (offsetTop) { + element.style.top = top + offsetTop + 'px'; + } + }, + + /** + * 用“填充字符”填充节点 + * @method fillNode + * @private + * @param { DomDocument } doc 填充的节点所在的docment对象 + * @param { Node } node 需要填充的节点对象 + * @example + * ```html + *
    + * + * + * ``` + */ + fillNode:function (doc, node) { + var tmpNode = browser.ie ? doc.createTextNode(domUtils.fillChar) : doc.createElement('br'); + node.innerHTML = ''; + node.appendChild(tmpNode); + }, + + /** + * 把节点src的所有子节点追加到另一个节点tag上去 + * @method moveChild + * @param { Node } src 源节点, 该节点下的所有子节点将被移除 + * @param { Node } tag 目标节点, 从源节点移除的子节点将被追加到该节点下 + * @example + * ```html + *
    + * + *
    + *
    + *
    + *
    + * + * + * ``` + */ + + /** + * 把节点src的所有子节点移动到另一个节点tag上去, 可以通过dir参数控制附加的行为是“追加”还是“插入顶部” + * @method moveChild + * @param { Node } src 源节点, 该节点下的所有子节点将被移除 + * @param { Node } tag 目标节点, 从源节点移除的子节点将被附加到该节点下 + * @param { Boolean } dir 附加方式, 如果为true, 则附加进去的节点将被放到目标节点的顶部, 反之,则放到末尾 + * @example + * ```html + *
    + * + *
    + *
    + *
    + *
    + * + * + * ``` + */ + moveChild:function (src, tag, dir) { + while (src.firstChild) { + if (dir && tag.firstChild) { + tag.insertBefore(src.lastChild, tag.firstChild); + } else { + tag.appendChild(src.firstChild); + } + } + }, + + /** + * 判断节点的标签上是否不存在任何属性 + * @method hasNoAttributes + * @private + * @param { Node } node 需要检测的节点对象 + * @return { Boolean } 节点是否不包含任何属性 + * @example + * ```html + *
    xxxx
    + * + * + * ``` + */ + hasNoAttributes:function (node) { + return browser.ie ? /^<\w+\s*?>/.test(node.outerHTML) : node.attributes.length == 0; + }, + + /** + * 检测节点是否是UEditor所使用的辅助节点 + * @method isCustomeNode + * @private + * @param { Node } node 需要检测的节点 + * @remind 辅助节点是指编辑器要完成工作临时添加的节点, 在输出的时候将会从编辑器内移除, 不会影响最终的结果。 + * @return { Boolean } 给定的节点是否是一个辅助节点 + */ + isCustomeNode:function (node) { + return node.nodeType == 1 && node.getAttribute('_ue_custom_node_'); + }, + + /** + * 检测节点的标签是否是给定的标签 + * @method isTagNode + * @param { Node } node 需要检测的节点对象 + * @param { String } tagName 标签 + * @return { Boolean } 节点的标签是否是给定的标签 + * @example + * ```html + *
    + * + * + * ``` + */ + isTagNode:function (node, tagNames) { + return node.nodeType == 1 && new RegExp('\\b' + node.tagName + '\\b','i').test(tagNames) + }, + + /** + * 给定一个节点数组,在通过指定的过滤器过滤后, 获取其中满足过滤条件的第一个节点 + * @method filterNodeList + * @param { Array } nodeList 需要过滤的节点数组 + * @param { Function } fn 过滤器, 对符合条件的节点, 执行结果返回true, 反之则返回false + * @return { Node | NULL } 如果找到符合过滤条件的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var divNodes = document.getElementsByTagName("div"); + * divNodes = [].slice.call( divNodes, 0 ); + * + * //output: null + * console.log( UE.dom.domUtils.filterNodeList( divNodes, function ( node ) { + * return node.tagName.toLowerCase() !== 'div'; + * } ) ); + * ``` + */ + + /** + * 给定一个节点数组nodeList和一组标签名tagNames, 获取其中能够匹配标签名的节点集合中的第一个节点 + * @method filterNodeList + * @param { Array } nodeList 需要过滤的节点数组 + * @param { String } tagNames 需要匹配的标签名, 多个标签名之间用空格分割 + * @return { Node | NULL } 如果找到标签名匹配的节点, 则返回该节点, 否则返回NULL + * @example + * ```javascript + * var divNodes = document.getElementsByTagName("div"); + * divNodes = [].slice.call( divNodes, 0 ); + * + * //output: null + * console.log( UE.dom.domUtils.filterNodeList( divNodes, 'a span' ) ); + * ``` + */ + + /** + * 给定一个节点数组,在通过指定的过滤器过滤后, 如果参数forAll为true, 则会返回所有满足过滤 + * 条件的节点集合, 否则, 返回满足条件的节点集合中的第一个节点 + * @method filterNodeList + * @param { Array } nodeList 需要过滤的节点数组 + * @param { Function } fn 过滤器, 对符合条件的节点, 执行结果返回true, 反之则返回false + * @param { Boolean } forAll 是否返回整个节点数组, 如果该参数为false, 则返回节点集合中的第一个节点 + * @return { Array | Node | NULL } 如果找到符合过滤条件的节点, 则根据参数forAll的值决定返回满足 + * 过滤条件的节点数组或第一个节点, 否则返回NULL + * @example + * ```javascript + * var divNodes = document.getElementsByTagName("div"); + * divNodes = [].slice.call( divNodes, 0 ); + * + * //output: 3(假定有3个div) + * console.log( divNodes.length ); + * + * var nodes = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) { + * return node.tagName.toLowerCase() === 'div'; + * }, true ); + * + * //output: 3 + * console.log( nodes.length ); + * + * var node = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) { + * return node.tagName.toLowerCase() === 'div'; + * }, false ); + * + * //output: div + * console.log( node.nodeName ); + * ``` + */ + filterNodeList : function(nodelist,filter,forAll){ + var results = []; + if(!utils .isFunction(filter)){ + var str = filter; + filter = function(n){ + return utils.indexOf(utils.isArray(str) ? str:str.split(' '), n.tagName.toLowerCase()) != -1 + }; + } + utils.each(nodelist,function(n){ + filter(n) && results.push(n) + }); + return results.length == 0 ? null : results.length == 1 || !forAll ? results[0] : results + }, + + /** + * 查询给定的range选区是否在给定的node节点内,且在该节点的最末尾 + * @method isInNodeEndBoundary + * @param { UE.dom.Range } rng 需要判断的range对象, 该对象的startContainer不能为NULL + * @param node 需要检测的节点对象 + * @return { Number } 如果给定的选取range对象是在node内部的最末端, 则返回1, 否则返回0 + */ + isInNodeEndBoundary : function (rng,node){ + var start = rng.startContainer; + if(start.nodeType == 3 && rng.startOffset != start.nodeValue.length){ + return 0; + } + if(start.nodeType == 1 && rng.startOffset != start.childNodes.length){ + return 0; + } + while(start !== node){ + if(start.nextSibling){ + return 0 + }; + start = start.parentNode; + } + return 1; + }, + isBoundaryNode : function (node,dir){ + var tmp; + while(!domUtils.isBody(node)){ + tmp = node; + node = node.parentNode; + if(tmp !== node[dir]){ + return false; + } + } + return true; + }, + fillHtml : browser.ie11below ? ' ' : '
    ' +}; +var fillCharReg = new RegExp(domUtils.fillChar, 'g'); + +// core/Range.js +/** + * Range封装 + * @file + * @module UE.dom + * @class Range + * @since 1.2.6.1 + */ + +/** + * dom操作封装 + * @unfile + * @module UE.dom + */ + +/** + * Range实现类,本类是UEditor底层核心类,封装不同浏览器之间的Range操作。 + * @unfile + * @module UE.dom + * @class Range + */ + + +(function () { + var guid = 0, + fillChar = domUtils.fillChar, + fillData; + + /** + * 更新range的collapse状态 + * @param {Range} range range对象 + */ + function updateCollapse(range) { + range.collapsed = + range.startContainer && range.endContainer && + range.startContainer === range.endContainer && + range.startOffset == range.endOffset; + } + + function selectOneNode(rng){ + return !rng.collapsed && rng.startContainer.nodeType == 1 && rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset == 1 + } + function setEndPoint(toStart, node, offset, range) { + //如果node是自闭合标签要处理 + if (node.nodeType == 1 && (dtd.$empty[node.tagName] || dtd.$nonChild[node.tagName])) { + offset = domUtils.getNodeIndex(node) + (toStart ? 0 : 1); + node = node.parentNode; + } + if (toStart) { + range.startContainer = node; + range.startOffset = offset; + if (!range.endContainer) { + range.collapse(true); + } + } else { + range.endContainer = node; + range.endOffset = offset; + if (!range.startContainer) { + range.collapse(false); + } + } + updateCollapse(range); + return range; + } + + function execContentsAction(range, action) { + //调整边界 + //range.includeBookmark(); + var start = range.startContainer, + end = range.endContainer, + startOffset = range.startOffset, + endOffset = range.endOffset, + doc = range.document, + frag = doc.createDocumentFragment(), + tmpStart, tmpEnd; + if (start.nodeType == 1) { + start = start.childNodes[startOffset] || (tmpStart = start.appendChild(doc.createTextNode(''))); + } + if (end.nodeType == 1) { + end = end.childNodes[endOffset] || (tmpEnd = end.appendChild(doc.createTextNode(''))); + } + if (start === end && start.nodeType == 3) { + frag.appendChild(doc.createTextNode(start.substringData(startOffset, endOffset - startOffset))); + //is not clone + if (action) { + start.deleteData(startOffset, endOffset - startOffset); + range.collapse(true); + } + return frag; + } + var current, currentLevel, clone = frag, + startParents = domUtils.findParents(start, true), endParents = domUtils.findParents(end, true); + for (var i = 0; startParents[i] == endParents[i];) { + i++; + } + for (var j = i, si; si = startParents[j]; j++) { + current = si.nextSibling; + if (si == start) { + if (!tmpStart) { + if (range.startContainer.nodeType == 3) { + clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset))); + //is not clone + if (action) { + start.deleteData(startOffset, start.nodeValue.length - startOffset); + } + } else { + clone.appendChild(!action ? start.cloneNode(true) : start); + } + } + } else { + currentLevel = si.cloneNode(false); + clone.appendChild(currentLevel); + } + while (current) { + if (current === end || current === endParents[j]) { + break; + } + si = current.nextSibling; + clone.appendChild(!action ? current.cloneNode(true) : current); + current = si; + } + clone = currentLevel; + } + clone = frag; + if (!startParents[i]) { + clone.appendChild(startParents[i - 1].cloneNode(false)); + clone = clone.firstChild; + } + for (var j = i, ei; ei = endParents[j]; j++) { + current = ei.previousSibling; + if (ei == end) { + if (!tmpEnd && range.endContainer.nodeType == 3) { + clone.appendChild(doc.createTextNode(end.substringData(0, endOffset))); + //is not clone + if (action) { + end.deleteData(0, endOffset); + } + } + } else { + currentLevel = ei.cloneNode(false); + clone.appendChild(currentLevel); + } + //如果两端同级,右边第一次已经被开始做了 + if (j != i || !startParents[i]) { + while (current) { + if (current === start) { + break; + } + ei = current.previousSibling; + clone.insertBefore(!action ? current.cloneNode(true) : current, clone.firstChild); + current = ei; + } + } + clone = currentLevel; + } + if (action) { + range.setStartBefore(!endParents[i] ? endParents[i - 1] : !startParents[i] ? startParents[i - 1] : endParents[i]).collapse(true); + } + tmpStart && domUtils.remove(tmpStart); + tmpEnd && domUtils.remove(tmpEnd); + return frag; + } + + /** + * 创建一个跟document绑定的空的Range实例 + * @constructor + * @param { Document } document 新建的选区所属的文档对象 + */ + + /** + * @property { Node } startContainer 当前Range的开始边界的容器节点, 可以是一个元素节点或者是文本节点 + */ + + /** + * @property { Node } startOffset 当前Range的开始边界容器节点的偏移量, 如果是元素节点, + * 该值就是childNodes中的第几个节点, 如果是文本节点就是文本内容的第几个字符 + */ + + /** + * @property { Node } endContainer 当前Range的结束边界的容器节点, 可以是一个元素节点或者是文本节点 + */ + + /** + * @property { Node } endOffset 当前Range的结束边界容器节点的偏移量, 如果是元素节点, + * 该值就是childNodes中的第几个节点, 如果是文本节点就是文本内容的第几个字符 + */ + + /** + * @property { Boolean } collapsed 当前Range是否闭合 + * @default true + * @remind Range是闭合的时候, startContainer === endContainer && startOffset === endOffset + */ + + /** + * @property { Document } document 当前Range所属的Document对象 + * @remind 不同range的的document属性可以是不同的 + */ + var Range = dom.Range = function (document) { + var me = this; + me.startContainer = + me.startOffset = + me.endContainer = + me.endOffset = null; + me.document = document; + me.collapsed = true; + }; + + /** + * 删除fillData + * @param doc + * @param excludeNode + */ + function removeFillData(doc, excludeNode) { + try { + if (fillData && domUtils.inDoc(fillData, doc)) { + if (!fillData.nodeValue.replace(fillCharReg, '').length) { + var tmpNode = fillData.parentNode; + domUtils.remove(fillData); + while (tmpNode && domUtils.isEmptyInlineElement(tmpNode) && + //safari的contains有bug + (browser.safari ? !(domUtils.getPosition(tmpNode,excludeNode) & domUtils.POSITION_CONTAINS) : !tmpNode.contains(excludeNode)) + ) { + fillData = tmpNode.parentNode; + domUtils.remove(tmpNode); + tmpNode = fillData; + } + } else { + fillData.nodeValue = fillData.nodeValue.replace(fillCharReg, ''); + } + } + } catch (e) { + } + } + + /** + * @param node + * @param dir + */ + function mergeSibling(node, dir) { + var tmpNode; + node = node[dir]; + while (node && domUtils.isFillChar(node)) { + tmpNode = node[dir]; + domUtils.remove(node); + node = tmpNode; + } + } + + Range.prototype = { + + /** + * 克隆选区的内容到一个DocumentFragment里 + * @method cloneContents + * @return { DocumentFragment | NULL } 如果选区是闭合的将返回null, 否则, 返回包含所clone内容的DocumentFragment元素 + * @example + * ```html + * + * + * xx[xxx]x + * + * + * + * ``` + */ + cloneContents:function () { + return this.collapsed ? null : execContentsAction(this, 0); + }, + + /** + * 删除当前选区范围中的所有内容 + * @method deleteContents + * @remind 执行完该操作后, 当前Range对象变成了闭合状态 + * @return { UE.dom.Range } 当前操作的Range对象 + * @example + * ```html + * + * + * xx[xxx]x + * + * + * + * ``` + */ + deleteContents:function () { + var txt; + if (!this.collapsed) { + execContentsAction(this, 1); + } + if (browser.webkit) { + txt = this.startContainer; + if (txt.nodeType == 3 && !txt.nodeValue.length) { + this.setStartBefore(txt).collapse(true); + domUtils.remove(txt); + } + } + return this; + }, + + /** + * 将当前选区的内容提取到一个DocumentFragment里 + * @method extractContents + * @remind 执行该操作后, 选区将变成闭合状态 + * @warning 执行该操作后, 原来选区所选中的内容将从dom树上剥离出来 + * @return { DocumentFragment } 返回包含所提取内容的DocumentFragment对象 + * @example + * ```html + * + * + * xx[xxx]x + * + * + * + */ + extractContents:function () { + return this.collapsed ? null : execContentsAction(this, 2); + }, + + /** + * 设置Range的开始容器节点和偏移量 + * @method setStart + * @remind 如果给定的节点是元素节点,那么offset指的是其子元素中索引为offset的元素, + * 如果是文本节点,那么offset指的是其文本内容的第offset个字符 + * @remind 如果提供的容器节点是一个不能包含子元素的节点, 则该选区的开始容器将被设置 + * 为该节点的父节点, 此时, 其距离开始容器的偏移量也变成了该节点在其父节点 + * 中的索引 + * @param { Node } node 将被设为当前选区开始边界容器的节点对象 + * @param { int } offset 选区的开始位置偏移量 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxxxxxxxxxx[xxx] + * + * + * ``` + * @example + * ```html + * + * xxx[xx]x + * + * + * ``` + */ + setStart:function (node, offset) { + return setEndPoint(true, node, offset, this); + }, + + /** + * 设置Range的结束容器和偏移量 + * @method setEnd + * @param { Node } node 作为当前选区结束边界容器的节点对象 + * @param { int } offset 结束边界的偏移量 + * @see UE.dom.Range:setStart(Node,int) + * @return { UE.dom.Range } 当前range对象 + */ + setEnd:function (node, offset) { + return setEndPoint(false, node, offset, this); + }, + + /** + * 将Range开始位置设置到node节点之后 + * @method setStartAfter + * @remind 该操作将会把给定节点的父节点作为range的开始容器, 且偏移量是该节点在其父节点中的位置索引+1 + * @param { Node } node 选区的开始边界将紧接着该节点之后 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxxxx[xxxx] + * + * + * ``` + */ + setStartAfter:function (node) { + return this.setStart(node.parentNode, domUtils.getNodeIndex(node) + 1); + }, + + /** + * 将Range开始位置设置到node节点之前 + * @method setStartBefore + * @remind 该操作将会把给定节点的父节点作为range的开始容器, 且偏移量是该节点在其父节点中的位置索引 + * @param { Node } node 新的选区开始位置在该节点之前 + * @see UE.dom.Range:setStartAfter(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setStartBefore:function (node) { + return this.setStart(node.parentNode, domUtils.getNodeIndex(node)); + }, + + /** + * 将Range结束位置设置到node节点之后 + * @method setEndAfter + * @remind 该操作将会把给定节点的父节点作为range的结束容器, 且偏移量是该节点在其父节点中的位置索引+1 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setStartAfter(Node) + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * [xxxxxxx]xxxx + * + * + * ``` + */ + setEndAfter:function (node) { + return this.setEnd(node.parentNode, domUtils.getNodeIndex(node) + 1); + }, + + /** + * 将Range结束位置设置到node节点之前 + * @method setEndBefore + * @remind 该操作将会把给定节点的父节点作为range的结束容器, 且偏移量是该节点在其父节点中的位置索引 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setEndAfter(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setEndBefore:function (node) { + return this.setEnd(node.parentNode, domUtils.getNodeIndex(node)); + }, + + /** + * 设置Range的开始位置到node节点内的第一个子节点之前 + * @method setStartAtFirst + * @remind 选区的开始容器将变成给定的节点, 且偏移量为0 + * @remind 如果给定的节点是元素节点, 则该节点必须是允许包含子节点的元素。 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setStartBefore(Node) + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + setStartAtFirst:function (node) { + return this.setStart(node, 0); + }, + + /** + * 设置Range的开始位置到node节点内的最后一个节点之后 + * @method setStartAtLast + * @remind 选区的开始容器将变成给定的节点, 且偏移量为该节点的子节点数 + * @remind 如果给定的节点是元素节点, 则该节点必须是允许包含子节点的元素。 + * @param { Node } node 目标节点 + * @see UE.dom.Range:setStartAtFirst(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setStartAtLast:function (node) { + return this.setStart(node, node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length); + }, + + /** + * 设置Range的结束位置到node节点内的第一个节点之前 + * @method setEndAtFirst + * @param { Node } node 目标节点 + * @remind 选区的结束容器将变成给定的节点, 且偏移量为0 + * @remind node必须是一个元素节点, 且必须是允许包含子节点的元素。 + * @see UE.dom.Range:setStartAtFirst(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setEndAtFirst:function (node) { + return this.setEnd(node, 0); + }, + + /** + * 设置Range的结束位置到node节点内的最后一个节点之后 + * @method setEndAtLast + * @param { Node } node 目标节点 + * @remind 选区的结束容器将变成给定的节点, 且偏移量为该节点的子节点数量 + * @remind node必须是一个元素节点, 且必须是允许包含子节点的元素。 + * @see UE.dom.Range:setStartAtFirst(Node) + * @return { UE.dom.Range } 当前range对象 + */ + setEndAtLast:function (node) { + return this.setEnd(node, node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length); + }, + + /** + * 选中给定节点 + * @method selectNode + * @remind 此时, 选区的开始容器和结束容器都是该节点的父节点, 其startOffset是该节点在父节点中的位置索引, + * 而endOffset为startOffset+1 + * @param { Node } node 需要选中的节点 + * @return { UE.dom.Range } 当前range对象,此时的range仅包含当前给定的节点对象 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + selectNode:function (node) { + return this.setStartBefore(node).setEndAfter(node); + }, + + /** + * 选中给定节点内部的所有节点 + * @method selectNodeContents + * @remind 此时, 选区的开始容器和结束容器都是该节点, 其startOffset为0, + * 而endOffset是该节点的子节点数。 + * @param { Node } node 目标节点, 当前range将包含该节点内的所有节点 + * @return { UE.dom.Range } 当前range对象, 此时range仅包含给定节点的所有子节点 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + selectNodeContents:function (node) { + return this.setStart(node, 0).setEndAtLast(node); + }, + + /** + * clone当前Range对象 + * @method cloneRange + * @remind 返回的range是一个全新的range对象, 其内部所有属性与当前被clone的range相同。 + * @return { UE.dom.Range } 当前range对象的一个副本 + */ + cloneRange:function () { + var me = this; + return new Range(me.document).setStart(me.startContainer, me.startOffset).setEnd(me.endContainer, me.endOffset); + + }, + + /** + * 向当前选区的结束处闭合选区 + * @method collapse + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + + /** + * 闭合当前选区,根据给定的toStart参数项决定是向当前选区开始处闭合还是向结束处闭合, + * 如果toStart的值为true,则向开始位置闭合, 反之,向结束位置闭合。 + * @method collapse + * @param { Boolean } toStart 是否向选区开始处闭合 + * @return { UE.dom.Range } 当前range对象,此时range对象处于闭合状态 + * @see UE.dom.Range:collapse() + * @example + * ```html + * + * xxxxx[xx]xxxx + * + * + * ``` + */ + collapse:function (toStart) { + var me = this; + if (toStart) { + me.endContainer = me.startContainer; + me.endOffset = me.startOffset; + } else { + me.startContainer = me.endContainer; + me.startOffset = me.endOffset; + } + me.collapsed = true; + return me; + }, + + /** + * 调整range的开始位置和结束位置,使其"收缩"到最小的位置 + * @method shrinkBoundary + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * xxxx[xxxxx] => xxxx[xxxxx] + * ``` + * + * @example + * ```html + * + * x[xx]xxx + * + * + * ``` + * + * @example + * ```html + * [xxxxxxxxxxx] => [xxxxxxxxxxx] + * ``` + */ + + /** + * 调整range的开始位置和结束位置,使其"收缩"到最小的位置, + * 如果ignoreEnd的值为true,则忽略对结束位置的调整 + * @method shrinkBoundary + * @param { Boolean } ignoreEnd 是否忽略对结束位置的调整 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.domUtils.Range:shrinkBoundary() + */ + shrinkBoundary:function (ignoreEnd) { + var me = this, child, + collapsed = me.collapsed; + function check(node){ + return node.nodeType == 1 && !domUtils.isBookmarkNode(node) && !dtd.$empty[node.tagName] && !dtd.$nonChild[node.tagName] + } + while (me.startContainer.nodeType == 1 //是element + && (child = me.startContainer.childNodes[me.startOffset]) //子节点也是element + && check(child)) { + me.setStart(child, 0); + } + if (collapsed) { + return me.collapse(true); + } + if (!ignoreEnd) { + while (me.endContainer.nodeType == 1//是element + && me.endOffset > 0 //如果是空元素就退出 endOffset=0那么endOffst-1为负值,childNodes[endOffset]报错 + && (child = me.endContainer.childNodes[me.endOffset - 1]) //子节点也是element + && check(child)) { + me.setEnd(child, child.childNodes.length); + } + } + return me; + }, + + /** + * 获取离当前选区内包含的所有节点最近的公共祖先节点, + * @method getCommonAncestor + * @remind 返回的公共祖先节点一定不是range自身的容器节点, 但有可能是一个文本节点 + * @return { Node } 当前range对象内所有节点的公共祖先节点 + * @example + * ```html + * //选区示例 + * xxxx[xxx]xxxxxx + * + * ``` + */ + + /** + * 获取当前选区所包含的所有节点的公共祖先节点, 可以根据给定的参数 includeSelf 决定获取到 + * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点, 如果 includeSelf + * 的取值为true, 则返回的节点可以是自身的容器节点, 否则, 则不能是容器节点 + * @method getCommonAncestor + * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点 + * @return { Node } 当前range对象内所有节点的公共祖先节点 + * @see UE.dom.Range:getCommonAncestor() + * @example + * ```html + * + * + * + * xxxxxxxxx[xxx]xxxxxxxx + * + * + * + * + * ``` + */ + + /** + * 获取当前选区所包含的所有节点的公共祖先节点, 可以根据给定的参数 includeSelf 决定获取到 + * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点, 如果 includeSelf + * 的取值为true, 则返回的节点可以是自身的容器节点, 否则, 则不能是容器节点; 同时可以根据 + * ignoreTextNode 参数的取值决定是否忽略类型为文本节点的祖先节点。 + * @method getCommonAncestor + * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点 + * @param { Boolean } ignoreTextNode 获取祖先节点的过程中是否忽略类型为文本节点的祖先节点 + * @return { Node } 当前range对象内所有节点的公共祖先节点 + * @see UE.dom.Range:getCommonAncestor() + * @see UE.dom.Range:getCommonAncestor(Boolean) + * @example + * ```html + * + * + * + * xxxxxxxx[x]xxxxxxxxxxx + * + * + * + * + * ``` + */ + getCommonAncestor:function (includeSelf, ignoreTextNode) { + var me = this, + start = me.startContainer, + end = me.endContainer; + if (start === end) { + if (includeSelf && selectOneNode(this)) { + start = start.childNodes[me.startOffset]; + if(start.nodeType == 1) + return start; + } + //只有在上来就相等的情况下才会出现是文本的情况 + return ignoreTextNode && start.nodeType == 3 ? start.parentNode : start; + } + return domUtils.getCommonAncestor(start, end); + }, + + /** + * 调整当前Range的开始和结束边界容器,如果是容器节点是文本节点,就调整到包含该文本节点的父节点上 + * @method trimBoundary + * @remind 该操作有可能会引起文本节点被切开 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * //选区示例 + * xxx[xxxxx]xxx + * + * + * ``` + */ + + /** + * 调整当前Range的开始和结束边界容器,如果是容器节点是文本节点,就调整到包含该文本节点的父节点上, + * 可以根据 ignoreEnd 参数的值决定是否调整对结束边界的调整 + * @method trimBoundary + * @param { Boolean } ignoreEnd 是否忽略对结束边界的调整 + * @return { UE.dom.Range } 当前range对象 + * @example + * ```html + * + * //选区示例 + * xxx[xxxxx]xxx + * + * + * ``` + */ + trimBoundary:function (ignoreEnd) { + this.txtToElmBoundary(); + var start = this.startContainer, + offset = this.startOffset, + collapsed = this.collapsed, + end = this.endContainer; + if (start.nodeType == 3) { + if (offset == 0) { + this.setStartBefore(start); + } else { + if (offset >= start.nodeValue.length) { + this.setStartAfter(start); + } else { + var textNode = domUtils.split(start, offset); + //跟新结束边界 + if (start === end) { + this.setEnd(textNode, this.endOffset - offset); + } else if (start.parentNode === end) { + this.endOffset += 1; + } + this.setStartBefore(textNode); + } + } + if (collapsed) { + return this.collapse(true); + } + } + if (!ignoreEnd) { + offset = this.endOffset; + end = this.endContainer; + if (end.nodeType == 3) { + if (offset == 0) { + this.setEndBefore(end); + } else { + offset < end.nodeValue.length && domUtils.split(end, offset); + this.setEndAfter(end); + } + } + } + return this; + }, + + /** + * 如果选区在文本的边界上,就扩展选区到文本的父节点上, 如果当前选区是闭合的, 则什么也不做 + * @method txtToElmBoundary + * @remind 该操作不会修改dom节点 + * @return { UE.dom.Range } 当前range对象 + */ + + /** + * 如果选区在文本的边界上,就扩展选区到文本的父节点上, 如果当前选区是闭合的, 则根据参数项 + * ignoreCollapsed 的值决定是否执行该调整 + * @method txtToElmBoundary + * @param { Boolean } ignoreCollapsed 是否忽略选区的闭合状态, 如果该参数取值为true, 则 + * 不论选区是否闭合, 都会执行该操作, 反之, 则不会对闭合的选区执行该操作 + * @return { UE.dom.Range } 当前range对象 + */ + txtToElmBoundary:function (ignoreCollapsed) { + function adjust(r, c) { + var container = r[c + 'Container'], + offset = r[c + 'Offset']; + if (container.nodeType == 3) { + if (!offset) { + r['set' + c.replace(/(\w)/, function (a) { + return a.toUpperCase(); + }) + 'Before'](container); + } else if (offset >= container.nodeValue.length) { + r['set' + c.replace(/(\w)/, function (a) { + return a.toUpperCase(); + }) + 'After' ](container); + } + } + } + + if (ignoreCollapsed || !this.collapsed) { + adjust(this, 'start'); + adjust(this, 'end'); + } + return this; + }, + + /** + * 在当前选区的开始位置前插入节点,新插入的节点会被该range包含 + * @method insertNode + * @param { Node } node 需要插入的节点 + * @remind 插入的节点可以是一个DocumentFragment依次插入多个节点 + * @return { UE.dom.Range } 当前range对象 + */ + insertNode:function (node) { + var first = node, length = 1; + if (node.nodeType == 11) { + first = node.firstChild; + length = node.childNodes.length; + } + this.trimBoundary(true); + var start = this.startContainer, + offset = this.startOffset; + var nextNode = start.childNodes[ offset ]; + if (nextNode) { + start.insertBefore(node, nextNode); + } else { + start.appendChild(node); + } + if (first.parentNode === this.endContainer) { + this.endOffset = this.endOffset + length; + } + return this.setStartBefore(first); + }, + + /** + * 闭合选区到当前选区的开始位置, 并且定位光标到闭合后的位置 + * @method setCursor + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:collapse() + */ + + /** + * 闭合选区,可以根据参数toEnd的值控制选区是向前闭合还是向后闭合, 并且定位光标到闭合后的位置。 + * @method setCursor + * @param { Boolean } toEnd 是否向后闭合, 如果为true, 则闭合选区时, 将向结束容器方向闭合, + * 反之,则向开始容器方向闭合 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:collapse(Boolean) + */ + setCursor:function (toEnd, noFillData) { + return this.collapse(!toEnd).select(noFillData); + }, + + /** + * 创建当前range的一个书签,记录下当前range的位置,方便当dom树改变时,还能找回原来的选区位置 + * @method createBookmark + * @param { Boolean } serialize 控制返回的标记位置是对当前位置的引用还是ID,如果该值为true,则 + * 返回标记位置的ID, 反之则返回标记位置节点的引用 + * @return { Object } 返回一个书签记录键值对, 其包含的key有: start => 开始标记的ID或者引用, + * end => 结束标记的ID或引用, id => 当前标记的类型, 如果为true,则表示 + * 返回的记录的类型为ID, 反之则为引用 + */ + createBookmark:function (serialize, same) { + var endNode, + startNode = this.document.createElement('span'); + startNode.style.cssText = 'display:none;line-height:0px;'; + startNode.appendChild(this.document.createTextNode('\u200D')); + startNode.id = '_baidu_bookmark_start_' + (same ? '' : guid++); + + if (!this.collapsed) { + endNode = startNode.cloneNode(true); + endNode.id = '_baidu_bookmark_end_' + (same ? '' : guid++); + } + this.insertNode(startNode); + if (endNode) { + this.collapse().insertNode(endNode).setEndBefore(endNode); + } + this.setStartAfter(startNode); + return { + start:serialize ? startNode.id : startNode, + end:endNode ? serialize ? endNode.id : endNode : null, + id:serialize + } + }, + + /** + * 调整当前range的边界到书签位置,并删除该书签对象所标记的位置内的节点 + * @method moveToBookmark + * @param { BookMark } bookmark createBookmark所创建的标签对象 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:createBookmark(Boolean) + */ + moveToBookmark:function (bookmark) { + var start = bookmark.id ? this.document.getElementById(bookmark.start) : bookmark.start, + end = bookmark.end && bookmark.id ? this.document.getElementById(bookmark.end) : bookmark.end; + this.setStartBefore(start); + domUtils.remove(start); + if (end) { + this.setEndBefore(end); + domUtils.remove(end); + } else { + this.collapse(true); + } + return this; + }, + + /** + * 调整range的边界,使其"放大"到最近的父节点 + * @method enlarge + * @remind 会引起选区的变化 + * @return { UE.dom.Range } 当前range对象 + */ + + /** + * 调整range的边界,使其"放大"到最近的父节点,根据参数 toBlock 的取值, 可以 + * 要求扩大之后的父节点是block节点 + * @method enlarge + * @param { Boolean } toBlock 是否要求扩大之后的父节点必须是block节点 + * @return { UE.dom.Range } 当前range对象 + */ + enlarge:function (toBlock, stopFn) { + var isBody = domUtils.isBody, + pre, node, tmp = this.document.createTextNode(''); + if (toBlock) { + node = this.startContainer; + if (node.nodeType == 1) { + if (node.childNodes[this.startOffset]) { + pre = node = node.childNodes[this.startOffset] + } else { + node.appendChild(tmp); + pre = node = tmp; + } + } else { + pre = node; + } + while (1) { + if (domUtils.isBlockElm(node)) { + node = pre; + while ((pre = node.previousSibling) && !domUtils.isBlockElm(pre)) { + node = pre; + } + this.setStartBefore(node); + break; + } + pre = node; + node = node.parentNode; + } + node = this.endContainer; + if (node.nodeType == 1) { + if (pre = node.childNodes[this.endOffset]) { + node.insertBefore(tmp, pre); + } else { + node.appendChild(tmp); + } + pre = node = tmp; + } else { + pre = node; + } + while (1) { + if (domUtils.isBlockElm(node)) { + node = pre; + while ((pre = node.nextSibling) && !domUtils.isBlockElm(pre)) { + node = pre; + } + this.setEndAfter(node); + break; + } + pre = node; + node = node.parentNode; + } + if (tmp.parentNode === this.endContainer) { + this.endOffset--; + } + domUtils.remove(tmp); + } + + // 扩展边界到最大 + if (!this.collapsed) { + while (this.startOffset == 0) { + if (stopFn && stopFn(this.startContainer)) { + break; + } + if (isBody(this.startContainer)) { + break; + } + this.setStartBefore(this.startContainer); + } + while (this.endOffset == (this.endContainer.nodeType == 1 ? this.endContainer.childNodes.length : this.endContainer.nodeValue.length)) { + if (stopFn && stopFn(this.endContainer)) { + break; + } + if (isBody(this.endContainer)) { + break; + } + this.setEndAfter(this.endContainer); + } + } + return this; + }, + enlargeToBlockElm:function(ignoreEnd){ + while(!domUtils.isBlockElm(this.startContainer)){ + this.setStartBefore(this.startContainer); + } + if(!ignoreEnd){ + while(!domUtils.isBlockElm(this.endContainer)){ + this.setEndAfter(this.endContainer); + } + } + return this; + }, + /** + * 调整Range的边界,使其"缩小"到最合适的位置 + * @method adjustmentBoundary + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:shrinkBoundary() + */ + adjustmentBoundary:function () { + if (!this.collapsed) { + while (!domUtils.isBody(this.startContainer) && + this.startOffset == this.startContainer[this.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length && + this.startContainer[this.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length + ) { + + this.setStartAfter(this.startContainer); + } + while (!domUtils.isBody(this.endContainer) && !this.endOffset && + this.endContainer[this.endContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length + ) { + this.setEndBefore(this.endContainer); + } + } + return this; + }, + + /** + * 给range选区中的内容添加给定的inline标签 + * @method applyInlineStyle + * @param { String } tagName 需要添加的标签名 + * @example + * ```html + *

    xxxx[xxxx]x

    ==> range.applyInlineStyle("strong") ==>

    xxxx[xxxx]x

    + * ``` + */ + + /** + * 给range选区中的内容添加给定的inline标签, 并且为标签附加上一些初始化属性。 + * @method applyInlineStyle + * @param { String } tagName 需要添加的标签名 + * @param { Object } attrs 跟随新添加的标签的属性 + * @return { UE.dom.Range } 当前选区 + * @example + * ```html + *

    xxxx[xxxx]x

    + * + * ==> + * + * + * range.applyInlineStyle("strong",{"style":"font-size:12px"}) + * + * ==> + * + *

    xxxx[xxxx]x

    + * ``` + */ + applyInlineStyle:function (tagName, attrs, list) { + if (this.collapsed)return this; + this.trimBoundary().enlarge(false, + function (node) { + return node.nodeType == 1 && domUtils.isBlockElm(node) + }).adjustmentBoundary(); + var bookmark = this.createBookmark(), + end = bookmark.end, + filterFn = function (node) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' : !domUtils.isWhitespace(node); + }, + current = domUtils.getNextDomNode(bookmark.start, false, filterFn), + node, + pre, + range = this.cloneRange(); + while (current && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) { + if (current.nodeType == 3 || dtd[tagName][current.tagName]) { + range.setStartBefore(current); + node = current; + while (node && (node.nodeType == 3 || dtd[tagName][node.tagName]) && node !== end) { + pre = node; + node = domUtils.getNextDomNode(node, node.nodeType == 1, null, function (parent) { + return dtd[tagName][parent.tagName]; + }); + } + var frag = range.setEndAfter(pre).extractContents(), elm; + if (list && list.length > 0) { + var level, top; + top = level = list[0].cloneNode(false); + for (var i = 1, ci; ci = list[i++];) { + level.appendChild(ci.cloneNode(false)); + level = level.firstChild; + } + elm = level; + } else { + elm = range.document.createElement(tagName); + } + if (attrs) { + domUtils.setAttributes(elm, attrs); + } + elm.appendChild(frag); + range.insertNode(list ? top : elm); + //处理下滑线在a上的情况 + var aNode; + if (tagName == 'span' && attrs.style && /text\-decoration/.test(attrs.style) && (aNode = domUtils.findParentByTagName(elm, 'a', true))) { + domUtils.setAttributes(aNode, attrs); + domUtils.remove(elm, true); + elm = aNode; + } else { + domUtils.mergeSibling(elm); + domUtils.clearEmptySibling(elm); + } + //去除子节点相同的 + domUtils.mergeChild(elm, attrs); + current = domUtils.getNextDomNode(elm, false, filterFn); + domUtils.mergeToParent(elm); + if (node === end) { + break; + } + } else { + current = domUtils.getNextDomNode(current, true, filterFn); + } + } + return this.moveToBookmark(bookmark); + }, + + /** + * 移除当前选区内指定的inline标签,但保留其中的内容 + * @method removeInlineStyle + * @param { String } tagName 需要移除的标签名 + * @return { UE.dom.Range } 当前的range对象 + * @example + * ```html + * xx[xxxxyyyzz]z => range.removeInlineStyle(["em"]) => xx[xxxxyyyzz]z + * ``` + */ + + /** + * 移除当前选区内指定的一组inline标签,但保留其中的内容 + * @method removeInlineStyle + * @param { Array } tagNameArr 需要移除的标签名的数组 + * @return { UE.dom.Range } 当前的range对象 + * @see UE.dom.Range:removeInlineStyle(String) + */ + removeInlineStyle:function (tagNames) { + if (this.collapsed)return this; + tagNames = utils.isArray(tagNames) ? tagNames : [tagNames]; + this.shrinkBoundary().adjustmentBoundary(); + var start = this.startContainer, end = this.endContainer; + while (1) { + if (start.nodeType == 1) { + if (utils.indexOf(tagNames, start.tagName.toLowerCase()) > -1) { + break; + } + if (start.tagName.toLowerCase() == 'body') { + start = null; + break; + } + } + start = start.parentNode; + } + while (1) { + if (end.nodeType == 1) { + if (utils.indexOf(tagNames, end.tagName.toLowerCase()) > -1) { + break; + } + if (end.tagName.toLowerCase() == 'body') { + end = null; + break; + } + } + end = end.parentNode; + } + var bookmark = this.createBookmark(), + frag, + tmpRange; + if (start) { + tmpRange = this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start); + frag = tmpRange.extractContents(); + tmpRange.insertNode(frag); + domUtils.clearEmptySibling(start, true); + start.parentNode.insertBefore(bookmark.start, start); + } + if (end) { + tmpRange = this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end); + frag = tmpRange.extractContents(); + tmpRange.insertNode(frag); + domUtils.clearEmptySibling(end, false, true); + end.parentNode.insertBefore(bookmark.end, end.nextSibling); + } + var current = domUtils.getNextDomNode(bookmark.start, false, function (node) { + return node.nodeType == 1; + }), next; + while (current && current !== bookmark.end) { + next = domUtils.getNextDomNode(current, true, function (node) { + return node.nodeType == 1; + }); + if (utils.indexOf(tagNames, current.tagName.toLowerCase()) > -1) { + domUtils.remove(current, true); + } + current = next; + } + return this.moveToBookmark(bookmark); + }, + + /** + * 获取当前选中的自闭合的节点 + * @method getClosedNode + * @return { Node | NULL } 如果当前选中的是自闭合节点, 则返回该节点, 否则返回NULL + */ + getClosedNode:function () { + var node; + if (!this.collapsed) { + var range = this.cloneRange().adjustmentBoundary().shrinkBoundary(); + if (selectOneNode(range)) { + var child = range.startContainer.childNodes[range.startOffset]; + if (child && child.nodeType == 1 && (dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName])) { + node = child; + } + } + } + return node; + }, + + /** + * 在页面上高亮range所表示的选区 + * @method select + * @return { UE.dom.Range } 返回当前Range对象 + */ + //这里不区分ie9以上,trace:3824 + select:browser.ie ? function (noFillData, textRange) { + var nativeRange; + if (!this.collapsed) + this.shrinkBoundary(); + var node = this.getClosedNode(); + if (node && !textRange) { + try { + nativeRange = this.document.body.createControlRange(); + nativeRange.addElement(node); + nativeRange.select(); + } catch (e) {} + return this; + } + var bookmark = this.createBookmark(), + start = bookmark.start, + end; + nativeRange = this.document.body.createTextRange(); + nativeRange.moveToElementText(start); + nativeRange.moveStart('character', 1); + if (!this.collapsed) { + var nativeRangeEnd = this.document.body.createTextRange(); + end = bookmark.end; + nativeRangeEnd.moveToElementText(end); + nativeRange.setEndPoint('EndToEnd', nativeRangeEnd); + } else { + if (!noFillData && this.startContainer.nodeType != 3) { + //使用|x固定住光标 + var tmpText = this.document.createTextNode(fillChar), + tmp = this.document.createElement('span'); + tmp.appendChild(this.document.createTextNode(fillChar)); + start.parentNode.insertBefore(tmp, start); + start.parentNode.insertBefore(tmpText, start); + //当点b,i,u时,不能清除i上边的b + removeFillData(this.document, tmpText); + fillData = tmpText; + mergeSibling(tmp, 'previousSibling'); + mergeSibling(start, 'nextSibling'); + nativeRange.moveStart('character', -1); + nativeRange.collapse(true); + } + } + this.moveToBookmark(bookmark); + tmp && domUtils.remove(tmp); + //IE在隐藏状态下不支持range操作,catch一下 + try { + nativeRange.select(); + } catch (e) { + } + return this; + } : function (notInsertFillData) { + function checkOffset(rng){ + + function check(node,offset,dir){ + if(node.nodeType == 3 && node.nodeValue.length < offset){ + rng[dir + 'Offset'] = node.nodeValue.length + } + } + check(rng.startContainer,rng.startOffset,'start'); + check(rng.endContainer,rng.endOffset,'end'); + } + var win = domUtils.getWindow(this.document), + sel = win.getSelection(), + txtNode; + //FF下关闭自动长高时滚动条在关闭dialog时会跳 + //ff下如果不body.focus将不能定位闭合光标到编辑器内 + browser.gecko ? this.document.body.focus() : win.focus(); + if (sel) { + sel.removeAllRanges(); + // trace:870 chrome/safari后边是br对于闭合得range不能定位 所以去掉了判断 + // this.startContainer.nodeType != 3 &&! ((child = this.startContainer.childNodes[this.startOffset]) && child.nodeType == 1 && child.tagName == 'BR' + if (this.collapsed && !notInsertFillData) { +// //opear如果没有节点接着,原生的不能够定位,不能在body的第一级插入空白节点 +// if (notInsertFillData && browser.opera && !domUtils.isBody(this.startContainer) && this.startContainer.nodeType == 1) { +// var tmp = this.document.createTextNode(''); +// this.insertNode(tmp).setStart(tmp, 0).collapse(true); +// } +// + //处理光标落在文本节点的情况 + //处理以下的情况 + //|xxxx + //xxxx|xxxx + //xxxx| + var start = this.startContainer,child = start; + if(start.nodeType == 1){ + child = start.childNodes[this.startOffset]; + + } + if( !(start.nodeType == 3 && this.startOffset) && + (child ? + (!child.previousSibling || child.previousSibling.nodeType != 3) + : + (!start.lastChild || start.lastChild.nodeType != 3) + ) + ){ + txtNode = this.document.createTextNode(fillChar); + //跟着前边走 + this.insertNode(txtNode); + removeFillData(this.document, txtNode); + mergeSibling(txtNode, 'previousSibling'); + mergeSibling(txtNode, 'nextSibling'); + fillData = txtNode; + this.setStart(txtNode, browser.webkit ? 1 : 0).collapse(true); + } + } + var nativeRange = this.document.createRange(); + if(this.collapsed && browser.opera && this.startContainer.nodeType == 1){ + var child = this.startContainer.childNodes[this.startOffset]; + if(!child){ + //往前靠拢 + child = this.startContainer.lastChild; + if( child && domUtils.isBr(child)){ + this.setStartBefore(child).collapse(true); + } + }else{ + //向后靠拢 + while(child && domUtils.isBlockElm(child)){ + if(child.nodeType == 1 && child.childNodes[0]){ + child = child.childNodes[0] + }else{ + break; + } + } + child && this.setStartBefore(child).collapse(true) + } + + } + //是createAddress最后一位算的不准,现在这里进行微调 + checkOffset(this); + nativeRange.setStart(this.startContainer, this.startOffset); + nativeRange.setEnd(this.endContainer, this.endOffset); + sel.addRange(nativeRange); + } + return this; + }, + + /** + * 滚动到当前range开始的位置 + * @method scrollToView + * @param { Window } win 当前range对象所属的window对象 + * @return { UE.dom.Range } 当前Range对象 + */ + + /** + * 滚动到距离当前range开始位置 offset 的位置处 + * @method scrollToView + * @param { Window } win 当前range对象所属的window对象 + * @param { Number } offset 距离range开始位置处的偏移量, 如果为正数, 则向下偏移, 反之, 则向上偏移 + * @return { UE.dom.Range } 当前Range对象 + */ + scrollToView:function (win, offset) { + win = win ? window : domUtils.getWindow(this.document); + var me = this, + span = me.document.createElement('span'); + //trace:717 + span.innerHTML = ' '; + me.cloneRange().insertNode(span); + domUtils.scrollToView(span, win, offset); + domUtils.remove(span); + return me; + }, + + /** + * 判断当前选区内容是否占位符 + * @private + * @method inFillChar + * @return { Boolean } 如果是占位符返回true,否则返回false + */ + inFillChar : function(){ + var start = this.startContainer; + if(this.collapsed && start.nodeType == 3 + && start.nodeValue.replace(new RegExp('^' + domUtils.fillChar),'').length + 1 == start.nodeValue.length + ){ + return true; + } + return false; + }, + + /** + * 保存 + * @method createAddress + * @private + * @return { Boolean } 返回开始和结束的位置 + * @example + * ```html + * + *

    + * aaaa + * + * + * bbbb + * + * + *

    + * + * + * + * ``` + */ + createAddress : function(ignoreEnd,ignoreTxt){ + var addr = {},me = this; + + function getAddress(isStart){ + var node = isStart ? me.startContainer : me.endContainer; + var parents = domUtils.findParents(node,true,function(node){return !domUtils.isBody(node)}), + addrs = []; + for(var i = 0,ci;ci = parents[i++];){ + addrs.push(domUtils.getNodeIndex(ci,ignoreTxt)); + } + var firstIndex = 0; + + if(ignoreTxt){ + if(node.nodeType == 3){ + var tmpNode = node.previousSibling; + while(tmpNode && tmpNode.nodeType == 3){ + firstIndex += tmpNode.nodeValue.replace(fillCharReg,'').length; + tmpNode = tmpNode.previousSibling; + } + firstIndex += (isStart ? me.startOffset : me.endOffset)// - (fillCharReg.test(node.nodeValue) ? 1 : 0 ) + }else{ + node = node.childNodes[ isStart ? me.startOffset : me.endOffset]; + if(node){ + firstIndex = domUtils.getNodeIndex(node,ignoreTxt); + }else{ + node = isStart ? me.startContainer : me.endContainer; + var first = node.firstChild; + while(first){ + if(domUtils.isFillChar(first)){ + first = first.nextSibling; + continue; + } + firstIndex++; + if(first.nodeType == 3){ + while( first && first.nodeType == 3){ + first = first.nextSibling; + } + }else{ + first = first.nextSibling; + } + } + } + } + + }else{ + firstIndex = isStart ? domUtils.isFillChar(node) ? 0 : me.startOffset : me.endOffset + } + if(firstIndex < 0){ + firstIndex = 0; + } + addrs.push(firstIndex); + return addrs; + } + addr.startAddress = getAddress(true); + if(!ignoreEnd){ + addr.endAddress = me.collapsed ? [].concat(addr.startAddress) : getAddress(); + } + return addr; + }, + + /** + * 保存 + * @method createAddress + * @private + * @return { Boolean } 返回开始和结束的位置 + * @example + * ```html + * + *

    + * aaaa + * + * + * bbbb + * + * + *

    + * + * + * + * ``` + */ + moveToAddress : function(addr,ignoreEnd){ + var me = this; + function getNode(address,isStart){ + var tmpNode = me.document.body, + parentNode,offset; + for(var i= 0,ci,l=address.length;i + * + * + * + * + * + * + * + * + * ``` + */ + + /** + * 遍历range内的节点。 + * 每当遍历一个节点时, 都会执行参数项 doFn 指定的函数, 该函数的接受当前遍历的节点 + * 作为其参数。 + * 可以通过参数项 filterFn 来指定一个过滤器, 只有符合该过滤器过滤规则的节点才会触 + * 发doFn函数的执行 + * @method traversal + * @param { Function } doFn 对每个遍历的节点要执行的方法, 该方法接受当前遍历的节点作为其参数 + * @param { Function } filterFn 过滤器, 该函数接受当前遍历的节点作为参数, 如果该节点满足过滤 + * 规则, 请返回true, 该节点会触发doFn, 否则, 请返回false, 则该节点不 + * 会触发doFn。 + * @return { UE.dom.Range } 当前range对象 + * @see UE.dom.Range:traversal(Function) + * @example + * ```html + * + * + * + * + * + * + * + * + * + * + * ``` + */ + traversal:function(doFn,filterFn){ + if (this.collapsed) + return this; + var bookmark = this.createBookmark(), + end = bookmark.end, + current = domUtils.getNextDomNode(bookmark.start, false, filterFn); + while (current && current !== end && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) { + var tmpNode = domUtils.getNextDomNode(current,false,filterFn); + doFn(current); + current = tmpNode; + } + return this.moveToBookmark(bookmark); + } + }; +})(); + +// core/Selection.js +/** + * 选集 + * @file + * @module UE.dom + * @class Selection + * @since 1.2.6.1 + */ + +/** + * 选区集合 + * @unfile + * @module UE.dom + * @class Selection + */ +(function () { + + function getBoundaryInformation( range, start ) { + var getIndex = domUtils.getNodeIndex; + range = range.duplicate(); + range.collapse( start ); + var parent = range.parentElement(); + //如果节点里没有子节点,直接退出 + if ( !parent.hasChildNodes() ) { + return {container:parent, offset:0}; + } + var siblings = parent.children, + child, + testRange = range.duplicate(), + startIndex = 0, endIndex = siblings.length - 1, index = -1, + distance; + while ( startIndex <= endIndex ) { + index = Math.floor( (startIndex + endIndex) / 2 ); + child = siblings[index]; + testRange.moveToElementText( child ); + var position = testRange.compareEndPoints( 'StartToStart', range ); + if ( position > 0 ) { + endIndex = index - 1; + } else if ( position < 0 ) { + startIndex = index + 1; + } else { + //trace:1043 + return {container:parent, offset:getIndex( child )}; + } + } + if ( index == -1 ) { + testRange.moveToElementText( parent ); + testRange.setEndPoint( 'StartToStart', range ); + distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length; + siblings = parent.childNodes; + if ( !distance ) { + child = siblings[siblings.length - 1]; + return {container:child, offset:child.nodeValue.length}; + } + + var i = siblings.length; + while ( distance > 0 ){ + distance -= siblings[ --i ].nodeValue.length; + } + return {container:siblings[i], offset:-distance}; + } + testRange.collapse( position > 0 ); + testRange.setEndPoint( position > 0 ? 'StartToStart' : 'EndToStart', range ); + distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length; + if ( !distance ) { + return dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName] ? + {container:parent, offset:getIndex( child ) + (position > 0 ? 0 : 1)} : + {container:child, offset:position > 0 ? 0 : child.childNodes.length} + } + while ( distance > 0 ) { + try { + var pre = child; + child = child[position > 0 ? 'previousSibling' : 'nextSibling']; + distance -= child.nodeValue.length; + } catch ( e ) { + return {container:parent, offset:getIndex( pre )}; + } + } + return {container:child, offset:position > 0 ? -distance : child.nodeValue.length + distance} + } + + /** + * 将ieRange转换为Range对象 + * @param {Range} ieRange ieRange对象 + * @param {Range} range Range对象 + * @return {Range} range 返回转换后的Range对象 + */ + function transformIERangeToRange( ieRange, range ) { + if ( ieRange.item ) { + range.selectNode( ieRange.item( 0 ) ); + } else { + var bi = getBoundaryInformation( ieRange, true ); + range.setStart( bi.container, bi.offset ); + if ( ieRange.compareEndPoints( 'StartToEnd', ieRange ) != 0 ) { + bi = getBoundaryInformation( ieRange, false ); + range.setEnd( bi.container, bi.offset ); + } + } + return range; + } + + /** + * 获得ieRange + * @param {Selection} sel Selection对象 + * @return {ieRange} 得到ieRange + */ + function _getIERange( sel ) { + var ieRange; + //ie下有可能报错 + try { + ieRange = sel.getNative().createRange(); + } catch ( e ) { + return null; + } + var el = ieRange.item ? ieRange.item( 0 ) : ieRange.parentElement(); + if ( ( el.ownerDocument || el ) === sel.document ) { + return ieRange; + } + return null; + } + + var Selection = dom.Selection = function ( doc ) { + var me = this, iframe; + me.document = doc; + if ( browser.ie9below ) { + iframe = domUtils.getWindow( doc ).frameElement; + domUtils.on( iframe, 'beforedeactivate', function () { + me._bakIERange = me.getIERange(); + } ); + domUtils.on( iframe, 'activate', function () { + try { + if ( !_getIERange( me ) && me._bakIERange ) { + me._bakIERange.select(); + } + } catch ( ex ) { + } + me._bakIERange = null; + } ); + } + iframe = doc = null; + }; + + Selection.prototype = { + + rangeInBody : function(rng,txtRange){ + var node = browser.ie9below || txtRange ? rng.item ? rng.item() : rng.parentElement() : rng.startContainer; + + return node === this.document.body || domUtils.inDoc(node,this.document); + }, + + /** + * 获取原生seleciton对象 + * @method getNative + * @return { Object } 获得selection对象 + * @example + * ```javascript + * editor.selection.getNative(); + * ``` + */ + getNative:function () { + var doc = this.document; + try { + return !doc ? null : browser.ie9below ? doc.selection : domUtils.getWindow( doc ).getSelection(); + } catch ( e ) { + return null; + } + }, + + /** + * 获得ieRange + * @method getIERange + * @return { Object } 返回ie原生的Range + * @example + * ```javascript + * editor.selection.getIERange(); + * ``` + */ + getIERange:function () { + var ieRange = _getIERange( this ); + if ( !ieRange ) { + if ( this._bakIERange ) { + return this._bakIERange; + } + } + return ieRange; + }, + + /** + * 缓存当前选区的range和选区的开始节点 + * @method cache + */ + cache:function () { + this.clear(); + this._cachedRange = this.getRange(); + this._cachedStartElement = this.getStart(); + this._cachedStartElementPath = this.getStartElementPath(); + }, + + /** + * 获取选区开始位置的父节点到body + * @method getStartElementPath + * @return { Array } 返回父节点集合 + * @example + * ```javascript + * editor.selection.getStartElementPath(); + * ``` + */ + getStartElementPath:function () { + if ( this._cachedStartElementPath ) { + return this._cachedStartElementPath; + } + var start = this.getStart(); + if ( start ) { + return domUtils.findParents( start, true, null, true ) + } + return []; + }, + + /** + * 清空缓存 + * @method clear + */ + clear:function () { + this._cachedStartElementPath = this._cachedRange = this._cachedStartElement = null; + }, + + /** + * 编辑器是否得到了选区 + * @method isFocus + */ + isFocus:function () { + try { + if(browser.ie9below){ + + var nativeRange = _getIERange(this); + return !!(nativeRange && this.rangeInBody(nativeRange)); + }else{ + return !!this.getNative().rangeCount; + } + } catch ( e ) { + return false; + } + + }, + + /** + * 获取选区对应的Range + * @method getRange + * @return { Object } 得到Range对象 + * @example + * ```javascript + * editor.selection.getRange(); + * ``` + */ + getRange:function () { + var me = this; + function optimze( range ) { + var child = me.document.body.firstChild, + collapsed = range.collapsed; + while ( child && child.firstChild ) { + range.setStart( child, 0 ); + child = child.firstChild; + } + if ( !range.startContainer ) { + range.setStart( me.document.body, 0 ) + } + if ( collapsed ) { + range.collapse( true ); + } + } + + if ( me._cachedRange != null ) { + return this._cachedRange; + } + var range = new baidu.editor.dom.Range( me.document ); + + if ( browser.ie9below ) { + var nativeRange = me.getIERange(); + if ( nativeRange ) { + //备份的_bakIERange可能已经实效了,dom树发生了变化比如从源码模式切回来,所以try一下,实效就放到body开始位置 + try{ + transformIERangeToRange( nativeRange, range ); + }catch(e){ + optimze( range ); + } + + } else { + optimze( range ); + } + } else { + var sel = me.getNative(); + if ( sel && sel.rangeCount ) { + var firstRange = sel.getRangeAt( 0 ); + var lastRange = sel.getRangeAt( sel.rangeCount - 1 ); + range.setStart( firstRange.startContainer, firstRange.startOffset ).setEnd( lastRange.endContainer, lastRange.endOffset ); + if ( range.collapsed && domUtils.isBody( range.startContainer ) && !range.startOffset ) { + optimze( range ); + } + } else { + //trace:1734 有可能已经不在dom树上了,标识的节点 + if ( this._bakRange && domUtils.inDoc( this._bakRange.startContainer, this.document ) ){ + return this._bakRange; + } + optimze( range ); + } + } + return this._bakRange = range; + }, + + /** + * 获取开始元素,用于状态反射 + * @method getStart + * @return { Element } 获得开始元素 + * @example + * ```javascript + * editor.selection.getStart(); + * ``` + */ + getStart:function () { + if ( this._cachedStartElement ) { + return this._cachedStartElement; + } + var range = browser.ie9below ? this.getIERange() : this.getRange(), + tmpRange, + start, tmp, parent; + if ( browser.ie9below ) { + if ( !range ) { + //todo 给第一个值可能会有问题 + return this.document.body.firstChild; + } + //control元素 + if ( range.item ){ + return range.item( 0 ); + } + tmpRange = range.duplicate(); + //修正ie下x[xx] 闭合后 x|xx + tmpRange.text.length > 0 && tmpRange.moveStart( 'character', 1 ); + tmpRange.collapse( 1 ); + start = tmpRange.parentElement(); + parent = tmp = range.parentElement(); + while ( tmp = tmp.parentNode ) { + if ( tmp == start ) { + start = parent; + break; + } + } + } else { + range.shrinkBoundary(); + start = range.startContainer; + if ( start.nodeType == 1 && start.hasChildNodes() ){ + start = start.childNodes[Math.min( start.childNodes.length - 1, range.startOffset )]; + } + if ( start.nodeType == 3 ){ + return start.parentNode; + } + } + return start; + }, + + /** + * 得到选区中的文本 + * @method getText + * @return { String } 选区中包含的文本 + * @example + * ```javascript + * editor.selection.getText(); + * ``` + */ + getText:function () { + var nativeSel, nativeRange; + if ( this.isFocus() && (nativeSel = this.getNative()) ) { + nativeRange = browser.ie9below ? nativeSel.createRange() : nativeSel.getRangeAt( 0 ); + return browser.ie9below ? nativeRange.text : nativeRange.toString(); + } + return ''; + }, + + /** + * 清除选区 + * @method clearRange + * @example + * ```javascript + * editor.selection.clearRange(); + * ``` + */ + clearRange : function(){ + this.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + } + }; +})(); + +// core/Editor.js +/** + * 编辑器主类,包含编辑器提供的大部分公用接口 + * @file + * @module UE + * @class Editor + * @since 1.2.6.1 + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @unfile + * @module UE + */ + +/** + * UEditor的核心类,为用户提供与编辑器交互的接口。 + * @unfile + * @module UE + * @class Editor + */ + +(function () { + var uid = 0, _selectionChangeTimer; + + /** + * 获取编辑器的html内容,赋值到编辑器所在表单的textarea文本域里面 + * @private + * @method setValue + * @param { UE.Editor } editor 编辑器事例 + */ + function setValue(form, editor) { + var textarea; + if (editor.textarea) { + if (utils.isString(editor.textarea)) { + for (var i = 0, ti, tis = domUtils.getElementsByTagName(form, 'textarea'); ti = tis[i++];) { + if (ti.id == 'ueditor_textarea_' + editor.options.textarea) { + textarea = ti; + break; + } + } + } else { + textarea = editor.textarea; + } + } + if (!textarea) { + form.appendChild(textarea = domUtils.createElement(document, 'textarea', { + 'name': editor.options.textarea, + 'id': 'ueditor_textarea_' + editor.options.textarea, + 'style': "display:none" + })); + //不要产生多个textarea + editor.textarea = textarea; + } + !textarea.getAttribute('name') && textarea.setAttribute('name', editor.options.textarea ); + textarea.value = editor.hasContents() ? + (editor.options.allHtmlEnabled ? editor.getAllHtml() : editor.getContent(null, null, true)) : + '' + } + function loadPlugins(me){ + //初始化插件 + for (var pi in UE.plugins) { + UE.plugins[pi].call(me); + } + + } + function checkCurLang(I18N){ + for(var lang in I18N){ + return lang + } + } + + function langReadied(me){ + me.langIsReady = true; + + me.fireEvent("langReady"); + } + + /** + * 编辑器准备就绪后会触发该事件 + * @module UE + * @class Editor + * @event ready + * @remind render方法执行完成之后,会触发该事件 + * @remind + * @example + * ```javascript + * editor.addListener( 'ready', function( editor ) { + * editor.execCommand( 'focus' ); //编辑器家在完成后,让编辑器拿到焦点 + * } ); + * ``` + */ + /** + * 执行destroy方法,会触发该事件 + * @module UE + * @class Editor + * @event destroy + * @see UE.Editor:destroy() + */ + /** + * 执行reset方法,会触发该事件 + * @module UE + * @class Editor + * @event reset + * @see UE.Editor:reset() + */ + /** + * 执行focus方法,会触发该事件 + * @module UE + * @class Editor + * @event focus + * @see UE.Editor:focus(Boolean) + */ + /** + * 语言加载完成会触发该事件 + * @module UE + * @class Editor + * @event langReady + */ + /** + * 运行命令之后会触发该命令 + * @module UE + * @class Editor + * @event beforeExecCommand + */ + /** + * 运行命令之后会触发该命令 + * @module UE + * @class Editor + * @event afterExecCommand + */ + /** + * 运行命令之前会触发该命令 + * @module UE + * @class Editor + * @event firstBeforeExecCommand + */ + /** + * 在getContent方法执行之前会触发该事件 + * @module UE + * @class Editor + * @event beforeGetContent + * @see UE.Editor:getContent() + */ + /** + * 在getContent方法执行之后会触发该事件 + * @module UE + * @class Editor + * @event afterGetContent + * @see UE.Editor:getContent() + */ + /** + * 在getAllHtml方法执行时会触发该事件 + * @module UE + * @class Editor + * @event getAllHtml + * @see UE.Editor:getAllHtml() + */ + /** + * 在setContent方法执行之前会触发该事件 + * @module UE + * @class Editor + * @event beforeSetContent + * @see UE.Editor:setContent(String) + */ + /** + * 在setContent方法执行之后会触发该事件 + * @module UE + * @class Editor + * @event afterSetContent + * @see UE.Editor:setContent(String) + */ + /** + * 每当编辑器内部选区发生改变时,将触发该事件 + * @event selectionchange + * @warning 该事件的触发非常频繁,不建议在该事件的处理过程中做重量级的处理 + * @example + * ```javascript + * editor.addListener( 'selectionchange', function( editor ) { + * console.log('选区发生改变'); + * } + */ + /** + * 在所有selectionchange的监听函数执行之前,会触发该事件 + * @module UE + * @class Editor + * @event beforeSelectionChange + * @see UE.Editor:selectionchange + */ + /** + * 在所有selectionchange的监听函数执行完之后,会触发该事件 + * @module UE + * @class Editor + * @event afterSelectionChange + * @see UE.Editor:selectionchange + */ + /** + * 编辑器内容发生改变时会触发该事件 + * @module UE + * @class Editor + * @event contentChange + */ + + + /** + * 以默认参数构建一个编辑器实例 + * @constructor + * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面 + * @example + * ```javascript + * var editor = new UE.Editor(); + * editor.execCommand('blod'); + * ``` + * @see UE.Config + */ + + /** + * 以给定的参数集合创建一个编辑器实例,对于未指定的参数,将应用默认参数。 + * @constructor + * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面 + * @param { Object } setting 创建编辑器的参数 + * @example + * ```javascript + * var editor = new UE.Editor(); + * editor.execCommand('blod'); + * ``` + * @see UE.Config + */ + var Editor = UE.Editor = function (options) { + var me = this; + me.uid = uid++; + EventBase.call(me); + me.commands = {}; + me.options = utils.extend(utils.clone(options || {}), UEDITOR_CONFIG, true); + me.shortcutkeys = {}; + me.inputRules = []; + me.outputRules = []; + //设置默认的常用属性 + me.setOpt(Editor.defaultOptions(me)); + + /* 尝试异步加载后台配置 */ + me.loadServerConfig(); + + if(!utils.isEmptyObject(UE.I18N)){ + //修改默认的语言类型 + me.options.lang = checkCurLang(UE.I18N); + UE.plugin.load(me); + langReadied(me); + + }else{ + utils.loadFile(document, { + src: me.options.langPath + me.options.lang + "/" + me.options.lang + ".js", + tag: "script", + type: "text/javascript", + defer: "defer" + }, function () { + UE.plugin.load(me); + langReadied(me); + }); + } + + UE.instants['ueditorInstant' + me.uid] = me; + }; + Editor.prototype = { + registerCommand : function(name,obj){ + this.commands[name] = obj; + }, + /** + * 编辑器对外提供的监听ready事件的接口, 通过调用该方法,达到的效果与监听ready事件是一致的 + * @method ready + * @param { Function } fn 编辑器ready之后所执行的回调, 如果在注册事件之前编辑器已经ready,将会 + * 立即触发该回调。 + * @remind 需要等待编辑器加载完成后才能执行的代码,可以使用该方法传入 + * @example + * ```javascript + * editor.ready( function( editor ) { + * editor.setContent('初始化完毕'); + * } ); + * ``` + * @see UE.Editor.event:ready + */ + ready: function (fn) { + var me = this; + if (fn) { + me.isReady ? fn.apply(me) : me.addListener('ready', fn); + } + }, + + /** + * 该方法是提供给插件里面使用,设置配置项默认值 + * @method setOpt + * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置 + * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用,其他地方不能调用。 + * @param { String } key 编辑器的可接受的选项名称 + * @param { * } val 该选项可接受的值 + * @example + * ```javascript + * editor.setOpt( 'initContent', '欢迎使用编辑器' ); + * ``` + */ + + /** + * 该方法是提供给插件里面使用,以{key:value}集合的方式设置插件内用到的配置项默认值 + * @method setOpt + * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置 + * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用,其他地方不能调用。 + * @param { Object } options 将要设置的选项的键值对对象 + * @example + * ```javascript + * editor.setOpt( { + * 'initContent': '欢迎使用编辑器' + * } ); + * ``` + */ + setOpt: function (key, val) { + var obj = {}; + if (utils.isString(key)) { + obj[key] = val + } else { + obj = key; + } + utils.extend(this.options, obj, true); + }, + getOpt:function(key){ + return this.options[key] + }, + /** + * 销毁编辑器实例,使用textarea代替 + * @method destroy + * @example + * ```javascript + * editor.destroy(); + * ``` + */ + destroy: function () { + + var me = this; + me.fireEvent('destroy'); + var container = me.container.parentNode; + var textarea = me.textarea; + if (!textarea) { + textarea = document.createElement('textarea'); + container.parentNode.insertBefore(textarea, container); + } else { + textarea.style.display = '' + } + + textarea.style.width = me.iframe.offsetWidth + 'px'; + textarea.style.height = me.iframe.offsetHeight + 'px'; + textarea.value = me.getContent(); + textarea.id = me.key; + container.innerHTML = ''; + domUtils.remove(container); + var key = me.key; + //trace:2004 + for (var p in me) { + if (me.hasOwnProperty(p)) { + delete this[p]; + } + } + UE.delEditor(key); + }, + + /** + * 渲染编辑器的DOM到指定容器 + * @method render + * @param { String } containerId 指定一个容器ID + * @remind 执行该方法,会触发ready事件 + * @warning 必须且只能调用一次 + */ + + /** + * 渲染编辑器的DOM到指定容器 + * @method render + * @param { Element } containerDom 直接指定容器对象 + * @remind 执行该方法,会触发ready事件 + * @warning 必须且只能调用一次 + */ + render: function (container) { + var me = this, + options = me.options, + getStyleValue=function(attr){ + return parseInt(domUtils.getComputedStyle(container,attr)); + }; + if (utils.isString(container)) { + container = document.getElementById(container); + } + if (container) { + if(options.initialFrameWidth){ + options.minFrameWidth = options.initialFrameWidth + }else{ + options.minFrameWidth = options.initialFrameWidth = container.offsetWidth; + } + if(options.initialFrameHeight){ + options.minFrameHeight = options.initialFrameHeight + }else{ + options.initialFrameHeight = options.minFrameHeight = container.offsetHeight; + } + + container.style.width = /%$/.test(options.initialFrameWidth) ? '100%' : options.initialFrameWidth- + getStyleValue("padding-left")- getStyleValue("padding-right") +'px'; + container.style.height = /%$/.test(options.initialFrameHeight) ? '100%' : options.initialFrameHeight - + getStyleValue("padding-top")- getStyleValue("padding-bottom") +'px'; + + container.style.zIndex = options.zIndex; + + var html = ( ie && browser.version < 9 ? '' : '') + + '' + + '' + + ( options.iframeCssUrl ? '' : '' ) + + (options.initialStyle ? '' : '') + + '' + + ''; + container.appendChild(domUtils.createElement(document, 'iframe', { + id: 'ueditor_' + me.uid, + width: "100%", + height: "100%", + frameborder: "0", + //先注释掉了,加的原因忘记了,但开启会直接导致全屏模式下内容多时不会出现滚动条 +// scrolling :'no', + src: 'javascript:void(function(){document.open();' + (options.customDomain && document.domain != location.hostname ? 'document.domain="' + document.domain + '";' : '') + + 'document.write("' + html + '");document.close();}())' + })); + container.style.overflow = 'hidden'; + //解决如果是给定的百分比,会导致高度算不对的问题 + setTimeout(function(){ + if( /%$/.test(options.initialFrameWidth)){ + options.minFrameWidth = options.initialFrameWidth = container.offsetWidth; + //如果这里给定宽度,会导致ie在拖动窗口大小时,编辑区域不随着变化 +// container.style.width = options.initialFrameWidth + 'px'; + } + if(/%$/.test(options.initialFrameHeight)){ + options.minFrameHeight = options.initialFrameHeight = container.offsetHeight; + container.style.height = options.initialFrameHeight + 'px'; + } + }) + } + }, + + /** + * 编辑器初始化 + * @method _setup + * @private + * @param { Element } doc 编辑器Iframe中的文档对象 + */ + _setup: function (doc) { + + var me = this, + options = me.options; + if (ie) { + doc.body.disabled = true; + doc.body.contentEditable = true; + doc.body.disabled = false; + } else { + doc.body.contentEditable = true; + } + doc.body.spellcheck = false; + me.document = doc; + me.window = doc.defaultView || doc.parentWindow; + me.iframe = me.window.frameElement; + me.body = doc.body; + me.selection = new dom.Selection(doc); + //gecko初始化就能得到range,无法判断isFocus了 + var geckoSel; + if (browser.gecko && (geckoSel = this.selection.getNative())) { + geckoSel.removeAllRanges(); + } + this._initEvents(); + //为form提交提供一个隐藏的textarea + for (var form = this.iframe.parentNode; !domUtils.isBody(form); form = form.parentNode) { + if (form.tagName == 'FORM') { + me.form = form; + if(me.options.autoSyncData){ + domUtils.on(me.window,'blur',function(){ + setValue(form,me); + }); + }else{ + domUtils.on(form, 'submit', function () { + setValue(this, me); + }); + } + break; + } + } + if (options.initialContent) { + if (options.autoClearinitialContent) { + var oldExecCommand = me.execCommand; + me.execCommand = function () { + me.fireEvent('firstBeforeExecCommand'); + return oldExecCommand.apply(me, arguments); + }; + this._setDefaultContent(options.initialContent); + } else + this.setContent(options.initialContent, false, true); + } + + //编辑器不能为空内容 + + if (domUtils.isEmptyNode(me.body)) { + me.body.innerHTML = '

    ' + (browser.ie ? '' : '
    ') + '

    '; + } + //如果要求focus, 就把光标定位到内容开始 + if (options.focus) { + setTimeout(function () { + me.focus(me.options.focusInEnd); + //如果自动清除开着,就不需要做selectionchange; + !me.options.autoClearinitialContent && me._selectionChange(); + }, 0); + } + if (!me.container) { + me.container = this.iframe.parentNode; + } + if (options.fullscreen && me.ui) { + me.ui.setFullScreen(true); + } + + try { + me.document.execCommand('2D-position', false, false); + } catch (e) { + } + try { + me.document.execCommand('enableInlineTableEditing', false, false); + } catch (e) { + } + try { + me.document.execCommand('enableObjectResizing', false, false); + } catch (e) { + } + + //挂接快捷键 + me._bindshortcutKeys(); + me.isReady = 1; + me.fireEvent('ready'); + options.onready && options.onready.call(me); + if (!browser.ie9below) { + domUtils.on(me.window, ['blur', 'focus'], function (e) { + //chrome下会出现alt+tab切换时,导致选区位置不对 + if (e.type == 'blur') { + me._bakRange = me.selection.getRange(); + try { + me._bakNativeRange = me.selection.getNative().getRangeAt(0); + me.selection.getNative().removeAllRanges(); + } catch (e) { + me._bakNativeRange = null; + } + + } else { + try { + me._bakRange && me._bakRange.select(); + } catch (e) { + } + } + }); + } + //trace:1518 ff3.6body不够寛,会导致点击空白处无法获得焦点 + if (browser.gecko && browser.version <= 10902) { + //修复ff3.6初始化进来,不能点击获得焦点 + me.body.contentEditable = false; + setTimeout(function () { + me.body.contentEditable = true; + }, 100); + setInterval(function () { + me.body.style.height = me.iframe.offsetHeight - 20 + 'px' + }, 100) + } + + !options.isShow && me.setHide(); + options.readonly && me.setDisabled(); + }, + + /** + * 同步数据到编辑器所在的form + * 从编辑器的容器节点向上查找form元素,若找到,就同步编辑内容到找到的form里,为提交数据做准备,主要用于是手动提交的情况 + * 后台取得数据的键值,使用你容器上的name属性,如果没有就使用参数里的textarea项 + * @method sync + * @example + * ```javascript + * editor.sync(); + * form.sumbit(); //form变量已经指向了form元素 + * ``` + */ + + /** + * 根据传入的formId,在页面上查找要同步数据的表单,若找到,就同步编辑内容到找到的form里,为提交数据做准备 + * 后台取得数据的键值,该键值默认使用给定的编辑器容器的name属性,如果没有name属性则使用参数项里给定的“textarea”项 + * @method sync + * @param { String } formID 指定一个要同步数据的form的id,编辑器的数据会同步到你指定form下 + */ + sync: function (formId) { + var me = this, + form = formId ? document.getElementById(formId) : + domUtils.findParent(me.iframe.parentNode, function (node) { + return node.tagName == 'FORM' + }, true); + form && setValue(form, me); + }, + + /** + * 设置编辑器高度 + * @method setHeight + * @remind 当配置项autoHeightEnabled为真时,该方法无效 + * @param { Number } number 设置的高度值,纯数值,不带单位 + * @example + * ```javascript + * editor.setHeight(number); + * ``` + */ + setHeight: function (height,notSetHeight) { + if (height !== parseInt(this.iframe.parentNode.style.height)) { + this.iframe.parentNode.style.height = height + 'px'; + } + !notSetHeight && (this.options.minFrameHeight = this.options.initialFrameHeight = height); + this.body.style.height = height + 'px'; + !notSetHeight && this.trigger('setHeight') + }, + + /** + * 为编辑器的编辑命令提供快捷键 + * 这个接口是为插件扩展提供的接口,主要是为新添加的插件,如果需要添加快捷键,所提供的接口 + * @method addshortcutkey + * @param { Object } keyset 命令名和快捷键键值对对象,多个按钮的快捷键用“+”分隔 + * @example + * ```javascript + * editor.addshortcutkey({ + * "Bold" : "ctrl+66",//^B + * "Italic" : "ctrl+73", //^I + * }); + * ``` + */ + /** + * 这个接口是为插件扩展提供的接口,主要是为新添加的插件,如果需要添加快捷键,所提供的接口 + * @method addshortcutkey + * @param { String } cmd 触发快捷键时,响应的命令 + * @param { String } keys 快捷键的字符串,多个按钮用“+”分隔 + * @example + * ```javascript + * editor.addshortcutkey("Underline", "ctrl+85"); //^U + * ``` + */ + addshortcutkey: function (cmd, keys) { + var obj = {}; + if (keys) { + obj[cmd] = keys + } else { + obj = cmd; + } + utils.extend(this.shortcutkeys, obj) + }, + + /** + * 对编辑器设置keydown事件监听,绑定快捷键和命令,当快捷键组合触发成功,会响应对应的命令 + * @method _bindshortcutKeys + * @private + */ + _bindshortcutKeys: function () { + var me = this, shortcutkeys = this.shortcutkeys; + me.addListener('keydown', function (type, e) { + var keyCode = e.keyCode || e.which; + for (var i in shortcutkeys) { + var tmp = shortcutkeys[i].split(','); + for (var t = 0, ti; ti = tmp[t++];) { + ti = ti.split(':'); + var key = ti[0], param = ti[1]; + if (/^(ctrl)(\+shift)?\+(\d+)$/.test(key.toLowerCase()) || /^(\d+)$/.test(key)) { + if (( (RegExp.$1 == 'ctrl' ? (e.ctrlKey || e.metaKey) : 0) + && (RegExp.$2 != "" ? e[RegExp.$2.slice(1) + "Key"] : 1) + && keyCode == RegExp.$3 + ) || + keyCode == RegExp.$1 + ) { + if (me.queryCommandState(i,param) != -1) + me.execCommand(i, param); + domUtils.preventDefault(e); + } + } + } + + } + }); + }, + + /** + * 获取编辑器的内容 + * @method getContent + * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @return { String } 编辑器的内容字符串, 如果编辑器的内容为空,或者是空的标签内容(如:”<p><br/></p>“), 则返回空字符串 + * @example + * ```javascript + * //编辑器html内容:

    123456

    + * var content = editor.getContent(); //返回值:

    123456

    + * ``` + */ + + /** + * 获取编辑器的内容。 可以通过参数定义编辑器内置的判空规则 + * @method getContent + * @param { Function } fn 自定的判空规则, 要求该方法返回一个boolean类型的值, + * 代表当前编辑器的内容是否空, + * 如果返回true, 则该方法将直接返回空字符串;如果返回false,则编辑器将返回 + * 经过内置过滤规则处理后的内容。 + * @remind 该方法在处理包含有初始化内容的时候能起到很好的作用。 + * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @return { String } 编辑器的内容字符串 + * @example + * ```javascript + * // editor 是一个编辑器的实例 + * var content = editor.getContent( function ( editor ) { + * return editor.body.innerHTML === '欢迎使用UEditor'; //返回空字符串 + * } ); + * ``` + */ + getContent: function (cmd, fn,notSetCursor,ignoreBlank,formatter) { + var me = this; + if (cmd && utils.isFunction(cmd)) { + fn = cmd; + cmd = ''; + } + if (fn ? !fn() : !this.hasContents()) { + return ''; + } + me.fireEvent('beforegetcontent'); + var root = UE.htmlparser(me.body.innerHTML,ignoreBlank); + me.filterOutputRule(root); + me.fireEvent('aftergetcontent', cmd,root); + return root.toHtml(formatter); + }, + + /** + * 取得完整的html代码,可以直接显示成完整的html文档 + * @method getAllHtml + * @return { String } 编辑器的内容html文档字符串 + * @eaxmple + * ```javascript + * editor.getAllHtml(); //返回格式大致是: ...... + * ``` + */ + getAllHtml: function () { + var me = this, + headHtml = [], + html = ''; + me.fireEvent('getAllHtml', headHtml); + if (browser.ie && browser.version > 8) { + var headHtmlForIE9 = ''; + utils.each(me.document.styleSheets, function (si) { + headHtmlForIE9 += ( si.href ? '' : ''); + }); + utils.each(me.document.getElementsByTagName('script'), function (si) { + headHtmlForIE9 += si.outerHTML; + }); + + } + return '' + (me.options.charset ? '' : '') + + (headHtmlForIE9 || me.document.getElementsByTagName('head')[0].innerHTML) + headHtml.join('\n') + '' + + '' + me.getContent(null, null, true) + ''; + }, + + /** + * 得到编辑器的纯文本内容,但会保留段落格式 + * @method getPlainTxt + * @return { String } 编辑器带段落格式的纯文本内容字符串 + * @example + * ```javascript + * //编辑器html内容:

    1

    2

    + * console.log(editor.getPlainTxt()); //输出:"1\n2\n + * ``` + */ + getPlainTxt: function () { + var reg = new RegExp(domUtils.fillChar, 'g'), + html = this.body.innerHTML.replace(/[\n\r]/g, '');//ie要先去了\n在处理 + html = html.replace(/<(p|div)[^>]*>(| )<\/\1>/gi, '\n') + .replace(//gi, '\n') + .replace(/<[^>/]+>/g, '') + .replace(/(\n)?<\/([^>]+)>/g, function (a, b, c) { + return dtd.$block[c] ? '\n' : b ? b : ''; + }); + //取出来的空格会有c2a0会变成乱码,处理这种情况\u00a0 + return html.replace(reg, '').replace(/\u00a0/g, ' ').replace(/ /g, ' '); + }, + + /** + * 获取编辑器中的纯文本内容,没有段落格式 + * @method getContentTxt + * @return { String } 编辑器不带段落格式的纯文本内容字符串 + * @example + * ```javascript + * //编辑器html内容:

    1

    2

    + * console.log(editor.getPlainTxt()); //输出:"12 + * ``` + */ + getContentTxt: function () { + var reg = new RegExp(domUtils.fillChar, 'g'); + //取出来的空格会有c2a0会变成乱码,处理这种情况\u00a0 + return this.body[browser.ie ? 'innerText' : 'textContent'].replace(reg, '').replace(/\u00a0/g, ' '); + }, + + /** + * 设置编辑器的内容,可修改编辑器当前的html内容 + * @method setContent + * @warning 通过该方法插入的内容,是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @warning 该方法会触发selectionchange事件 + * @param { String } html 要插入的html内容 + * @example + * ```javascript + * editor.getContent('

    test

    '); + * ``` + */ + + /** + * 设置编辑器的内容,可修改编辑器当前的html内容 + * @method setContent + * @warning 通过该方法插入的内容,是经过编辑器内置的过滤规则进行过滤后得到的内容 + * @warning 该方法会触发selectionchange事件 + * @param { String } html 要插入的html内容 + * @param { Boolean } isAppendTo 若传入true,不清空原来的内容,在最后插入内容,否则,清空内容再插入 + * @example + * ```javascript + * //假设设置前的编辑器内容是

    old text

    + * editor.setContent('

    new text

    ', true); //插入的结果是

    old text

    new text

    + * ``` + */ + setContent: function (html, isAppendTo, notFireSelectionchange) { + var me = this; + + me.fireEvent('beforesetcontent', html); + var root = UE.htmlparser(html); + me.filterInputRule(root); + html = root.toHtml(); + + me.body.innerHTML = (isAppendTo ? me.body.innerHTML : '') + html; + + + function isCdataDiv(node){ + return node.tagName == 'DIV' && node.getAttribute('cdata_tag'); + } + //给文本或者inline节点套p标签 + if (me.options.enterTag == 'p') { + + var child = this.body.firstChild, tmpNode; + if (!child || child.nodeType == 1 && + (dtd.$cdata[child.tagName] || isCdataDiv(child) || + domUtils.isCustomeNode(child) + ) + && child === this.body.lastChild) { + this.body.innerHTML = '

    ' + (browser.ie ? ' ' : '
    ') + '

    ' + this.body.innerHTML; + + } else { + var p = me.document.createElement('p'); + while (child) { + while (child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName])) { + tmpNode = child.nextSibling; + p.appendChild(child); + child = tmpNode; + } + if (p.firstChild) { + if (!child) { + me.body.appendChild(p); + break; + } else { + child.parentNode.insertBefore(p, child); + p = me.document.createElement('p'); + } + } + child = child.nextSibling; + } + } + } + me.fireEvent('aftersetcontent'); + me.fireEvent('contentchange'); + + !notFireSelectionchange && me._selectionChange(); + //清除保存的选区 + me._bakRange = me._bakIERange = me._bakNativeRange = null; + //trace:1742 setContent后gecko能得到焦点问题 + var geckoSel; + if (browser.gecko && (geckoSel = this.selection.getNative())) { + geckoSel.removeAllRanges(); + } + if(me.options.autoSyncData){ + me.form && setValue(me.form,me); + } + }, + + /** + * 让编辑器获得焦点,默认focus到编辑器头部 + * @method focus + * @example + * ```javascript + * editor.focus() + * ``` + */ + + /** + * 让编辑器获得焦点,toEnd确定focus位置 + * @method focus + * @param { Boolean } toEnd 默认focus到编辑器头部,toEnd为true时focus到内容尾部 + * @example + * ```javascript + * editor.focus(true) + * ``` + */ + focus: function (toEnd) { + try { + var me = this, + rng = me.selection.getRange(); + if (toEnd) { + var node = me.body.lastChild; + if(node && node.nodeType == 1 && !dtd.$empty[node.tagName]){ + if(domUtils.isEmptyBlock(node)){ + rng.setStartAtFirst(node) + }else{ + rng.setStartAtLast(node) + } + rng.collapse(true); + } + rng.setCursor(true); + } else { + if(!rng.collapsed && domUtils.isBody(rng.startContainer) && rng.startOffset == 0){ + + var node = me.body.firstChild; + if(node && node.nodeType == 1 && !dtd.$empty[node.tagName]){ + rng.setStartAtFirst(node).collapse(true); + } + } + + rng.select(true); + + } + this.fireEvent('focus selectionchange'); + } catch (e) { + } + + }, + isFocus:function(){ + return this.selection.isFocus(); + }, + blur:function(){ + var sel = this.selection.getNative(); + if(sel.empty && browser.ie){ + var nativeRng = document.body.createTextRange(); + nativeRng.moveToElementText(document.body); + nativeRng.collapse(true); + nativeRng.select(); + sel.empty() + }else{ + sel.removeAllRanges() + } + + //this.fireEvent('blur selectionchange'); + }, + /** + * 初始化UE事件及部分事件代理 + * @method _initEvents + * @private + */ + _initEvents: function () { + var me = this, + doc = me.document, + win = me.window; + me._proxyDomEvent = utils.bind(me._proxyDomEvent, me); + domUtils.on(doc, ['click', 'contextmenu', 'mousedown', 'keydown', 'keyup', 'keypress', 'mouseup', 'mouseover', 'mouseout', 'selectstart'], me._proxyDomEvent); + domUtils.on(win, ['focus', 'blur'], me._proxyDomEvent); + domUtils.on(me.body,'drop',function(e){ + //阻止ff下默认的弹出新页面打开图片 + if(browser.gecko && e.stopPropagation) { e.stopPropagation(); } + me.fireEvent('contentchange') + }); + domUtils.on(doc, ['mouseup', 'keydown'], function (evt) { + //特殊键不触发selectionchange + if (evt.type == 'keydown' && (evt.ctrlKey || evt.metaKey || evt.shiftKey || evt.altKey)) { + return; + } + if (evt.button == 2)return; + me._selectionChange(250, evt); + }); + }, + /** + * 触发事件代理 + * @method _proxyDomEvent + * @private + * @return { * } fireEvent的返回值 + * @see UE.EventBase:fireEvent(String) + */ + _proxyDomEvent: function (evt) { + if(this.fireEvent('before' + evt.type.replace(/^on/, '').toLowerCase()) === false){ + return false; + } + if(this.fireEvent(evt.type.replace(/^on/, ''), evt) === false){ + return false; + } + return this.fireEvent('after' + evt.type.replace(/^on/, '').toLowerCase()) + }, + /** + * 变化选区 + * @method _selectionChange + * @private + */ + _selectionChange: function (delay, evt) { + var me = this; + //有光标才做selectionchange 为了解决未focus时点击source不能触发更改工具栏状态的问题(source命令notNeedUndo=1) +// if ( !me.selection.isFocus() ){ +// return; +// } + + + var hackForMouseUp = false; + var mouseX, mouseY; + if (browser.ie && browser.version < 9 && evt && evt.type == 'mouseup') { + var range = this.selection.getRange(); + if (!range.collapsed) { + hackForMouseUp = true; + mouseX = evt.clientX; + mouseY = evt.clientY; + } + } + clearTimeout(_selectionChangeTimer); + _selectionChangeTimer = setTimeout(function () { + if (!me.selection || !me.selection.getNative()) { + return; + } + //修复一个IE下的bug: 鼠标点击一段已选择的文本中间时,可能在mouseup后的一段时间内取到的range是在selection的type为None下的错误值. + //IE下如果用户是拖拽一段已选择文本,则不会触发mouseup事件,所以这里的特殊处理不会对其有影响 + var ieRange; + if (hackForMouseUp && me.selection.getNative().type == 'None') { + ieRange = me.document.body.createTextRange(); + try { + ieRange.moveToPoint(mouseX, mouseY); + } catch (ex) { + ieRange = null; + } + } + var bakGetIERange; + if (ieRange) { + bakGetIERange = me.selection.getIERange; + me.selection.getIERange = function () { + return ieRange; + }; + } + me.selection.cache(); + if (bakGetIERange) { + me.selection.getIERange = bakGetIERange; + } + if (me.selection._cachedRange && me.selection._cachedStartElement) { + me.fireEvent('beforeselectionchange'); + // 第二个参数causeByUi为true代表由用户交互造成的selectionchange. + me.fireEvent('selectionchange', !!evt); + me.fireEvent('afterselectionchange'); + me.selection.clear(); + } + }, delay || 50); + }, + + /** + * 执行编辑命令 + * @method _callCmdFn + * @private + * @param { String } fnName 函数名称 + * @param { * } args 传给命令函数的参数 + * @return { * } 返回命令函数运行的返回值 + */ + _callCmdFn: function (fnName, args) { + var cmdName = args[0].toLowerCase(), + cmd, cmdFn; + cmd = this.commands[cmdName] || UE.commands[cmdName]; + cmdFn = cmd && cmd[fnName]; + //没有querycommandstate或者没有command的都默认返回0 + if ((!cmd || !cmdFn) && fnName == 'queryCommandState') { + return 0; + } else if (cmdFn) { + return cmdFn.apply(this, args); + } + }, + + /** + * 执行编辑命令cmdName,完成富文本编辑效果 + * @method execCommand + * @param { String } cmdName 需要执行的命令 + * @remind 具体命令的使用请参考命令列表 + * @return { * } 返回命令函数运行的返回值 + * @example + * ```javascript + * editor.execCommand(cmdName); + * ``` + */ + execCommand: function (cmdName) { + cmdName = cmdName.toLowerCase(); + var me = this, + result, + cmd = me.commands[cmdName] || UE.commands[cmdName]; + if (!cmd || !cmd.execCommand) { + return null; + } + if (!cmd.notNeedUndo && !me.__hasEnterExecCommand) { + me.__hasEnterExecCommand = true; + if (me.queryCommandState.apply(me,arguments) != -1) { + me.fireEvent('saveScene'); + me.fireEvent.apply(me, ['beforeexeccommand', cmdName].concat(arguments)); + result = this._callCmdFn('execCommand', arguments); + //保存场景时,做了内容对比,再看是否进行contentchange触发,这里多触发了一次,去掉 +// (!cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange'); + me.fireEvent.apply(me, ['afterexeccommand', cmdName].concat(arguments)); + me.fireEvent('saveScene'); + } + me.__hasEnterExecCommand = false; + } else { + result = this._callCmdFn('execCommand', arguments); + (!me.__hasEnterExecCommand && !cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange') + } + (!me.__hasEnterExecCommand && !cmd.ignoreContentChange && !me._ignoreContentChange) && me._selectionChange(); + return result; + }, + + /** + * 根据传入的command命令,查选编辑器当前的选区,返回命令的状态 + * @method queryCommandState + * @param { String } cmdName 需要查询的命令名称 + * @remind 具体命令的使用请参考命令列表 + * @return { Number } number 返回放前命令的状态,返回值三种情况:(-1|0|1) + * @example + * ```javascript + * editor.queryCommandState(cmdName) => (-1|0|1) + * ``` + * @see COMMAND.LIST + */ + queryCommandState: function (cmdName) { + return this._callCmdFn('queryCommandState', arguments); + }, + + /** + * 根据传入的command命令,查选编辑器当前的选区,根据命令返回相关的值 + * @method queryCommandValue + * @param { String } cmdName 需要查询的命令名称 + * @remind 具体命令的使用请参考命令列表 + * @remind 只有部分插件有此方法 + * @return { * } 返回每个命令特定的当前状态值 + * @grammar editor.queryCommandValue(cmdName) => {*} + * @see COMMAND.LIST + */ + queryCommandValue: function (cmdName) { + return this._callCmdFn('queryCommandValue', arguments); + }, + + /** + * 检查编辑区域中是否有内容 + * @method hasContents + * @remind 默认有文本内容,或者有以下节点都不认为是空 + * table,ul,ol,dl,iframe,area,base,col,hr,img,embed,input,link,meta,param + * @return { Boolean } 检查有内容返回true,否则返回false + * @example + * ```javascript + * editor.hasContents() + * ``` + */ + + /** + * 检查编辑区域中是否有内容,若包含参数tags中的节点类型,直接返回true + * @method hasContents + * @param { Array } tags 传入数组判断时用到的节点类型 + * @return { Boolean } 若文档中包含tags数组里对应的tag,返回true,否则返回false + * @example + * ```javascript + * editor.hasContents(['span']); + * ``` + */ + hasContents: function (tags) { + if (tags) { + for (var i = 0, ci; ci = tags[i++];) { + if (this.document.getElementsByTagName(ci).length > 0) { + return true; + } + } + } + if (!domUtils.isEmptyBlock(this.body)) { + return true + } + //随时添加,定义的特殊标签如果存在,不能认为是空 + tags = ['div']; + for (i = 0; ci = tags[i++];) { + var nodes = domUtils.getElementsByTagName(this.document, ci); + for (var n = 0, cn; cn = nodes[n++];) { + if (domUtils.isCustomeNode(cn)) { + return true; + } + } + } + return false; + }, + + /** + * 重置编辑器,可用来做多个tab使用同一个编辑器实例 + * @method reset + * @remind 此方法会清空编辑器内容,清空回退列表,会触发reset事件 + * @example + * ```javascript + * editor.reset() + * ``` + */ + reset: function () { + this.fireEvent('reset'); + }, + + /** + * 设置当前编辑区域可以编辑 + * @method setEnabled + * @example + * ```javascript + * editor.setEnabled() + * ``` + */ + setEnabled: function () { + var me = this, range; + if (me.body.contentEditable == 'false') { + me.body.contentEditable = true; + range = me.selection.getRange(); + //有可能内容丢失了 + try { + range.moveToBookmark(me.lastBk); + delete me.lastBk + } catch (e) { + range.setStartAtFirst(me.body).collapse(true) + } + range.select(true); + if (me.bkqueryCommandState) { + me.queryCommandState = me.bkqueryCommandState; + delete me.bkqueryCommandState; + } + if (me.bkqueryCommandValue) { + me.queryCommandValue = me.bkqueryCommandValue; + delete me.bkqueryCommandValue; + } + me.fireEvent('selectionchange'); + } + }, + enable: function () { + return this.setEnabled(); + }, + + /** 设置当前编辑区域不可编辑 + * @method setDisabled + */ + + /** 设置当前编辑区域不可编辑,except中的命令除外 + * @method setDisabled + * @param { String } except 例外命令的字符串 + * @remind 即使设置了disable,此处配置的例外命令仍然可以执行 + * @example + * ```javascript + * editor.setDisabled('bold'); //禁用工具栏中除加粗之外的所有功能 + * ``` + */ + + /** 设置当前编辑区域不可编辑,except中的命令除外 + * @method setDisabled + * @param { Array } except 例外命令的字符串数组,数组中的命令仍然可以执行 + * @remind 即使设置了disable,此处配置的例外命令仍然可以执行 + * @example + * ```javascript + * editor.setDisabled(['bold','insertimage']); //禁用工具栏中除加粗和插入图片之外的所有功能 + * ``` + */ + setDisabled: function (except) { + var me = this; + except = except ? utils.isArray(except) ? except : [except] : []; + if (me.body.contentEditable == 'true') { + if (!me.lastBk) { + me.lastBk = me.selection.getRange().createBookmark(true); + } + me.body.contentEditable = false; + me.bkqueryCommandState = me.queryCommandState; + me.bkqueryCommandValue = me.queryCommandValue; + me.queryCommandState = function (type) { + if (utils.indexOf(except, type) != -1) { + return me.bkqueryCommandState.apply(me, arguments); + } + return -1; + }; + me.queryCommandValue = function (type) { + if (utils.indexOf(except, type) != -1) { + return me.bkqueryCommandValue.apply(me, arguments); + } + return null; + }; + me.fireEvent('selectionchange'); + } + }, + disable: function (except) { + return this.setDisabled(except); + }, + + /** + * 设置默认内容 + * @method _setDefaultContent + * @private + * @param { String } cont 要存入的内容 + */ + _setDefaultContent: function () { + function clear() { + var me = this; + if (me.document.getElementById('initContent')) { + me.body.innerHTML = '

    ' + (ie ? '' : '
    ') + '

    '; + me.removeListener('firstBeforeExecCommand focus', clear); + setTimeout(function () { + me.focus(); + me._selectionChange(); + }, 0) + } + } + + return function (cont) { + var me = this; + me.body.innerHTML = '

    ' + cont + '

    '; + + me.addListener('firstBeforeExecCommand focus', clear); + } + }(), + + /** + * 显示编辑器 + * @method setShow + * @example + * ```javascript + * editor.setShow() + * ``` + */ + setShow: function () { + var me = this, range = me.selection.getRange(); + if (me.container.style.display == 'none') { + //有可能内容丢失了 + try { + range.moveToBookmark(me.lastBk); + delete me.lastBk + } catch (e) { + range.setStartAtFirst(me.body).collapse(true) + } + //ie下focus实效,所以做了个延迟 + setTimeout(function () { + range.select(true); + }, 100); + me.container.style.display = ''; + } + + }, + show: function () { + return this.setShow(); + }, + /** + * 隐藏编辑器 + * @method setHide + * @example + * ```javascript + * editor.setHide() + * ``` + */ + setHide: function () { + var me = this; + if (!me.lastBk) { + me.lastBk = me.selection.getRange().createBookmark(true); + } + me.container.style.display = 'none' + }, + hide: function () { + return this.setHide(); + }, + + /** + * 根据指定的路径,获取对应的语言资源 + * @method getLang + * @param { String } path 路径根据的是lang目录下的语言文件的路径结构 + * @return { Object | String } 根据路径返回语言资源的Json格式对象或者语言字符串 + * @example + * ```javascript + * editor.getLang('contextMenu.delete'); //如果当前是中文,那返回是的是'删除' + * ``` + */ + getLang: function (path) { + var lang = UE.I18N[this.options.lang]; + if (!lang) { + throw Error("not import language file"); + } + path = (path || "").split("."); + for (var i = 0, ci; ci = path[i++];) { + lang = lang[ci]; + if (!lang)break; + } + return lang; + }, + + /** + * 计算编辑器html内容字符串的长度 + * @method getContentLength + * @return { Number } 返回计算的长度 + * @example + * ```javascript + * //编辑器html内容

    132

    + * editor.getContentLength() //返回27 + * ``` + */ + /** + * 计算编辑器当前纯文本内容的长度 + * @method getContentLength + * @param { Boolean } ingoneHtml 传入true时,只按照纯文本来计算 + * @return { Number } 返回计算的长度,内容中有hr/img/iframe标签,长度加1 + * @example + * ```javascript + * //编辑器html内容

    132

    + * editor.getContentLength() //返回3 + * ``` + */ + getContentLength: function (ingoneHtml, tagNames) { + var count = this.getContent(false,false,true).length; + if (ingoneHtml) { + tagNames = (tagNames || []).concat([ 'hr', 'img', 'iframe']); + count = this.getContentTxt().replace(/[\t\r\n]+/g, '').length; + for (var i = 0, ci; ci = tagNames[i++];) { + count += this.document.getElementsByTagName(ci).length; + } + } + return count; + }, + + /** + * 注册输入过滤规则 + * @method addInputRule + * @param { Function } rule 要添加的过滤规则 + * @example + * ```javascript + * editor.addInputRule(function(root){ + * $.each(root.getNodesByTagName('div'),function(i,node){ + * node.tagName="p"; + * }); + * }); + * ``` + */ + addInputRule: function (rule) { + this.inputRules.push(rule); + }, + + /** + * 执行注册的过滤规则 + * @method filterInputRule + * @param { UE.uNode } root 要过滤的uNode节点 + * @remind 执行editor.setContent方法和执行'inserthtml'命令后,会运行该过滤函数 + * @example + * ```javascript + * editor.filterInputRule(editor.body); + * ``` + * @see UE.Editor:addInputRule + */ + filterInputRule: function (root) { + for (var i = 0, ci; ci = this.inputRules[i++];) { + ci.call(this, root) + } + }, + + /** + * 注册输出过滤规则 + * @method addOutputRule + * @param { Function } rule 要添加的过滤规则 + * @example + * ```javascript + * editor.addOutputRule(function(root){ + * $.each(root.getNodesByTagName('p'),function(i,node){ + * node.tagName="div"; + * }); + * }); + * ``` + */ + addOutputRule: function (rule) { + this.outputRules.push(rule) + }, + + /** + * 根据输出过滤规则,过滤编辑器内容 + * @method filterOutputRule + * @remind 执行editor.getContent方法的时候,会先运行该过滤函数 + * @param { UE.uNode } root 要过滤的uNode节点 + * @example + * ```javascript + * editor.filterOutputRule(editor.body); + * ``` + * @see UE.Editor:addOutputRule + */ + filterOutputRule: function (root) { + for (var i = 0, ci; ci = this.outputRules[i++];) { + ci.call(this, root) + } + }, + + /** + * 根据action名称获取请求的路径 + * @method getActionUrl + * @remind 假如没有设置serverUrl,会根据imageUrl设置默认的controller路径 + * @param { String } action action名称 + * @example + * ```javascript + * editor.getActionUrl('config'); //返回 "/ueditor/php/controller.php?action=config" + * editor.getActionUrl('image'); //返回 "/ueditor/php/controller.php?action=uplaodimage" + * editor.getActionUrl('scrawl'); //返回 "/ueditor/php/controller.php?action=uplaodscrawl" + * editor.getActionUrl('imageManager'); //返回 "/ueditor/php/controller.php?action=listimage" + * ``` + */ + getActionUrl: function(action){ + var actionName = this.getOpt(action) || action, + imageUrl = this.getOpt('imageUrl'), + serverUrl = this.getOpt('serverUrl'); + + if(!serverUrl && imageUrl) { + serverUrl = imageUrl.replace(/^(.*[\/]).+([\.].+)$/, '$1controller$2'); + } + + if(serverUrl) { + serverUrl = serverUrl + (serverUrl.indexOf('?') == -1 ? '?':'&') + 'action=' + (actionName || ''); + return utils.formatUrl(serverUrl); + } else { + return ''; + } + } + }; + utils.inherits(Editor, EventBase); +})(); + + +// core/Editor.defaultoptions.js +//维护编辑器一下默认的不在插件中的配置项 +UE.Editor.defaultOptions = function(editor){ + + var _url = editor.options.UEDITOR_HOME_URL; + return { + isShow: true, + initialContent: '', + initialStyle:'', + autoClearinitialContent: false, + iframeCssUrl: _url + 'themes/iframe.css', + textarea: 'editorValue', + focus: false, + focusInEnd: true, + autoClearEmptyNode: true, + fullscreen: false, + readonly: false, + zIndex: 999, + imagePopup: true, + enterTag: 'p', + customDomain: false, + lang: 'zh-cn', + langPath: _url + 'lang/', + theme: 'default', + themePath: _url + 'themes/', + allHtmlEnabled: false, + scaleEnabled: false, + tableNativeEditInFF: false, + autoSyncData : true, + fileNameFormat: '{time}{rand:6}' + } +}; + +// core/loadconfig.js +(function(){ + + UE.Editor.prototype.loadServerConfig = function(){ + var me = this; + setTimeout(function(){ + try{ + me.options.imageUrl && me.setOpt('serverUrl', me.options.imageUrl.replace(/^(.*[\/]).+([\.].+)$/, '$1controller$2')); + + var configUrl = me.getActionUrl('config'), + isJsonp = utils.isCrossDomainUrl(configUrl); + + /* 发出ajax请求 */ + me._serverConfigLoaded = false; + + configUrl && UE.ajax.request(configUrl,{ + 'method': 'GET', + 'dataType': isJsonp ? 'jsonp':'', + 'onsuccess':function(r){ + try { + var config = isJsonp ? r:eval("("+r.responseText+")"); + utils.extend(me.options, config); + me.fireEvent('serverConfigLoaded'); + me._serverConfigLoaded = true; + } catch (e) { + showErrorMsg(me.getLang('loadconfigFormatError')); + } + }, + 'onerror':function(){ + showErrorMsg(me.getLang('loadconfigHttpError')); + } + }); + } catch(e){ + showErrorMsg(me.getLang('loadconfigError')); + } + }); + + function showErrorMsg(msg) { + console && console.error(msg); + //me.fireEvent('showMessage', { + // 'title': msg, + // 'type': 'error' + //}); + } + }; + + UE.Editor.prototype.isServerConfigLoaded = function(){ + var me = this; + return me._serverConfigLoaded || false; + }; + + UE.Editor.prototype.afterConfigReady = function(handler){ + if (!handler || !utils.isFunction(handler)) return; + var me = this; + var readyHandler = function(){ + handler.apply(me, arguments); + me.removeListener('serverConfigLoaded', readyHandler); + }; + + if (me.isServerConfigLoaded()) { + handler.call(me, 'serverConfigLoaded'); + } else { + me.addListener('serverConfigLoaded', readyHandler); + } + }; + +})(); + + +// core/ajax.js +/** + * @file + * @module UE.ajax + * @since 1.2.6.1 + */ + +/** + * 提供对ajax请求的支持 + * @module UE.ajax + */ +UE.ajax = function() { + + //创建一个ajaxRequest对象 + var fnStr = 'XMLHttpRequest()'; + try { + new ActiveXObject("Msxml2.XMLHTTP"); + fnStr = 'ActiveXObject(\'Msxml2.XMLHTTP\')'; + } catch (e) { + try { + new ActiveXObject("Microsoft.XMLHTTP"); + fnStr = 'ActiveXObject(\'Microsoft.XMLHTTP\')' + } catch (e) { + } + } + var creatAjaxRequest = new Function('return new ' + fnStr); + + + /** + * 将json参数转化成适合ajax提交的参数列表 + * @param json + */ + function json2str(json) { + var strArr = []; + for (var i in json) { + //忽略默认的几个参数 + if(i=="method" || i=="timeout" || i=="async" || i=="dataType" || i=="callback") continue; + //忽略控制 + if(json[i] == undefined || json[i] == null) continue; + //传递过来的对象和函数不在提交之列 + if (!((typeof json[i]).toLowerCase() == "function" || (typeof json[i]).toLowerCase() == "object")) { + strArr.push( encodeURIComponent(i) + "="+encodeURIComponent(json[i]) ); + } else if (utils.isArray(json[i])) { + //支持传数组内容 + for(var j = 0; j < json[i].length; j++) { + strArr.push( encodeURIComponent(i) + "[]="+encodeURIComponent(json[i][j]) ); + } + } + } + return strArr.join("&"); + } + + function doAjax(url, ajaxOptions) { + var xhr = creatAjaxRequest(), + //是否超时 + timeIsOut = false, + //默认参数 + defaultAjaxOptions = { + method:"POST", + timeout:5000, + async:true, + data:{},//需要传递对象的话只能覆盖 + onsuccess:function() { + }, + onerror:function() { + } + }; + + if (typeof url === "object") { + ajaxOptions = url; + url = ajaxOptions.url; + } + if (!xhr || !url) return; + var ajaxOpts = ajaxOptions ? utils.extend(defaultAjaxOptions,ajaxOptions) : defaultAjaxOptions; + + var submitStr = json2str(ajaxOpts); // { name:"Jim",city:"Beijing" } --> "name=Jim&city=Beijing" + //如果用户直接通过data参数传递json对象过来,则也要将此json对象转化为字符串 + if (!utils.isEmptyObject(ajaxOpts.data)){ + submitStr += (submitStr? "&":"") + json2str(ajaxOpts.data); + } + //超时检测 + var timerID = setTimeout(function() { + if (xhr.readyState != 4) { + timeIsOut = true; + xhr.abort(); + clearTimeout(timerID); + } + }, ajaxOpts.timeout); + + var method = ajaxOpts.method.toUpperCase(); + var str = url + (url.indexOf("?")==-1?"?":"&") + (method=="POST"?"":submitStr+ "&noCache=" + +new Date); + xhr.open(method, str, ajaxOpts.async); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + if (!timeIsOut && xhr.status == 200) { + ajaxOpts.onsuccess(xhr); + } else { + ajaxOpts.onerror(xhr); + } + } + }; + if (method == "POST") { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.send(submitStr); + } else { + xhr.send(null); + } + } + + function doJsonp(url, opts) { + + var successhandler = opts.onsuccess || function(){}, + scr = document.createElement('SCRIPT'), + options = opts || {}, + charset = options['charset'], + callbackField = options['jsonp'] || 'callback', + callbackFnName, + timeOut = options['timeOut'] || 0, + timer, + reg = new RegExp('(\\?|&)' + callbackField + '=([^&]*)'), + matches; + + if (utils.isFunction(successhandler)) { + callbackFnName = 'bd__editor__' + Math.floor(Math.random() * 2147483648).toString(36); + window[callbackFnName] = getCallBack(0); + } else if(utils.isString(successhandler)){ + callbackFnName = successhandler; + } else { + if (matches = reg.exec(url)) { + callbackFnName = matches[2]; + } + } + + url = url.replace(reg, '\x241' + callbackField + '=' + callbackFnName); + + if (url.search(reg) < 0) { + url += (url.indexOf('?') < 0 ? '?' : '&') + callbackField + '=' + callbackFnName; + } + + var queryStr = json2str(opts); // { name:"Jim",city:"Beijing" } --> "name=Jim&city=Beijing" + //如果用户直接通过data参数传递json对象过来,则也要将此json对象转化为字符串 + if (!utils.isEmptyObject(opts.data)){ + queryStr += (queryStr? "&":"") + json2str(opts.data); + } + if (queryStr) { + url = url.replace(/\?/, '?' + queryStr + '&'); + } + + scr.onerror = getCallBack(1); + if( timeOut ){ + timer = setTimeout(getCallBack(1), timeOut); + } + createScriptTag(scr, url, charset); + + function createScriptTag(scr, url, charset) { + scr.setAttribute('type', 'text/javascript'); + scr.setAttribute('defer', 'defer'); + charset && scr.setAttribute('charset', charset); + scr.setAttribute('src', url); + document.getElementsByTagName('head')[0].appendChild(scr); + } + + function getCallBack(onTimeOut){ + return function(){ + try { + if(onTimeOut){ + options.onerror && options.onerror(); + }else{ + try{ + clearTimeout(timer); + successhandler.apply(window, arguments); + } catch (e){} + } + } catch (exception) { + options.onerror && options.onerror.call(window, exception); + } finally { + options.oncomplete && options.oncomplete.apply(window, arguments); + scr.parentNode && scr.parentNode.removeChild(scr); + window[callbackFnName] = null; + try { + delete window[callbackFnName]; + }catch(e){} + } + } + } + } + + return { + /** + * 根据给定的参数项,向指定的url发起一个ajax请求。 ajax请求完成后,会根据请求结果调用相应回调: 如果请求 + * 成功, 则调用onsuccess回调, 失败则调用 onerror 回调 + * @method request + * @param { URLString } url ajax请求的url地址 + * @param { Object } ajaxOptions ajax请求选项的键值对,支持的选项如下: + * @example + * ```javascript + * //向sayhello.php发起一个异步的Ajax GET请求, 请求超时时间为10s, 请求完成后执行相应的回调。 + * UE.ajax.requeset( 'sayhello.php', { + * + * //请求方法。可选值: 'GET', 'POST',默认值是'POST' + * method: 'GET', + * + * //超时时间。 默认为5000, 单位是ms + * timeout: 10000, + * + * //是否是异步请求。 true为异步请求, false为同步请求 + * async: true, + * + * //请求携带的数据。如果请求为GET请求, data会经过stringify后附加到请求url之后。 + * data: { + * name: 'ueditor' + * }, + * + * //请求成功后的回调, 该回调接受当前的XMLHttpRequest对象作为参数。 + * onsuccess: function ( xhr ) { + * console.log( xhr.responseText ); + * }, + * + * //请求失败或者超时后的回调。 + * onerror: function ( xhr ) { + * alert( 'Ajax请求失败' ); + * } + * + * } ); + * ``` + */ + + /** + * 根据给定的参数项发起一个ajax请求, 参数项里必须包含一个url地址。 ajax请求完成后,会根据请求结果调用相应回调: 如果请求 + * 成功, 则调用onsuccess回调, 失败则调用 onerror 回调。 + * @method request + * @warning 如果在参数项里未提供一个key为“url”的地址值,则该请求将直接退出。 + * @param { Object } ajaxOptions ajax请求选项的键值对,支持的选项如下: + * @example + * ```javascript + * + * //向sayhello.php发起一个异步的Ajax POST请求, 请求超时时间为5s, 请求完成后不执行任何回调。 + * UE.ajax.requeset( 'sayhello.php', { + * + * //请求的地址, 该项是必须的。 + * url: 'sayhello.php' + * + * } ); + * ``` + */ + request:function(url, opts) { + if (opts && opts.dataType == 'jsonp') { + doJsonp(url, opts); + } else { + doAjax(url, opts); + } + }, + getJSONP:function(url, data, fn) { + var opts = { + 'data': data, + 'oncomplete': fn + }; + doJsonp(url, opts); + } + }; + + +}(); + + +// core/filterword.js +/** + * UE过滤word的静态方法 + * @file + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @module UE + */ + + +/** + * 根据传入html字符串过滤word + * @module UE + * @since 1.2.6.1 + * @method filterWord + * @param { String } html html字符串 + * @return { String } 已过滤后的结果字符串 + * @example + * ```javascript + * UE.filterWord(html); + * ``` + */ +var filterWord = UE.filterWord = function () { + + //是否是word过来的内容 + function isWordDocument( str ) { + return /(class="?Mso|style="[^"]*\bmso\-|w:WordDocument|<(v|o):|lang=)/ig.test( str ); + } + //去掉小数 + function transUnit( v ) { + v = v.replace( /[\d.]+\w+/g, function ( m ) { + return utils.transUnitToPx(m); + } ); + return v; + } + + function filterPasteWord( str ) { + return str.replace(/[\t\r\n]+/g,' ') + .replace( //ig, "" ) + //转换图片 + .replace(/]*>[\s\S]*?.<\/v:shape>/gi,function(str){ + //opera能自己解析出image所这里直接返回空 + if(browser.opera){ + return ''; + } + try{ + //有可能是bitmap占为图,无用,直接过滤掉,主要体现在粘贴excel表格中 + if(/Bitmap/i.test(str)){ + return ''; + } + var width = str.match(/width:([ \d.]*p[tx])/i)[1], + height = str.match(/height:([ \d.]*p[tx])/i)[1], + src = str.match(/src=\s*"([^"]*)"/i)[1]; + return ''; + } catch(e){ + return ''; + } + }) + //针对wps添加的多余标签处理 + .replace(/<\/?div[^>]*>/g,'') + //去掉多余的属性 + .replace( /v:\w+=(["']?)[^'"]+\1/g, '' ) + .replace( /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi, "" ) + .replace( /

    ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

    $1

    " ) + //去掉多余的属性 + .replace( /\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/ig, function(str,name,marks,val){ + //保留list的标示 + return name == 'class' && val == 'MsoListParagraph' ? str : '' + }) + //清除多余的font/span不能匹配 有可能是空格 + .replace( /<(font|span)[^>]*>(\s*)<\/\1>/gi, function(a,b,c){ + return c.replace(/[\t\r\n ]+/g,' ') + }) + //处理style的问题 + .replace( /(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi, function( str, tag, tmp, style ) { + var n = [], + s = style.replace( /^\s+|\s+$/, '' ) + .replace(/'/g,'\'') + .replace( /"/gi, "'" ) + .replace(/[\d.]+(cm|pt)/g,function(str){ + return utils.transUnitToPx(str) + }) + .split( /;\s*/g ); + + for ( var i = 0,v; v = s[i];i++ ) { + + var name, value, + parts = v.split( ":" ); + + if ( parts.length == 2 ) { + name = parts[0].toLowerCase(); + value = parts[1].toLowerCase(); + if(/^(background)\w*/.test(name) && value.replace(/(initial|\s)/g,'').length == 0 + || + /^(margin)\w*/.test(name) && /^0\w+$/.test(value) + ){ + continue; + } + + switch ( name ) { + case "mso-padding-alt": + case "mso-padding-top-alt": + case "mso-padding-right-alt": + case "mso-padding-bottom-alt": + case "mso-padding-left-alt": + case "mso-margin-alt": + case "mso-margin-top-alt": + case "mso-margin-right-alt": + case "mso-margin-bottom-alt": + case "mso-margin-left-alt": + //ie下会出现挤到一起的情况 + //case "mso-table-layout-alt": + case "mso-height": + case "mso-width": + case "mso-vertical-align-alt": + //trace:1819 ff下会解析出padding在table上 + if(!/]/.test(html)) { + return UE.htmlparser(html).children[0] + } else { + return new uNode({ + type:'element', + children:[], + tagName:html + }) + } + }; + uNode.createText = function (data,noTrans) { + return new UE.uNode({ + type:'text', + 'data':noTrans ? data : utils.unhtml(data || '') + }) + }; + function nodeToHtml(node, arr, formatter, current) { + switch (node.type) { + case 'root': + for (var i = 0, ci; ci = node.children[i++];) { + //插入新行 + if (formatter && ci.type == 'element' && !dtd.$inlineWithA[ci.tagName] && i > 1) { + insertLine(arr, current, true); + insertIndent(arr, current) + } + nodeToHtml(ci, arr, formatter, current) + } + break; + case 'text': + isText(node, arr); + break; + case 'element': + isElement(node, arr, formatter, current); + break; + case 'comment': + isComment(node, arr, formatter); + } + return arr; + } + + function isText(node, arr) { + if(node.parentNode.tagName == 'pre'){ + //源码模式下输入html标签,不能做转换处理,直接输出 + arr.push(node.data) + }else{ + arr.push(notTransTagName[node.parentNode.tagName] ? utils.html(node.data) : node.data.replace(/[ ]{2}/g,'  ')) + } + + } + + function isElement(node, arr, formatter, current) { + var attrhtml = ''; + if (node.attrs) { + attrhtml = []; + var attrs = node.attrs; + for (var a in attrs) { + //这里就针对 + //

    '

    + //这里边的\"做转换,要不用innerHTML直接被截断了,属性src + //有可能做的不够 + attrhtml.push(a + (attrs[a] !== undefined ? '="' + (notTransAttrs[a] ? utils.html(attrs[a]).replace(/["]/g, function (a) { + return '"' + }) : utils.unhtml(attrs[a])) + '"' : '')) + } + attrhtml = attrhtml.join(' '); + } + arr.push('<' + node.tagName + + (attrhtml ? ' ' + attrhtml : '') + + (dtd.$empty[node.tagName] ? '\/' : '' ) + '>' + ); + //插入新行 + if (formatter && !dtd.$inlineWithA[node.tagName] && node.tagName != 'pre') { + if(node.children && node.children.length){ + current = insertLine(arr, current, true); + insertIndent(arr, current) + } + + } + if (node.children && node.children.length) { + for (var i = 0, ci; ci = node.children[i++];) { + if (formatter && ci.type == 'element' && !dtd.$inlineWithA[ci.tagName] && i > 1) { + insertLine(arr, current); + insertIndent(arr, current) + } + nodeToHtml(ci, arr, formatter, current) + } + } + if (!dtd.$empty[node.tagName]) { + if (formatter && !dtd.$inlineWithA[node.tagName] && node.tagName != 'pre') { + + if(node.children && node.children.length){ + current = insertLine(arr, current); + insertIndent(arr, current) + } + } + arr.push('<\/' + node.tagName + '>'); + } + + } + + function isComment(node, arr) { + arr.push(''); + } + + function getNodeById(root, id) { + var node; + if (root.type == 'element' && root.getAttr('id') == id) { + return root; + } + if (root.children && root.children.length) { + for (var i = 0, ci; ci = root.children[i++];) { + if (node = getNodeById(ci, id)) { + return node; + } + } + } + } + + function getNodesByTagName(node, tagName, arr) { + if (node.type == 'element' && node.tagName == tagName) { + arr.push(node); + } + if (node.children && node.children.length) { + for (var i = 0, ci; ci = node.children[i++];) { + getNodesByTagName(ci, tagName, arr) + } + } + } + function nodeTraversal(root,fn){ + if(root.children && root.children.length){ + for(var i= 0,ci;ci=root.children[i];){ + nodeTraversal(ci,fn); + //ci被替换的情况,这里就不再走 fn了 + if(ci.parentNode ){ + if(ci.children && ci.children.length){ + fn(ci) + } + if(ci.parentNode) i++ + } + } + }else{ + fn(root) + } + + } + uNode.prototype = { + + /** + * 当前节点对象,转换成html文本 + * @method toHtml + * @return { String } 返回转换后的html字符串 + * @example + * ```javascript + * node.toHtml(); + * ``` + */ + + /** + * 当前节点对象,转换成html文本 + * @method toHtml + * @param { Boolean } formatter 是否格式化返回值 + * @return { String } 返回转换后的html字符串 + * @example + * ```javascript + * node.toHtml( true ); + * ``` + */ + toHtml:function (formatter) { + var arr = []; + nodeToHtml(this, arr, formatter, 0); + return arr.join('') + }, + + /** + * 获取节点的html内容 + * @method innerHTML + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @return { String } 返回节点的html内容 + * @example + * ```javascript + * var htmlstr = node.innerHTML(); + * ``` + */ + + /** + * 设置节点的html内容 + * @method innerHTML + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @param { String } htmlstr 传入要设置的html内容 + * @return { UE.uNode } 返回节点本身 + * @example + * ```javascript + * node.innerHTML('text'); + * ``` + */ + innerHTML:function (htmlstr) { + if (this.type != 'element' || dtd.$empty[this.tagName]) { + return this; + } + if (utils.isString(htmlstr)) { + if(this.children){ + for (var i = 0, ci; ci = this.children[i++];) { + ci.parentNode = null; + } + } + this.children = []; + var tmpRoot = UE.htmlparser(htmlstr); + for (var i = 0, ci; ci = tmpRoot.children[i++];) { + this.children.push(ci); + ci.parentNode = this; + } + return this; + } else { + var tmpRoot = new UE.uNode({ + type:'root', + children:this.children + }); + return tmpRoot.toHtml(); + } + }, + + /** + * 获取节点的纯文本内容 + * @method innerText + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @return { String } 返回节点的存文本内容 + * @example + * ```javascript + * var textStr = node.innerText(); + * ``` + */ + + /** + * 设置节点的纯文本内容 + * @method innerText + * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点 + * @param { String } textStr 传入要设置的文本内容 + * @return { UE.uNode } 返回节点本身 + * @example + * ```javascript + * node.innerText('text'); + * ``` + */ + innerText:function (textStr,noTrans) { + if (this.type != 'element' || dtd.$empty[this.tagName]) { + return this; + } + if (textStr) { + if(this.children){ + for (var i = 0, ci; ci = this.children[i++];) { + ci.parentNode = null; + } + } + this.children = []; + this.appendChild(uNode.createText(textStr,noTrans)); + return this; + } else { + return this.toHtml().replace(/<[^>]+>/g, ''); + } + }, + + /** + * 获取当前对象的data属性 + * @method getData + * @return { Object } 若节点的type值是elemenet,返回空字符串,否则返回节点的data属性 + * @example + * ```javascript + * node.getData(); + * ``` + */ + getData:function () { + if (this.type == 'element') + return ''; + return this.data + }, + + /** + * 获取当前节点下的第一个子节点 + * @method firstChild + * @return { UE.uNode } 返回第一个子节点 + * @example + * ```javascript + * node.firstChild(); //返回第一个子节点 + * ``` + */ + firstChild:function () { +// if (this.type != 'element' || dtd.$empty[this.tagName]) { +// return this; +// } + return this.children ? this.children[0] : null; + }, + + /** + * 获取当前节点下的最后一个子节点 + * @method lastChild + * @return { UE.uNode } 返回最后一个子节点 + * @example + * ```javascript + * node.lastChild(); //返回最后一个子节点 + * ``` + */ + lastChild:function () { +// if (this.type != 'element' || dtd.$empty[this.tagName] ) { +// return this; +// } + return this.children ? this.children[this.children.length - 1] : null; + }, + + /** + * 获取和当前节点有相同父亲节点的前一个节点 + * @method previousSibling + * @return { UE.uNode } 返回前一个节点 + * @example + * ```javascript + * node.children[2].previousSibling(); //返回子节点node.children[1] + * ``` + */ + previousSibling : function(){ + var parent = this.parentNode; + for (var i = 0, ci; ci = parent.children[i]; i++) { + if (ci === this) { + return i == 0 ? null : parent.children[i-1]; + } + } + + }, + + /** + * 获取和当前节点有相同父亲节点的后一个节点 + * @method nextSibling + * @return { UE.uNode } 返回后一个节点,找不到返回null + * @example + * ```javascript + * node.children[2].nextSibling(); //如果有,返回子节点node.children[3] + * ``` + */ + nextSibling : function(){ + var parent = this.parentNode; + for (var i = 0, ci; ci = parent.children[i++];) { + if (ci === this) { + return parent.children[i]; + } + } + }, + + /** + * 用新的节点替换当前节点 + * @method replaceChild + * @param { UE.uNode } target 要替换成该节点参数 + * @param { UE.uNode } source 要被替换掉的节点 + * @return { UE.uNode } 返回替换之后的节点对象 + * @example + * ```javascript + * node.replaceChild(newNode, childNode); //用newNode替换childNode,childNode是node的子节点 + * ``` + */ + replaceChild:function (target, source) { + if (this.children) { + if(target.parentNode){ + target.parentNode.removeChild(target); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === source) { + this.children.splice(i, 1, target); + source.parentNode = null; + target.parentNode = this; + return target; + } + } + } + }, + + /** + * 在节点的子节点列表最后位置插入一个节点 + * @method appendChild + * @param { UE.uNode } node 要插入的节点 + * @return { UE.uNode } 返回刚插入的子节点 + * @example + * ```javascript + * node.appendChild( newNode ); //在node内插入子节点newNode + * ``` + */ + appendChild:function (node) { + if (this.type == 'root' || (this.type == 'element' && !dtd.$empty[this.tagName])) { + if (!this.children) { + this.children = [] + } + if(node.parentNode){ + node.parentNode.removeChild(node); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === node) { + this.children.splice(i, 1); + break; + } + } + this.children.push(node); + node.parentNode = this; + return node; + } + + + }, + + /** + * 在传入节点的前面插入一个节点 + * @method insertBefore + * @param { UE.uNode } target 要插入的节点 + * @param { UE.uNode } source 在该参数节点前面插入 + * @return { UE.uNode } 返回刚插入的子节点 + * @example + * ```javascript + * node.parentNode.insertBefore(newNode, node); //在node节点后面插入newNode + * ``` + */ + insertBefore:function (target, source) { + if (this.children) { + if(target.parentNode){ + target.parentNode.removeChild(target); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === source) { + this.children.splice(i, 0, target); + target.parentNode = this; + return target; + } + } + + } + }, + + /** + * 在传入节点的后面插入一个节点 + * @method insertAfter + * @param { UE.uNode } target 要插入的节点 + * @param { UE.uNode } source 在该参数节点后面插入 + * @return { UE.uNode } 返回刚插入的子节点 + * @example + * ```javascript + * node.parentNode.insertAfter(newNode, node); //在node节点后面插入newNode + * ``` + */ + insertAfter:function (target, source) { + if (this.children) { + if(target.parentNode){ + target.parentNode.removeChild(target); + } + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === source) { + this.children.splice(i + 1, 0, target); + target.parentNode = this; + return target; + } + + } + } + }, + + /** + * 从当前节点的子节点列表中,移除节点 + * @method removeChild + * @param { UE.uNode } node 要移除的节点引用 + * @param { Boolean } keepChildren 是否保留移除节点的子节点,若传入true,自动把移除节点的子节点插入到移除的位置 + * @return { * } 返回刚移除的子节点 + * @example + * ```javascript + * node.removeChild(childNode,true); //在node的子节点列表中移除child节点,并且吧child的子节点插入到移除的位置 + * ``` + */ + removeChild:function (node,keepChildren) { + if (this.children) { + for (var i = 0, ci; ci = this.children[i]; i++) { + if (ci === node) { + this.children.splice(i, 1); + ci.parentNode = null; + if(keepChildren && ci.children && ci.children.length){ + for(var j= 0,cj;cj=ci.children[j];j++){ + this.children.splice(i+j,0,cj); + cj.parentNode = this; + + } + } + return ci; + } + } + } + }, + + /** + * 获取当前节点所代表的元素属性,即获取attrs对象下的属性值 + * @method getAttr + * @param { String } attrName 要获取的属性名称 + * @return { * } 返回attrs对象下的属性值 + * @example + * ```javascript + * node.getAttr('title'); + * ``` + */ + getAttr:function (attrName) { + return this.attrs && this.attrs[attrName.toLowerCase()] + }, + + /** + * 设置当前节点所代表的元素属性,即设置attrs对象下的属性值 + * @method setAttr + * @param { String } attrName 要设置的属性名称 + * @param { * } attrVal 要设置的属性值,类型视设置的属性而定 + * @return { * } 返回attrs对象下的属性值 + * @example + * ```javascript + * node.setAttr('title','标题'); + * ``` + */ + setAttr:function (attrName, attrVal) { + if (!attrName) { + delete this.attrs; + return; + } + if(!this.attrs){ + this.attrs = {}; + } + if (utils.isObject(attrName)) { + for (var a in attrName) { + if (!attrName[a]) { + delete this.attrs[a] + } else { + this.attrs[a.toLowerCase()] = attrName[a]; + } + } + } else { + if (!attrVal) { + delete this.attrs[attrName] + } else { + this.attrs[attrName.toLowerCase()] = attrVal; + } + + } + }, + + /** + * 获取当前节点在父节点下的位置索引 + * @method getIndex + * @return { Number } 返回索引数值,如果没有父节点,返回-1 + * @example + * ```javascript + * node.getIndex(); + * ``` + */ + getIndex:function(){ + var parent = this.parentNode; + for(var i= 0,ci;ci=parent.children[i];i++){ + if(ci === this){ + return i; + } + } + return -1; + }, + + /** + * 在当前节点下,根据id查找节点 + * @method getNodeById + * @param { String } id 要查找的id + * @return { UE.uNode } 返回找到的节点 + * @example + * ```javascript + * node.getNodeById('textId'); + * ``` + */ + getNodeById:function (id) { + var node; + if (this.children && this.children.length) { + for (var i = 0, ci; ci = this.children[i++];) { + if (node = getNodeById(ci, id)) { + return node; + } + } + } + }, + + /** + * 在当前节点下,根据元素名称查找节点列表 + * @method getNodesByTagName + * @param { String } tagNames 要查找的元素名称 + * @return { Array } 返回找到的节点列表 + * @example + * ```javascript + * node.getNodesByTagName('span'); + * ``` + */ + getNodesByTagName:function (tagNames) { + tagNames = utils.trim(tagNames).replace(/[ ]{2,}/g, ' ').split(' '); + var arr = [], me = this; + utils.each(tagNames, function (tagName) { + if (me.children && me.children.length) { + for (var i = 0, ci; ci = me.children[i++];) { + getNodesByTagName(ci, tagName, arr) + } + } + }); + return arr; + }, + + /** + * 根据样式名称,获取节点的样式值 + * @method getStyle + * @param { String } name 要获取的样式名称 + * @return { String } 返回样式值 + * @example + * ```javascript + * node.getStyle('font-size'); + * ``` + */ + getStyle:function (name) { + var cssStyle = this.getAttr('style'); + if (!cssStyle) { + return '' + } + var reg = new RegExp('(^|;)\\s*' + name + ':([^;]+)','i'); + var match = cssStyle.match(reg); + if (match && match[0]) { + return match[2] + } + return ''; + }, + + /** + * 给节点设置样式 + * @method setStyle + * @param { String } name 要设置的的样式名称 + * @param { String } val 要设置的的样值 + * @example + * ```javascript + * node.setStyle('font-size', '12px'); + * ``` + */ + setStyle:function (name, val) { + function exec(name, val) { + var reg = new RegExp('(^|;)\\s*' + name + ':([^;]+;?)', 'gi'); + cssStyle = cssStyle.replace(reg, '$1'); + if (val) { + cssStyle = name + ':' + utils.unhtml(val) + ';' + cssStyle + } + + } + + var cssStyle = this.getAttr('style'); + if (!cssStyle) { + cssStyle = ''; + } + if (utils.isObject(name)) { + for (var a in name) { + exec(a, name[a]) + } + } else { + exec(name, val) + } + this.setAttr('style', utils.trim(cssStyle)) + }, + + /** + * 传入一个函数,递归遍历当前节点下的所有节点 + * @method traversal + * @param { Function } fn 遍历到节点的时,传入节点作为参数,运行此函数 + * @example + * ```javascript + * traversal(node, function(){ + * console.log(node.type); + * }); + * ``` + */ + traversal:function(fn){ + if(this.children && this.children.length){ + nodeTraversal(this,fn); + } + return this; + } + } +})(); + + +// core/htmlparser.js +/** + * html字符串转换成uNode节点 + * @file + * @module UE + * @since 1.2.6.1 + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @unfile + * @module UE + */ + +/** + * html字符串转换成uNode节点的静态方法 + * @method htmlparser + * @param { String } htmlstr 要转换的html代码 + * @param { Boolean } ignoreBlank 若设置为true,转换的时候忽略\n\r\t等空白字符 + * @return { uNode } 给定的html片段转换形成的uNode对象 + * @example + * ```javascript + * var root = UE.htmlparser('

    htmlparser

    ', true); + * ``` + */ + +var htmlparser = UE.htmlparser = function (htmlstr,ignoreBlank) { + //todo 原来的方式 [^"'<>\/] 有\/就不能配对上 ') + } + html.push('') + } + //禁止指定table-width + return '
    这样的标签了 + //先去掉了,加上的原因忘了,这里先记录 + var re_tag = /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)-->)|(?:([^\s\/<>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g, + re_attr = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g; + + //ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除 + var allowEmptyTags = { + b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1, + sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1 + }; + htmlstr = htmlstr.replace(new RegExp(domUtils.fillChar, 'g'), ''); + if(!ignoreBlank){ + htmlstr = htmlstr.replace(new RegExp('[\\r\\t\\n'+(ignoreBlank?'':' ')+']*<\/?(\\w+)\\s*(?:[^>]*)>[\\r\\t\\n'+(ignoreBlank?'':' ')+']*','g'), function(a,b){ + //br暂时单独处理 + if(b && allowEmptyTags[b.toLowerCase()]){ + return a.replace(/(^[\n\r]+)|([\n\r]+$)/g,''); + } + return a.replace(new RegExp('^[\\r\\n'+(ignoreBlank?'':' ')+']+'),'').replace(new RegExp('[\\r\\n'+(ignoreBlank?'':' ')+']+$'),''); + }); + } + + var notTransAttrs = { + 'href':1, + 'src':1 + }; + + var uNode = UE.uNode, + needParentNode = { + 'td':'tr', + 'tr':['tbody','thead','tfoot'], + 'tbody':'table', + 'th':'tr', + 'thead':'table', + 'tfoot':'table', + 'caption':'table', + 'li':['ul', 'ol'], + 'dt':'dl', + 'dd':'dl', + 'option':'select' + }, + needChild = { + 'ol':'li', + 'ul':'li' + }; + + function text(parent, data) { + + if(needChild[parent.tagName]){ + var tmpNode = uNode.createElement(needChild[parent.tagName]); + parent.appendChild(tmpNode); + tmpNode.appendChild(uNode.createText(data)); + parent = tmpNode; + }else{ + + parent.appendChild(uNode.createText(data)); + } + } + + function element(parent, tagName, htmlattr) { + var needParentTag; + if (needParentTag = needParentNode[tagName]) { + var tmpParent = parent,hasParent; + while(tmpParent.type != 'root'){ + if(utils.isArray(needParentTag) ? utils.indexOf(needParentTag, tmpParent.tagName) != -1 : needParentTag == tmpParent.tagName){ + parent = tmpParent; + hasParent = true; + break; + } + tmpParent = tmpParent.parentNode; + } + if(!hasParent){ + parent = element(parent, utils.isArray(needParentTag) ? needParentTag[0] : needParentTag) + } + } + //按dtd处理嵌套 +// if(parent.type != 'root' && !dtd[parent.tagName][tagName]) +// parent = parent.parentNode; + var elm = new uNode({ + parentNode:parent, + type:'element', + tagName:tagName.toLowerCase(), + //是自闭合的处理一下 + children:dtd.$empty[tagName] ? null : [] + }); + //如果属性存在,处理属性 + if (htmlattr) { + var attrs = {}, match; + while (match = re_attr.exec(htmlattr)) { + attrs[match[1].toLowerCase()] = notTransAttrs[match[1].toLowerCase()] ? (match[2] || match[3] || match[4]) : utils.unhtml(match[2] || match[3] || match[4]) + } + elm.attrs = attrs; + } + //trace:3970 +// //如果parent下不能放elm +// if(dtd.$inline[parent.tagName] && dtd.$block[elm.tagName] && !dtd[parent.tagName][elm.tagName]){ +// parent = parent.parentNode; +// elm.parentNode = parent; +// } + parent.children.push(elm); + //如果是自闭合节点返回父亲节点 + return dtd.$empty[tagName] ? parent : elm + } + + function comment(parent, data) { + parent.children.push(new uNode({ + type:'comment', + data:data, + parentNode:parent + })); + } + + var match, currentIndex = 0, nextIndex = 0; + //设置根节点 + var root = new uNode({ + type:'root', + children:[] + }); + var currentParent = root; + + while (match = re_tag.exec(htmlstr)) { + currentIndex = match.index; + try{ + if (currentIndex > nextIndex) { + //text node + text(currentParent, htmlstr.slice(nextIndex, currentIndex)); + } + if (match[3]) { + + if(dtd.$cdata[currentParent.tagName]){ + text(currentParent, match[0]); + }else{ + //start tag + currentParent = element(currentParent, match[3].toLowerCase(), match[4]); + } + + + } else if (match[1]) { + if(currentParent.type != 'root'){ + if(dtd.$cdata[currentParent.tagName] && !dtd.$cdata[match[1]]){ + text(currentParent, match[0]); + }else{ + var tmpParent = currentParent; + while(currentParent.type == 'element' && currentParent.tagName != match[1].toLowerCase()){ + currentParent = currentParent.parentNode; + if(currentParent.type == 'root'){ + currentParent = tmpParent; + throw 'break' + } + } + //end tag + currentParent = currentParent.parentNode; + } + + } + + } else if (match[2]) { + //comment + comment(currentParent, match[2]) + } + }catch(e){} + + nextIndex = re_tag.lastIndex; + + } + //如果结束是文本,就有可能丢掉,所以这里手动判断一下 + //例如
  • sdfsdfsdf
  • sdfsdfsdfsdf + if (nextIndex < htmlstr.length) { + text(currentParent, htmlstr.slice(nextIndex)); + } + return root; +}; + + +// core/filternode.js +/** + * UE过滤节点的静态方法 + * @file + */ + +/** + * UEditor公用空间,UEditor所有的功能都挂载在该空间下 + * @module UE + */ + + +/** + * 根据传入节点和过滤规则过滤相应节点 + * @module UE + * @since 1.2.6.1 + * @method filterNode + * @param { Object } root 指定root节点 + * @param { Object } rules 过滤规则json对象 + * @example + * ```javascript + * UE.filterNode(root,editor.options.filterRules); + * ``` + */ +var filterNode = UE.filterNode = function () { + function filterNode(node,rules){ + switch (node.type) { + case 'text': + break; + case 'element': + var val; + if(val = rules[node.tagName]){ + if(val === '-'){ + node.parentNode.removeChild(node) + }else if(utils.isFunction(val)){ + var parentNode = node.parentNode, + index = node.getIndex(); + val(node); + if(node.parentNode){ + if(node.children){ + for(var i = 0,ci;ci=node.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + }else{ + for(var i = index,ci;ci=parentNode.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + + + }else{ + var attrs = val['$']; + if(attrs && node.attrs){ + var tmpAttrs = {},tmpVal; + for(var a in attrs){ + tmpVal = node.getAttr(a); + //todo 只先对style单独处理 + if(a == 'style' && utils.isArray(attrs[a])){ + var tmpCssStyle = []; + utils.each(attrs[a],function(v){ + var tmp; + if(tmp = node.getStyle(v)){ + tmpCssStyle.push(v + ':' + tmp); + } + }); + tmpVal = tmpCssStyle.join(';') + } + if(tmpVal){ + tmpAttrs[a] = tmpVal; + } + + } + node.attrs = tmpAttrs; + } + if(node.children){ + for(var i = 0,ci;ci=node.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + } + }else{ + //如果不在名单里扣出子节点并删除该节点,cdata除外 + if(dtd.$cdata[node.tagName]){ + node.parentNode.removeChild(node) + }else{ + var parentNode = node.parentNode, + index = node.getIndex(); + node.parentNode.removeChild(node,true); + for(var i = index,ci;ci=parentNode.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + } + } + break; + case 'comment': + node.parentNode.removeChild(node) + } + + } + return function(root,rules){ + if(utils.isEmptyObject(rules)){ + return root; + } + var val; + if(val = rules['-']){ + utils.each(val.split(' '),function(k){ + rules[k] = '-' + }) + } + for(var i= 0,ci;ci=root.children[i];){ + filterNode(ci,rules); + if(ci.parentNode){ + i++; + } + } + return root; + } +}(); + +// core/plugin.js +/** + * Created with JetBrains PhpStorm. + * User: campaign + * Date: 10/8/13 + * Time: 6:15 PM + * To change this template use File | Settings | File Templates. + */ +UE.plugin = function(){ + var _plugins = {}; + return { + register : function(pluginName,fn,oldOptionName,afterDisabled){ + if(oldOptionName && utils.isFunction(oldOptionName)){ + afterDisabled = oldOptionName; + oldOptionName = null + } + _plugins[pluginName] = { + optionName : oldOptionName || pluginName, + execFn : fn, + //当插件被禁用时执行 + afterDisabled : afterDisabled + } + }, + load : function(editor){ + utils.each(_plugins,function(plugin){ + var _export = plugin.execFn.call(editor); + if(editor.options[plugin.optionName] !== false){ + if(_export){ + //后边需要再做扩展 + utils.each(_export,function(v,k){ + switch(k.toLowerCase()){ + case 'shortcutkey': + editor.addshortcutkey(v); + break; + case 'bindevents': + utils.each(v,function(fn,eventName){ + editor.addListener(eventName,fn); + }); + break; + case 'bindmultievents': + utils.each(utils.isArray(v) ? v:[v],function(event){ + var types = utils.trim(event.type).split(/\s+/); + utils.each(types,function(eventName){ + editor.addListener(eventName, event.handler); + }); + }); + break; + case 'commands': + utils.each(v,function(execFn,execName){ + editor.commands[execName] = execFn + }); + break; + case 'outputrule': + editor.addOutputRule(v); + break; + case 'inputrule': + editor.addInputRule(v); + break; + case 'defaultoptions': + editor.setOpt(v) + } + }) + } + + }else if(plugin.afterDisabled){ + plugin.afterDisabled.call(editor) + } + + }); + //向下兼容 + utils.each(UE.plugins,function(plugin){ + plugin.call(editor); + }); + }, + run : function(pluginName,editor){ + var plugin = _plugins[pluginName]; + if(plugin){ + plugin.exeFn.call(editor) + } + } + } +}(); + +// core/keymap.js +var keymap = UE.keymap = { + 'Backspace' : 8, + 'Tab' : 9, + 'Enter' : 13, + + 'Shift':16, + 'Control':17, + 'Alt':18, + 'CapsLock':20, + + 'Esc':27, + + 'Spacebar':32, + + 'PageUp':33, + 'PageDown':34, + 'End':35, + 'Home':36, + + 'Left':37, + 'Up':38, + 'Right':39, + 'Down':40, + + 'Insert':45, + + 'Del':46, + + 'NumLock':144, + + 'Cmd':91, + + '=':187, + '-':189, + + "b":66, + 'i':73, + //回退 + 'z':90, + 'y':89, + //粘贴 + 'v' : 86, + 'x' : 88, + + 's' : 83, + + 'n' : 78 +}; + +// core/localstorage.js +//存储媒介封装 +var LocalStorage = UE.LocalStorage = (function () { + + var storage = window.localStorage || getUserData() || null, + LOCAL_FILE = 'localStorage'; + + return { + + saveLocalData: function (key, data) { + + if (storage && data) { + storage.setItem(key, data); + return true; + } + + return false; + + }, + + getLocalData: function (key) { + + if (storage) { + return storage.getItem(key); + } + + return null; + + }, + + removeItem: function (key) { + + storage && storage.removeItem(key); + + } + + }; + + function getUserData() { + + var container = document.createElement("div"); + container.style.display = "none"; + + if (!container.addBehavior) { + return null; + } + + container.addBehavior("#default#userdata"); + + return { + + getItem: function (key) { + + var result = null; + + try { + document.body.appendChild(container); + container.load(LOCAL_FILE); + result = container.getAttribute(key); + document.body.removeChild(container); + } catch (e) { + } + + return result; + + }, + + setItem: function (key, value) { + + document.body.appendChild(container); + container.setAttribute(key, value); + container.save(LOCAL_FILE); + document.body.removeChild(container); + + }, + + //// 暂时没有用到 + //clear: function () { + // + // var expiresTime = new Date(); + // expiresTime.setFullYear(expiresTime.getFullYear() - 1); + // document.body.appendChild(container); + // container.expires = expiresTime.toUTCString(); + // container.save(LOCAL_FILE); + // document.body.removeChild(container); + // + //}, + + removeItem: function (key) { + + document.body.appendChild(container); + container.removeAttribute(key); + container.save(LOCAL_FILE); + document.body.removeChild(container); + + } + + }; + + } + +})(); + +(function () { + + var ROOTKEY = 'ueditor_preference'; + + UE.Editor.prototype.setPreferences = function(key,value){ + var obj = {}; + if (utils.isString(key)) { + obj[ key ] = value; + } else { + obj = key; + } + var data = LocalStorage.getLocalData(ROOTKEY); + if (data && (data = utils.str2json(data))) { + utils.extend(data, obj); + } else { + data = obj; + } + data && LocalStorage.saveLocalData(ROOTKEY, utils.json2str(data)); + }; + + UE.Editor.prototype.getPreferences = function(key){ + var data = LocalStorage.getLocalData(ROOTKEY); + if (data && (data = utils.str2json(data))) { + return key ? data[key] : data + } + return null; + }; + + UE.Editor.prototype.removePreferences = function (key) { + var data = LocalStorage.getLocalData(ROOTKEY); + if (data && (data = utils.str2json(data))) { + data[key] = undefined; + delete data[key] + } + data && LocalStorage.saveLocalData(ROOTKEY, utils.json2str(data)); + }; + +})(); + + +// plugins/defaultfilter.js +///import core +///plugin 编辑器默认的过滤转换机制 + +UE.plugins['defaultfilter'] = function () { + var me = this; + me.setOpt({ + 'allowDivTransToP':true, + 'disabledTableInTable':true + }); + //默认的过滤处理 + //进入编辑器的内容处理 + me.addInputRule(function (root) { + var allowDivTransToP = this.options.allowDivTransToP; + var val; + function tdParent(node){ + while(node && node.type == 'element'){ + if(node.tagName == 'td'){ + return true; + } + node = node.parentNode; + } + return false; + } + //进行默认的处理 + root.traversal(function (node) { + if (node.type == 'element') { + if (!dtd.$cdata[node.tagName] && me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) { + if (!node.firstChild()) node.parentNode.removeChild(node); + else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) { + node.parentNode.removeChild(node, true) + } + return; + } + switch (node.tagName) { + case 'style': + case 'script': + node.setAttr({ + cdata_tag: node.tagName, + cdata_data: (node.innerHTML() || ''), + '_ue_custom_node_':'true' + }); + node.tagName = 'div'; + node.innerHTML(''); + break; + case 'a': + if (val = node.getAttr('href')) { + node.setAttr('_href', val) + } + break; + case 'img': + //todo base64暂时去掉,后边做远程图片上传后,干掉这个 + if (val = node.getAttr('src')) { + if (/^data:/.test(val)) { + node.parentNode.removeChild(node); + break; + } + } + node.setAttr('_src', node.getAttr('src')); + break; + case 'span': + if (browser.webkit && (val = node.getStyle('white-space'))) { + if (/nowrap|normal/.test(val)) { + node.setStyle('white-space', ''); + if (me.options.autoClearEmptyNode && utils.isEmptyObject(node.attrs)) { + node.parentNode.removeChild(node, true) + } + } + } + val = node.getAttr('id'); + if(val && /^_baidu_bookmark_/i.test(val)){ + node.parentNode.removeChild(node) + } + break; + case 'p': + if (val = node.getAttr('align')) { + node.setAttr('align'); + node.setStyle('text-align', val) + } + //trace:3431 +// var cssStyle = node.getAttr('style'); +// if (cssStyle) { +// cssStyle = cssStyle.replace(/(margin|padding)[^;]+/g, ''); +// node.setAttr('style', cssStyle) +// +// } + //p标签不允许嵌套 + utils.each(node.children,function(n){ + if(n.type == 'element' && n.tagName == 'p'){ + var next = n.nextSibling(); + node.parentNode.insertAfter(n,node); + var last = n; + while(next){ + var tmp = next.nextSibling(); + node.parentNode.insertAfter(next,last); + last = next; + next = tmp; + } + return false; + } + }); + if (!node.firstChild()) { + node.innerHTML(browser.ie ? ' ' : '
    ') + } + break; + case 'div': + if(node.getAttr('cdata_tag')){ + break; + } + //针对代码这里不处理插入代码的div + val = node.getAttr('class'); + if(val && /^line number\d+/.test(val)){ + break; + } + if(!allowDivTransToP){ + break; + } + var tmpNode, p = UE.uNode.createElement('p'); + while (tmpNode = node.firstChild()) { + if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) { + p.appendChild(tmpNode); + } else { + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + p = UE.uNode.createElement('p'); + } else { + node.parentNode.insertBefore(tmpNode, node); + } + } + } + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + } + node.parentNode.removeChild(node); + break; + case 'dl': + node.tagName = 'ul'; + break; + case 'dt': + case 'dd': + node.tagName = 'li'; + break; + case 'li': + var className = node.getAttr('class'); + if (!className || !/list\-/.test(className)) { + node.setAttr() + } + var tmpNodes = node.getNodesByTagName('ol ul'); + UE.utils.each(tmpNodes, function (n) { + node.parentNode.insertAfter(n, node); + }); + break; + case 'td': + case 'th': + case 'caption': + if(!node.children || !node.children.length){ + node.appendChild(browser.ie11below ? UE.uNode.createText(' ') : UE.uNode.createElement('br')) + } + break; + case 'table': + if(me.options.disabledTableInTable && tdParent(node)){ + node.parentNode.insertBefore(UE.uNode.createText(node.innerText()),node); + node.parentNode.removeChild(node) + } + } + + } +// if(node.type == 'comment'){ +// node.parentNode.removeChild(node); +// } + }) + + }); + + //从编辑器出去的内容处理 + me.addOutputRule(function (root) { + + var val; + root.traversal(function (node) { + if (node.type == 'element') { + + if (me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) { + + if (!node.firstChild()) node.parentNode.removeChild(node); + else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) { + node.parentNode.removeChild(node, true) + } + return; + } + switch (node.tagName) { + case 'div': + if (val = node.getAttr('cdata_tag')) { + node.tagName = val; + node.appendChild(UE.uNode.createText(node.getAttr('cdata_data'))); + node.setAttr({cdata_tag: '', cdata_data: '','_ue_custom_node_':''}); + } + break; + case 'a': + if (val = node.getAttr('_href')) { + node.setAttr({ + 'href': utils.html(val), + '_href': '' + }) + } + break; + break; + case 'span': + val = node.getAttr('id'); + if(val && /^_baidu_bookmark_/i.test(val)){ + node.parentNode.removeChild(node) + } + break; + case 'img': + if (val = node.getAttr('_src')) { + node.setAttr({ + 'src': node.getAttr('_src'), + '_src': '' + }) + } + + + } + } + + }) + + + }); +}; + + +// plugins/inserthtml.js +/** + * 插入html字符串插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入html代码 + * @command inserthtml + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } html 插入的html字符串 + * @remaind 插入的标签内容是在当前的选区位置上插入,如果当前是闭合状态,那直接插入内容, 如果当前是选中状态,将先清除当前选中内容后,再做插入 + * @warning 注意:该命令会对当前选区的位置,对插入的内容进行过滤转换处理。 过滤的规则遵循html语意化的原则。 + * @example + * ```javascript + * //xxx[BB]xxx 当前选区为非闭合选区,选中BB这两个文本 + * //执行命令,插入CC + * //插入后的效果 xxxCCxxx + * //

    xx|xxx

    当前选区为闭合状态 + * //插入

    CC

    + * //结果

    xx

    CC

    xxx

    + * //

    xxxx

    |

    xxx

    当前选区在两个p标签之间 + * //插入 xxxx + * //结果

    xxxx

    xxxx

    xxx

    + * ``` + */ + +UE.commands['inserthtml'] = { + execCommand: function (command,html,notNeedFilter){ + var me = this, + range, + div; + if(!html){ + return; + } + if(me.fireEvent('beforeinserthtml',html) === true){ + return; + } + range = me.selection.getRange(); + div = range.document.createElement( 'div' ); + div.style.display = 'inline'; + + if (!notNeedFilter) { + var root = UE.htmlparser(html); + //如果给了过滤规则就先进行过滤 + if(me.options.filterRules){ + UE.filterNode(root,me.options.filterRules); + } + //执行默认的处理 + me.filterInputRule(root); + html = root.toHtml() + } + div.innerHTML = utils.trim( html ); + + if ( !range.collapsed ) { + var tmpNode = range.startContainer; + if(domUtils.isFillChar(tmpNode)){ + range.setStartBefore(tmpNode) + } + tmpNode = range.endContainer; + if(domUtils.isFillChar(tmpNode)){ + range.setEndAfter(tmpNode) + } + range.txtToElmBoundary(); + //结束边界可能放到了br的前边,要把br包含进来 + // x[xxx]
    + if(range.endContainer && range.endContainer.nodeType == 1){ + tmpNode = range.endContainer.childNodes[range.endOffset]; + if(tmpNode && domUtils.isBr(tmpNode)){ + range.setEndAfter(tmpNode); + } + } + if(range.startOffset == 0){ + tmpNode = range.startContainer; + if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){ + tmpNode = range.endContainer; + if(range.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){ + me.body.innerHTML = '

    '+(browser.ie ? '' : '
    ')+'

    '; + range.setStart(me.body.firstChild,0).collapse(true) + + } + } + } + !range.collapsed && range.deleteContents(); + if(range.startContainer.nodeType == 1){ + var child = range.startContainer.childNodes[range.startOffset],pre; + if(child && domUtils.isBlockElm(child) && (pre = child.previousSibling) && domUtils.isBlockElm(pre)){ + range.setEnd(pre,pre.childNodes.length).collapse(); + while(child.firstChild){ + pre.appendChild(child.firstChild); + } + domUtils.remove(child); + } + } + + } + + + var child,parent,pre,tmp,hadBreak = 0, nextNode; + //如果当前位置选中了fillchar要干掉,要不会产生空行 + if(range.inFillChar()){ + child = range.startContainer; + if(domUtils.isFillChar(child)){ + range.setStartBefore(child).collapse(true); + domUtils.remove(child); + }else if(domUtils.isFillChar(child,true)){ + child.nodeValue = child.nodeValue.replace(fillCharReg,''); + range.startOffset--; + range.collapsed && range.collapse(true) + } + } + //列表单独处理 + var li = domUtils.findParentByTagName(range.startContainer,'li',true); + if(li){ + var next,last; + while(child = div.firstChild){ + //针对hr单独处理一下先 + while(child && (child.nodeType == 3 || !domUtils.isBlockElm(child) || child.tagName=='HR' )){ + next = child.nextSibling; + range.insertNode( child).collapse(); + last = child; + child = next; + + } + if(child){ + if(/^(ol|ul)$/i.test(child.tagName)){ + while(child.firstChild){ + last = child.firstChild; + domUtils.insertAfter(li,child.firstChild); + li = li.nextSibling; + } + domUtils.remove(child) + }else{ + var tmpLi; + next = child.nextSibling; + tmpLi = me.document.createElement('li'); + domUtils.insertAfter(li,tmpLi); + tmpLi.appendChild(child); + last = child; + child = next; + li = tmpLi; + } + } + } + li = domUtils.findParentByTagName(range.startContainer,'li',true); + if(domUtils.isEmptyBlock(li)){ + domUtils.remove(li) + } + if(last){ + + range.setStartAfter(last).collapse(true).select(true) + } + }else{ + while ( child = div.firstChild ) { + if(hadBreak){ + var p = me.document.createElement('p'); + while(child && (child.nodeType == 3 || !dtd.$block[child.tagName])){ + nextNode = child.nextSibling; + p.appendChild(child); + child = nextNode; + } + if(p.firstChild){ + + child = p + } + } + range.insertNode( child ); + nextNode = child.nextSibling; + if ( !hadBreak && child.nodeType == domUtils.NODE_ELEMENT && domUtils.isBlockElm( child ) ){ + + parent = domUtils.findParent( child,function ( node ){ return domUtils.isBlockElm( node ); } ); + if ( parent && parent.tagName.toLowerCase() != 'body' && !(dtd[parent.tagName][child.nodeName] && child.parentNode === parent)){ + if(!dtd[parent.tagName][child.nodeName]){ + pre = parent; + }else{ + tmp = child.parentNode; + while (tmp !== parent){ + pre = tmp; + tmp = tmp.parentNode; + + } + } + + + domUtils.breakParent( child, pre || tmp ); + //去掉break后前一个多余的节点

    |<[p> ==>

    |

    + var pre = child.previousSibling; + domUtils.trimWhiteTextNode(pre); + if(!pre.childNodes.length){ + domUtils.remove(pre); + } + //trace:2012,在非ie的情况,切开后剩下的节点有可能不能点入光标添加br占位 + + if(!browser.ie && + (next = child.nextSibling) && + domUtils.isBlockElm(next) && + next.lastChild && + !domUtils.isBr(next.lastChild)){ + next.appendChild(me.document.createElement('br')); + } + hadBreak = 1; + } + } + var next = child.nextSibling; + if(!div.firstChild && next && domUtils.isBlockElm(next)){ + + range.setStart(next,0).collapse(true); + break; + } + range.setEndAfter( child ).collapse(); + + } + + child = range.startContainer; + + if(nextNode && domUtils.isBr(nextNode)){ + domUtils.remove(nextNode) + } + //用chrome可能有空白展位符 + if(domUtils.isBlockElm(child) && domUtils.isEmptyNode(child)){ + if(nextNode = child.nextSibling){ + domUtils.remove(child); + if(nextNode.nodeType == 1 && dtd.$block[nextNode.tagName]){ + + range.setStart(nextNode,0).collapse(true).shrinkBoundary() + } + }else{ + + try{ + child.innerHTML = browser.ie ? domUtils.fillChar : '
    '; + }catch(e){ + range.setStartBefore(child); + domUtils.remove(child) + } + + } + + } + //加上true因为在删除表情等时会删两次,第一次是删的fillData + try{ + range.select(true); + }catch(e){} + + } + + + + setTimeout(function(){ + range = me.selection.getRange(); + range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled ? domUtils.getXY(me.iframe).y:0); + me.fireEvent('afterinserthtml', html); + },200); + } +}; + + +// plugins/autotypeset.js +/** + * 自动排版 + * @file + * @since 1.2.6.1 + */ + +/** + * 对当前编辑器的内容执行自动排版, 排版的行为根据config配置文件里的“autotypeset”选项进行控制。 + * @command autotypeset + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'autotypeset' ); + * ``` + */ + +UE.plugins['autotypeset'] = function(){ + + this.setOpt({'autotypeset': { + mergeEmptyline: true, //合并空行 + removeClass: true, //去掉冗余的class + removeEmptyline: false, //去掉空行 + textAlign:"left", //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版 + imageBlockLine: 'center', //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版 + pasteFilter: false, //根据规则过滤没事粘贴进来的内容 + clearFontSize: false, //去掉所有的内嵌字号,使用编辑器默认的字号 + clearFontFamily: false, //去掉所有的内嵌字体,使用编辑器默认的字体 + removeEmptyNode: false, // 去掉空节点 + //可以去掉的标签 + removeTagNames: utils.extend({div:1},dtd.$removeEmpty), + indent: false, // 行首缩进 + indentValue : '2em', //行首缩进的大小 + bdc2sb: false, + tobdc: false + }}); + + var me = this, + opt = me.options.autotypeset, + remainClass = { + 'selectTdClass':1, + 'pagebreak':1, + 'anchorclass':1 + }, + remainTag = { + 'li':1 + }, + tags = { + div:1, + p:1, + //trace:2183 这些也认为是行 + blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1, + span:1 + }, + highlightCont; + //升级了版本,但配置项目里没有autotypeset + if(!opt){ + return; + } + + readLocalOpts(); + + function isLine(node,notEmpty){ + if(!node || node.nodeType == 3) + return 0; + if(domUtils.isBr(node)) + return 1; + if(node && node.parentNode && tags[node.tagName.toLowerCase()]){ + if(highlightCont && highlightCont.contains(node) + || + node.getAttribute('pagebreak') + ){ + return 0; + } + + return notEmpty ? !domUtils.isEmptyBlock(node) : domUtils.isEmptyBlock(node,new RegExp('[\\s'+domUtils.fillChar + +']','g')); + } + } + + function removeNotAttributeSpan(node){ + if(!node.style.cssText){ + domUtils.removeAttributes(node,['style']); + if(node.tagName.toLowerCase() == 'span' && domUtils.hasNoAttributes(node)){ + domUtils.remove(node,true); + } + } + } + function autotype(type,html){ + + var me = this,cont; + if(html){ + if(!opt.pasteFilter){ + return; + } + cont = me.document.createElement('div'); + cont.innerHTML = html.html; + }else{ + cont = me.document.body; + } + var nodes = domUtils.getElementsByTagName(cont,'*'); + + // 行首缩进,段落方向,段间距,段内间距 + for(var i=0,ci;ci=nodes[i++];){ + + if(me.fireEvent('excludeNodeinautotype',ci) === true){ + continue; + } + //font-size + if(opt.clearFontSize && ci.style.fontSize){ + domUtils.removeStyle(ci,'font-size'); + + removeNotAttributeSpan(ci); + + } + //font-family + if(opt.clearFontFamily && ci.style.fontFamily){ + domUtils.removeStyle(ci,'font-family'); + removeNotAttributeSpan(ci); + } + + if(isLine(ci)){ + //合并空行 + if(opt.mergeEmptyline ){ + var next = ci.nextSibling,tmpNode,isBr = domUtils.isBr(ci); + while(isLine(next)){ + tmpNode = next; + next = tmpNode.nextSibling; + if(isBr && (!next || next && !domUtils.isBr(next))){ + break; + } + domUtils.remove(tmpNode); + } + + } + //去掉空行,保留占位的空行 + if(opt.removeEmptyline && domUtils.inDoc(ci,cont) && !remainTag[ci.parentNode.tagName.toLowerCase()] ){ + if(domUtils.isBr(ci)){ + next = ci.nextSibling; + if(next && !domUtils.isBr(next)){ + continue; + } + } + domUtils.remove(ci); + continue; + + } + + } + if(isLine(ci,true) && ci.tagName != 'SPAN'){ + if(opt.indent){ + ci.style.textIndent = opt.indentValue; + } + if(opt.textAlign){ + ci.style.textAlign = opt.textAlign; + } + // if(opt.lineHeight) + // ci.style.lineHeight = opt.lineHeight + 'cm'; + + } + + //去掉class,保留的class不去掉 + if(opt.removeClass && ci.className && !remainClass[ci.className.toLowerCase()]){ + + if(highlightCont && highlightCont.contains(ci)){ + continue; + } + domUtils.removeAttributes(ci,['class']); + } + + //表情不处理 + if(opt.imageBlockLine && ci.tagName.toLowerCase() == 'img' && !ci.getAttribute('emotion')){ + if(html){ + var img = ci; + switch (opt.imageBlockLine){ + case 'left': + case 'right': + case 'none': + var pN = img.parentNode,tmpNode,pre,next; + while(dtd.$inline[pN.tagName] || pN.tagName == 'A'){ + pN = pN.parentNode; + } + tmpNode = pN; + if(tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode,'text-align') == 'center'){ + if(!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode,function(node){return !domUtils.isBr(node) && !domUtils.isWhitespace(node)}) == 1){ + pre = tmpNode.previousSibling; + next = tmpNode.nextSibling; + if(pre && next && pre.nodeType == 1 && next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)){ + pre.appendChild(tmpNode.firstChild); + while(next.firstChild){ + pre.appendChild(next.firstChild); + } + domUtils.remove(tmpNode); + domUtils.remove(next); + }else{ + domUtils.setStyle(tmpNode,'text-align',''); + } + + + } + + + } + domUtils.setStyle(img,'float', opt.imageBlockLine); + break; + case 'center': + if(me.queryCommandValue('imagefloat') != 'center'){ + pN = img.parentNode; + domUtils.setStyle(img,'float','none'); + tmpNode = img; + while(pN && domUtils.getChildCount(pN,function(node){return !domUtils.isBr(node) && !domUtils.isWhitespace(node)}) == 1 + && (dtd.$inline[pN.tagName] || pN.tagName == 'A')){ + tmpNode = pN; + pN = pN.parentNode; + } + var pNode = me.document.createElement('p'); + domUtils.setAttributes(pNode,{ + + style:'text-align:center' + }); + tmpNode.parentNode.insertBefore(pNode,tmpNode); + pNode.appendChild(tmpNode); + domUtils.setStyle(tmpNode,'float',''); + + } + + + } + } else { + var range = me.selection.getRange(); + range.selectNode(ci).select(); + me.execCommand('imagefloat', opt.imageBlockLine); + } + + } + + //去掉冗余的标签 + if(opt.removeEmptyNode){ + if(opt.removeTagNames[ci.tagName.toLowerCase()] && domUtils.hasNoAttributes(ci) && domUtils.isEmptyBlock(ci)){ + domUtils.remove(ci); + } + } + } + if(opt.tobdc){ + var root = UE.htmlparser(cont.innerHTML); + root.traversal(function(node){ + if(node.type == 'text'){ + node.data = ToDBC(node.data) + } + }); + cont.innerHTML = root.toHtml() + } + if(opt.bdc2sb){ + var root = UE.htmlparser(cont.innerHTML); + root.traversal(function(node){ + if(node.type == 'text'){ + node.data = DBC2SB(node.data) + } + }); + cont.innerHTML = root.toHtml() + } + if(html){ + html.html = cont.innerHTML; + } + } + if(opt.pasteFilter){ + me.addListener('beforepaste',autotype); + } + + function DBC2SB(str) { + var result = ''; + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); //获取当前字符的unicode编码 + if (code >= 65281 && code <= 65373)//在这个unicode编码范围中的是所有的英文字母已经各种字符 + { + result += String.fromCharCode(str.charCodeAt(i) - 65248); //把全角字符的unicode编码转换为对应半角字符的unicode码 + } else if (code == 12288)//空格 + { + result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32); + } else { + result += str.charAt(i); + } + } + return result; + } + function ToDBC(txtstring) { + txtstring = utils.html(txtstring); + var tmp = ""; + var mark = "";/*用于判断,如果是html尖括里的标记,则不进行全角的转换*/ + for (var i = 0; i < txtstring.length; i++) { + if (txtstring.charCodeAt(i) == 32) { + tmp = tmp + String.fromCharCode(12288); + } + else if (txtstring.charCodeAt(i) < 127) { + tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i) + 65248); + } + else { + tmp += txtstring.charAt(i); + } + } + return tmp; + } + + function readLocalOpts() { + var cookieOpt = me.getPreferences('autotypeset'); + utils.extend(me.options.autotypeset, cookieOpt); + } + + me.commands['autotypeset'] = { + execCommand:function () { + me.removeListener('beforepaste',autotype); + if(opt.pasteFilter){ + me.addListener('beforepaste',autotype); + } + autotype.call(me) + } + + }; + +}; + + + +// plugins/autosubmit.js +/** + * 快捷键提交 + * @file + * @since 1.2.6.1 + */ + +/** + * 提交表单 + * @command autosubmit + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'autosubmit' ); + * ``` + */ + +UE.plugin.register('autosubmit',function(){ + return { + shortcutkey:{ + "autosubmit":"ctrl+13" //手动提交 + }, + commands:{ + 'autosubmit':{ + execCommand:function () { + var me=this, + form = domUtils.findParentByTagName(me.iframe,"form", false); + if (form){ + if(me.fireEvent("beforesubmit")===false){ + return; + } + me.sync(); + form.submit(); + } + } + } + } + } +}); + +// plugins/background.js +/** + * 背景插件,为UEditor提供设置背景功能 + * @file + * @since 1.2.6.1 + */ +UE.plugin.register('background', function () { + var me = this, + cssRuleId = 'editor_background', + isSetColored, + reg = new RegExp('body[\\s]*\\{(.+)\\}', 'i'); + + function stringToObj(str) { + var obj = {}, styles = str.split(';'); + utils.each(styles, function (v) { + var index = v.indexOf(':'), + key = utils.trim(v.substr(0, index)).toLowerCase(); + key && (obj[key] = utils.trim(v.substr(index + 1) || '')); + }); + return obj; + } + + function setBackground(obj) { + if (obj) { + var styles = []; + for (var name in obj) { + if (obj.hasOwnProperty(name)) { + styles.push(name + ":" + obj[name] + '; '); + } + } + utils.cssRule(cssRuleId, styles.length ? ('body{' + styles.join("") + '}') : '', me.document); + } else { + utils.cssRule(cssRuleId, '', me.document) + } + } + //重写editor.hasContent方法 + + var orgFn = me.hasContents; + me.hasContents = function(){ + if(me.queryCommandValue('background')){ + return true + } + return orgFn.apply(me,arguments); + }; + return { + bindEvents: { + 'getAllHtml': function (type, headHtml) { + var body = this.body, + su = domUtils.getComputedStyle(body, "background-image"), + url = ""; + if (su.indexOf(me.options.imagePath) > 0) { + url = su.substring(su.indexOf(me.options.imagePath), su.length - 1).replace(/"|\(|\)/ig, ""); + } else { + url = su != "none" ? su.replace(/url\("?|"?\)/ig, "") : ""; + } + var html = ' '; + headHtml.push(html); + }, + 'aftersetcontent': function () { + if(isSetColored == false) setBackground(); + } + }, + inputRule: function (root) { + isSetColored = false; + utils.each(root.getNodesByTagName('p'), function (p) { + var styles = p.getAttr('data-background'); + if (styles) { + isSetColored = true; + setBackground(stringToObj(styles)); + p.parentNode.removeChild(p); + } + }) + }, + outputRule: function (root) { + var me = this, + styles = (utils.cssRule(cssRuleId, me.document) || '').replace(/[\n\r]+/g, '').match(reg); + if (styles) { + root.appendChild(UE.uNode.createElement('


    ')); + } + }, + commands: { + 'background': { + execCommand: function (cmd, obj) { + setBackground(obj); + }, + queryCommandValue: function () { + var me = this, + styles = (utils.cssRule(cssRuleId, me.document) || '').replace(/[\n\r]+/g, '').match(reg); + return styles ? stringToObj(styles[1]) : null; + }, + notNeedUndo: true + } + } + } +}); + +// plugins/image.js +/** + * 图片插入、排版插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 图片对齐方式 + * @command imagefloat + * @method execCommand + * @remind 值center为独占一行居中 + * @param { String } cmd 命令字符串 + * @param { String } align 对齐方式,可传left、right、none、center + * @remaind center表示图片独占一行 + * @example + * ```javascript + * editor.execCommand( 'imagefloat', 'center' ); + * ``` + */ + +/** + * 如果选区所在位置是图片区域 + * @command imagefloat + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回图片对齐方式 + * @example + * ```javascript + * editor.queryCommandValue( 'imagefloat' ); + * ``` + */ + +UE.commands['imagefloat'] = { + execCommand:function (cmd, align) { + var me = this, + range = me.selection.getRange(); + if (!range.collapsed) { + var img = range.getClosedNode(); + if (img && img.tagName == 'IMG') { + switch (align) { + case 'left': + case 'right': + case 'none': + var pN = img.parentNode, tmpNode, pre, next; + while (dtd.$inline[pN.tagName] || pN.tagName == 'A') { + pN = pN.parentNode; + } + tmpNode = pN; + if (tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode, 'text-align') == 'center') { + if (!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode, function (node) { + return !domUtils.isBr(node) && !domUtils.isWhitespace(node); + }) == 1) { + pre = tmpNode.previousSibling; + next = tmpNode.nextSibling; + if (pre && next && pre.nodeType == 1 && next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)) { + pre.appendChild(tmpNode.firstChild); + while (next.firstChild) { + pre.appendChild(next.firstChild); + } + domUtils.remove(tmpNode); + domUtils.remove(next); + } else { + domUtils.setStyle(tmpNode, 'text-align', ''); + } + + + } + + range.selectNode(img).select(); + } + domUtils.setStyle(img, 'float', align == 'none' ? '' : align); + if(align == 'none'){ + domUtils.removeAttributes(img,'align'); + } + + break; + case 'center': + if (me.queryCommandValue('imagefloat') != 'center') { + pN = img.parentNode; + domUtils.setStyle(img, 'float', ''); + domUtils.removeAttributes(img,'align'); + tmpNode = img; + while (pN && domUtils.getChildCount(pN, function (node) { + return !domUtils.isBr(node) && !domUtils.isWhitespace(node); + }) == 1 + && (dtd.$inline[pN.tagName] || pN.tagName == 'A')) { + tmpNode = pN; + pN = pN.parentNode; + } + range.setStartBefore(tmpNode).setCursor(false); + pN = me.document.createElement('div'); + pN.appendChild(tmpNode); + domUtils.setStyle(tmpNode, 'float', ''); + + me.execCommand('insertHtml', '

    ' + pN.innerHTML + '

    '); + + tmpNode = me.document.getElementById('_img_parent_tmp'); + tmpNode.removeAttribute('id'); + tmpNode = tmpNode.firstChild; + range.selectNode(tmpNode).select(); + //去掉后边多余的元素 + next = tmpNode.parentNode.nextSibling; + if (next && domUtils.isEmptyNode(next)) { + domUtils.remove(next); + } + + } + + break; + } + + } + } + }, + queryCommandValue:function () { + var range = this.selection.getRange(), + startNode, floatStyle; + if (range.collapsed) { + return 'none'; + } + startNode = range.getClosedNode(); + if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') { + floatStyle = domUtils.getComputedStyle(startNode, 'float') || startNode.getAttribute('align'); + + if (floatStyle == 'none') { + floatStyle = domUtils.getComputedStyle(startNode.parentNode, 'text-align') == 'center' ? 'center' : floatStyle; + } + return { + left:1, + right:1, + center:1 + }[floatStyle] ? floatStyle : 'none'; + } + return 'none'; + + + }, + queryCommandState:function () { + var range = this.selection.getRange(), + startNode; + + if (range.collapsed) return -1; + + startNode = range.getClosedNode(); + if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') { + return 0; + } + return -1; + } +}; + + +/** + * 插入图片 + * @command insertimage + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } opt 属性键值对,这些属性都将被复制到当前插入图片 + * @remind 该命令第二个参数可接受一个图片配置项对象的数组,可以插入多张图片, + * 此时数组的每一个元素都是一个Object类型的图片属性集合。 + * @example + * ```javascript + * editor.execCommand( 'insertimage', { + * src:'a/b/c.jpg', + * width:'100', + * height:'100' + * } ); + * ``` + * @example + * ```javascript + * editor.execCommand( 'insertimage', [{ + * src:'a/b/c.jpg', + * width:'100', + * height:'100' + * },{ + * src:'a/b/d.jpg', + * width:'100', + * height:'100' + * }] ); + * ``` + */ + +UE.commands['insertimage'] = { + execCommand:function (cmd, opt) { + + opt = utils.isArray(opt) ? opt : [opt]; + if (!opt.length) { + return; + } + var me = this, + range = me.selection.getRange(), + img = range.getClosedNode(); + + if(me.fireEvent('beforeinsertimage', opt) === true){ + return; + } + + function unhtmlData(imgCi) { + + utils.each('width,height,border,hspace,vspace'.split(','), function (item) { + + if (imgCi[item]) { + imgCi[item] = parseInt(imgCi[item], 10) || 0; + } + }); + + utils.each('src,_src'.split(','), function (item) { + + if (imgCi[item]) { + imgCi[item] = utils.unhtmlForUrl(imgCi[item]); + } + }); + utils.each('title,alt'.split(','), function (item) { + + if (imgCi[item]) { + imgCi[item] = utils.unhtml(imgCi[item]); + } + }); + } + + if (img && /img/i.test(img.tagName) && (img.className != "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1) && !img.getAttribute("word_img")) { + var first = opt.shift(); + var floatStyle = first['floatStyle']; + delete first['floatStyle']; +//// img.style.border = (first.border||0) +"px solid #000"; +//// img.style.margin = (first.margin||0) +"px"; +// img.style.cssText += ';margin:' + (first.margin||0) +"px;" + 'border:' + (first.border||0) +"px solid #000"; + domUtils.setAttributes(img, first); + me.execCommand('imagefloat', floatStyle); + if (opt.length > 0) { + range.setStartAfter(img).setCursor(false, true); + me.execCommand('insertimage', opt); + } + + } else { + var html = [], str = '', ci; + ci = opt[0]; + if (opt.length == 1) { + unhtmlData(ci); + + str = '' + ci.alt + ''; + if (ci['floatStyle'] == 'center') { + str = '

    ' + str + '

    '; + } + html.push(str); + + } else { + for (var i = 0; ci = opt[i++];) { + unhtmlData(ci); + str = '

    '; + html.push(str); + } + } + + me.execCommand('insertHtml', html.join('')); + } + + me.fireEvent('afterinsertimage', opt) + } +}; + + +// plugins/justify.js +/** + * 段落格式 + * @file + * @since 1.2.6.1 + */ + +/** + * 段落对齐方式 + * @command justify + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } align 对齐方式:left => 居左,right => 居右,center => 居中,justify => 两端对齐 + * @example + * ```javascript + * editor.execCommand( 'justify', 'center' ); + * ``` + */ +/** + * 如果选区所在位置是段落区域,返回当前段落对齐方式 + * @command justify + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回段落对齐方式 + * @example + * ```javascript + * editor.queryCommandValue( 'justify' ); + * ``` + */ + +UE.plugins['justify']=function(){ + var me=this, + block = domUtils.isBlockElm, + defaultValue = { + left:1, + right:1, + center:1, + justify:1 + }, + doJustify = function (range, style) { + var bookmark = range.createBookmark(), + filterFn = function (node) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node); + }; + + range.enlarge(true); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode(bookmark2.start, false, filterFn), + tmpRange = range.cloneRange(), + tmpNode; + while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) { + if (current.nodeType == 3 || !block(current)) { + tmpRange.setStartBefore(current); + while (current && current !== bookmark2.end && !block(current)) { + tmpNode = current; + current = domUtils.getNextDomNode(current, false, null, function (node) { + return !block(node); + }); + } + tmpRange.setEndAfter(tmpNode); + var common = tmpRange.getCommonAncestor(); + if (!domUtils.isBody(common) && block(common)) { + domUtils.setStyles(common, utils.isString(style) ? {'text-align':style} : style); + current = common; + } else { + var p = range.document.createElement('p'); + domUtils.setStyles(p, utils.isString(style) ? {'text-align':style} : style); + var frag = tmpRange.extractContents(); + p.appendChild(frag); + tmpRange.insertNode(p); + current = p; + } + current = domUtils.getNextDomNode(current, false, filterFn); + } else { + current = domUtils.getNextDomNode(current, true, filterFn); + } + } + return range.moveToBookmark(bookmark2).moveToBookmark(bookmark); + }; + + UE.commands['justify'] = { + execCommand:function (cmdName, align) { + var range = this.selection.getRange(), + txt; + + //闭合时单独处理 + if (range.collapsed) { + txt = this.document.createTextNode('p'); + range.insertNode(txt); + } + doJustify(range, align); + if (txt) { + range.setStartBefore(txt).collapse(true); + domUtils.remove(txt); + } + + range.select(); + + + return true; + }, + queryCommandValue:function () { + var startNode = this.selection.getStart(), + value = domUtils.getComputedStyle(startNode, 'text-align'); + return defaultValue[value] ? value : 'left'; + }, + queryCommandState:function () { + var start = this.selection.getStart(), + cell = start && domUtils.findParentByTagName(start, ["td", "th","caption"], true); + + return cell? -1:0; + } + + }; +}; + + +// plugins/font.js +/** + * 字体颜色,背景色,字号,字体,下划线,删除线 + * @file + * @since 1.2.6.1 + */ + +/** + * 字体颜色 + * @command forecolor + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 色值(必须十六进制) + * @example + * ```javascript + * editor.execCommand( 'forecolor', '#000' ); + * ``` + */ +/** + * 返回选区字体颜色 + * @command forecolor + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体颜色 + * @example + * ```javascript + * editor.queryCommandValue( 'forecolor' ); + * ``` + */ + +/** + * 字体背景颜色 + * @command backcolor + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 色值(必须十六进制) + * @example + * ```javascript + * editor.execCommand( 'backcolor', '#000' ); + * ``` + */ +/** + * 返回选区字体颜色 + * @command backcolor + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体背景颜色 + * @example + * ```javascript + * editor.queryCommandValue( 'backcolor' ); + * ``` + */ + +/** + * 字体大小 + * @command fontsize + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 字体大小 + * @example + * ```javascript + * editor.execCommand( 'fontsize', '14px' ); + * ``` + */ +/** + * 返回选区字体大小 + * @command fontsize + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体大小 + * @example + * ```javascript + * editor.queryCommandValue( 'fontsize' ); + * ``` + */ + +/** + * 字体样式 + * @command fontfamily + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 字体样式 + * @example + * ```javascript + * editor.execCommand( 'fontfamily', '微软雅黑' ); + * ``` + */ +/** + * 返回选区字体样式 + * @command fontfamily + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回字体样式 + * @example + * ```javascript + * editor.queryCommandValue( 'fontfamily' ); + * ``` + */ + +/** + * 字体下划线,与删除线互斥 + * @command underline + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'underline' ); + * ``` + */ + +/** + * 字体删除线,与下划线互斥 + * @command strikethrough + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'strikethrough' ); + * ``` + */ + +/** + * 字体边框 + * @command fontborder + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'fontborder' ); + * ``` + */ + +UE.plugins['font'] = function () { + var me = this, + fonts = { + 'forecolor': 'color', + 'backcolor': 'background-color', + 'fontsize': 'font-size', + 'fontfamily': 'font-family', + 'underline': 'text-decoration', + 'strikethrough': 'text-decoration', + 'fontborder': 'border' + }, + needCmd = {'underline': 1, 'strikethrough': 1, 'fontborder': 1}, + needSetChild = { + 'forecolor': 'color', + 'backcolor': 'background-color', + 'fontsize': 'font-size', + 'fontfamily': 'font-family' + + }; + me.setOpt({ + 'fontfamily': [ + { name: 'songti', val: '宋体,SimSun'}, + { name: 'yahei', val: '微软雅黑,Microsoft YaHei'}, + { name: 'kaiti', val: '楷体,楷体_GB2312, SimKai'}, + { name: 'heiti', val: '黑体, SimHei'}, + { name: 'lishu', val: '隶书, SimLi'}, + { name: 'andaleMono', val: 'andale mono'}, + { name: 'arial', val: 'arial, helvetica,sans-serif'}, + { name: 'arialBlack', val: 'arial black,avant garde'}, + { name: 'comicSansMs', val: 'comic sans ms'}, + { name: 'impact', val: 'impact,chicago'}, + { name: 'timesNewRoman', val: 'times new roman'} + ], + 'fontsize': [10, 11, 12, 14, 16, 18, 20, 24, 36] + }); + + function mergeWithParent(node){ + var parent; + while(parent = node.parentNode){ + if(parent.tagName == 'SPAN' && domUtils.getChildCount(parent,function(child){ + return !domUtils.isBookmarkNode(child) && !domUtils.isBr(child) + }) == 1) { + parent.style.cssText += node.style.cssText; + domUtils.remove(node,true); + node = parent; + + }else{ + break; + } + } + + } + function mergeChild(rng,cmdName,value){ + if(needSetChild[cmdName]){ + rng.adjustmentBoundary(); + if(!rng.collapsed && rng.startContainer.nodeType == 1){ + var start = rng.startContainer.childNodes[rng.startOffset]; + if(start && domUtils.isTagNode(start,'span')){ + var bk = rng.createBookmark(); + utils.each(domUtils.getElementsByTagName(start, 'span'), function (span) { + if (!span.parentNode || domUtils.isBookmarkNode(span))return; + if(cmdName == 'backcolor' && domUtils.getComputedStyle(span,'background-color').toLowerCase() === value){ + return; + } + domUtils.removeStyle(span,needSetChild[cmdName]); + if(span.style.cssText.replace(/^\s+$/,'').length == 0){ + domUtils.remove(span,true) + } + }); + rng.moveToBookmark(bk) + } + } + } + + } + function mergesibling(rng,cmdName,value) { + var collapsed = rng.collapsed, + bk = rng.createBookmark(), common; + if (collapsed) { + common = bk.start.parentNode; + while (dtd.$inline[common.tagName]) { + common = common.parentNode; + } + } else { + common = domUtils.getCommonAncestor(bk.start, bk.end); + } + utils.each(domUtils.getElementsByTagName(common, 'span'), function (span) { + if (!span.parentNode || domUtils.isBookmarkNode(span))return; + if (/\s*border\s*:\s*none;?\s*/i.test(span.style.cssText)) { + if(/^\s*border\s*:\s*none;?\s*$/.test(span.style.cssText)){ + domUtils.remove(span, true); + }else{ + domUtils.removeStyle(span,'border'); + } + return + } + if (/border/i.test(span.style.cssText) && span.parentNode.tagName == 'SPAN' && /border/i.test(span.parentNode.style.cssText)) { + span.style.cssText = span.style.cssText.replace(/border[^:]*:[^;]+;?/gi, ''); + } + if(!(cmdName=='fontborder' && value=='none')){ + var next = span.nextSibling; + while (next && next.nodeType == 1 && next.tagName == 'SPAN' ) { + if(domUtils.isBookmarkNode(next) && cmdName == 'fontborder') { + span.appendChild(next); + next = span.nextSibling; + continue; + } + if (next.style.cssText == span.style.cssText) { + domUtils.moveChild(next, span); + domUtils.remove(next); + } + if (span.nextSibling === next) + break; + next = span.nextSibling; + } + } + + + mergeWithParent(span); + if(browser.ie && browser.version > 8 ){ + //拷贝父亲们的特别的属性,这里只做背景颜色的处理 + var parent = domUtils.findParent(span,function(n){return n.tagName == 'SPAN' && /background-color/.test(n.style.cssText)}); + if(parent && !/background-color/.test(span.style.cssText)){ + span.style.backgroundColor = parent.style.backgroundColor; + } + } + + }); + rng.moveToBookmark(bk); + mergeChild(rng,cmdName,value) + } + + me.addInputRule(function (root) { + utils.each(root.getNodesByTagName('u s del font strike'), function (node) { + if (node.tagName == 'font') { + var cssStyle = []; + for (var p in node.attrs) { + switch (p) { + case 'size': + cssStyle.push('font-size:' + + ({ + '1':'10', + '2':'12', + '3':'16', + '4':'18', + '5':'24', + '6':'32', + '7':'48' + }[node.attrs[p]] || node.attrs[p]) + 'px'); + break; + case 'color': + cssStyle.push('color:' + node.attrs[p]); + break; + case 'face': + cssStyle.push('font-family:' + node.attrs[p]); + break; + case 'style': + cssStyle.push(node.attrs[p]); + } + } + node.attrs = { + 'style': cssStyle.join(';') + }; + } else { + var val = node.tagName == 'u' ? 'underline' : 'line-through'; + node.attrs = { + 'style': (node.getAttr('style') || '') + 'text-decoration:' + val + ';' + } + } + node.tagName = 'span'; + }); +// utils.each(root.getNodesByTagName('span'), function (node) { +// var val; +// if(val = node.getAttr('class')){ +// if(/fontstrikethrough/.test(val)){ +// node.setStyle('text-decoration','line-through'); +// if(node.attrs['class']){ +// node.attrs['class'] = node.attrs['class'].replace(/fontstrikethrough/,''); +// }else{ +// node.setAttr('class') +// } +// } +// if(/fontborder/.test(val)){ +// node.setStyle('border','1px solid #000'); +// if(node.attrs['class']){ +// node.attrs['class'] = node.attrs['class'].replace(/fontborder/,''); +// }else{ +// node.setAttr('class') +// } +// } +// } +// }); + }); +// me.addOutputRule(function(root){ +// utils.each(root.getNodesByTagName('span'), function (node) { +// var val; +// if(val = node.getStyle('text-decoration')){ +// if(/line-through/.test(val)){ +// if(node.attrs['class']){ +// node.attrs['class'] += ' fontstrikethrough'; +// }else{ +// node.setAttr('class','fontstrikethrough') +// } +// } +// +// node.setStyle('text-decoration') +// } +// if(val = node.getStyle('border')){ +// if(/1px/.test(val) && /solid/.test(val)){ +// if(node.attrs['class']){ +// node.attrs['class'] += ' fontborder'; +// +// }else{ +// node.setAttr('class','fontborder') +// } +// } +// node.setStyle('border') +// +// } +// }); +// }); + for (var p in fonts) { + (function (cmd, style) { + UE.commands[cmd] = { + execCommand: function (cmdName, value) { + value = value || (this.queryCommandState(cmdName) ? 'none' : cmdName == 'underline' ? 'underline' : + cmdName == 'fontborder' ? '1px solid #000' : + 'line-through'); + var me = this, + range = this.selection.getRange(), + text; + + if (value == 'default') { + + if (range.collapsed) { + text = me.document.createTextNode('font'); + range.insertNode(text).select(); + + } + me.execCommand('removeFormat', 'span,a', style); + if (text) { + range.setStartBefore(text).collapse(true); + domUtils.remove(text); + } + mergesibling(range,cmdName,value); + range.select() + } else { + if (!range.collapsed) { + if (needCmd[cmd] && me.queryCommandValue(cmd)) { + me.execCommand('removeFormat', 'span,a', style); + } + range = me.selection.getRange(); + + range.applyInlineStyle('span', {'style': style + ':' + value}); + mergesibling(range, cmdName,value); + range.select(); + } else { + + var span = domUtils.findParentByTagName(range.startContainer, 'span', true); + text = me.document.createTextNode('font'); + if (span && !span.children.length && !span[browser.ie ? 'innerText' : 'textContent'].replace(fillCharReg, '').length) { + //for ie hack when enter + range.insertNode(text); + if (needCmd[cmd]) { + range.selectNode(text).select(); + me.execCommand('removeFormat', 'span,a', style, null); + + span = domUtils.findParentByTagName(text, 'span', true); + range.setStartBefore(text); + + } + span && (span.style.cssText += ';' + style + ':' + value); + range.collapse(true).select(); + + + } else { + range.insertNode(text); + range.selectNode(text).select(); + span = range.document.createElement('span'); + + if (needCmd[cmd]) { + //a标签内的不处理跳过 + if (domUtils.findParentByTagName(text, 'a', true)) { + range.setStartBefore(text).setCursor(); + domUtils.remove(text); + return; + } + me.execCommand('removeFormat', 'span,a', style); + } + + span.style.cssText = style + ':' + value; + + + text.parentNode.insertBefore(span, text); + //修复,span套span 但样式不继承的问题 + if (!browser.ie || browser.ie && browser.version == 9) { + var spanParent = span.parentNode; + while (!domUtils.isBlockElm(spanParent)) { + if (spanParent.tagName == 'SPAN') { + //opera合并style不会加入";" + span.style.cssText = spanParent.style.cssText + ";" + span.style.cssText; + } + spanParent = spanParent.parentNode; + } + } + + + if (opera) { + setTimeout(function () { + range.setStart(span, 0).collapse(true); + mergesibling(range, cmdName,value); + range.select(); + }); + } else { + range.setStart(span, 0).collapse(true); + mergesibling(range,cmdName,value); + range.select(); + } + + //trace:981 + //domUtils.mergeToParent(span) + } + domUtils.remove(text); + } + + + } + return true; + }, + queryCommandValue: function (cmdName) { + var startNode = this.selection.getStart(); + + //trace:946 + if (cmdName == 'underline' || cmdName == 'strikethrough') { + var tmpNode = startNode, value; + while (tmpNode && !domUtils.isBlockElm(tmpNode) && !domUtils.isBody(tmpNode)) { + if (tmpNode.nodeType == 1) { + value = domUtils.getComputedStyle(tmpNode, style); + if (value != 'none') { + return value; + } + } + + tmpNode = tmpNode.parentNode; + } + return 'none'; + } + if (cmdName == 'fontborder') { + var tmp = startNode, val; + while (tmp && dtd.$inline[tmp.tagName]) { + if (val = domUtils.getComputedStyle(tmp, 'border')) { + + if (/1px/.test(val) && /solid/.test(val)) { + return val; + } + } + tmp = tmp.parentNode; + } + return '' + } + + if( cmdName == 'FontSize' ) { + var styleVal = domUtils.getComputedStyle(startNode, style), + tmp = /^([\d\.]+)(\w+)$/.exec( styleVal ); + + if( tmp ) { + + return Math.floor( tmp[1] ) + tmp[2]; + + } + + return styleVal; + + } + + return domUtils.getComputedStyle(startNode, style); + }, + queryCommandState: function (cmdName) { + if (!needCmd[cmdName]) + return 0; + var val = this.queryCommandValue(cmdName); + if (cmdName == 'fontborder') { + return /1px/.test(val) && /solid/.test(val) + } else { + return cmdName == 'underline' ? /underline/.test(val) : /line\-through/.test(val); + + } + + } + }; + })(p, fonts[p]); + } +}; + +// plugins/link.js +/** + * 超链接 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入超链接 + * @command link + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } options 设置自定义属性,例如:url、title、target + * @example + * ```javascript + * editor.execCommand( 'link', '{ + * url:'ueditor.baidu.com', + * title:'ueditor', + * target:'_blank' + * }' ); + * ``` + */ +/** + * 返回当前选中的第一个超链接节点 + * @command link + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { Element } 超链接节点 + * @example + * ```javascript + * editor.queryCommandValue( 'link' ); + * ``` + */ + +/** + * 取消超链接 + * @command unlink + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'unlink'); + * ``` + */ + +UE.plugins['link'] = function(){ + function optimize( range ) { + var start = range.startContainer,end = range.endContainer; + + if ( start = domUtils.findParentByTagName( start, 'a', true ) ) { + range.setStartBefore( start ); + } + if ( end = domUtils.findParentByTagName( end, 'a', true ) ) { + range.setEndAfter( end ); + } + } + + + UE.commands['unlink'] = { + execCommand : function() { + var range = this.selection.getRange(), + bookmark; + if(range.collapsed && !domUtils.findParentByTagName( range.startContainer, 'a', true )){ + return; + } + bookmark = range.createBookmark(); + optimize( range ); + range.removeInlineStyle( 'a' ).moveToBookmark( bookmark ).select(); + }, + queryCommandState : function(){ + return !this.highlight && this.queryCommandValue('link') ? 0 : -1; + } + + }; + function doLink(range,opt,me){ + var rngClone = range.cloneRange(), + link = me.queryCommandValue('link'); + optimize( range = range.adjustmentBoundary() ); + var start = range.startContainer; + if(start.nodeType == 1 && link){ + start = start.childNodes[range.startOffset]; + if(start && start.nodeType == 1 && start.tagName == 'A' && /^(?:https?|ftp|file)\s*:\s*\/\//.test(start[browser.ie?'innerText':'textContent'])){ + start[browser.ie ? 'innerText' : 'textContent'] = utils.html(opt.textValue||opt.href); + + } + } + if( !rngClone.collapsed || link){ + range.removeInlineStyle( 'a' ); + rngClone = range.cloneRange(); + } + + if ( rngClone.collapsed ) { + var a = range.document.createElement( 'a'), + text = ''; + if(opt.textValue){ + + text = utils.html(opt.textValue); + delete opt.textValue; + }else{ + text = utils.html(opt.href); + + } + domUtils.setAttributes( a, opt ); + start = domUtils.findParentByTagName( rngClone.startContainer, 'a', true ); + if(start && domUtils.isInNodeEndBoundary(rngClone,start)){ + range.setStartAfter(start).collapse(true); + + } + a[browser.ie ? 'innerText' : 'textContent'] = text; + range.insertNode(a).selectNode( a ); + } else { + range.applyInlineStyle( 'a', opt ); + + } + } + UE.commands['link'] = { + execCommand : function( cmdName, opt ) { + var range; + opt._href && (opt._href = utils.unhtml(opt._href,/[<">]/g)); + opt.href && (opt.href = utils.unhtml(opt.href,/[<">]/g)); + opt.textValue && (opt.textValue = utils.unhtml(opt.textValue,/[<">]/g)); + doLink(range=this.selection.getRange(),opt,this); + //闭合都不加占位符,如果加了会在a后边多个占位符节点,导致a是图片背景组成的列表,出现空白问题 + range.collapse().select(true); + + }, + queryCommandValue : function() { + var range = this.selection.getRange(), + node; + if ( range.collapsed ) { +// node = this.selection.getStart(); + //在ie下getstart()取值偏上了 + node = range.startContainer; + node = node.nodeType == 1 ? node : node.parentNode; + + if ( node && (node = domUtils.findParentByTagName( node, 'a', true )) && ! domUtils.isInNodeEndBoundary(range,node)) { + + return node; + } + } else { + //trace:1111 如果是

    xx

    startContainer是p就会找不到a + range.shrinkBoundary(); + var start = range.startContainer.nodeType == 3 || !range.startContainer.childNodes[range.startOffset] ? range.startContainer : range.startContainer.childNodes[range.startOffset], + end = range.endContainer.nodeType == 3 || range.endOffset == 0 ? range.endContainer : range.endContainer.childNodes[range.endOffset-1], + common = range.getCommonAncestor(); + node = domUtils.findParentByTagName( common, 'a', true ); + if ( !node && common.nodeType == 1){ + + var as = common.getElementsByTagName( 'a' ), + ps,pe; + + for ( var i = 0,ci; ci = as[i++]; ) { + ps = domUtils.getPosition( ci, start ),pe = domUtils.getPosition( ci,end); + if ( (ps & domUtils.POSITION_FOLLOWING || ps & domUtils.POSITION_CONTAINS) + && + (pe & domUtils.POSITION_PRECEDING || pe & domUtils.POSITION_CONTAINS) + ) { + node = ci; + break; + } + } + } + return node; + } + + }, + queryCommandState : function() { + //判断如果是视频的话连接不可用 + //fix 853 + var img = this.selection.getRange().getClosedNode(), + flag = img && (img.className == "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1); + return flag ? -1 : 0; + } + }; +}; + +// plugins/iframe.js +///import core +///import plugins\inserthtml.js +///commands 插入框架 +///commandsName InsertFrame +///commandsTitle 插入Iframe +///commandsDialog dialogs\insertframe + +UE.plugins['insertframe'] = function() { + var me =this; + function deleteIframe(){ + me._iframe && delete me._iframe; + } + + me.addListener("selectionchange",function(){ + deleteIframe(); + }); + +}; + + + +// plugins/scrawl.js +///import core +///commands 涂鸦 +///commandsName Scrawl +///commandsTitle 涂鸦 +///commandsDialog dialogs\scrawl +UE.commands['scrawl'] = { + queryCommandState : function(){ + return ( browser.ie && browser.version <= 8 ) ? -1 :0; + } +}; + + +// plugins/removeformat.js +/** + * 清除格式 + * @file + * @since 1.2.6.1 + */ + +/** + * 清除文字样式 + * @command removeformat + * @method execCommand + * @param { String } cmd 命令字符串 + * @param {String} tags 以逗号隔开的标签。如:strong + * @param {String} style 样式如:color + * @param {String} attrs 属性如:width + * @example + * ```javascript + * editor.execCommand( 'removeformat', 'strong','color','width' ); + * ``` + */ + +UE.plugins['removeformat'] = function(){ + var me = this; + me.setOpt({ + 'removeFormatTags': 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var', + 'removeFormatAttributes':'class,style,lang,width,height,align,hspace,valign' + }); + me.commands['removeformat'] = { + execCommand : function( cmdName, tags, style, attrs,notIncludeA ) { + + var tagReg = new RegExp( '^(?:' + (tags || this.options.removeFormatTags).replace( /,/g, '|' ) + ')$', 'i' ) , + removeFormatAttributes = style ? [] : (attrs || this.options.removeFormatAttributes).split( ',' ), + range = new dom.Range( this.document ), + bookmark,node,parent, + filter = function( node ) { + return node.nodeType == 1; + }; + + function isRedundantSpan (node) { + if (node.nodeType == 3 || node.tagName.toLowerCase() != 'span'){ + return 0; + } + if (browser.ie) { + //ie 下判断实效,所以只能简单用style来判断 + //return node.style.cssText == '' ? 1 : 0; + var attrs = node.attributes; + if ( attrs.length ) { + for ( var i = 0,l = attrs.length; i + var node = range.startContainer, + tmp, + collapsed = range.collapsed; + while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){ + tmp = node.parentNode; + range.setStartBefore(node); + //trace:937 + //更新结束边界 + if(range.startContainer === range.endContainer){ + range.endOffset--; + } + domUtils.remove(node); + node = tmp; + } + + if(!collapsed){ + node = range.endContainer; + while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){ + tmp = node.parentNode; + range.setEndBefore(node); + domUtils.remove(node); + + node = tmp; + } + + + } + } + + + + range = this.selection.getRange(); + doRemove( range ); + range.select(); + + } + + }; + +}; + + +// plugins/blockquote.js +/** + * 添加引用 + * @file + * @since 1.2.6.1 + */ + +/** + * 添加引用 + * @command blockquote + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'blockquote' ); + * ``` + */ + +/** + * 添加引用 + * @command blockquote + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } attrs 节点属性 + * @example + * ```javascript + * editor.execCommand( 'blockquote',{ + * style: "color: red;" + * } ); + * ``` + */ + + +UE.plugins['blockquote'] = function(){ + var me = this; + function getObj(editor){ + return domUtils.filterNodeList(editor.selection.getStartElementPath(),'blockquote'); + } + me.commands['blockquote'] = { + execCommand : function( cmdName, attrs ) { + var range = this.selection.getRange(), + obj = getObj(this), + blockquote = dtd.blockquote, + bookmark = range.createBookmark(); + + if ( obj ) { + + var start = range.startContainer, + startBlock = domUtils.isBlockElm(start) ? start : domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}), + + end = range.endContainer, + endBlock = domUtils.isBlockElm(end) ? end : domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)}); + + //处理一下li + startBlock = domUtils.findParentByTagName(startBlock,'li',true) || startBlock; + endBlock = domUtils.findParentByTagName(endBlock,'li',true) || endBlock; + + + if(startBlock.tagName == 'LI' || startBlock.tagName == 'TD' || startBlock === obj || domUtils.isBody(startBlock)){ + domUtils.remove(obj,true); + }else{ + domUtils.breakParent(startBlock,obj); + } + + if(startBlock !== endBlock){ + obj = domUtils.findParentByTagName(endBlock,'blockquote'); + if(obj){ + if(endBlock.tagName == 'LI' || endBlock.tagName == 'TD'|| domUtils.isBody(endBlock)){ + obj.parentNode && domUtils.remove(obj,true); + }else{ + domUtils.breakParent(endBlock,obj); + } + + } + } + + var blockquotes = domUtils.getElementsByTagName(this.document,'blockquote'); + for(var i=0,bi;bi=blockquotes[i++];){ + if(!bi.childNodes.length){ + domUtils.remove(bi); + }else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING && domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){ + domUtils.remove(bi,true); + } + } + + + + + } else { + + var tmpRange = range.cloneRange(), + node = tmpRange.startContainer.nodeType == 1 ? tmpRange.startContainer : tmpRange.startContainer.parentNode, + preNode = node, + doEnd = 1; + + //调整开始 + while ( 1 ) { + if ( domUtils.isBody(node) ) { + if ( preNode !== node ) { + if ( range.collapsed ) { + tmpRange.selectNode( preNode ); + doEnd = 0; + } else { + tmpRange.setStartBefore( preNode ); + } + }else{ + tmpRange.setStart(node,0); + } + + break; + } + if ( !blockquote[node.tagName] ) { + if ( range.collapsed ) { + tmpRange.selectNode( preNode ); + } else{ + tmpRange.setStartBefore( preNode); + } + break; + } + + preNode = node; + node = node.parentNode; + } + + //调整结束 + if ( doEnd ) { + preNode = node = node = tmpRange.endContainer.nodeType == 1 ? tmpRange.endContainer : tmpRange.endContainer.parentNode; + while ( 1 ) { + + if ( domUtils.isBody( node ) ) { + if ( preNode !== node ) { + + tmpRange.setEndAfter( preNode ); + + } else { + tmpRange.setEnd( node, node.childNodes.length ); + } + + break; + } + if ( !blockquote[node.tagName] ) { + tmpRange.setEndAfter( preNode ); + break; + } + + preNode = node; + node = node.parentNode; + } + + } + + + node = range.document.createElement( 'blockquote' ); + domUtils.setAttributes( node, attrs ); + node.appendChild( tmpRange.extractContents() ); + tmpRange.insertNode( node ); + //去除重复的 + var childs = domUtils.getElementsByTagName(node,'blockquote'); + for(var i=0,ci;ci=childs[i++];){ + if(ci.parentNode){ + domUtils.remove(ci,true); + } + } + + } + range.moveToBookmark( bookmark ).select(); + }, + queryCommandState : function() { + return getObj(this) ? 1 : 0; + } + }; +}; + + + +// plugins/convertcase.js +/** + * 大小写转换 + * @file + * @since 1.2.6.1 + */ + +/** + * 把选区内文本变大写,与“tolowercase”命令互斥 + * @command touppercase + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'touppercase' ); + * ``` + */ + +/** + * 把选区内文本变小写,与“touppercase”命令互斥 + * @command tolowercase + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'tolowercase' ); + * ``` + */ +UE.commands['touppercase'] = +UE.commands['tolowercase'] = { + execCommand:function (cmd) { + var me = this; + var rng = me.selection.getRange(); + if(rng.collapsed){ + return rng; + } + var bk = rng.createBookmark(), + bkEnd = bk.end, + filterFn = function( node ) { + return !domUtils.isBr(node) && !domUtils.isWhitespace( node ); + }, + curNode = domUtils.getNextDomNode( bk.start, false, filterFn ); + while ( curNode && (domUtils.getPosition( curNode, bkEnd ) & domUtils.POSITION_PRECEDING) ) { + + if ( curNode.nodeType == 3 ) { + curNode.nodeValue = curNode.nodeValue[cmd == 'touppercase' ? 'toUpperCase' : 'toLowerCase'](); + } + curNode = domUtils.getNextDomNode( curNode, true, filterFn ); + if(curNode === bkEnd){ + break; + } + + } + rng.moveToBookmark(bk).select(); + } +}; + + + +// plugins/indent.js +/** + * 首行缩进 + * @file + * @since 1.2.6.1 + */ + +/** + * 缩进 + * @command indent + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'indent' ); + * ``` + */ +UE.commands['indent'] = { + execCommand : function() { + var me = this,value = me.queryCommandState("indent") ? "0em" : (me.options.indentValue || '2em'); + me.execCommand('Paragraph','p',{style:'text-indent:'+ value}); + }, + queryCommandState : function() { + var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6'); + return pN && pN.style.textIndent && parseInt(pN.style.textIndent) ? 1 : 0; + } + +}; + + +// plugins/print.js +/** + * 打印 + * @file + * @since 1.2.6.1 + */ + +/** + * 打印 + * @command print + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'print' ); + * ``` + */ +UE.commands['print'] = { + execCommand : function(){ + this.window.print(); + }, + notNeedUndo : 1 +}; + + + +// plugins/preview.js +/** + * 预览 + * @file + * @since 1.2.6.1 + */ + +/** + * 预览 + * @command preview + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'preview' ); + * ``` + */ +UE.commands['preview'] = { + execCommand : function(){ + var w = window.open('', '_blank', ''), + d = w.document; + d.open(); + d.write('
    '+this.getContent(null,null,true)+'
    '); + d.close(); + }, + notNeedUndo : 1 +}; + + +// plugins/selectall.js +/** + * 全选 + * @file + * @since 1.2.6.1 + */ + +/** + * 选中所有内容 + * @command selectall + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'selectall' ); + * ``` + */ +UE.plugins['selectall'] = function(){ + var me = this; + me.commands['selectall'] = { + execCommand : function(){ + //去掉了原生的selectAll,因为会出现报错和当内容为空时,不能出现闭合状态的光标 + var me = this,body = me.body, + range = me.selection.getRange(); + range.selectNodeContents(body); + if(domUtils.isEmptyBlock(body)){ + //opera不能自动合并到元素的里边,要手动处理一下 + if(browser.opera && body.firstChild && body.firstChild.nodeType == 1){ + range.setStartAtFirst(body.firstChild); + } + range.collapse(true); + } + range.select(true); + }, + notNeedUndo : 1 + }; + + + //快捷键 + me.addshortcutkey({ + "selectAll" : "ctrl+65" + }); +}; + + +// plugins/paragraph.js +/** + * 段落样式 + * @file + * @since 1.2.6.1 + */ + +/** + * 段落格式 + * @command paragraph + * @method execCommand + * @param { String } cmd 命令字符串 + * @param {String} style 标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + * @param {Object} attrs 标签的属性 + * @example + * ```javascript + * editor.execCommand( 'Paragraph','h1','{ + * class:'test' + * }' ); + * ``` + */ + +/** + * 返回选区内节点标签名 + * @command paragraph + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 节点标签名 + * @example + * ```javascript + * editor.queryCommandValue( 'Paragraph' ); + * ``` + */ + +UE.plugins['paragraph'] = function() { + var me = this, + block = domUtils.isBlockElm, + notExchange = ['TD','LI','PRE'], + + doParagraph = function(range,style,attrs,sourceCmdName){ + var bookmark = range.createBookmark(), + filterFn = function( node ) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace( node ); + }, + para; + + range.enlarge( true ); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ), + tmpRange = range.cloneRange(), + tmpNode; + while ( current && !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) { + if ( current.nodeType == 3 || !block( current ) ) { + tmpRange.setStartBefore( current ); + while ( current && current !== bookmark2.end && !block( current ) ) { + tmpNode = current; + current = domUtils.getNextDomNode( current, false, null, function( node ) { + return !block( node ); + } ); + } + tmpRange.setEndAfter( tmpNode ); + + para = range.document.createElement( style ); + if(attrs){ + domUtils.setAttributes(para,attrs); + if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){ + para.style.cssText = attrs.style; + } + } + para.appendChild( tmpRange.extractContents() ); + //需要内容占位 + if(domUtils.isEmptyNode(para)){ + domUtils.fillChar(range.document,para); + + } + + tmpRange.insertNode( para ); + + var parent = para.parentNode; + //如果para上一级是一个block元素且不是body,td就删除它 + if ( block( parent ) && !domUtils.isBody( para.parentNode ) && utils.indexOf(notExchange,parent.tagName)==-1) { + //存储dir,style + if(!(sourceCmdName && sourceCmdName == 'customstyle')){ + parent.getAttribute('dir') && para.setAttribute('dir',parent.getAttribute('dir')); + //trace:1070 + parent.style.cssText && (para.style.cssText = parent.style.cssText + ';' + para.style.cssText); + //trace:1030 + parent.style.textAlign && !para.style.textAlign && (para.style.textAlign = parent.style.textAlign); + parent.style.textIndent && !para.style.textIndent && (para.style.textIndent = parent.style.textIndent); + parent.style.padding && !para.style.padding && (para.style.padding = parent.style.padding); + } + + //trace:1706 选择的就是h1-6要删除 + if(attrs && /h\d/i.test(parent.tagName) && !/h\d/i.test(para.tagName) ){ + domUtils.setAttributes(parent,attrs); + if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){ + parent.style.cssText = attrs.style; + } + domUtils.remove(para,true); + para = parent; + }else{ + domUtils.remove( para.parentNode, true ); + } + + } + if( utils.indexOf(notExchange,parent.tagName)!=-1){ + current = parent; + }else{ + current = para; + } + + + current = domUtils.getNextDomNode( current, false, filterFn ); + } else { + current = domUtils.getNextDomNode( current, true, filterFn ); + } + } + return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark ); + }; + me.setOpt('paragraph',{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}); + me.commands['paragraph'] = { + execCommand : function( cmdName, style,attrs,sourceCmdName ) { + var range = this.selection.getRange(); + //闭合时单独处理 + if(range.collapsed){ + var txt = this.document.createTextNode('p'); + range.insertNode(txt); + //去掉冗余的fillchar + if(browser.ie){ + var node = txt.previousSibling; + if(node && domUtils.isWhitespace(node)){ + domUtils.remove(node); + } + node = txt.nextSibling; + if(node && domUtils.isWhitespace(node)){ + domUtils.remove(node); + } + } + + } + range = doParagraph(range,style,attrs,sourceCmdName); + if(txt){ + range.setStartBefore(txt).collapse(true); + pN = txt.parentNode; + + domUtils.remove(txt); + + if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){ + domUtils.fillNode(this.document,pN); + } + + } + + if(browser.gecko && range.collapsed && range.startContainer.nodeType == 1){ + var child = range.startContainer.childNodes[range.startOffset]; + if(child && child.nodeType == 1 && child.tagName.toLowerCase() == style){ + range.setStart(child,0).collapse(true); + } + } + //trace:1097 原来有true,原因忘了,但去了就不能清除多余的占位符了 + range.select(); + + + return true; + }, + queryCommandValue : function() { + var node = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6'); + return node ? node.tagName.toLowerCase() : ''; + } + }; +}; + + +// plugins/directionality.js +/** + * 设置文字输入的方向的插件 + * @file + * @since 1.2.6.1 + */ +(function() { + var block = domUtils.isBlockElm , + getObj = function(editor){ +// var startNode = editor.selection.getStart(), +// parents; +// if ( startNode ) { +// //查找所有的是block的父亲节点 +// parents = domUtils.findParents( startNode, true, block, true ); +// for ( var i = 0,ci; ci = parents[i++]; ) { +// if ( ci.getAttribute( 'dir' ) ) { +// return ci; +// } +// } +// } + return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n && n.nodeType == 1 && n.getAttribute('dir')}); + + }, + doDirectionality = function(range,editor,forward){ + + var bookmark, + filterFn = function( node ) { + return node.nodeType == 1 ? !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node); + }, + + obj = getObj( editor ); + + if ( obj && range.collapsed ) { + obj.setAttribute( 'dir', forward ); + return range; + } + bookmark = range.createBookmark(); + range.enlarge( true ); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ), + tmpRange = range.cloneRange(), + tmpNode; + while ( current && !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) { + if ( current.nodeType == 3 || !block( current ) ) { + tmpRange.setStartBefore( current ); + while ( current && current !== bookmark2.end && !block( current ) ) { + tmpNode = current; + current = domUtils.getNextDomNode( current, false, null, function( node ) { + return !block( node ); + } ); + } + tmpRange.setEndAfter( tmpNode ); + var common = tmpRange.getCommonAncestor(); + if ( !domUtils.isBody( common ) && block( common ) ) { + //遍历到了block节点 + common.setAttribute( 'dir', forward ); + current = common; + } else { + //没有遍历到,添加一个block节点 + var p = range.document.createElement( 'p' ); + p.setAttribute( 'dir', forward ); + var frag = tmpRange.extractContents(); + p.appendChild( frag ); + tmpRange.insertNode( p ); + current = p; + } + + current = domUtils.getNextDomNode( current, false, filterFn ); + } else { + current = domUtils.getNextDomNode( current, true, filterFn ); + } + } + return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark ); + }; + + /** + * 文字输入方向 + * @command directionality + * @method execCommand + * @param { String } cmdName 命令字符串 + * @param { String } forward 传入'ltr'表示从左向右输入,传入'rtl'表示从右向左输入 + * @example + * ```javascript + * editor.execCommand( 'directionality', 'ltr'); + * ``` + */ + + /** + * 查询当前选区的文字输入方向 + * @command directionality + * @method queryCommandValue + * @param { String } cmdName 命令字符串 + * @return { String } 返回'ltr'表示从左向右输入,返回'rtl'表示从右向左输入 + * @example + * ```javascript + * editor.queryCommandValue( 'directionality'); + * ``` + */ + UE.commands['directionality'] = { + execCommand : function( cmdName,forward ) { + var range = this.selection.getRange(); + //闭合时单独处理 + if(range.collapsed){ + var txt = this.document.createTextNode('d'); + range.insertNode(txt); + } + doDirectionality(range,this,forward); + if(txt){ + range.setStartBefore(txt).collapse(true); + domUtils.remove(txt); + } + + range.select(); + return true; + }, + queryCommandValue : function() { + var node = getObj(this); + return node ? node.getAttribute('dir') : 'ltr'; + } + }; +})(); + + + +// plugins/horizontal.js +/** + * 插入分割线插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入分割线 + * @command horizontal + * @method execCommand + * @param { String } cmdName 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'horizontal' ); + * ``` + */ +UE.plugins['horizontal'] = function(){ + var me = this; + me.commands['horizontal'] = { + execCommand : function( cmdName ) { + var me = this; + if(me.queryCommandState(cmdName)!==-1){ + me.execCommand('insertHtml','
    '); + var range = me.selection.getRange(), + start = range.startContainer; + if(start.nodeType == 1 && !start.childNodes[range.startOffset] ){ + + var tmp; + if(tmp = start.childNodes[range.startOffset - 1]){ + if(tmp.nodeType == 1 && tmp.tagName == 'HR'){ + if(me.options.enterTag == 'p'){ + tmp = me.document.createElement('p'); + range.insertNode(tmp); + range.setStart(tmp,0).setCursor(); + + }else{ + tmp = me.document.createElement('br'); + range.insertNode(tmp); + range.setStartBefore(tmp).setCursor(); + } + } + } + + } + return true; + } + + }, + //边界在table里不能加分隔线 + queryCommandState : function() { + return domUtils.filterNodeList(this.selection.getStartElementPath(),'table') ? -1 : 0; + } + }; +// me.addListener('delkeyup',function(){ +// var rng = this.selection.getRange(); +// if(browser.ie && browser.version > 8){ +// rng.txtToElmBoundary(true); +// if(domUtils.isStartInblock(rng)){ +// var tmpNode = rng.startContainer; +// var pre = tmpNode.previousSibling; +// if(pre && domUtils.isTagNode(pre,'hr')){ +// domUtils.remove(pre); +// rng.select(); +// return; +// } +// } +// } +// if(domUtils.isBody(rng.startContainer)){ +// var hr = rng.startContainer.childNodes[rng.startOffset -1]; +// if(hr && hr.nodeName == 'HR'){ +// var next = hr.nextSibling; +// if(next){ +// rng.setStart(next,0) +// }else if(hr.previousSibling){ +// rng.setStartAtLast(hr.previousSibling) +// }else{ +// var p = this.document.createElement('p'); +// hr.parentNode.insertBefore(p,hr); +// domUtils.fillNode(this.document,p); +// rng.setStart(p,0); +// } +// domUtils.remove(hr); +// rng.setCursor(false,true); +// } +// } +// }) + me.addListener('delkeydown',function(name,evt){ + var rng = this.selection.getRange(); + rng.txtToElmBoundary(true); + if(domUtils.isStartInblock(rng)){ + var tmpNode = rng.startContainer; + var pre = tmpNode.previousSibling; + if(pre && domUtils.isTagNode(pre,'hr')){ + domUtils.remove(pre); + rng.select(); + domUtils.preventDefault(evt); + return true; + + } + } + + }) +}; + + + +// plugins/time.js +/** + * 插入时间和日期 + * @file + * @since 1.2.6.1 + */ + +/** + * 插入时间,默认格式:12:59:59 + * @command time + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'time'); + * ``` + */ + +/** + * 插入日期,默认格式:2013-08-30 + * @command date + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'date'); + * ``` + */ +UE.commands['time'] = UE.commands["date"] = { + execCommand : function(cmd, format){ + var date = new Date; + + function formatTime(date, format) { + var hh = ('0' + date.getHours()).slice(-2), + ii = ('0' + date.getMinutes()).slice(-2), + ss = ('0' + date.getSeconds()).slice(-2); + format = format || 'hh:ii:ss'; + return format.replace(/hh/ig, hh).replace(/ii/ig, ii).replace(/ss/ig, ss); + } + function formatDate(date, format) { + var yyyy = ('000' + date.getFullYear()).slice(-4), + yy = yyyy.slice(-2), + mm = ('0' + (date.getMonth()+1)).slice(-2), + dd = ('0' + date.getDate()).slice(-2); + format = format || 'yyyy-mm-dd'; + return format.replace(/yyyy/ig, yyyy).replace(/yy/ig, yy).replace(/mm/ig, mm).replace(/dd/ig, dd); + } + + this.execCommand('insertHtml',cmd == "time" ? formatTime(date, format):formatDate(date, format) ); + } +}; + + +// plugins/rowspacing.js +/** + * 段前段后间距插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 设置段间距 + * @command rowspacing + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } value 段间距的值,以px为单位 + * @param { String } dir 间距位置,top或bottom,分别表示段前和段后 + * @example + * ```javascript + * editor.execCommand( 'rowspacing', '10', 'top' ); + * ``` + */ + +UE.plugins['rowspacing'] = function(){ + var me = this; + me.setOpt({ + 'rowspacingtop':['5', '10', '15', '20', '25'], + 'rowspacingbottom':['5', '10', '15', '20', '25'] + + }); + me.commands['rowspacing'] = { + execCommand : function( cmdName,value,dir ) { + this.execCommand('paragraph','p',{style:'margin-'+dir+':'+value + 'px'}); + return true; + }, + queryCommandValue : function(cmdName,dir) { + var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node) }), + value; + //trace:1026 + if(pN){ + value = domUtils.getComputedStyle(pN,'margin-'+dir).replace(/[^\d]/g,''); + return !value ? 0 : value; + } + return 0; + + } + }; +}; + + + + +// plugins/lineheight.js +/** + * 设置行内间距 + * @file + * @since 1.2.6.1 + */ +UE.plugins['lineheight'] = function(){ + var me = this; + me.setOpt({'lineheight':['1', '1.5','1.75','2', '3', '4', '5']}); + + /** + * 行距 + * @command lineheight + * @method execCommand + * @param { String } cmdName 命令字符串 + * @param { String } value 传入的行高值, 该值是当前字体的倍数, 例如: 1.5, 1.75 + * @example + * ```javascript + * editor.execCommand( 'lineheight', 1.5); + * ``` + */ + /** + * 查询当前选区内容的行高大小 + * @command lineheight + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回当前行高大小 + * @example + * ```javascript + * editor.queryCommandValue( 'lineheight' ); + * ``` + */ + + me.commands['lineheight'] = { + execCommand : function( cmdName,value ) { + this.execCommand('paragraph','p',{style:'line-height:'+ (value == "1" ? "normal" : value + 'em') }); + return true; + }, + queryCommandValue : function() { + var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)}); + if(pN){ + var value = domUtils.getComputedStyle(pN,'line-height'); + return value == 'normal' ? 1 : value.replace(/[^\d.]*/ig,""); + } + } + }; +}; + + + + +// plugins/insertcode.js +/** + * 插入代码插件 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['insertcode'] = function() { + var me = this; + me.ready(function(){ + utils.cssRule('pre','pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}', + me.document) + }); + me.setOpt('insertcode',{ + 'as3':'ActionScript3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'Css', + 'cf':'CodeFunction', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'Html', + 'java':'Java', + 'jfx':'JavaFx', + 'js':'Javascript', + 'pl':'Perl', + 'php':'Php', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'Sql', + 'vb':'Vb', + 'xml':'Xml' + }); + + /** + * 插入代码 + * @command insertcode + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } lang 插入代码的语言 + * @example + * ```javascript + * editor.execCommand( 'insertcode', 'javascript' ); + * ``` + */ + + /** + * 如果选区所在位置是插入插入代码区域,返回代码的语言 + * @command insertcode + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回代码的语言 + * @example + * ```javascript + * editor.queryCommandValue( 'insertcode' ); + * ``` + */ + + me.commands['insertcode'] = { + execCommand : function(cmd,lang){ + var me = this, + rng = me.selection.getRange(), + pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + pre.className = 'brush:'+lang+';toolbar:false;'; + }else{ + var code = ''; + if(rng.collapsed){ + code = browser.ie && browser.ie11below ? (browser.version <= 8 ? ' ':''):'
    '; + }else{ + var frag = rng.extractContents(); + var div = me.document.createElement('div'); + div.appendChild(frag); + + utils.each(UE.filterNode(UE.htmlparser(div.innerHTML.replace(/[\r\t]/g,'')),me.options.filterTxtRules).children,function(node){ + if(browser.ie && browser.ie11below && browser.version > 8){ + + if(node.type =='element'){ + if(node.tagName == 'br'){ + code += '\n' + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + code += '\n' + }else if(!dtd.$empty[node.tagName]){ + code += cn.innerText(); + } + }else{ + code += cn.data + } + }) + if(!/\n$/.test(code)){ + code += '\n'; + } + } + }else{ + code += node.data + '\n' + } + if(!node.nextSibling() && /\n$/.test(code)){ + code = code.replace(/\n$/,''); + } + }else{ + if(browser.ie && browser.ie11below){ + + if(node.type =='element'){ + if(node.tagName == 'br'){ + code += '
    ' + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + code += '
    ' + }else if(!dtd.$empty[node.tagName]){ + code += cn.innerText(); + } + }else{ + code += cn.data + } + }); + if(!/br>$/.test(code)){ + code += '
    '; + } + } + }else{ + code += node.data + '
    ' + } + if(!node.nextSibling() && /
    $/.test(code)){ + code = code.replace(/
    $/,''); + } + + }else{ + code += (node.type == 'element' ? (dtd.$empty[node.tagName] ? '' : node.innerText()) : node.data); + if(!/br\/?\s*>$/.test(code)){ + if(!node.nextSibling()) + return; + code += '
    ' + } + } + + } + + }); + } + me.execCommand('inserthtml','
    '+code+'
    ',true); + + pre = me.document.getElementById('coder'); + domUtils.removeAttributes(pre,'id'); + var tmpNode = pre.previousSibling; + + if(tmpNode && (tmpNode.nodeType == 3 && tmpNode.nodeValue.length == 1 && browser.ie && browser.version == 6 || domUtils.isEmptyBlock(tmpNode))){ + + domUtils.remove(tmpNode) + } + var rng = me.selection.getRange(); + if(domUtils.isEmptyBlock(pre)){ + rng.setStart(pre,0).setCursor(false,true) + }else{ + rng.selectNodeContents(pre).select() + } + } + + + + }, + queryCommandValue : function(){ + var path = this.selection.getStartElementPath(); + var lang = ''; + utils.each(path,function(node){ + if(node.nodeName =='PRE'){ + var match = node.className.match(/brush:([^;]+)/); + lang = match && match[1] ? match[1] : ''; + return false; + } + }); + return lang; + } + }; + + me.addInputRule(function(root){ + utils.each(root.getNodesByTagName('pre'),function(pre){ + var brs = pre.getNodesByTagName('br'); + if(brs.length){ + browser.ie && browser.ie11below && browser.version > 8 && utils.each(brs,function(br){ + var txt = UE.uNode.createText('\n'); + br.parentNode.insertBefore(txt,br); + br.parentNode.removeChild(br); + }); + return; + } + if(browser.ie && browser.ie11below && browser.version > 8) + return; + var code = pre.innerText().split(/\n/); + pre.innerHTML(''); + utils.each(code,function(c){ + if(c.length){ + pre.appendChild(UE.uNode.createText(c)); + } + pre.appendChild(UE.uNode.createElement('br')) + }) + }) + }); + me.addOutputRule(function(root){ + utils.each(root.getNodesByTagName('pre'),function(pre){ + var code = ''; + utils.each(pre.children,function(n){ + if(n.type == 'text'){ + //在ie下文本内容有可能末尾带有\n要去掉 + //trace:3396 + code += n.data.replace(/[ ]/g,' ').replace(/\n$/,''); + }else{ + if(n.tagName == 'br'){ + code += '\n' + }else{ + code += (!dtd.$empty[n.tagName] ? '' : n.innerText()); + } + + } + + }); + + pre.innerText(code.replace(/( |\n)+$/,'')) + }) + }); + //不需要判断highlight的command列表 + me.notNeedCodeQuery ={ + help:1, + undo:1, + redo:1, + source:1, + print:1, + searchreplace:1, + fullscreen:1, + preview:1, + insertparagraph:1, + elementpath:1, + insertcode:1, + inserthtml:1, + selectall:1 + }; + //将queyCommamndState重置 + var orgQuery = me.queryCommandState; + me.queryCommandState = function(cmd){ + var me = this; + + if(!me.notNeedCodeQuery[cmd.toLowerCase()] && me.selection && me.queryCommandValue('insertcode')){ + return -1; + } + return UE.Editor.prototype.queryCommandState.apply(this,arguments) + }; + me.addListener('beforeenterkeydown',function(){ + var rng = me.selection.getRange(); + var pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + me.fireEvent('saveScene'); + if(!rng.collapsed){ + rng.deleteContents(); + } + if(!browser.ie || browser.ie9above){ + var tmpNode = me.document.createElement('br'),pre; + rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true); + var next = tmpNode.nextSibling; + if(!next && (!browser.ie || browser.version > 10)){ + rng.insertNode(tmpNode.cloneNode(false)); + }else{ + rng.setStartAfter(tmpNode); + } + pre = tmpNode.previousSibling; + var tmp; + while(pre ){ + tmp = pre; + pre = pre.previousSibling; + if(!pre || pre.nodeName == 'BR'){ + pre = tmp; + break; + } + } + if(pre){ + var str = ''; + while(pre && pre.nodeName != 'BR' && new RegExp('^[\\s'+domUtils.fillChar+']*$').test(pre.nodeValue)){ + str += pre.nodeValue; + pre = pre.nextSibling; + } + if(pre.nodeName != 'BR'){ + var match = pre.nodeValue.match(new RegExp('^([\\s'+domUtils.fillChar+']+)')); + if(match && match[1]){ + str += match[1] + } + + } + if(str){ + str = me.document.createTextNode(str); + rng.insertNode(str).setStartAfter(str); + } + } + rng.collapse(true).select(true); + }else{ + if(browser.version > 8){ + + var txt = me.document.createTextNode('\n'); + var start = rng.startContainer; + if(rng.startOffset == 0){ + var preNode = start.previousSibling; + if(preNode){ + rng.insertNode(txt); + var fillchar = me.document.createTextNode(' '); + rng.setStartAfter(txt).insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true) + } + }else{ + rng.insertNode(txt).setStartAfter(txt); + var fillchar = me.document.createTextNode(' '); + start = rng.startContainer.childNodes[rng.startOffset]; + if(start && !/^\n/.test(start.nodeValue)){ + rng.setStartBefore(txt) + } + rng.insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true) + } + + }else{ + var tmpNode = me.document.createElement('br'); + rng.insertNode(tmpNode); + rng.insertNode(me.document.createTextNode(domUtils.fillChar)); + rng.setStartAfter(tmpNode); + pre = tmpNode.previousSibling; + var tmp; + while(pre ){ + tmp = pre; + pre = pre.previousSibling; + if(!pre || pre.nodeName == 'BR'){ + pre = tmp; + break; + } + } + if(pre){ + var str = ''; + while(pre && pre.nodeName != 'BR' && new RegExp('^[ '+domUtils.fillChar+']*$').test(pre.nodeValue)){ + str += pre.nodeValue; + pre = pre.nextSibling; + } + if(pre.nodeName != 'BR'){ + var match = pre.nodeValue.match(new RegExp('^([ '+domUtils.fillChar+']+)')); + if(match && match[1]){ + str += match[1] + } + + } + + str = me.document.createTextNode(str); + rng.insertNode(str).setStartAfter(str); + } + rng.collapse(true).select(); + } + + + } + me.fireEvent('saveScene'); + return true; + } + + + }); + + me.addListener('tabkeydown',function(cmd,evt){ + var rng = me.selection.getRange(); + var pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + me.fireEvent('saveScene'); + if(evt.shiftKey){ + + }else{ + if(!rng.collapsed){ + var bk = rng.createBookmark(); + var start = bk.start.previousSibling; + + while(start){ + if(pre.firstChild === start && !domUtils.isBr(start)){ + pre.insertBefore(me.document.createTextNode(' '),start); + + break; + } + if(domUtils.isBr(start)){ + pre.insertBefore(me.document.createTextNode(' '),start.nextSibling); + + break; + } + start = start.previousSibling; + } + var end = bk.end; + start = bk.start.nextSibling; + if(pre.firstChild === bk.start){ + pre.insertBefore(me.document.createTextNode(' '),start.nextSibling) + + } + while(start && start !== end){ + if(domUtils.isBr(start) && start.nextSibling){ + if(start.nextSibling === end){ + break; + } + pre.insertBefore(me.document.createTextNode(' '),start.nextSibling) + } + + start = start.nextSibling; + } + rng.moveToBookmark(bk).select(); + }else{ + var tmpNode = me.document.createTextNode(' '); + rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true).select(true); + } + } + + + me.fireEvent('saveScene'); + return true; + } + + + }); + + + me.addListener('beforeinserthtml',function(evtName,html){ + var me = this, + rng = me.selection.getRange(), + pre = domUtils.findParentByTagName(rng.startContainer,'pre',true); + if(pre){ + if(!rng.collapsed){ + rng.deleteContents() + } + var htmlstr = ''; + if(browser.ie && browser.version > 8){ + + utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){ + if(node.type =='element'){ + if(node.tagName == 'br'){ + htmlstr += '\n' + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + htmlstr += '\n' + }else if(!dtd.$empty[node.tagName]){ + htmlstr += cn.innerText(); + } + }else{ + htmlstr += cn.data + } + }) + if(!/\n$/.test(htmlstr)){ + htmlstr += '\n'; + } + } + }else{ + htmlstr += node.data + '\n' + } + if(!node.nextSibling() && /\n$/.test(htmlstr)){ + htmlstr = htmlstr.replace(/\n$/,''); + } + }); + var tmpNode = me.document.createTextNode(utils.html(htmlstr.replace(/ /g,' '))); + rng.insertNode(tmpNode).selectNode(tmpNode).select(); + }else{ + var frag = me.document.createDocumentFragment(); + + utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){ + if(node.type =='element'){ + if(node.tagName == 'br'){ + frag.appendChild(me.document.createElement('br')) + }else if(!dtd.$empty[node.tagName]){ + utils.each(node.children,function(cn){ + if(cn.type =='element'){ + if(cn.tagName == 'br'){ + + frag.appendChild(me.document.createElement('br')) + }else if(!dtd.$empty[node.tagName]){ + frag.appendChild(me.document.createTextNode(utils.html(cn.innerText().replace(/ /g,' ')))); + + } + }else{ + frag.appendChild(me.document.createTextNode(utils.html( cn.data.replace(/ /g,' ')))); + + } + }) + if(frag.lastChild.nodeName != 'BR'){ + frag.appendChild(me.document.createElement('br')) + } + } + }else{ + frag.appendChild(me.document.createTextNode(utils.html( node.data.replace(/ /g,' ')))); + } + if(!node.nextSibling() && frag.lastChild.nodeName == 'BR'){ + frag.removeChild(frag.lastChild) + } + + + }); + rng.insertNode(frag).select(); + + } + + return true; + } + }); + //方向键的处理 + me.addListener('keydown',function(cmd,evt){ + var me = this,keyCode = evt.keyCode || evt.which; + if(keyCode == 40){ + var rng = me.selection.getRange(),pre,start = rng.startContainer; + if(rng.collapsed && (pre = domUtils.findParentByTagName(rng.startContainer,'pre',true)) && !pre.nextSibling){ + var last = pre.lastChild + while(last && last.nodeName == 'BR'){ + last = last.previousSibling; + } + if(last === start || rng.startContainer === pre && rng.startOffset == pre.childNodes.length){ + me.execCommand('insertparagraph'); + domUtils.preventDefault(evt) + } + + } + } + }); + //trace:3395 + me.addListener('delkeydown',function(type,evt){ + var rng = this.selection.getRange(); + rng.txtToElmBoundary(true); + var start = rng.startContainer; + if(domUtils.isTagNode(start,'pre') && rng.collapsed && domUtils.isStartInblock(rng)){ + var p = me.document.createElement('p'); + domUtils.fillNode(me.document,p); + start.parentNode.insertBefore(p,start); + domUtils.remove(start); + rng.setStart(p,0).setCursor(false,true); + domUtils.preventDefault(evt); + return true; + } + }) +}; + + +// plugins/cleardoc.js +/** + * 清空文档插件 + * @file + * @since 1.2.6.1 + */ + +/** + * 清空文档 + * @command cleardoc + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor 是编辑器实例 + * editor.execCommand('cleardoc'); + * ``` + */ + +UE.commands['cleardoc'] = { + execCommand : function( cmdName) { + var me = this, + enterTag = me.options.enterTag, + range = me.selection.getRange(); + if(enterTag == "br"){ + me.body.innerHTML = "
    "; + range.setStart(me.body,0).setCursor(); + }else{ + me.body.innerHTML = "

    "+(ie ? "" : "
    ")+"

    "; + range.setStart(me.body.firstChild,0).setCursor(false,true); + } + setTimeout(function(){ + me.fireEvent("clearDoc"); + },0); + + } +}; + + + +// plugins/anchor.js +/** + * 锚点插件,为UEditor提供插入锚点支持 + * @file + * @since 1.2.6.1 + */ +UE.plugin.register('anchor', function (){ + + return { + bindEvents:{ + 'ready':function(){ + utils.cssRule('anchor', + '.anchorclass{background: url(\'' + + this.options.themePath + + this.options.theme +'/images/anchor.gif\') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}', + this.document); + } + }, + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(a){ + var val; + if(val = a.getAttr('anchorname')){ + a.tagName = 'a'; + a.setAttr({ + anchorname : '', + name : val, + 'class' : '' + }) + } + }) + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('a'),function(a){ + var val; + if((val = a.getAttr('name')) && !a.getAttr('href')){ + a.tagName = 'img'; + a.setAttr({ + anchorname :a.getAttr('name'), + 'class' : 'anchorclass' + }); + a.setAttr('name') + + } + }) + + }, + commands:{ + /** + * 插入锚点 + * @command anchor + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } name 锚点名称字符串 + * @example + * ```javascript + * //editor 是编辑器实例 + * editor.execCommand('anchor', 'anchor1'); + * ``` + */ + 'anchor':{ + execCommand:function (cmd, name) { + var range = this.selection.getRange(),img = range.getClosedNode(); + if (img && img.getAttribute('anchorname')) { + if (name) { + img.setAttribute('anchorname', name); + } else { + range.setStartBefore(img).setCursor(); + domUtils.remove(img); + } + } else { + if (name) { + //只在选区的开始插入 + var anchor = this.document.createElement('img'); + range.collapse(true); + domUtils.setAttributes(anchor,{ + 'anchorname':name, + 'class':'anchorclass' + }); + range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true); + } + } + } + } + } + } +}); + + +// plugins/wordcount.js +///import core +///commands 字数统计 +///commandsName WordCount,wordCount +///commandsTitle 字数统计 +/* + * Created by JetBrains WebStorm. + * User: taoqili + * Date: 11-9-7 + * Time: 下午8:18 + * To change this template use File | Settings | File Templates. + */ + +UE.plugins['wordcount'] = function(){ + var me = this; + me.setOpt('wordCount',true); + me.addListener('contentchange',function(){ + me.fireEvent('wordcount'); + }); + var timer; + me.addListener('ready',function(){ + var me = this; + domUtils.on(me.body,"keyup",function(evt){ + var code = evt.keyCode||evt.which, + //忽略的按键,ctr,alt,shift,方向键 + ignores = {"16":1,"18":1,"20":1,"37":1,"38":1,"39":1,"40":1}; + if(code in ignores) return; + clearTimeout(timer); + timer = setTimeout(function(){ + me.fireEvent('wordcount'); + },200) + }) + }); +}; + + +// plugins/pagebreak.js +/** + * 分页功能插件 + * @file + * @since 1.2.6.1 + */ +UE.plugins['pagebreak'] = function () { + var me = this, + notBreakTags = ['td']; + me.setOpt('pageBreakTag','_ueditor_page_break_tag_'); + + function fillNode(node){ + if(domUtils.isEmptyBlock(node)){ + var firstChild = node.firstChild,tmpNode; + + while(firstChild && firstChild.nodeType == 1 && domUtils.isEmptyBlock(firstChild)){ + tmpNode = firstChild; + firstChild = firstChild.firstChild; + } + !tmpNode && (tmpNode = node); + domUtils.fillNode(me.document,tmpNode); + } + } + //分页符样式添加 + + me.ready(function(){ + utils.cssRule('pagebreak','.pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}',me.document); + }); + function isHr(node){ + return node && node.nodeType == 1 && node.tagName == 'HR' && node.className == 'pagebreak'; + } + me.addInputRule(function(root){ + root.traversal(function(node){ + if(node.type == 'text' && node.data == me.options.pageBreakTag){ + var hr = UE.uNode.createElement('
    '); + node.parentNode.insertBefore(hr,node); + node.parentNode.removeChild(node) + } + }) + }); + me.addOutputRule(function(node){ + utils.each(node.getNodesByTagName('hr'),function(n){ + if(n.getAttr('class') == 'pagebreak'){ + var txt = UE.uNode.createText(me.options.pageBreakTag); + n.parentNode.insertBefore(txt,n); + n.parentNode.removeChild(n); + } + }) + + }); + + /** + * 插入分页符 + * @command pagebreak + * @method execCommand + * @param { String } cmd 命令字符串 + * @remind 在表格中插入分页符会把表格切分成两部分 + * @remind 获取编辑器内的数据时, 编辑器会把分页符转换成“_ueditor_page_break_tag_”字符串, + * 以便于提交数据到服务器端后处理分页。 + * @example + * ```javascript + * editor.execCommand( 'pagebreak'); //插入一个hr标签,带有样式类名pagebreak + * ``` + */ + + me.commands['pagebreak'] = { + execCommand:function () { + var range = me.selection.getRange(),hr = me.document.createElement('hr'); + domUtils.setAttributes(hr,{ + 'class' : 'pagebreak', + noshade:"noshade", + size:"5" + }); + domUtils.unSelectable(hr); + //table单独处理 + var node = domUtils.findParentByTagName(range.startContainer, notBreakTags, true), + + parents = [], pN; + if (node) { + switch (node.tagName) { + case 'TD': + pN = node.parentNode; + if (!pN.previousSibling) { + var table = domUtils.findParentByTagName(pN, 'table'); +// var tableWrapDiv = table.parentNode; +// if(tableWrapDiv && tableWrapDiv.nodeType == 1 +// && tableWrapDiv.tagName == 'DIV' +// && tableWrapDiv.getAttribute('dropdrag') +// ){ +// domUtils.remove(tableWrapDiv,true); +// } + table.parentNode.insertBefore(hr, table); + parents = domUtils.findParents(hr, true); + + } else { + pN.parentNode.insertBefore(hr, pN); + parents = domUtils.findParents(hr); + + } + pN = parents[1]; + if (hr !== pN) { + domUtils.breakParent(hr, pN); + + } + //table要重写绑定一下拖拽 + me.fireEvent('afteradjusttable',me.document); + } + + } else { + + if (!range.collapsed) { + range.deleteContents(); + var start = range.startContainer; + while ( !domUtils.isBody(start) && domUtils.isBlockElm(start) && domUtils.isEmptyNode(start)) { + range.setStartBefore(start).collapse(true); + domUtils.remove(start); + start = range.startContainer; + } + + } + range.insertNode(hr); + + var pN = hr.parentNode, nextNode; + while (!domUtils.isBody(pN)) { + domUtils.breakParent(hr, pN); + nextNode = hr.nextSibling; + if (nextNode && domUtils.isEmptyBlock(nextNode)) { + domUtils.remove(nextNode); + } + pN = hr.parentNode; + } + nextNode = hr.nextSibling; + var pre = hr.previousSibling; + if(isHr(pre)){ + domUtils.remove(pre); + }else{ + pre && fillNode(pre); + } + + if(!nextNode){ + var p = me.document.createElement('p'); + + hr.parentNode.appendChild(p); + domUtils.fillNode(me.document,p); + range.setStart(p,0).collapse(true); + }else{ + if(isHr(nextNode)){ + domUtils.remove(nextNode); + }else{ + fillNode(nextNode); + } + range.setEndAfter(hr).collapse(false); + } + + range.select(true); + + } + + } + }; +}; + +// plugins/wordimage.js +///import core +///commands 本地图片引导上传 +///commandsName WordImage +///commandsTitle 本地图片引导上传 +///commandsDialog dialogs\wordimage + +UE.plugin.register('wordimage',function(){ + var me = this, + images = []; + return { + commands : { + 'wordimage':{ + execCommand:function () { + var images = domUtils.getElementsByTagName(me.body, "img"); + var urlList = []; + for (var i = 0, ci; ci = images[i++];) { + var url = ci.getAttribute("word_img"); + url && urlList.push(url); + } + return urlList; + }, + queryCommandState:function () { + images = domUtils.getElementsByTagName(me.body, "img"); + for (var i = 0, ci; ci = images[i++];) { + if (ci.getAttribute("word_img")) { + return 1; + } + } + return -1; + }, + notNeedUndo:true + } + }, + inputRule : function (root) { + utils.each(root.getNodesByTagName('img'), function (img) { + var attrs = img.attrs, + flag = parseInt(attrs.width) < 128 || parseInt(attrs.height) < 43, + opt = me.options, + src = opt.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif'; + if (attrs['src'] && /^(?:(file:\/+))/.test(attrs['src'])) { + img.setAttr({ + width:attrs.width, + height:attrs.height, + alt:attrs.alt, + word_img: attrs.src, + src:src, + 'style':'background:url(' + ( flag ? opt.themePath + opt.theme + '/images/word.gif' : opt.langPath + opt.lang + '/images/localimage.png') + ') no-repeat center center;border:1px solid #ddd' + }) + } + }) + } + } +}); + +// plugins/dragdrop.js +UE.plugins['dragdrop'] = function (){ + + var me = this; + me.ready(function(){ + domUtils.on(this.body,'dragend',function(){ + var rng = me.selection.getRange(); + var node = rng.getClosedNode()||me.selection.getStart(); + + if(node && node.tagName == 'IMG'){ + + var pre = node.previousSibling,next; + while(next = node.nextSibling){ + if(next.nodeType == 1 && next.tagName == 'SPAN' && !next.firstChild){ + domUtils.remove(next) + }else{ + break; + } + } + + + if((pre && pre.nodeType == 1 && !domUtils.isEmptyBlock(pre) || !pre) && (!next || next && !domUtils.isEmptyBlock(next))){ + if(pre && pre.tagName == 'P' && !domUtils.isEmptyBlock(pre)){ + pre.appendChild(node); + domUtils.moveChild(next,pre); + domUtils.remove(next); + }else if(next && next.tagName == 'P' && !domUtils.isEmptyBlock(next)){ + next.insertBefore(node,next.firstChild); + } + + if(pre && pre.tagName == 'P' && domUtils.isEmptyBlock(pre)){ + domUtils.remove(pre) + } + if(next && next.tagName == 'P' && domUtils.isEmptyBlock(next)){ + domUtils.remove(next) + } + rng.selectNode(node).select(); + me.fireEvent('saveScene'); + + } + + } + + }) + }); + me.addListener('keyup', function(type, evt) { + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13) { + var rng = me.selection.getRange(),node; + if(node = domUtils.findParentByTagName(rng.startContainer,'p',true)){ + if(domUtils.getComputedStyle(node,'text-align') == 'center'){ + domUtils.removeStyle(node,'text-align') + } + } + } + }) +}; + + +// plugins/undo.js +/** + * undo redo + * @file + * @since 1.2.6.1 + */ + +/** + * 撤销上一次执行的命令 + * @command undo + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'undo' ); + * ``` + */ + +/** + * 重做上一次执行的命令 + * @command redo + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'redo' ); + * ``` + */ + +UE.plugins['undo'] = function () { + var saveSceneTimer; + var me = this, + maxUndoCount = me.options.maxUndoCount || 20, + maxInputCount = me.options.maxInputCount || 20, + fillchar = new RegExp(domUtils.fillChar + '|<\/hr>', 'gi');// ie会产生多余的 + var noNeedFillCharTags = { + ol:1,ul:1,table:1,tbody:1,tr:1,body:1 + }; + var orgState = me.options.autoClearEmptyNode; + function compareAddr(indexA, indexB) { + if (indexA.length != indexB.length) + return 0; + for (var i = 0, l = indexA.length; i < l; i++) { + if (indexA[i] != indexB[i]) + return 0 + } + return 1; + } + + function compareRangeAddress(rngAddrA, rngAddrB) { + if (rngAddrA.collapsed != rngAddrB.collapsed) { + return 0; + } + if (!compareAddr(rngAddrA.startAddress, rngAddrB.startAddress) || !compareAddr(rngAddrA.endAddress, rngAddrB.endAddress)) { + return 0; + } + return 1; + } + + function UndoManager() { + this.list = []; + this.index = 0; + this.hasUndo = false; + this.hasRedo = false; + this.undo = function () { + if (this.hasUndo) { + if (!this.list[this.index - 1] && this.list.length == 1) { + this.reset(); + return; + } + while (this.list[this.index].content == this.list[this.index - 1].content) { + this.index--; + if (this.index == 0) { + return this.restore(0); + } + } + this.restore(--this.index); + } + }; + this.redo = function () { + if (this.hasRedo) { + while (this.list[this.index].content == this.list[this.index + 1].content) { + this.index++; + if (this.index == this.list.length - 1) { + return this.restore(this.index); + } + } + this.restore(++this.index); + } + }; + + this.restore = function () { + var me = this.editor; + var scene = this.list[this.index]; + var root = UE.htmlparser(scene.content.replace(fillchar, '')); + me.options.autoClearEmptyNode = false; + me.filterInputRule(root); + me.options.autoClearEmptyNode = orgState; + //trace:873 + //去掉展位符 + me.document.body.innerHTML = root.toHtml(); + me.fireEvent('afterscencerestore'); + //处理undo后空格不展位的问题 + if (browser.ie) { + utils.each(domUtils.getElementsByTagName(me.document,'td th caption p'),function(node){ + if(domUtils.isEmptyNode(node)){ + domUtils.fillNode(me.document, node); + } + }) + } + + try{ + var rng = new dom.Range(me.document).moveToAddress(scene.address); + rng.select(noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()]); + }catch(e){} + + this.update(); + this.clearKey(); + //不能把自己reset了 + me.fireEvent('reset', true); + }; + + this.getScene = function () { + var me = this.editor; + var rng = me.selection.getRange(), + rngAddress = rng.createAddress(false,true); + me.fireEvent('beforegetscene'); + var root = UE.htmlparser(me.body.innerHTML); + me.options.autoClearEmptyNode = false; + me.filterOutputRule(root); + me.options.autoClearEmptyNode = orgState; + var cont = root.toHtml(); + //trace:3461 + //这个会引起回退时导致空格丢失的情况 +// browser.ie && (cont = cont.replace(/> <').replace(/\s*\s*/g, '>')); + me.fireEvent('aftergetscene'); + + return { + address:rngAddress, + content:cont + } + }; + this.save = function (notCompareRange,notSetCursor) { + clearTimeout(saveSceneTimer); + var currentScene = this.getScene(notSetCursor), + lastScene = this.list[this.index]; + + if(lastScene && lastScene.content != currentScene.content){ + me.trigger('contentchange') + } + //内容相同位置相同不存 + if (lastScene && lastScene.content == currentScene.content && + ( notCompareRange ? 1 : compareRangeAddress(lastScene.address, currentScene.address) ) + ) { + return; + } + this.list = this.list.slice(0, this.index + 1); + this.list.push(currentScene); + //如果大于最大数量了,就把最前的剔除 + if (this.list.length > maxUndoCount) { + this.list.shift(); + } + this.index = this.list.length - 1; + this.clearKey(); + //跟新undo/redo状态 + this.update(); + + }; + this.update = function () { + this.hasRedo = !!this.list[this.index + 1]; + this.hasUndo = !!this.list[this.index - 1]; + }; + this.reset = function () { + this.list = []; + this.index = 0; + this.hasUndo = false; + this.hasRedo = false; + this.clearKey(); + }; + this.clearKey = function () { + keycont = 0; + lastKeyCode = null; + }; + } + + me.undoManger = new UndoManager(); + me.undoManger.editor = me; + function saveScene() { + this.undoManger.save(); + } + + me.addListener('saveScene', function () { + var args = Array.prototype.splice.call(arguments,1); + this.undoManger.save.apply(this.undoManger,args); + }); + +// me.addListener('beforeexeccommand', saveScene); +// me.addListener('afterexeccommand', saveScene); + + me.addListener('reset', function (type, exclude) { + if (!exclude) { + this.undoManger.reset(); + } + }); + me.commands['redo'] = me.commands['undo'] = { + execCommand:function (cmdName) { + this.undoManger[cmdName](); + }, + queryCommandState:function (cmdName) { + return this.undoManger['has' + (cmdName.toLowerCase() == 'undo' ? 'Undo' : 'Redo')] ? 0 : -1; + }, + notNeedUndo:1 + }; + + var keys = { + // /*Backspace*/ 8:1, /*Delete*/ 46:1, + /*Shift*/ 16:1, /*Ctrl*/ 17:1, /*Alt*/ 18:1, + 37:1, 38:1, 39:1, 40:1 + + }, + keycont = 0, + lastKeyCode; + //输入法状态下不计算字符数 + var inputType = false; + me.addListener('ready', function () { + domUtils.on(this.body, 'compositionstart', function () { + inputType = true; + }); + domUtils.on(this.body, 'compositionend', function () { + inputType = false; + }) + }); + //快捷键 + me.addshortcutkey({ + "Undo":"ctrl+90", //undo + "Redo":"ctrl+89" //redo + + }); + var isCollapsed = true; + me.addListener('keydown', function (type, evt) { + + var me = this; + var keyCode = evt.keyCode || evt.which; + if (!keys[keyCode] && !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) { + if (inputType) + return; + + if(!me.selection.getRange().collapsed){ + me.undoManger.save(false,true); + isCollapsed = false; + return; + } + if (me.undoManger.list.length == 0) { + me.undoManger.save(true); + } + clearTimeout(saveSceneTimer); + function save(cont){ + cont.undoManger.save(false,true); + cont.fireEvent('selectionchange'); + } + saveSceneTimer = setTimeout(function(){ + if(inputType){ + var interalTimer = setInterval(function(){ + if(!inputType){ + save(me); + clearInterval(interalTimer) + } + },300) + return; + } + save(me); + },200); + + lastKeyCode = keyCode; + keycont++; + if (keycont >= maxInputCount ) { + save(me) + } + } + }); + me.addListener('keyup', function (type, evt) { + var keyCode = evt.keyCode || evt.which; + if (!keys[keyCode] && !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) { + if (inputType) + return; + if(!isCollapsed){ + this.undoManger.save(false,true); + isCollapsed = true; + } + } + }); + //扩展实例,添加关闭和开启命令undo + me.stopCmdUndo = function(){ + me.__hasEnterExecCommand = true; + }; + me.startCmdUndo = function(){ + me.__hasEnterExecCommand = false; + } +}; + + +// plugins/copy.js +UE.plugin.register('copy', function () { + + var me = this; + + function initZeroClipboard() { + + ZeroClipboard.config({ + debug: false, + swfPath: me.options.UEDITOR_HOME_URL + 'third-party/zeroclipboard/ZeroClipboard.swf' + }); + + var client = me.zeroclipboard = new ZeroClipboard(); + + // 复制内容 + client.on('copy', function (e) { + var client = e.client, + rng = me.selection.getRange(), + div = document.createElement('div'); + + div.appendChild(rng.cloneContents()); + client.setText(div.innerText || div.textContent); + client.setHtml(div.innerHTML); + rng.select(); + }); + // hover事件传递到target + client.on('mouseover mouseout', function (e) { + var target = e.target; + if (e.type == 'mouseover') { + domUtils.addClass(target, 'edui-state-hover'); + } else if (e.type == 'mouseout') { + domUtils.removeClasses(target, 'edui-state-hover'); + } + }); + // flash加载不成功 + client.on('wrongflash noflash', function () { + ZeroClipboard.destroy(); + }); + } + + return { + bindEvents: { + 'ready': function () { + if (!browser.ie) { + if (window.ZeroClipboard) { + initZeroClipboard(); + } else { + utils.loadFile(document, { + src: me.options.UEDITOR_HOME_URL + "third-party/zeroclipboard/ZeroClipboard.js", + tag: "script", + type: "text/javascript", + defer: "defer" + }, function () { + initZeroClipboard(); + }); + } + } + } + }, + commands: { + 'copy': { + execCommand: function (cmd) { + if (!me.document.execCommand('copy')) { + alert(me.getLang('copymsg')); + } + } + } + } + } +}); + + +// plugins/paste.js +///import core +///import plugins/inserthtml.js +///import plugins/undo.js +///import plugins/serialize.js +///commands 粘贴 +///commandsName PastePlain +///commandsTitle 纯文本粘贴模式 +/** + * @description 粘贴 + * @author zhanyi + */ +UE.plugins['paste'] = function () { + function getClipboardData(callback) { + var doc = this.document; + if (doc.getElementById('baidu_pastebin')) { + return; + } + var range = this.selection.getRange(), + bk = range.createBookmark(), + //创建剪贴的容器div + pastebin = doc.createElement('div'); + pastebin.id = 'baidu_pastebin'; + // Safari 要求div必须有内容,才能粘贴内容进来 + browser.webkit && pastebin.appendChild(doc.createTextNode(domUtils.fillChar + domUtils.fillChar)); + doc.body.appendChild(pastebin); + //trace:717 隐藏的span不能得到top + //bk.start.innerHTML = ' '; + bk.start.style.display = ''; + pastebin.style.cssText = "position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:" + + //要在现在光标平行的位置加入,否则会出现跳动的问题 + domUtils.getXY(bk.start).y + 'px'; + + range.selectNodeContents(pastebin).select(true); + + setTimeout(function () { + if (browser.webkit) { + for (var i = 0, pastebins = doc.querySelectorAll('#baidu_pastebin'), pi; pi = pastebins[i++];) { + if (domUtils.isEmptyNode(pi)) { + domUtils.remove(pi); + } else { + pastebin = pi; + break; + } + } + } + try { + pastebin.parentNode.removeChild(pastebin); + } catch (e) { + } + range.moveToBookmark(bk).select(true); + callback(pastebin); + }, 0); + } + + var me = this; + + me.setOpt({ + retainOnlyLabelPasted : false + }); + + var txtContent, htmlContent, address; + + function getPureHtml(html){ + return html.replace(/<(\/?)([\w\-]+)([^>]*)>/gi, function (a, b, tagName, attrs) { + tagName = tagName.toLowerCase(); + if ({img: 1}[tagName]) { + return a; + } + attrs = attrs.replace(/([\w\-]*?)\s*=\s*(("([^"]*)")|('([^']*)')|([^\s>]+))/gi, function (str, atr, val) { + if ({ + 'src': 1, + 'href': 1, + 'name': 1 + }[atr.toLowerCase()]) { + return atr + '=' + val + ' ' + } + return '' + }); + if ({ + 'span': 1, + 'div': 1 + }[tagName]) { + return '' + } else { + + return '<' + b + tagName + ' ' + utils.trim(attrs) + '>' + } + + }); + } + function filter(div) { + var html; + if (div.firstChild) { + //去掉cut中添加的边界值 + var nodes = domUtils.getElementsByTagName(div, 'span'); + for (var i = 0, ni; ni = nodes[i++];) { + if (ni.id == '_baidu_cut_start' || ni.id == '_baidu_cut_end') { + domUtils.remove(ni); + } + } + + if (browser.webkit) { + + var brs = div.querySelectorAll('div br'); + for (var i = 0, bi; bi = brs[i++];) { + var pN = bi.parentNode; + if (pN.tagName == 'DIV' && pN.childNodes.length == 1) { + pN.innerHTML = '


    '; + domUtils.remove(pN); + } + } + var divs = div.querySelectorAll('#baidu_pastebin'); + for (var i = 0, di; di = divs[i++];) { + var tmpP = me.document.createElement('p'); + di.parentNode.insertBefore(tmpP, di); + while (di.firstChild) { + tmpP.appendChild(di.firstChild); + } + domUtils.remove(di); + } + + var metas = div.querySelectorAll('meta'); + for (var i = 0, ci; ci = metas[i++];) { + domUtils.remove(ci); + } + + var brs = div.querySelectorAll('br'); + for (i = 0; ci = brs[i++];) { + if (/^apple-/i.test(ci.className)) { + domUtils.remove(ci); + } + } + } + if (browser.gecko) { + var dirtyNodes = div.querySelectorAll('[_moz_dirty]'); + for (i = 0; ci = dirtyNodes[i++];) { + ci.removeAttribute('_moz_dirty'); + } + } + if (!browser.ie) { + var spans = div.querySelectorAll('span.Apple-style-span'); + for (var i = 0, ci; ci = spans[i++];) { + domUtils.remove(ci, true); + } + } + + //ie下使用innerHTML会产生多余的\r\n字符,也会产生 这里过滤掉 + html = div.innerHTML;//.replace(/>(?:(\s| )*?)<'); + + //过滤word粘贴过来的冗余属性 + html = UE.filterWord(html); + //取消了忽略空白的第二个参数,粘贴过来的有些是有空白的,会被套上相关的标签 + var root = UE.htmlparser(html); + //如果给了过滤规则就先进行过滤 + if (me.options.filterRules) { + UE.filterNode(root, me.options.filterRules); + } + //执行默认的处理 + me.filterInputRule(root); + //针对chrome的处理 + if (browser.webkit) { + var br = root.lastChild(); + if (br && br.type == 'element' && br.tagName == 'br') { + root.removeChild(br) + } + utils.each(me.body.querySelectorAll('div'), function (node) { + if (domUtils.isEmptyBlock(node)) { + domUtils.remove(node,true) + } + }) + } + html = {'html': root.toHtml()}; + me.fireEvent('beforepaste', html, root); + //抢了默认的粘贴,那后边的内容就不执行了,比如表格粘贴 + if(!html.html){ + return; + } + root = UE.htmlparser(html.html,true); + //如果开启了纯文本模式 + if (me.queryCommandState('pasteplain') === 1) { + me.execCommand('insertHtml', UE.filterNode(root, me.options.filterTxtRules).toHtml(), true); + } else { + //文本模式 + UE.filterNode(root, me.options.filterTxtRules); + txtContent = root.toHtml(); + //完全模式 + htmlContent = html.html; + + address = me.selection.getRange().createAddress(true); + me.execCommand('insertHtml', me.getOpt('retainOnlyLabelPasted') === true ? getPureHtml(htmlContent) : htmlContent, true); + } + me.fireEvent("afterpaste", html); + } + } + + me.addListener('pasteTransfer', function (cmd, plainType) { + + if (address && txtContent && htmlContent && txtContent != htmlContent) { + var range = me.selection.getRange(); + range.moveToAddress(address, true); + + if (!range.collapsed) { + + while (!domUtils.isBody(range.startContainer) + ) { + var start = range.startContainer; + if(start.nodeType == 1){ + start = start.childNodes[range.startOffset]; + if(!start){ + range.setStartBefore(range.startContainer); + continue; + } + var pre = start.previousSibling; + + if(pre && pre.nodeType == 3 && new RegExp('^[\n\r\t '+domUtils.fillChar+']*$').test(pre.nodeValue)){ + range.setStartBefore(pre) + } + } + if(range.startOffset == 0){ + range.setStartBefore(range.startContainer); + }else{ + break; + } + + } + while (!domUtils.isBody(range.endContainer) + ) { + var end = range.endContainer; + if(end.nodeType == 1){ + end = end.childNodes[range.endOffset]; + if(!end){ + range.setEndAfter(range.endContainer); + continue; + } + var next = end.nextSibling; + if(next && next.nodeType == 3 && new RegExp('^[\n\r\t'+domUtils.fillChar+']*$').test(next.nodeValue)){ + range.setEndAfter(next) + } + } + if(range.endOffset == range.endContainer[range.endContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length){ + range.setEndAfter(range.endContainer); + }else{ + break; + } + + } + + } + + range.deleteContents(); + range.select(true); + me.__hasEnterExecCommand = true; + var html = htmlContent; + if (plainType === 2 ) { + html = getPureHtml(html); + } else if (plainType) { + html = txtContent; + } + me.execCommand('inserthtml', html, true); + me.__hasEnterExecCommand = false; + var rng = me.selection.getRange(); + while (!domUtils.isBody(rng.startContainer) && !rng.startOffset && + rng.startContainer[rng.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length + ) { + rng.setStartBefore(rng.startContainer); + } + var tmpAddress = rng.createAddress(true); + address.endAddress = tmpAddress.startAddress; + } + }); + + me.addListener('ready', function () { + domUtils.on(me.body, 'cut', function () { + var range = me.selection.getRange(); + if (!range.collapsed && me.undoManger) { + me.undoManger.save(); + } + }); + + //ie下beforepaste在点击右键时也会触发,所以用监控键盘才处理 + domUtils.on(me.body, browser.ie || browser.opera ? 'keydown' : 'paste', function (e) { + if ((browser.ie || browser.opera) && ((!e.ctrlKey && !e.metaKey) || e.keyCode != '86')) { + return; + } + getClipboardData.call(me, function (div) { + filter(div); + }); + }); + + }); + + me.commands['paste'] = { + execCommand: function (cmd) { + if (browser.ie) { + getClipboardData.call(me, function (div) { + filter(div); + }); + me.document.execCommand('paste'); + } else { + alert(me.getLang('pastemsg')); + } + } + } +}; + + + +// plugins/puretxtpaste.js +/** + * 纯文本粘贴插件 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['pasteplain'] = function(){ + var me = this; + me.setOpt({ + 'pasteplain':false, + 'filterTxtRules' : function(){ + function transP(node){ + node.tagName = 'p'; + node.setStyle(); + } + function removeNode(node){ + node.parentNode.removeChild(node,true) + } + return { + //直接删除及其字节点内容 + '-' : 'script style object iframe embed input select', + 'p': {$:{}}, + 'br':{$:{}}, + div: function (node) { + var tmpNode, p = UE.uNode.createElement('p'); + while (tmpNode = node.firstChild()) { + if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) { + p.appendChild(tmpNode); + } else { + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + p = UE.uNode.createElement('p'); + } else { + node.parentNode.insertBefore(tmpNode, node); + } + } + } + if (p.firstChild()) { + node.parentNode.insertBefore(p, node); + } + node.parentNode.removeChild(node); + }, + ol: removeNode, + ul: removeNode, + dl:removeNode, + dt:removeNode, + dd:removeNode, + 'li':removeNode, + 'caption':transP, + 'th':transP, + 'tr':transP, + 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP, + 'td':function(node){ + //没有内容的td直接删掉 + var txt = !!node.innerText(); + if(txt){ + node.parentNode.insertAfter(UE.uNode.createText('    '),node); + } + node.parentNode.removeChild(node,node.innerText()) + } + } + }() + }); + //暂时这里支持一下老版本的属性 + var pasteplain = me.options.pasteplain; + + /** + * 启用或取消纯文本粘贴模式 + * @command pasteplain + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.queryCommandState( 'pasteplain' ); + * ``` + */ + + /** + * 查询当前是否处于纯文本粘贴模式 + * @command pasteplain + * @method queryCommandState + * @param { String } cmd 命令字符串 + * @return { int } 如果处于纯文本模式,返回1,否则,返回0 + * @example + * ```javascript + * editor.queryCommandState( 'pasteplain' ); + * ``` + */ + me.commands['pasteplain'] = { + queryCommandState: function (){ + return pasteplain ? 1 : 0; + }, + execCommand: function (){ + pasteplain = !pasteplain|0; + }, + notNeedUndo : 1 + }; +}; + +// plugins/list.js +/** + * 有序列表,无序列表插件 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['list'] = function () { + var me = this, + notExchange = { + 'TD':1, + 'PRE':1, + 'BLOCKQUOTE':1 + }; + var customStyle = { + 'cn' : 'cn-1-', + 'cn1' : 'cn-2-', + 'cn2' : 'cn-3-', + 'num': 'num-1-', + 'num1' : 'num-2-', + 'num2' : 'num-3-', + 'dash' : 'dash', + 'dot':'dot' + }; + + me.setOpt( { + 'autoTransWordToList':false, + 'insertorderedlist':{ + 'num':'', + 'num1':'', + 'num2':'', + 'cn':'', + 'cn1':'', + 'cn2':'', + 'decimal':'', + 'lower-alpha':'', + 'lower-roman':'', + 'upper-alpha':'', + 'upper-roman':'' + }, + 'insertunorderedlist':{ + 'circle':'', + 'disc':'', + 'square':'', + 'dash' : '', + 'dot':'' + }, + listDefaultPaddingLeft : '30', + listiconpath : 'http://bs.baidu.com/listicon/', + maxListLevel : -1,//-1不限制 + disablePInList:false + } ); + function listToArray(list){ + var arr = []; + for(var p in list){ + arr.push(p) + } + return arr; + } + var listStyle = { + 'OL':listToArray(me.options.insertorderedlist), + 'UL':listToArray(me.options.insertunorderedlist) + }; + var liiconpath = me.options.listiconpath; + + //根据用户配置,调整customStyle + for(var s in customStyle){ + if(!me.options.insertorderedlist.hasOwnProperty(s) && !me.options.insertunorderedlist.hasOwnProperty(s)){ + delete customStyle[s]; + } + } + + me.ready(function () { + var customCss = []; + for(var p in customStyle){ + if(p == 'dash' || p == 'dot'){ + customCss.push('li.list-' + customStyle[p] + '{background-image:url(' + liiconpath +customStyle[p]+'.gif)}'); + customCss.push('ul.custom_'+p+'{list-style:none;}ul.custom_'+p+' li{background-position:0 3px;background-repeat:no-repeat}'); + }else{ + for(var i= 0;i<99;i++){ + customCss.push('li.list-' + customStyle[p] + i + '{background-image:url(' + liiconpath + 'list-'+customStyle[p] + i + '.gif)}') + } + customCss.push('ol.custom_'+p+'{list-style:none;}ol.custom_'+p+' li{background-position:0 3px;background-repeat:no-repeat}'); + } + switch(p){ + case 'cn': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:25px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}'); + customCss.push('li.list-'+p+'-paddingleft-3{padding-left:55px}'); + break; + case 'cn1': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:30px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}'); + customCss.push('li.list-'+p+'-paddingleft-3{padding-left:55px}'); + break; + case 'cn2': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:40px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:55px}'); + customCss.push('li.list-'+p+'-paddingleft-3{padding-left:68px}'); + break; + case 'num': + case 'num1': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:25px}'); + break; + case 'num2': + customCss.push('li.list-'+p+'-paddingleft-1{padding-left:35px}'); + customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}'); + break; + case 'dash': + customCss.push('li.list-'+p+'-paddingleft{padding-left:35px}'); + break; + case 'dot': + customCss.push('li.list-'+p+'-paddingleft{padding-left:20px}'); + } + } + customCss.push('.list-paddingleft-1{padding-left:0}'); + customCss.push('.list-paddingleft-2{padding-left:'+me.options.listDefaultPaddingLeft+'px}'); + customCss.push('.list-paddingleft-3{padding-left:'+me.options.listDefaultPaddingLeft*2+'px}'); + //如果不给宽度会在自定应样式里出现滚动条 + utils.cssRule('list', 'ol,ul{margin:0;pading:0;'+(browser.ie ? '' : 'width:95%')+'}li{clear:both;}'+customCss.join('\n'), me.document); + }); + //单独处理剪切的问题 + me.ready(function(){ + domUtils.on(me.body,'cut',function(){ + setTimeout(function(){ + var rng = me.selection.getRange(),li; + //trace:3416 + if(!rng.collapsed){ + if(li = domUtils.findParentByTagName(rng.startContainer,'li',true)){ + if(!li.nextSibling && domUtils.isEmptyBlock(li)){ + var pn = li.parentNode,node; + if(node = pn.previousSibling){ + domUtils.remove(pn); + rng.setStartAtLast(node).collapse(true); + rng.select(true); + }else if(node = pn.nextSibling){ + domUtils.remove(pn); + rng.setStartAtFirst(node).collapse(true); + rng.select(true); + }else{ + var tmpNode = me.document.createElement('p'); + domUtils.fillNode(me.document,tmpNode); + pn.parentNode.insertBefore(tmpNode,pn); + domUtils.remove(pn); + rng.setStart(tmpNode,0).collapse(true); + rng.select(true); + } + } + } + } + + }) + }) + }); + + function getStyle(node){ + var cls = node.className; + if(domUtils.hasClass(node,/custom_/)){ + return cls.match(/custom_(\w+)/)[1] + } + return domUtils.getStyle(node, 'list-style-type') + + } + + me.addListener('beforepaste',function(type,html){ + var me = this, + rng = me.selection.getRange(),li; + var root = UE.htmlparser(html.html,true); + if(li = domUtils.findParentByTagName(rng.startContainer,'li',true)){ + var list = li.parentNode,tagName = list.tagName == 'OL' ? 'ul':'ol'; + utils.each(root.getNodesByTagName(tagName),function(n){ + n.tagName = list.tagName; + n.setAttr(); + if(n.parentNode === root){ + type = getStyle(list) || (list.tagName == 'OL' ? 'decimal' : 'disc') + }else{ + var className = n.parentNode.getAttr('class'); + if(className && /custom_/.test(className)){ + type = className.match(/custom_(\w+)/)[1] + }else{ + type = n.parentNode.getStyle('list-style-type'); + } + if(!type){ + type = list.tagName == 'OL' ? 'decimal' : 'disc'; + } + } + var index = utils.indexOf(listStyle[list.tagName], type); + if(n.parentNode !== root) + index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1; + var currentStyle = listStyle[list.tagName][index]; + if(customStyle[currentStyle]){ + n.setAttr('class', 'custom_' + currentStyle) + + }else{ + n.setStyle('list-style-type',currentStyle) + } + }) + + } + + html.html = root.toHtml(); + }); + //导出时,去掉p标签 + me.getOpt('disablePInList') === true && me.addOutputRule(function(root){ + utils.each(root.getNodesByTagName('li'),function(li){ + var newChildrens = [],index=0; + utils.each(li.children,function(n){ + if(n.tagName == 'p'){ + var tmpNode; + while(tmpNode = n.children.pop()) { + newChildrens.splice(index,0,tmpNode); + tmpNode.parentNode = li; + lastNode = tmpNode; + } + tmpNode = newChildrens[newChildrens.length-1]; + if(!tmpNode || tmpNode.type != 'element' || tmpNode.tagName != 'br'){ + var br = UE.uNode.createElement('br'); + br.parentNode = li; + newChildrens.push(br); + } + + index = newChildrens.length; + } + }); + if(newChildrens.length){ + li.children = newChildrens; + } + }); + }); + //进入编辑器的li要套p标签 + me.addInputRule(function(root){ + utils.each(root.getNodesByTagName('li'),function(li){ + var tmpP = UE.uNode.createElement('p'); + for(var i= 0,ci;ci=li.children[i];){ + if(ci.type == 'text' || dtd.p[ci.tagName]){ + tmpP.appendChild(ci); + }else{ + if(tmpP.firstChild()){ + li.insertBefore(tmpP,ci); + tmpP = UE.uNode.createElement('p'); + i = i + 2; + }else{ + i++; + } + + } + } + if(tmpP.firstChild() && !tmpP.parentNode || !li.firstChild()){ + li.appendChild(tmpP); + } + //trace:3357 + //p不能为空 + if (!tmpP.firstChild()) { + tmpP.innerHTML(browser.ie ? ' ' : '
    ') + } + //去掉末尾的空白 + var p = li.firstChild(); + var lastChild = p.lastChild(); + if(lastChild && lastChild.type == 'text' && /^\s*$/.test(lastChild.data)){ + p.removeChild(lastChild) + } + }); + if(me.options.autoTransWordToList){ + var orderlisttype = { + 'num1':/^\d+\)/, + 'decimal':/^\d+\./, + 'lower-alpha':/^[a-z]+\)/, + 'upper-alpha':/^[A-Z]+\./, + 'cn':/^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/, + 'cn2':/^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/ + }, + unorderlisttype = { + 'square':'n' + }; + function checkListType(content,container){ + var span = container.firstChild(); + if(span && span.type == 'element' && span.tagName == 'span' && /Wingdings|Symbol/.test(span.getStyle('font-family'))){ + for(var p in unorderlisttype){ + if(unorderlisttype[p] == span.data){ + return p + } + } + return 'disc' + } + for(var p in orderlisttype){ + if(orderlisttype[p].test(content)){ + return p; + } + } + + } + utils.each(root.getNodesByTagName('p'),function(node){ + if(node.getAttr('class') != 'MsoListParagraph'){ + return + } + + //word粘贴过来的会带有margin要去掉,但这样也可能会误命中一些央视 + node.setStyle('margin',''); + node.setStyle('margin-left',''); + node.setAttr('class',''); + + function appendLi(list,p,type){ + if(list.tagName == 'ol'){ + if(browser.ie){ + var first = p.firstChild(); + if(first.type =='element' && first.tagName == 'span' && orderlisttype[type].test(first.innerText())){ + p.removeChild(first); + } + }else{ + p.innerHTML(p.innerHTML().replace(orderlisttype[type],'')); + } + }else{ + p.removeChild(p.firstChild()) + } + + var li = UE.uNode.createElement('li'); + li.appendChild(p); + list.appendChild(li); + } + var tmp = node,type,cacheNode = node; + + if(node.parentNode.tagName != 'li' && (type = checkListType(node.innerText(),node))){ + + var list = UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type) ? 'ol' : 'ul'); + if(customStyle[type]){ + list.setAttr('class','custom_'+type) + }else{ + list.setStyle('list-style-type',type) + } + while(node && node.parentNode.tagName != 'li' && checkListType(node.innerText(),node)){ + tmp = node.nextSibling(); + if(!tmp){ + node.parentNode.insertBefore(list,node) + } + appendLi(list,node,type); + node = tmp; + } + if(!list.parentNode && node && node.parentNode){ + node.parentNode.insertBefore(list,node) + } + } + var span = cacheNode.firstChild(); + if(span && span.type == 'element' && span.tagName == 'span' && /^\s*( )+\s*$/.test(span.innerText())){ + span.parentNode.removeChild(span) + } + }) + } + + }); + + //调整索引标签 + me.addListener('contentchange',function(){ + adjustListStyle(me.document) + }); + + function adjustListStyle(doc,ignore){ + utils.each(domUtils.getElementsByTagName(doc,'ol ul'),function(node){ + + if(!domUtils.inDoc(node,doc)) + return; + + var parent = node.parentNode; + if(parent.tagName == node.tagName){ + var nodeStyleType = getStyle(node) || (node.tagName == 'OL' ? 'decimal' : 'disc'), + parentStyleType = getStyle(parent) || (parent.tagName == 'OL' ? 'decimal' : 'disc'); + if(nodeStyleType == parentStyleType){ + var styleIndex = utils.indexOf(listStyle[node.tagName], nodeStyleType); + styleIndex = styleIndex + 1 == listStyle[node.tagName].length ? 0 : styleIndex + 1; + setListStyle(node,listStyle[node.tagName][styleIndex]) + } + + } + var index = 0,type = 2; + if( domUtils.hasClass(node,/custom_/)){ + if(!(/[ou]l/i.test(parent.tagName) && domUtils.hasClass(parent,/custom_/))){ + type = 1; + } + }else{ + if(/[ou]l/i.test(parent.tagName) && domUtils.hasClass(parent,/custom_/)){ + type = 3; + } + } + + var style = domUtils.getStyle(node, 'list-style-type'); + style && (node.style.cssText = 'list-style-type:' + style); + node.className = utils.trim(node.className.replace(/list-paddingleft-\w+/,'')) + ' list-paddingleft-' + type; + utils.each(domUtils.getElementsByTagName(node,'li'),function(li){ + li.style.cssText && (li.style.cssText = ''); + if(!li.firstChild){ + domUtils.remove(li); + return; + } + if(li.parentNode !== node){ + return; + } + index++; + if(domUtils.hasClass(node,/custom_/) ){ + var paddingLeft = 1,currentStyle = getStyle(node); + if(node.tagName == 'OL'){ + if(currentStyle){ + switch(currentStyle){ + case 'cn' : + case 'cn1': + case 'cn2': + if(index > 10 && (index % 10 == 0 || index > 10 && index < 20)){ + paddingLeft = 2 + }else if(index > 20){ + paddingLeft = 3 + } + break; + case 'num2' : + if(index > 9){ + paddingLeft = 2 + } + } + } + li.className = 'list-'+customStyle[currentStyle]+ index + ' ' + 'list-'+currentStyle+'-paddingleft-' + paddingLeft; + }else{ + li.className = 'list-'+customStyle[currentStyle] + ' ' + 'list-'+currentStyle+'-paddingleft'; + } + }else{ + li.className = li.className.replace(/list-[\w\-]+/gi,''); + } + var className = li.getAttribute('class'); + if(className !== null && !className.replace(/\s/g,'')){ + domUtils.removeAttributes(li,'class') + } + }); + !ignore && adjustList(node,node.tagName.toLowerCase(),getStyle(node)||domUtils.getStyle(node, 'list-style-type'),true); + }) + } + function adjustList(list, tag, style,ignoreEmpty) { + var nextList = list.nextSibling; + if (nextList && nextList.nodeType == 1 && nextList.tagName.toLowerCase() == tag && (getStyle(nextList) || domUtils.getStyle(nextList, 'list-style-type') || (tag == 'ol' ? 'decimal' : 'disc')) == style) { + domUtils.moveChild(nextList, list); + if (nextList.childNodes.length == 0) { + domUtils.remove(nextList); + } + } + if(nextList && domUtils.isFillChar(nextList)){ + domUtils.remove(nextList); + } + var preList = list.previousSibling; + if (preList && preList.nodeType == 1 && preList.tagName.toLowerCase() == tag && (getStyle(preList) || domUtils.getStyle(preList, 'list-style-type') || (tag == 'ol' ? 'decimal' : 'disc')) == style) { + domUtils.moveChild(list, preList); + } + if(preList && domUtils.isFillChar(preList)){ + domUtils.remove(preList); + } + !ignoreEmpty && domUtils.isEmptyBlock(list) && domUtils.remove(list); + if(getStyle(list)){ + adjustListStyle(list.ownerDocument,true) + } + } + + function setListStyle(list,style){ + if(customStyle[style]){ + list.className = 'custom_' + style; + } + try{ + domUtils.setStyle(list, 'list-style-type', style); + }catch(e){} + } + function clearEmptySibling(node) { + var tmpNode = node.previousSibling; + if (tmpNode && domUtils.isEmptyBlock(tmpNode)) { + domUtils.remove(tmpNode); + } + tmpNode = node.nextSibling; + if (tmpNode && domUtils.isEmptyBlock(tmpNode)) { + domUtils.remove(tmpNode); + } + } + + me.addListener('keydown', function (type, evt) { + function preventAndSave() { + evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false); + me.fireEvent('contentchange'); + me.undoManger && me.undoManger.save(); + } + function findList(node,filterFn){ + while(node && !domUtils.isBody(node)){ + if(filterFn(node)){ + return null + } + if(node.nodeType == 1 && /[ou]l/i.test(node.tagName)){ + return node; + } + node = node.parentNode; + } + return null; + } + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13 && !evt.shiftKey) {//回车 + var rng = me.selection.getRange(), + parent = domUtils.findParent(rng.startContainer,function(node){return domUtils.isBlockElm(node)},true), + li = domUtils.findParentByTagName(rng.startContainer,'li',true); + if(parent && parent.tagName != 'PRE' && !li){ + var html = parent.innerHTML.replace(new RegExp(domUtils.fillChar, 'g'),''); + if(/^\s*1\s*\.[^\d]/.test(html)){ + parent.innerHTML = html.replace(/^\s*1\s*\./,''); + rng.setStartAtLast(parent).collapse(true).select(); + me.__hasEnterExecCommand = true; + me.execCommand('insertorderedlist'); + me.__hasEnterExecCommand = false; + } + } + var range = me.selection.getRange(), + start = findList(range.startContainer,function (node) { + return node.tagName == 'TABLE'; + }), + end = range.collapsed ? start : findList(range.endContainer,function (node) { + return node.tagName == 'TABLE'; + }); + + if (start && end && start === end) { + + if (!range.collapsed) { + start = domUtils.findParentByTagName(range.startContainer, 'li', true); + end = domUtils.findParentByTagName(range.endContainer, 'li', true); + if (start && end && start === end) { + range.deleteContents(); + li = domUtils.findParentByTagName(range.startContainer, 'li', true); + if (li && domUtils.isEmptyBlock(li)) { + + pre = li.previousSibling; + next = li.nextSibling; + p = me.document.createElement('p'); + + domUtils.fillNode(me.document, p); + parentList = li.parentNode; + if (pre && next) { + range.setStart(next, 0).collapse(true).select(true); + domUtils.remove(li); + + } else { + if (!pre && !next || !pre) { + + parentList.parentNode.insertBefore(p, parentList); + + + } else { + li.parentNode.parentNode.insertBefore(p, parentList.nextSibling); + } + domUtils.remove(li); + if (!parentList.firstChild) { + domUtils.remove(parentList); + } + range.setStart(p, 0).setCursor(); + + + } + preventAndSave(); + return; + + } + } else { + var tmpRange = range.cloneRange(), + bk = tmpRange.collapse(false).createBookmark(); + + range.deleteContents(); + tmpRange.moveToBookmark(bk); + var li = domUtils.findParentByTagName(tmpRange.startContainer, 'li', true); + + clearEmptySibling(li); + tmpRange.select(); + preventAndSave(); + return; + } + } + + + li = domUtils.findParentByTagName(range.startContainer, 'li', true); + + if (li) { + if (domUtils.isEmptyBlock(li)) { + bk = range.createBookmark(); + var parentList = li.parentNode; + if (li !== parentList.lastChild) { + domUtils.breakParent(li, parentList); + clearEmptySibling(li); + } else { + + parentList.parentNode.insertBefore(li, parentList.nextSibling); + if (domUtils.isEmptyNode(parentList)) { + domUtils.remove(parentList); + } + } + //嵌套不处理 + if (!dtd.$list[li.parentNode.tagName]) { + + if (!domUtils.isBlockElm(li.firstChild)) { + p = me.document.createElement('p'); + li.parentNode.insertBefore(p, li); + while (li.firstChild) { + p.appendChild(li.firstChild); + } + domUtils.remove(li); + } else { + domUtils.remove(li, true); + } + } + range.moveToBookmark(bk).select(); + + + } else { + var first = li.firstChild; + if (!first || !domUtils.isBlockElm(first)) { + var p = me.document.createElement('p'); + + !li.firstChild && domUtils.fillNode(me.document, p); + while (li.firstChild) { + + p.appendChild(li.firstChild); + } + li.appendChild(p); + first = p; + } + + var span = me.document.createElement('span'); + + range.insertNode(span); + domUtils.breakParent(span, li); + + var nextLi = span.nextSibling; + first = nextLi.firstChild; + + if (!first) { + p = me.document.createElement('p'); + + domUtils.fillNode(me.document, p); + nextLi.appendChild(p); + first = p; + } + if (domUtils.isEmptyNode(first)) { + first.innerHTML = ''; + domUtils.fillNode(me.document, first); + } + + range.setStart(first, 0).collapse(true).shrinkBoundary().select(); + domUtils.remove(span); + var pre = nextLi.previousSibling; + if (pre && domUtils.isEmptyBlock(pre)) { + pre.innerHTML = '

    '; + domUtils.fillNode(me.document, pre.firstChild); + } + + } +// } + preventAndSave(); + } + + + } + + + } + if (keyCode == 8) { + //修中ie中li下的问题 + range = me.selection.getRange(); + if (range.collapsed && domUtils.isStartInblock(range)) { + tmpRange = range.cloneRange().trimBoundary(); + li = domUtils.findParentByTagName(range.startContainer, 'li', true); + //要在li的最左边,才能处理 + if (li && domUtils.isStartInblock(tmpRange)) { + start = domUtils.findParentByTagName(range.startContainer, 'p', true); + if (start && start !== li.firstChild) { + var parentList = domUtils.findParentByTagName(start,['ol','ul']); + domUtils.breakParent(start,parentList); + clearEmptySibling(start); + me.fireEvent('contentchange'); + range.setStart(start,0).setCursor(false,true); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + } + + if (li && (pre = li.previousSibling)) { + if (keyCode == 46 && li.childNodes.length) { + return; + } + //有可能上边的兄弟节点是个2级菜单,要追加到2级菜单的最后的li + if (dtd.$list[pre.tagName]) { + pre = pre.lastChild; + } + me.undoManger && me.undoManger.save(); + first = li.firstChild; + if (domUtils.isBlockElm(first)) { + if (domUtils.isEmptyNode(first)) { +// range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true); + pre.appendChild(first); + range.setStart(first, 0).setCursor(false, true); + //first不是唯一的节点 + while (li.firstChild) { + pre.appendChild(li.firstChild); + } + } else { + + span = me.document.createElement('span'); + range.insertNode(span); + //判断pre是否是空的节点,如果是


    类型的空节点,干掉p标签防止它占位 + if (domUtils.isEmptyBlock(pre)) { + pre.innerHTML = ''; + } + domUtils.moveChild(li, pre); + range.setStartBefore(span).collapse(true).select(true); + + domUtils.remove(span); + + } + } else { + if (domUtils.isEmptyNode(li)) { + var p = me.document.createElement('p'); + pre.appendChild(p); + range.setStart(p, 0).setCursor(); +// range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true); + } else { + range.setEnd(pre, pre.childNodes.length).collapse().select(true); + while (li.firstChild) { + pre.appendChild(li.firstChild); + } + } + } + domUtils.remove(li); + me.fireEvent('contentchange'); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + + } + //trace:980 + + if (li && !li.previousSibling) { + var parentList = li.parentNode; + var bk = range.createBookmark(); + if(domUtils.isTagNode(parentList.parentNode,'ol ul')){ + parentList.parentNode.insertBefore(li,parentList); + if(domUtils.isEmptyNode(parentList)){ + domUtils.remove(parentList) + } + }else{ + + while(li.firstChild){ + parentList.parentNode.insertBefore(li.firstChild,parentList); + } + + domUtils.remove(li); + if(domUtils.isEmptyNode(parentList)){ + domUtils.remove(parentList) + } + + } + range.moveToBookmark(bk).setCursor(false,true); + me.fireEvent('contentchange'); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + + } + + + } + + + } + + } + }); + + me.addListener('keyup',function(type, evt){ + var keyCode = evt.keyCode || evt.which; + if (keyCode == 8) { + var rng = me.selection.getRange(),list; + if(list = domUtils.findParentByTagName(rng.startContainer,['ol', 'ul'],true)){ + adjustList(list,list.tagName.toLowerCase(),getStyle(list)||domUtils.getComputedStyle(list,'list-style-type'),true) + } + } + }); + //处理tab键 + me.addListener('tabkeydown',function(){ + + var range = me.selection.getRange(); + + //控制级数 + function checkLevel(li){ + if(me.options.maxListLevel != -1){ + var level = li.parentNode,levelNum = 0; + while(/[ou]l/i.test(level.tagName)){ + levelNum++; + level = level.parentNode; + } + if(levelNum >= me.options.maxListLevel){ + return true; + } + } + } + //只以开始为准 + //todo 后续改进 + var li = domUtils.findParentByTagName(range.startContainer, 'li', true); + if(li){ + + var bk; + if(range.collapsed){ + if(checkLevel(li)) + return true; + var parentLi = li.parentNode, + list = me.document.createElement(parentLi.tagName), + index = utils.indexOf(listStyle[list.tagName], getStyle(parentLi)||domUtils.getComputedStyle(parentLi, 'list-style-type')); + index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1; + var currentStyle = listStyle[list.tagName][index]; + setListStyle(list,currentStyle); + if(domUtils.isStartInblock(range)){ + me.fireEvent('saveScene'); + bk = range.createBookmark(); + parentLi.insertBefore(list, li); + list.appendChild(li); + adjustList(list,list.tagName.toLowerCase(),currentStyle); + me.fireEvent('contentchange'); + range.moveToBookmark(bk).select(true); + return true; + } + }else{ + me.fireEvent('saveScene'); + bk = range.createBookmark(); + for(var i= 0,closeList,parents = domUtils.findParents(li),ci;ci=parents[i++];){ + if(domUtils.isTagNode(ci,'ol ul')){ + closeList = ci; + break; + } + } + var current = li; + if(bk.end){ + while(current && !(domUtils.getPosition(current, bk.end) & domUtils.POSITION_FOLLOWING)){ + if(checkLevel(current)){ + current = domUtils.getNextDomNode(current,false,null,function(node){return node !== closeList}); + continue; + } + var parentLi = current.parentNode, + list = me.document.createElement(parentLi.tagName), + index = utils.indexOf(listStyle[list.tagName], getStyle(parentLi)||domUtils.getComputedStyle(parentLi, 'list-style-type')); + var currentIndex = index + 1 == listStyle[list.tagName].length ? 0 : index + 1; + var currentStyle = listStyle[list.tagName][currentIndex]; + setListStyle(list,currentStyle); + parentLi.insertBefore(list, current); + while(current && !(domUtils.getPosition(current, bk.end) & domUtils.POSITION_FOLLOWING)){ + li = current.nextSibling; + list.appendChild(current); + if(!li || domUtils.isTagNode(li,'ol ul')){ + if(li){ + while(li = li.firstChild){ + if(li.tagName == 'LI'){ + break; + } + } + }else{ + li = domUtils.getNextDomNode(current,false,null,function(node){return node !== closeList}); + } + break; + } + current = li; + } + adjustList(list,list.tagName.toLowerCase(),currentStyle); + current = li; + } + } + me.fireEvent('contentchange'); + range.moveToBookmark(bk).select(); + return true; + } + } + + }); + function getLi(start){ + while(start && !domUtils.isBody(start)){ + if(start.nodeName == 'TABLE'){ + return null; + } + if(start.nodeName == 'LI'){ + return start + } + start = start.parentNode; + } + } + + /** + * 有序列表,与“insertunorderedlist”命令互斥 + * @command insertorderedlist + * @method execCommand + * @param { String } command 命令字符串 + * @param { String } style 插入的有序列表类型,值为:decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2 + * @example + * ```javascript + * editor.execCommand( 'insertorderedlist','decimal'); + * ``` + */ + /** + * 查询当前选区内容是否有序列表 + * @command insertorderedlist + * @method queryCommandState + * @param { String } cmd 命令字符串 + * @return { int } 如果当前选区是有序列表返回1,否则返回0 + * @example + * ```javascript + * editor.queryCommandState( 'insertorderedlist' ); + * ``` + */ + /** + * 查询当前选区内容是否有序列表 + * @command insertorderedlist + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @return { String } 返回当前有序列表的类型,值为null或decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2 + * @example + * ```javascript + * editor.queryCommandValue( 'insertorderedlist' ); + * ``` + */ + + /** + * 无序列表,与“insertorderedlist”命令互斥 + * @command insertunorderedlist + * @method execCommand + * @param { String } command 命令字符串 + * @param { String } style 插入的无序列表类型,值为:circle,disc,square,dash,dot + * @example + * ```javascript + * editor.execCommand( 'insertunorderedlist','circle'); + * ``` + */ + /** + * 查询当前是否有word文档粘贴进来的图片 + * @command insertunorderedlist + * @method insertunorderedlist + * @param { String } command 命令字符串 + * @return { int } 如果当前选区是无序列表返回1,否则返回0 + * @example + * ```javascript + * editor.queryCommandState( 'insertunorderedlist' ); + * ``` + */ + /** + * 查询当前选区内容是否有序列表 + * @command insertunorderedlist + * @method queryCommandValue + * @param { String } command 命令字符串 + * @return { String } 返回当前无序列表的类型,值为null或circle,disc,square,dash,dot + * @example + * ```javascript + * editor.queryCommandValue( 'insertunorderedlist' ); + * ``` + */ + + me.commands['insertorderedlist'] = + me.commands['insertunorderedlist'] = { + execCommand:function (command, style) { + + if (!style) { + style = command.toLowerCase() == 'insertorderedlist' ? 'decimal' : 'disc'; + } + var me = this, + range = this.selection.getRange(), + filterFn = function (node) { + return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' : !domUtils.isWhitespace(node); + }, + tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul', + frag = me.document.createDocumentFragment(); + //去掉是因为会出现选到末尾,导致adjustmentBoundary缩到ol/ul的位置 + //range.shrinkBoundary();//.adjustmentBoundary(); + range.adjustmentBoundary().shrinkBoundary(); + var bko = range.createBookmark(true), + start = getLi(me.document.getElementById(bko.start)), + modifyStart = 0, + end = getLi(me.document.getElementById(bko.end)), + modifyEnd = 0, + startParent, endParent, + list, tmp; + + if (start || end) { + start && (startParent = start.parentNode); + if (!bko.end) { + end = start; + } + end && (endParent = end.parentNode); + + if (startParent === endParent) { + while (start !== end) { + tmp = start; + start = start.nextSibling; + if (!domUtils.isBlockElm(tmp.firstChild)) { + var p = me.document.createElement('p'); + while (tmp.firstChild) { + p.appendChild(tmp.firstChild); + } + tmp.appendChild(p); + } + frag.appendChild(tmp); + } + tmp = me.document.createElement('span'); + startParent.insertBefore(tmp, end); + if (!domUtils.isBlockElm(end.firstChild)) { + p = me.document.createElement('p'); + while (end.firstChild) { + p.appendChild(end.firstChild); + } + end.appendChild(p); + } + frag.appendChild(end); + domUtils.breakParent(tmp, startParent); + if (domUtils.isEmptyNode(tmp.previousSibling)) { + domUtils.remove(tmp.previousSibling); + } + if (domUtils.isEmptyNode(tmp.nextSibling)) { + domUtils.remove(tmp.nextSibling) + } + var nodeStyle = getStyle(startParent) || domUtils.getComputedStyle(startParent, 'list-style-type') || (command.toLowerCase() == 'insertorderedlist' ? 'decimal' : 'disc'); + if (startParent.tagName.toLowerCase() == tag && nodeStyle == style) { + for (var i = 0, ci, tmpFrag = me.document.createDocumentFragment(); ci = frag.firstChild;) { + if(domUtils.isTagNode(ci,'ol ul')){ +// 删除时,子列表不处理 +// utils.each(domUtils.getElementsByTagName(ci,'li'),function(li){ +// while(li.firstChild){ +// tmpFrag.appendChild(li.firstChild); +// } +// +// }); + tmpFrag.appendChild(ci); + }else{ + while (ci.firstChild) { + + tmpFrag.appendChild(ci.firstChild); + domUtils.remove(ci); + } + } + + } + tmp.parentNode.insertBefore(tmpFrag, tmp); + } else { + list = me.document.createElement(tag); + setListStyle(list,style); + list.appendChild(frag); + tmp.parentNode.insertBefore(list, tmp); + } + + domUtils.remove(tmp); + list && adjustList(list, tag, style); + range.moveToBookmark(bko).select(); + return; + } + //开始 + if (start) { + while (start) { + tmp = start.nextSibling; + if (domUtils.isTagNode(start, 'ol ul')) { + frag.appendChild(start); + } else { + var tmpfrag = me.document.createDocumentFragment(), + hasBlock = 0; + while (start.firstChild) { + if (domUtils.isBlockElm(start.firstChild)) { + hasBlock = 1; + } + tmpfrag.appendChild(start.firstChild); + } + if (!hasBlock) { + var tmpP = me.document.createElement('p'); + tmpP.appendChild(tmpfrag); + frag.appendChild(tmpP); + } else { + frag.appendChild(tmpfrag); + } + domUtils.remove(start); + } + + start = tmp; + } + startParent.parentNode.insertBefore(frag, startParent.nextSibling); + if (domUtils.isEmptyNode(startParent)) { + range.setStartBefore(startParent); + domUtils.remove(startParent); + } else { + range.setStartAfter(startParent); + } + modifyStart = 1; + } + + if (end && domUtils.inDoc(endParent, me.document)) { + //结束 + start = endParent.firstChild; + while (start && start !== end) { + tmp = start.nextSibling; + if (domUtils.isTagNode(start, 'ol ul')) { + frag.appendChild(start); + } else { + tmpfrag = me.document.createDocumentFragment(); + hasBlock = 0; + while (start.firstChild) { + if (domUtils.isBlockElm(start.firstChild)) { + hasBlock = 1; + } + tmpfrag.appendChild(start.firstChild); + } + if (!hasBlock) { + tmpP = me.document.createElement('p'); + tmpP.appendChild(tmpfrag); + frag.appendChild(tmpP); + } else { + frag.appendChild(tmpfrag); + } + domUtils.remove(start); + } + start = tmp; + } + var tmpDiv = domUtils.createElement(me.document, 'div', { + 'tmpDiv':1 + }); + domUtils.moveChild(end, tmpDiv); + + frag.appendChild(tmpDiv); + domUtils.remove(end); + endParent.parentNode.insertBefore(frag, endParent); + range.setEndBefore(endParent); + if (domUtils.isEmptyNode(endParent)) { + domUtils.remove(endParent); + } + + modifyEnd = 1; + } + + + } + + if (!modifyStart) { + range.setStartBefore(me.document.getElementById(bko.start)); + } + if (bko.end && !modifyEnd) { + range.setEndAfter(me.document.getElementById(bko.end)); + } + range.enlarge(true, function (node) { + return notExchange[node.tagName]; + }); + + frag = me.document.createDocumentFragment(); + + var bk = range.createBookmark(), + current = domUtils.getNextDomNode(bk.start, false, filterFn), + tmpRange = range.cloneRange(), + tmpNode, + block = domUtils.isBlockElm; + + while (current && current !== bk.end && (domUtils.getPosition(current, bk.end) & domUtils.POSITION_PRECEDING)) { + + if (current.nodeType == 3 || dtd.li[current.tagName]) { + if (current.nodeType == 1 && dtd.$list[current.tagName]) { + while (current.firstChild) { + frag.appendChild(current.firstChild); + } + tmpNode = domUtils.getNextDomNode(current, false, filterFn); + domUtils.remove(current); + current = tmpNode; + continue; + + } + tmpNode = current; + tmpRange.setStartBefore(current); + + while (current && current !== bk.end && (!block(current) || domUtils.isBookmarkNode(current) )) { + tmpNode = current; + current = domUtils.getNextDomNode(current, false, null, function (node) { + return !notExchange[node.tagName]; + }); + } + + if (current && block(current)) { + tmp = domUtils.getNextDomNode(tmpNode, false, filterFn); + if (tmp && domUtils.isBookmarkNode(tmp)) { + current = domUtils.getNextDomNode(tmp, false, filterFn); + tmpNode = tmp; + } + } + tmpRange.setEndAfter(tmpNode); + + current = domUtils.getNextDomNode(tmpNode, false, filterFn); + + var li = range.document.createElement('li'); + + li.appendChild(tmpRange.extractContents()); + if(domUtils.isEmptyNode(li)){ + var tmpNode = range.document.createElement('p'); + while(li.firstChild){ + tmpNode.appendChild(li.firstChild) + } + li.appendChild(tmpNode); + } + frag.appendChild(li); + } else { + current = domUtils.getNextDomNode(current, true, filterFn); + } + } + range.moveToBookmark(bk).collapse(true); + list = me.document.createElement(tag); + setListStyle(list,style); + list.appendChild(frag); + range.insertNode(list); + //当前list上下看能否合并 + adjustList(list, tag, style); + //去掉冗余的tmpDiv + for (var i = 0, ci, tmpDivs = domUtils.getElementsByTagName(list, 'div'); ci = tmpDivs[i++];) { + if (ci.getAttribute('tmpDiv')) { + domUtils.remove(ci, true) + } + } + range.moveToBookmark(bko).select(); + + }, + queryCommandState:function (command) { + var tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul'; + var path = this.selection.getStartElementPath(); + for(var i= 0,ci;ci = path[i++];){ + if(ci.nodeName == 'TABLE'){ + return 0 + } + if(tag == ci.nodeName.toLowerCase()){ + return 1 + }; + } + return 0; + + }, + queryCommandValue:function (command) { + var tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul'; + var path = this.selection.getStartElementPath(), + node; + for(var i= 0,ci;ci = path[i++];){ + if(ci.nodeName == 'TABLE'){ + node = null; + break; + } + if(tag == ci.nodeName.toLowerCase()){ + node = ci; + break; + }; + } + return node ? getStyle(node) || domUtils.getComputedStyle(node, 'list-style-type') : null; + } + }; +}; + + + +// plugins/source.js +/** + * 源码编辑插件 + * @file + * @since 1.2.6.1 + */ + +(function (){ + var sourceEditors = { + textarea: function (editor, holder){ + var textarea = holder.ownerDocument.createElement('textarea'); + textarea.style.cssText = 'position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;'; + // todo: IE下只有onresize属性可用... 很纠结 + if (browser.ie && browser.version < 8) { + textarea.style.width = holder.offsetWidth + 'px'; + textarea.style.height = holder.offsetHeight + 'px'; + holder.onresize = function (){ + textarea.style.width = holder.offsetWidth + 'px'; + textarea.style.height = holder.offsetHeight + 'px'; + }; + } + holder.appendChild(textarea); + return { + setContent: function (content){ + textarea.value = content; + }, + getContent: function (){ + return textarea.value; + }, + select: function (){ + var range; + if (browser.ie) { + range = textarea.createTextRange(); + range.collapse(true); + range.select(); + } else { + //todo: chrome下无法设置焦点 + textarea.setSelectionRange(0, 0); + textarea.focus(); + } + }, + dispose: function (){ + holder.removeChild(textarea); + // todo + holder.onresize = null; + textarea = null; + holder = null; + } + }; + }, + codemirror: function (editor, holder){ + + var codeEditor = window.CodeMirror(holder, { + mode: "text/html", + tabMode: "indent", + lineNumbers: true, + lineWrapping:true + }); + var dom = codeEditor.getWrapperElement(); + dom.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,"Courier new",monospace;font-size:13px;'; + codeEditor.getScrollerElement().style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;'; + codeEditor.refresh(); + return { + getCodeMirror:function(){ + return codeEditor; + }, + setContent: function (content){ + codeEditor.setValue(content); + }, + getContent: function (){ + return codeEditor.getValue(); + }, + select: function (){ + codeEditor.focus(); + }, + dispose: function (){ + holder.removeChild(dom); + dom = null; + codeEditor = null; + } + }; + } + }; + + UE.plugins['source'] = function (){ + var me = this; + var opt = this.options; + var sourceMode = false; + var sourceEditor; + var orgSetContent; + opt.sourceEditor = browser.ie ? 'textarea' : (opt.sourceEditor || 'codemirror'); + + me.setOpt({ + sourceEditorFirst:false + }); + function createSourceEditor(holder){ + return sourceEditors[opt.sourceEditor == 'codemirror' && window.CodeMirror ? 'codemirror' : 'textarea'](me, holder); + } + + var bakCssText; + //解决在源码模式下getContent不能得到最新的内容问题 + var oldGetContent, + bakAddress; + + /** + * 切换源码模式和编辑模式 + * @command source + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'source'); + * ``` + */ + + /** + * 查询当前编辑区域的状态是源码模式还是可视化模式 + * @command source + * @method queryCommandState + * @param { String } cmd 命令字符串 + * @return { int } 如果当前是源码编辑模式,返回1,否则返回0 + * @example + * ```javascript + * editor.queryCommandState( 'source' ); + * ``` + */ + + me.commands['source'] = { + execCommand: function (){ + + sourceMode = !sourceMode; + if (sourceMode) { + bakAddress = me.selection.getRange().createAddress(false,true); + me.undoManger && me.undoManger.save(true); + if(browser.gecko){ + me.body.contentEditable = false; + } + + bakCssText = me.iframe.style.cssText; + me.iframe.style.cssText += 'position:absolute;left:-32768px;top:-32768px;'; + + + me.fireEvent('beforegetcontent'); + var root = UE.htmlparser(me.body.innerHTML); + me.filterOutputRule(root); + root.traversal(function (node) { + if (node.type == 'element') { + switch (node.tagName) { + case 'td': + case 'th': + case 'caption': + if(node.children && node.children.length == 1){ + if(node.firstChild().tagName == 'br' ){ + node.removeChild(node.firstChild()) + } + }; + break; + case 'pre': + node.innerText(node.innerText().replace(/ /g,' ')) + + } + } + }); + + me.fireEvent('aftergetcontent'); + + var content = root.toHtml(true); + + sourceEditor = createSourceEditor(me.iframe.parentNode); + + sourceEditor.setContent(content); + + orgSetContent = me.setContent; + + me.setContent = function(html){ + //这里暂时不触发事件,防止报错 + var root = UE.htmlparser(html); + me.filterInputRule(root); + html = root.toHtml(); + sourceEditor.setContent(html); + }; + + setTimeout(function (){ + sourceEditor.select(); + me.addListener('fullscreenchanged', function(){ + try{ + sourceEditor.getCodeMirror().refresh() + }catch(e){} + }); + }); + + //重置getContent,源码模式下取值也能是最新的数据 + oldGetContent = me.getContent; + me.getContent = function (){ + return sourceEditor.getContent() || '

    ' + (browser.ie ? '' : '
    ')+'

    '; + }; + } else { + me.iframe.style.cssText = bakCssText; + var cont = sourceEditor.getContent() || '

    ' + (browser.ie ? '' : '
    ')+'

    '; + //处理掉block节点前后的空格,有可能会误命中,暂时不考虑 + cont = cont.replace(new RegExp('[\\r\\t\\n ]*<\/?(\\w+)\\s*(?:[^>]*)>','g'), function(a,b){ + if(b && !dtd.$inlineWithA[b.toLowerCase()]){ + return a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g,''); + } + return a.replace(/(^[\n\r\t]*)|([\n\r\t]*$)/g,'') + }); + + me.setContent = orgSetContent; + + me.setContent(cont); + sourceEditor.dispose(); + sourceEditor = null; + //还原getContent方法 + me.getContent = oldGetContent; + var first = me.body.firstChild; + //trace:1106 都删除空了,下边会报错,所以补充一个p占位 + if(!first){ + me.body.innerHTML = '

    '+(browser.ie?'':'
    ')+'

    '; + first = me.body.firstChild; + } + + + //要在ifm为显示时ff才能取到selection,否则报错 + //这里不能比较位置了 + me.undoManger && me.undoManger.save(true); + + if(browser.gecko){ + + var input = document.createElement('input'); + input.style.cssText = 'position:absolute;left:0;top:-32768px'; + + document.body.appendChild(input); + + me.body.contentEditable = false; + setTimeout(function(){ + domUtils.setViewportOffset(input, { left: -32768, top: 0 }); + input.focus(); + setTimeout(function(){ + me.body.contentEditable = true; + me.selection.getRange().moveToAddress(bakAddress).select(true); + domUtils.remove(input); + }); + + }); + }else{ + //ie下有可能报错,比如在代码顶头的情况 + try{ + me.selection.getRange().moveToAddress(bakAddress).select(true); + }catch(e){} + + } + } + this.fireEvent('sourcemodechanged', sourceMode); + }, + queryCommandState: function (){ + return sourceMode|0; + }, + notNeedUndo : 1 + }; + var oldQueryCommandState = me.queryCommandState; + + me.queryCommandState = function (cmdName){ + cmdName = cmdName.toLowerCase(); + if (sourceMode) { + //源码模式下可以开启的命令 + return cmdName in { + 'source' : 1, + 'fullscreen' : 1 + } ? 1 : -1 + } + return oldQueryCommandState.apply(this, arguments); + }; + + if(opt.sourceEditor == "codemirror"){ + + me.addListener("ready",function(){ + utils.loadFile(document,{ + src : opt.codeMirrorJsUrl || opt.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.js", + tag : "script", + type : "text/javascript", + defer : "defer" + },function(){ + if(opt.sourceEditorFirst){ + setTimeout(function(){ + me.execCommand("source"); + },0); + } + }); + utils.loadFile(document,{ + tag : "link", + rel : "stylesheet", + type : "text/css", + href : opt.codeMirrorCssUrl || opt.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.css" + }); + + }); + } + + }; + +})(); + +// plugins/enterkey.js +///import core +///import plugins/undo.js +///commands 设置回车标签p或br +///commandsName EnterKey +///commandsTitle 设置回车标签p或br +/** + * @description 处理回车 + * @author zhanyi + */ +UE.plugins['enterkey'] = function() { + var hTag, + me = this, + tag = me.options.enterTag; + me.addListener('keyup', function(type, evt) { + + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13) { + var range = me.selection.getRange(), + start = range.startContainer, + doSave; + + //修正在h1-h6里边回车后不能嵌套p的问题 + if (!browser.ie) { + + if (/h\d/i.test(hTag)) { + if (browser.gecko) { + var h = domUtils.findParentByTagName(start, [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote','caption','table'], true); + if (!h) { + me.document.execCommand('formatBlock', false, '

    '); + doSave = 1; + } + } else { + //chrome remove div + if (start.nodeType == 1) { + var tmp = me.document.createTextNode(''),div; + range.insertNode(tmp); + div = domUtils.findParentByTagName(tmp, 'div', true); + if (div) { + var p = me.document.createElement('p'); + while (div.firstChild) { + p.appendChild(div.firstChild); + } + div.parentNode.insertBefore(p, div); + domUtils.remove(div); + range.setStartBefore(tmp).setCursor(); + doSave = 1; + } + domUtils.remove(tmp); + + } + } + + if (me.undoManger && doSave) { + me.undoManger.save(); + } + } + //没有站位符,会出现多行的问题 + browser.opera && range.select(); + }else{ + me.fireEvent('saveScene',true,true) + } + } + }); + + me.addListener('keydown', function(type, evt) { + var keyCode = evt.keyCode || evt.which; + if (keyCode == 13) {//回车 + if(me.fireEvent('beforeenterkeydown')){ + domUtils.preventDefault(evt); + return; + } + me.fireEvent('saveScene',true,true); + hTag = ''; + + + var range = me.selection.getRange(); + + if (!range.collapsed) { + //跨td不能删 + var start = range.startContainer, + end = range.endContainer, + startTd = domUtils.findParentByTagName(start, 'td', true), + endTd = domUtils.findParentByTagName(end, 'td', true); + if (startTd && endTd && startTd !== endTd || !startTd && endTd || startTd && !endTd) { + evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false); + return; + } + } + if (tag == 'p') { + + + if (!browser.ie) { + + start = domUtils.findParentByTagName(range.startContainer, ['ol','ul','p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote','caption'], true); + + //opera下执行formatblock会在table的场景下有问题,回车在opera原生支持很好,所以暂时在opera去掉调用这个原生的command + //trace:2431 + if (!start && !browser.opera) { + + me.document.execCommand('formatBlock', false, '

    '); + + if (browser.gecko) { + range = me.selection.getRange(); + start = domUtils.findParentByTagName(range.startContainer, 'p', true); + start && domUtils.removeDirtyAttr(start); + } + + + } else { + hTag = start.tagName; + start.tagName.toLowerCase() == 'p' && browser.gecko && domUtils.removeDirtyAttr(start); + } + + } + + } else { + evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false); + + if (!range.collapsed) { + range.deleteContents(); + start = range.startContainer; + if (start.nodeType == 1 && (start = start.childNodes[range.startOffset])) { + while (start.nodeType == 1) { + if (dtd.$empty[start.tagName]) { + range.setStartBefore(start).setCursor(); + if (me.undoManger) { + me.undoManger.save(); + } + return false; + } + if (!start.firstChild) { + var br = range.document.createElement('br'); + start.appendChild(br); + range.setStart(start, 0).setCursor(); + if (me.undoManger) { + me.undoManger.save(); + } + return false; + } + start = start.firstChild; + } + if (start === range.startContainer.childNodes[range.startOffset]) { + br = range.document.createElement('br'); + range.insertNode(br).setCursor(); + + } else { + range.setStart(start, 0).setCursor(); + } + + + } else { + br = range.document.createElement('br'); + range.insertNode(br).setStartAfter(br).setCursor(); + } + + + } else { + br = range.document.createElement('br'); + range.insertNode(br); + var parent = br.parentNode; + if (parent.lastChild === br) { + br.parentNode.insertBefore(br.cloneNode(true), br); + range.setStartBefore(br); + } else { + range.setStartAfter(br); + } + range.setCursor(); + + } + + } + + } + }); +}; + + +// plugins/keystrokes.js +/* 处理特殊键的兼容性问题 */ +UE.plugins['keystrokes'] = function() { + var me = this; + var collapsed = true; + me.addListener('keydown', function(type, evt) { + var keyCode = evt.keyCode || evt.which, + rng = me.selection.getRange(); + + //处理全选的情况 + if(!rng.collapsed && !(evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey) && (keyCode >= 65 && keyCode <=90 + || keyCode >= 48 && keyCode <= 57 || + keyCode >= 96 && keyCode <= 111 || { + 13:1, + 8:1, + 46:1 + }[keyCode]) + ){ + + var tmpNode = rng.startContainer; + if(domUtils.isFillChar(tmpNode)){ + rng.setStartBefore(tmpNode) + } + tmpNode = rng.endContainer; + if(domUtils.isFillChar(tmpNode)){ + rng.setEndAfter(tmpNode) + } + rng.txtToElmBoundary(); + //结束边界可能放到了br的前边,要把br包含进来 + // x[xxx]
    + if(rng.endContainer && rng.endContainer.nodeType == 1){ + tmpNode = rng.endContainer.childNodes[rng.endOffset]; + if(tmpNode && domUtils.isBr(tmpNode)){ + rng.setEndAfter(tmpNode); + } + } + if(rng.startOffset == 0){ + tmpNode = rng.startContainer; + if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){ + tmpNode = rng.endContainer; + if(rng.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){ + me.fireEvent('saveScene'); + me.body.innerHTML = '

    '+(browser.ie ? '' : '
    ')+'

    '; + rng.setStart(me.body.firstChild,0).setCursor(false,true); + me._selectionChange(); + return; + } + } + } + } + + //处理backspace + if (keyCode == keymap.Backspace) { + rng = me.selection.getRange(); + collapsed = rng.collapsed; + if(me.fireEvent('delkeydown',evt)){ + return; + } + var start,end; + //避免按两次删除才能生效的问题 + if(rng.collapsed && rng.inFillChar()){ + start = rng.startContainer; + + if(domUtils.isFillChar(start)){ + rng.setStartBefore(start).shrinkBoundary(true).collapse(true); + domUtils.remove(start) + }else{ + start.nodeValue = start.nodeValue.replace(new RegExp('^' + domUtils.fillChar ),''); + rng.startOffset--; + rng.collapse(true).select(true) + } + } + + //解决选中control元素不能删除的问题 + if (start = rng.getClosedNode()) { + me.fireEvent('saveScene'); + rng.setStartBefore(start); + domUtils.remove(start); + rng.setCursor(); + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + return; + } + //阻止在table上的删除 + if (!browser.ie) { + start = domUtils.findParentByTagName(rng.startContainer, 'table', true); + end = domUtils.findParentByTagName(rng.endContainer, 'table', true); + if (start && !end || !start && end || start !== end) { + evt.preventDefault(); + return; + } + } + + } + //处理tab键的逻辑 + if (keyCode == keymap.Tab) { + //不处理以下标签 + var excludeTagNameForTabKey = { + 'ol' : 1, + 'ul' : 1, + 'table':1 + }; + //处理组件里的tab按下事件 + if(me.fireEvent('tabkeydown',evt)){ + domUtils.preventDefault(evt); + return; + } + var range = me.selection.getRange(); + me.fireEvent('saveScene'); + for (var i = 0,txt = '',tabSize = me.options.tabSize|| 4,tabNode = me.options.tabNode || ' '; i < tabSize; i++) { + txt += tabNode; + } + var span = me.document.createElement('span'); + span.innerHTML = txt + domUtils.fillChar; + if (range.collapsed) { + range.insertNode(span.cloneNode(true).firstChild).setCursor(true); + } else { + var filterFn = function(node) { + return domUtils.isBlockElm(node) && !excludeTagNameForTabKey[node.tagName.toLowerCase()] + + }; + //普通的情况 + start = domUtils.findParent(range.startContainer, filterFn,true); + end = domUtils.findParent(range.endContainer, filterFn,true); + if (start && end && start === end) { + range.deleteContents(); + range.insertNode(span.cloneNode(true).firstChild).setCursor(true); + } else { + var bookmark = range.createBookmark(); + range.enlarge(true); + var bookmark2 = range.createBookmark(), + current = domUtils.getNextDomNode(bookmark2.start, false, filterFn); + while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) { + current.insertBefore(span.cloneNode(true).firstChild, current.firstChild); + current = domUtils.getNextDomNode(current, false, filterFn); + } + range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select(); + } + } + domUtils.preventDefault(evt) + } + //trace:1634 + //ff的del键在容器空的时候,也会删除 + if(browser.gecko && keyCode == 46){ + range = me.selection.getRange(); + if(range.collapsed){ + start = range.startContainer; + if(domUtils.isEmptyBlock(start)){ + var parent = start.parentNode; + while(domUtils.getChildCount(parent) == 1 && !domUtils.isBody(parent)){ + start = parent; + parent = parent.parentNode; + } + if(start === parent.lastChild) + evt.preventDefault(); + return; + } + } + } + }); + me.addListener('keyup', function(type, evt) { + var keyCode = evt.keyCode || evt.which, + rng,me = this; + if(keyCode == keymap.Backspace){ + if(me.fireEvent('delkeyup')){ + return; + } + rng = me.selection.getRange(); + if(rng.collapsed){ + var tmpNode, + autoClearTagName = ['h1','h2','h3','h4','h5','h6']; + if(tmpNode = domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){ + if(domUtils.isEmptyBlock(tmpNode)){ + var pre = tmpNode.previousSibling; + if(pre && pre.nodeName != 'TABLE'){ + domUtils.remove(tmpNode); + rng.setStartAtLast(pre).setCursor(false,true); + return; + }else{ + var next = tmpNode.nextSibling; + if(next && next.nodeName != 'TABLE'){ + domUtils.remove(tmpNode); + rng.setStartAtFirst(next).setCursor(false,true); + return; + } + } + } + } + //处理当删除到body时,要重新给p标签展位 + if(domUtils.isBody(rng.startContainer)){ + var tmpNode = domUtils.createElement(me.document,'p',{ + 'innerHTML' : browser.ie ? domUtils.fillChar : '
    ' + }); + rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true); + } + } + + + //chrome下如果删除了inline标签,浏览器会有记忆,在输入文字还是会套上刚才删除的标签,所以这里再选一次就不会了 + if( !collapsed && (rng.startContainer.nodeType == 3 || rng.startContainer.nodeType == 1 && domUtils.isEmptyBlock(rng.startContainer))){ + if(browser.ie){ + var span = rng.document.createElement('span'); + rng.insertNode(span).setStartBefore(span).collapse(true); + rng.select(); + domUtils.remove(span) + }else{ + rng.select() + } + + } + } + + + }) +}; + +// plugins/fiximgclick.js +///import core +///commands 修复chrome下图片不能点击的问题,出现八个角可改变大小 +///commandsName FixImgClick +///commandsTitle 修复chrome下图片不能点击的问题,出现八个角可改变大小 +//修复chrome下图片不能点击的问题,出现八个角可改变大小 + +UE.plugins['fiximgclick'] = (function () { + + var elementUpdated = false; + function Scale() { + this.editor = null; + this.resizer = null; + this.cover = null; + this.doc = document; + this.prePos = {x: 0, y: 0}; + this.startPos = {x: 0, y: 0}; + } + + (function () { + var rect = [ + //[left, top, width, height] + [0, 0, -1, -1], + [0, 0, 0, -1], + [0, 0, 1, -1], + [0, 0, -1, 0], + [0, 0, 1, 0], + [0, 0, -1, 1], + [0, 0, 0, 1], + [0, 0, 1, 1] + ]; + + Scale.prototype = { + init: function (editor) { + var me = this; + me.editor = editor; + me.startPos = this.prePos = {x: 0, y: 0}; + me.dragId = -1; + + var hands = [], + cover = me.cover = document.createElement('div'), + resizer = me.resizer = document.createElement('div'); + + cover.id = me.editor.ui.id + '_imagescale_cover'; + cover.style.cssText = 'position:absolute;display:none;z-index:' + (me.editor.options.zIndex) + ';filter:alpha(opacity=0); opacity:0;background:#CCC;'; + domUtils.on(cover, 'mousedown click', function () { + me.hide(); + }); + + for (i = 0; i < 8; i++) { + hands.push(''); + } + resizer.id = me.editor.ui.id + '_imagescale'; + resizer.className = 'edui-editor-imagescale'; + resizer.innerHTML = hands.join(''); + resizer.style.cssText += ';display:none;border:1px solid #3b77ff;z-index:' + (me.editor.options.zIndex) + ';'; + + me.editor.ui.getDom().appendChild(cover); + me.editor.ui.getDom().appendChild(resizer); + + me.initStyle(); + me.initEvents(); + }, + initStyle: function () { + utils.cssRule('imagescale', '.edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}' + + '.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}' + + '.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}'); + }, + initEvents: function () { + var me = this; + + me.startPos.x = me.startPos.y = 0; + me.isDraging = false; + }, + _eventHandler: function (e) { + var me = this; + switch (e.type) { + case 'mousedown': + var hand = e.target || e.srcElement, hand; + if (hand.className.indexOf('edui-editor-imagescale-hand') != -1 && me.dragId == -1) { + me.dragId = hand.className.slice(-1); + me.startPos.x = me.prePos.x = e.clientX; + me.startPos.y = me.prePos.y = e.clientY; + domUtils.on(me.doc,'mousemove', me.proxy(me._eventHandler, me)); + } + break; + case 'mousemove': + if (me.dragId != -1) { + me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y}); + me.prePos.x = e.clientX; + me.prePos.y = e.clientY; + elementUpdated = true; + me.updateTargetElement(); + + } + break; + case 'mouseup': + if (me.dragId != -1) { + me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y}); + me.updateTargetElement(); + if (me.target.parentNode) me.attachTo(me.target); + me.dragId = -1; + } + domUtils.un(me.doc,'mousemove', me.proxy(me._eventHandler, me)); + //修复只是点击挪动点,但没有改变大小,不应该触发contentchange + if(elementUpdated){ + elementUpdated = false; + me.editor.fireEvent('contentchange'); + } + + break; + default: + break; + } + }, + updateTargetElement: function () { + var me = this; + domUtils.setStyles(me.target, { + 'width': me.resizer.style.width, + 'height': me.resizer.style.height + }); + me.target.width = parseInt(me.resizer.style.width); + me.target.height = parseInt(me.resizer.style.height); + me.attachTo(me.target); + }, + updateContainerStyle: function (dir, offset) { + var me = this, + dom = me.resizer, tmp; + + if (rect[dir][0] != 0) { + tmp = parseInt(dom.style.left) + offset.x; + dom.style.left = me._validScaledProp('left', tmp) + 'px'; + } + if (rect[dir][1] != 0) { + tmp = parseInt(dom.style.top) + offset.y; + dom.style.top = me._validScaledProp('top', tmp) + 'px'; + } + if (rect[dir][2] != 0) { + tmp = dom.clientWidth + rect[dir][2] * offset.x; + dom.style.width = me._validScaledProp('width', tmp) + 'px'; + } + if (rect[dir][3] != 0) { + tmp = dom.clientHeight + rect[dir][3] * offset.y; + dom.style.height = me._validScaledProp('height', tmp) + 'px'; + } + }, + _validScaledProp: function (prop, value) { + var ele = this.resizer, + wrap = document; + + value = isNaN(value) ? 0 : value; + switch (prop) { + case 'left': + return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value; + case 'top': + return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value; + case 'width': + return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value; + case 'height': + return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value; + } + }, + hideCover: function () { + this.cover.style.display = 'none'; + }, + showCover: function () { + var me = this, + editorPos = domUtils.getXY(me.editor.ui.getDom()), + iframePos = domUtils.getXY(me.editor.iframe); + + domUtils.setStyles(me.cover, { + 'width': me.editor.iframe.offsetWidth + 'px', + 'height': me.editor.iframe.offsetHeight + 'px', + 'top': iframePos.y - editorPos.y + 'px', + 'left': iframePos.x - editorPos.x + 'px', + 'position': 'absolute', + 'display': '' + }) + }, + show: function (targetObj) { + var me = this; + me.resizer.style.display = 'block'; + if(targetObj) me.attachTo(targetObj); + + domUtils.on(this.resizer, 'mousedown', me.proxy(me._eventHandler, me)); + domUtils.on(me.doc, 'mouseup', me.proxy(me._eventHandler, me)); + + me.showCover(); + me.editor.fireEvent('afterscaleshow', me); + me.editor.fireEvent('saveScene'); + }, + hide: function () { + var me = this; + me.hideCover(); + me.resizer.style.display = 'none'; + + domUtils.un(me.resizer, 'mousedown', me.proxy(me._eventHandler, me)); + domUtils.un(me.doc, 'mouseup', me.proxy(me._eventHandler, me)); + me.editor.fireEvent('afterscalehide', me); + }, + proxy: function( fn, context ) { + return function(e) { + return fn.apply( context || this, arguments); + }; + }, + attachTo: function (targetObj) { + var me = this, + target = me.target = targetObj, + resizer = this.resizer, + imgPos = domUtils.getXY(target), + iframePos = domUtils.getXY(me.editor.iframe), + editorPos = domUtils.getXY(resizer.parentNode); + + domUtils.setStyles(resizer, { + 'width': target.width + 'px', + 'height': target.height + 'px', + 'left': iframePos.x + imgPos.x - me.editor.document.body.scrollLeft - editorPos.x - parseInt(resizer.style.borderLeftWidth) + 'px', + 'top': iframePos.y + imgPos.y - me.editor.document.body.scrollTop - editorPos.y - parseInt(resizer.style.borderTopWidth) + 'px' + }); + } + } + })(); + + return function () { + var me = this, + imageScale; + + me.setOpt('imageScaleEnabled', true); + + if ( !browser.ie && me.options.imageScaleEnabled) { + me.addListener('click', function (type, e) { + + var range = me.selection.getRange(), + img = range.getClosedNode(); + + if (img && img.tagName == 'IMG' && me.body.contentEditable!="false") { + + if (img.className.indexOf("edui-faked-music") != -1 || + img.getAttribute("anchorname") || + domUtils.hasClass(img, 'loadingclass') || + domUtils.hasClass(img, 'loaderrorclass')) { return } + + if (!imageScale) { + imageScale = new Scale(); + imageScale.init(me); + me.ui.getDom().appendChild(imageScale.resizer); + + var _keyDownHandler = function (e) { + imageScale.hide(); + if(imageScale.target) me.selection.getRange().selectNode(imageScale.target).select(); + }, _mouseDownHandler = function (e) { + var ele = e.target || e.srcElement; + if (ele && (ele.className===undefined || ele.className.indexOf('edui-editor-imagescale') == -1)) { + _keyDownHandler(e); + } + }, timer; + + me.addListener('afterscaleshow', function (e) { + me.addListener('beforekeydown', _keyDownHandler); + me.addListener('beforemousedown', _mouseDownHandler); + domUtils.on(document, 'keydown', _keyDownHandler); + domUtils.on(document,'mousedown', _mouseDownHandler); + me.selection.getNative().removeAllRanges(); + }); + me.addListener('afterscalehide', function (e) { + me.removeListener('beforekeydown', _keyDownHandler); + me.removeListener('beforemousedown', _mouseDownHandler); + domUtils.un(document, 'keydown', _keyDownHandler); + domUtils.un(document,'mousedown', _mouseDownHandler); + var target = imageScale.target; + if (target.parentNode) { + me.selection.getRange().selectNode(target).select(); + } + }); + //TODO 有iframe的情况,mousedown不能往下传。。 + domUtils.on(imageScale.resizer, 'mousedown', function (e) { + me.selection.getNative().removeAllRanges(); + var ele = e.target || e.srcElement; + if (ele && ele.className.indexOf('edui-editor-imagescale-hand') == -1) { + timer = setTimeout(function () { + imageScale.hide(); + if(imageScale.target) me.selection.getRange().selectNode(ele).select(); + }, 200); + } + }); + domUtils.on(imageScale.resizer, 'mouseup', function (e) { + var ele = e.target || e.srcElement; + if (ele && ele.className.indexOf('edui-editor-imagescale-hand') == -1) { + clearTimeout(timer); + } + }); + } + imageScale.show(img); + } else { + if (imageScale && imageScale.resizer.style.display != 'none') imageScale.hide(); + } + }); + } + + if (browser.webkit) { + me.addListener('click', function (type, e) { + if (e.target.tagName == 'IMG' && me.body.contentEditable!="false") { + var range = new dom.Range(me.document); + range.selectNode(e.target).select(); + } + }); + } + } +})(); + +// plugins/autolink.js +///import core +///commands 为非ie浏览器自动添加a标签 +///commandsName AutoLink +///commandsTitle 自动增加链接 +/** + * @description 为非ie浏览器自动添加a标签 + * @author zhanyi + */ + +UE.plugin.register('autolink',function(){ + var cont = 0; + + return !browser.ie ? { + + bindEvents:{ + 'reset' : function(){ + cont = 0; + }, + 'keydown':function(type, evt) { + var me = this; + var keyCode = evt.keyCode || evt.which; + + if (keyCode == 32 || keyCode == 13) { + + var sel = me.selection.getNative(), + range = sel.getRangeAt(0).cloneRange(), + offset, + charCode; + + var start = range.startContainer; + while (start.nodeType == 1 && range.startOffset > 0) { + start = range.startContainer.childNodes[range.startOffset - 1]; + if (!start){ + break; + } + range.setStart(start, start.nodeType == 1 ? start.childNodes.length : start.nodeValue.length); + range.collapse(true); + start = range.startContainer; + } + + do{ + if (range.startOffset == 0) { + start = range.startContainer.previousSibling; + + while (start && start.nodeType == 1) { + start = start.lastChild; + } + if (!start || domUtils.isFillChar(start)){ + break; + } + offset = start.nodeValue.length; + } else { + start = range.startContainer; + offset = range.startOffset; + } + range.setStart(start, offset - 1); + charCode = range.toString().charCodeAt(0); + } while (charCode != 160 && charCode != 32); + + if (range.toString().replace(new RegExp(domUtils.fillChar, 'g'), '').match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)) { + while(range.toString().length){ + if(/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(range.toString())){ + break; + } + try{ + range.setStart(range.startContainer,range.startOffset+1); + }catch(e){ + //trace:2121 + var start = range.startContainer; + while(!(next = start.nextSibling)){ + if(domUtils.isBody(start)){ + return; + } + start = start.parentNode; + + } + range.setStart(next,0); + + } + + } + //range的开始边界已经在a标签里的不再处理 + if(domUtils.findParentByTagName(range.startContainer,'a',true)){ + return; + } + var a = me.document.createElement('a'),text = me.document.createTextNode(' '),href; + + me.undoManger && me.undoManger.save(); + a.appendChild(range.extractContents()); + a.href = a.innerHTML = a.innerHTML.replace(/<[^>]+>/g,''); + href = a.getAttribute("href").replace(new RegExp(domUtils.fillChar,'g'),''); + href = /^(?:https?:\/\/)/ig.test(href) ? href : "http://"+ href; + a.setAttribute('_src',utils.html(href)); + a.href = utils.html(href); + + range.insertNode(a); + a.parentNode.insertBefore(text, a.nextSibling); + range.setStart(text, 0); + range.collapse(true); + sel.removeAllRanges(); + sel.addRange(range); + me.undoManger && me.undoManger.save(); + } + } + } + } + }:{} + },function(){ + var keyCodes = { + 37:1, 38:1, 39:1, 40:1, + 13:1,32:1 + }; + function checkIsCludeLink(node){ + if(node.nodeType == 3){ + return null + } + if(node.nodeName == 'A'){ + return node; + } + var lastChild = node.lastChild; + + while(lastChild){ + if(lastChild.nodeName == 'A'){ + return lastChild; + } + if(lastChild.nodeType == 3){ + if(domUtils.isWhitespace(lastChild)){ + lastChild = lastChild.previousSibling; + continue; + } + return null + } + lastChild = lastChild.lastChild; + } + } + browser.ie && this.addListener('keyup',function(cmd,evt){ + var me = this,keyCode = evt.keyCode; + if(keyCodes[keyCode]){ + var rng = me.selection.getRange(); + var start = rng.startContainer; + + if(keyCode == 13){ + while(start && !domUtils.isBody(start) && !domUtils.isBlockElm(start)){ + start = start.parentNode; + } + if(start && !domUtils.isBody(start) && start.nodeName == 'P'){ + var pre = start.previousSibling; + if(pre && pre.nodeType == 1){ + var pre = checkIsCludeLink(pre); + if(pre && !pre.getAttribute('_href')){ + domUtils.remove(pre,true); + } + } + } + }else if(keyCode == 32 ){ + if(start.nodeType == 3 && /^\s$/.test(start.nodeValue)){ + start = start.previousSibling; + if(start && start.nodeName == 'A' && !start.getAttribute('_href')){ + domUtils.remove(start,true); + } + } + }else { + start = domUtils.findParentByTagName(start,'a',true); + if(start && !start.getAttribute('_href')){ + var bk = rng.createBookmark(); + + domUtils.remove(start,true); + rng.moveToBookmark(bk).select(true) + } + } + + } + + + }); + } +); + +// plugins/autoheight.js +///import core +///commands 当输入内容超过编辑器高度时,编辑器自动增高 +///commandsName AutoHeight,autoHeightEnabled +///commandsTitle 自动增高 +/** + * @description 自动伸展 + * @author zhanyi + */ +UE.plugins['autoheight'] = function () { + var me = this; + //提供开关,就算加载也可以关闭 + me.autoHeightEnabled = me.options.autoHeightEnabled !== false; + if (!me.autoHeightEnabled) { + return; + } + + var bakOverflow, + lastHeight = 0, + options = me.options, + currentHeight, + timer; + + function adjustHeight() { + var me = this; + clearTimeout(timer); + if(isFullscreen)return; + if (!me.queryCommandState || me.queryCommandState && me.queryCommandState('source') != 1) { + timer = setTimeout(function(){ + + var node = me.body.lastChild; + while(node && node.nodeType != 1){ + node = node.previousSibling; + } + if(node && node.nodeType == 1){ + node.style.clear = 'both'; + currentHeight = Math.max(domUtils.getXY(node).y + node.offsetHeight + 25 ,Math.max(options.minFrameHeight, options.initialFrameHeight)) ; + if (currentHeight != lastHeight) { + if (currentHeight !== parseInt(me.iframe.parentNode.style.height)) { + me.iframe.parentNode.style.height = currentHeight + 'px'; + } + me.body.style.height = currentHeight + 'px'; + lastHeight = currentHeight; + } + domUtils.removeStyle(node,'clear'); + } + + + },50) + } + } + var isFullscreen; + me.addListener('fullscreenchanged',function(cmd,f){ + isFullscreen = f + }); + me.addListener('destroy', function () { + me.removeListener('contentchange afterinserthtml keyup mouseup',adjustHeight) + }); + me.enableAutoHeight = function () { + var me = this; + if (!me.autoHeightEnabled) { + return; + } + var doc = me.document; + me.autoHeightEnabled = true; + bakOverflow = doc.body.style.overflowY; + doc.body.style.overflowY = 'hidden'; + me.addListener('contentchange afterinserthtml keyup mouseup',adjustHeight); + //ff不给事件算得不对 + + setTimeout(function () { + adjustHeight.call(me); + }, browser.gecko ? 100 : 0); + me.fireEvent('autoheightchanged', me.autoHeightEnabled); + }; + me.disableAutoHeight = function () { + + me.body.style.overflowY = bakOverflow || ''; + + me.removeListener('contentchange', adjustHeight); + me.removeListener('keyup', adjustHeight); + me.removeListener('mouseup', adjustHeight); + me.autoHeightEnabled = false; + me.fireEvent('autoheightchanged', me.autoHeightEnabled); + }; + + me.on('setHeight',function(){ + me.disableAutoHeight() + }); + me.addListener('ready', function () { + me.enableAutoHeight(); + //trace:1764 + var timer; + domUtils.on(browser.ie ? me.body : me.document, browser.webkit ? 'dragover' : 'drop', function () { + clearTimeout(timer); + timer = setTimeout(function () { + //trace:3681 + adjustHeight.call(me); + }, 100); + + }); + //修复内容过多时,回到顶部,顶部内容被工具栏遮挡问题 + var lastScrollY; + window.onscroll = function(){ + if(lastScrollY === null){ + lastScrollY = this.scrollY + }else if(this.scrollY == 0 && lastScrollY != 0){ + me.window.scrollTo(0,0); + lastScrollY = null; + } + } + }); + + +}; + + + +// plugins/autofloat.js +///import core +///commands 悬浮工具栏 +///commandsName AutoFloat,autoFloatEnabled +///commandsTitle 悬浮工具栏 +/** + * modified by chengchao01 + * 注意: 引入此功能后,在IE6下会将body的背景图片覆盖掉! + */ +UE.plugins['autofloat'] = function() { + var me = this, + lang = me.getLang(); + me.setOpt({ + topOffset:0 + }); + var optsAutoFloatEnabled = me.options.autoFloatEnabled !== false, + topOffset = me.options.topOffset; + + + //如果不固定toolbar的位置,则直接退出 + if(!optsAutoFloatEnabled){ + return; + } + var uiUtils = UE.ui.uiUtils, + LteIE6 = browser.ie && browser.version <= 6, + quirks = browser.quirks; + + function checkHasUI(){ + if(!UE.ui){ + alert(lang.autofloatMsg); + return 0; + } + return 1; + } + function fixIE6FixedPos(){ + var docStyle = document.body.style; + docStyle.backgroundImage = 'url("about:blank")'; + docStyle.backgroundAttachment = 'fixed'; + } + var bakCssText, + placeHolder = document.createElement('div'), + toolbarBox,orgTop, + getPosition, + flag =true; //ie7模式下需要偏移 + function setFloating(){ + var toobarBoxPos = domUtils.getXY(toolbarBox), + origalFloat = domUtils.getComputedStyle(toolbarBox,'position'), + origalLeft = domUtils.getComputedStyle(toolbarBox,'left'); + toolbarBox.style.width = toolbarBox.offsetWidth + 'px'; + toolbarBox.style.zIndex = me.options.zIndex * 1 + 1; + toolbarBox.parentNode.insertBefore(placeHolder, toolbarBox); + if (LteIE6 || (quirks && browser.ie)) { + if(toolbarBox.style.position != 'absolute'){ + toolbarBox.style.position = 'absolute'; + } + toolbarBox.style.top = (document.body.scrollTop||document.documentElement.scrollTop) - orgTop + topOffset + 'px'; + } else { + if (browser.ie7Compat && flag) { + flag = false; + toolbarBox.style.left = domUtils.getXY(toolbarBox).x - document.documentElement.getBoundingClientRect().left+2 + 'px'; + } + if(toolbarBox.style.position != 'fixed'){ + toolbarBox.style.position = 'fixed'; + toolbarBox.style.top = topOffset +"px"; + ((origalFloat == 'absolute' || origalFloat == 'relative') && parseFloat(origalLeft)) && (toolbarBox.style.left = toobarBoxPos.x + 'px'); + } + } + } + function unsetFloating(){ + flag = true; + if(placeHolder.parentNode){ + placeHolder.parentNode.removeChild(placeHolder); + } + + toolbarBox.style.cssText = bakCssText; + } + + function updateFloating(){ + var rect3 = getPosition(me.container); + var offset=me.options.toolbarTopOffset||0; + if (rect3.top < 0 && rect3.bottom - toolbarBox.offsetHeight > offset) { + setFloating(); + }else{ + unsetFloating(); + } + } + var defer_updateFloating = utils.defer(function(){ + updateFloating(); + },browser.ie ? 200 : 100,true); + + me.addListener('destroy',function(){ + domUtils.un(window, ['scroll','resize'], updateFloating); + me.removeListener('keydown', defer_updateFloating); + }); + + me.addListener('ready', function(){ + if(checkHasUI(me)){ + //加载了ui组件,但在new时,没有加载ui,导致编辑器实例上没有ui类,所以这里做判断 + if(!me.ui){ + return; + } + getPosition = uiUtils.getClientRect; + toolbarBox = me.ui.getDom('toolbarbox'); + orgTop = getPosition(toolbarBox).top; + bakCssText = toolbarBox.style.cssText; + placeHolder.style.height = toolbarBox.offsetHeight + 'px'; + if(LteIE6){ + fixIE6FixedPos(); + } + domUtils.on(window, ['scroll','resize'], updateFloating); + me.addListener('keydown', defer_updateFloating); + + me.addListener('beforefullscreenchange', function (t, enabled){ + if (enabled) { + unsetFloating(); + } + }); + me.addListener('fullscreenchanged', function (t, enabled){ + if (!enabled) { + updateFloating(); + } + }); + me.addListener('sourcemodechanged', function (t, enabled){ + setTimeout(function (){ + updateFloating(); + },0); + }); + me.addListener("clearDoc",function(){ + setTimeout(function(){ + updateFloating(); + },0); + + }) + } + }); +}; + + +// plugins/video.js +/** + * video插件, 为UEditor提供视频插入支持 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['video'] = function (){ + var me =this; + + /** + * 创建插入视频字符窜 + * @param url 视频地址 + * @param width 视频宽度 + * @param height 视频高度 + * @param align 视频对齐 + * @param toEmbed 是否以flash代替显示 + * @param addParagraph 是否需要添加P 标签 + */ + function creatInsertStr(url,width,height,id,align,classname,type){ + + url = utils.unhtmlForUrl(url); + align = utils.unhtml(align); + classname = utils.unhtml(classname); + + width = parseInt(width, 10) || 0; + height = parseInt(height, 10) || 0; + + var str; + switch (type){ + case 'image': + str = '' + break; + case 'embed': + str = ''; + break; + case 'video': + var ext = url.substr(url.lastIndexOf('.') + 1); + if(ext == 'ogv') ext = 'ogg'; + str = '' + + ''; + break; + } + return str; + } + + function switchImgAndVideo(root,img2video){ + utils.each(root.getNodesByTagName(img2video ? 'img' : 'embed video'),function(node){ + var className = node.getAttr('class'); + if(className && className.indexOf('edui-faked-video') != -1){ + var html = creatInsertStr( img2video ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',className,img2video ? 'embed':'image'); + node.parentNode.replaceChild(UE.uNode.createElement(html),node); + } + if(className && className.indexOf('edui-upload-video') != -1){ + var html = creatInsertStr( img2video ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',className,img2video ? 'video':'image'); + node.parentNode.replaceChild(UE.uNode.createElement(html),node); + } + }) + } + + me.addOutputRule(function(root){ + switchImgAndVideo(root,true) + }); + me.addInputRule(function(root){ + switchImgAndVideo(root) + }); + + /** + * 插入视频 + * @command insertvideo + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } videoAttr 键值对对象, 描述一个视频的所有属性 + * @example + * ```javascript + * + * var videoAttr = { + * //视频地址 + * url: 'http://www.youku.com/xxx', + * //视频宽高值, 单位px + * width: 200, + * height: 100 + * }; + * + * //editor 是编辑器实例 + * //向编辑器插入单个视频 + * editor.execCommand( 'insertvideo', videoAttr ); + * ``` + */ + + /** + * 插入视频 + * @command insertvideo + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Array } videoArr 需要插入的视频的数组, 其中的每一个元素都是一个键值对对象, 描述了一个视频的所有属性 + * @example + * ```javascript + * + * var videoAttr1 = { + * //视频地址 + * url: 'http://www.youku.com/xxx', + * //视频宽高值, 单位px + * width: 200, + * height: 100 + * }, + * videoAttr2 = { + * //视频地址 + * url: 'http://www.youku.com/xxx', + * //视频宽高值, 单位px + * width: 200, + * height: 100 + * } + * + * //editor 是编辑器实例 + * //该方法将会向编辑器内插入两个视频 + * editor.execCommand( 'insertvideo', [ videoAttr1, videoAttr2 ] ); + * ``` + */ + + /** + * 查询当前光标所在处是否是一个视频 + * @command insertvideo + * @method queryCommandState + * @param { String } cmd 需要查询的命令字符串 + * @return { int } 如果当前光标所在处的元素是一个视频对象, 则返回1,否则返回0 + * @example + * ```javascript + * + * //editor 是编辑器实例 + * editor.queryCommandState( 'insertvideo' ); + * ``` + */ + me.commands["insertvideo"] = { + execCommand: function (cmd, videoObjs, type){ + videoObjs = utils.isArray(videoObjs)?videoObjs:[videoObjs]; + var html = [],id = 'tmpVedio', cl; + for(var i=0,vi,len = videoObjs.length;i 0) { + return 0; + } + for (var i in dtd.$isNotEmpty) if (dtd.$isNotEmpty.hasOwnProperty(i)) { + if (node.getElementsByTagName(i).length) { + return 0; + } + } + return 1; + }; + UETable.getWidth = function (cell) { + if (!cell)return 0; + return parseInt(domUtils.getComputedStyle(cell, "width"), 10); + }; + + /** + * 获取单元格或者单元格组的“对齐”状态。 如果当前的检测对象是一个单元格组, 只有在满足所有单元格的 水平和竖直 对齐属性都相同的 + * 条件时才会返回其状态值,否则将返回null; 如果当前只检测了一个单元格, 则直接返回当前单元格的对齐状态; + * @param table cell or table cells , 支持单个单元格dom对象 或者 单元格dom对象数组 + * @return { align: 'left' || 'right' || 'center', valign: 'top' || 'middle' || 'bottom' } 或者 null + */ + UETable.getTableCellAlignState = function ( cells ) { + + !utils.isArray( cells ) && ( cells = [cells] ); + + var result = {}, + status = ['align', 'valign'], + tempStatus = null, + isSame = true;//状态是否相同 + + utils.each( cells, function( cellNode ){ + + utils.each( status, function( currentState ){ + + tempStatus = cellNode.getAttribute( currentState ); + + if( !result[ currentState ] && tempStatus ) { + result[ currentState ] = tempStatus; + } else if( !result[ currentState ] || ( tempStatus !== result[ currentState ] ) ) { + isSame = false; + return false; + } + + } ); + + return isSame; + + }); + + return isSame ? result : null; + + }; + + /** + * 根据当前选区获取相关的table信息 + * @return {Object} + */ + UETable.getTableItemsByRange = function (editor) { + var start = editor.selection.getStart(); + + //ff下会选中bookmark + if( start && start.id && start.id.indexOf('_baidu_bookmark_start_') === 0 && start.nextSibling) { + start = start.nextSibling; + } + + //在table或者td边缘有可能存在选中tr的情况 + var cell = start && domUtils.findParentByTagName(start, ["td", "th"], true), + tr = cell && cell.parentNode, + caption = start && domUtils.findParentByTagName(start, 'caption', true), + table = caption ? caption.parentNode : tr && tr.parentNode.parentNode; + + return { + cell:cell, + tr:tr, + table:table, + caption:caption + } + }; + UETable.getUETableBySelected = function (editor) { + var table = UETable.getTableItemsByRange(editor).table; + if (table && table.ueTable && table.ueTable.selectedTds.length) { + return table.ueTable; + } + return null; + }; + + UETable.getDefaultValue = function (editor, table) { + var borderMap = { + thin:'0px', + medium:'1px', + thick:'2px' + }, + tableBorder, tdPadding, tdBorder, tmpValue; + if (!table) { + table = editor.document.createElement('table'); + table.insertRow(0).insertCell(0).innerHTML = 'xxx'; + editor.body.appendChild(table); + var td = table.getElementsByTagName('td')[0]; + tmpValue = domUtils.getComputedStyle(table, 'border-left-width'); + tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'padding-left'); + tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'border-left-width'); + tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + domUtils.remove(table); + return { + tableBorder:tableBorder, + tdPadding:tdPadding, + tdBorder:tdBorder + }; + } else { + td = table.getElementsByTagName('td')[0]; + tmpValue = domUtils.getComputedStyle(table, 'border-left-width'); + tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'padding-left'); + tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10); + tmpValue = domUtils.getComputedStyle(td, 'border-left-width'); + tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10); + return { + tableBorder:tableBorder, + tdPadding:tdPadding, + tdBorder:tdBorder + }; + } + }; + /** + * 根据当前点击的td或者table获取索引对象 + * @param tdOrTable + */ + UETable.getUETable = function (tdOrTable) { + var tag = tdOrTable.tagName.toLowerCase(); + tdOrTable = (tag == "td" || tag == "th" || tag == 'caption') ? domUtils.findParentByTagName(tdOrTable, "table", true) : tdOrTable; + if (!tdOrTable.ueTable) { + tdOrTable.ueTable = new UETable(tdOrTable); + } + return tdOrTable.ueTable; + }; + + UETable.cloneCell = function(cell,ignoreMerge,keepPro){ + if (!cell || utils.isString(cell)) { + return this.table.ownerDocument.createElement(cell || 'td'); + } + var flag = domUtils.hasClass(cell, "selectTdClass"); + flag && domUtils.removeClasses(cell, "selectTdClass"); + var tmpCell = cell.cloneNode(true); + if (ignoreMerge) { + tmpCell.rowSpan = tmpCell.colSpan = 1; + } + //去掉宽高 + !keepPro && domUtils.removeAttributes(tmpCell,'width height'); + !keepPro && domUtils.removeAttributes(tmpCell,'style'); + + tmpCell.style.borderLeftStyle = ""; + tmpCell.style.borderTopStyle = ""; + tmpCell.style.borderLeftColor = cell.style.borderRightColor; + tmpCell.style.borderLeftWidth = cell.style.borderRightWidth; + tmpCell.style.borderTopColor = cell.style.borderBottomColor; + tmpCell.style.borderTopWidth = cell.style.borderBottomWidth; + flag && domUtils.addClass(cell, "selectTdClass"); + return tmpCell; + } + + UETable.prototype = { + getMaxRows:function () { + var rows = this.table.rows, maxLen = 1; + for (var i = 0, row; row = rows[i]; i++) { + var currentMax = 1; + for (var j = 0, cj; cj = row.cells[j++];) { + currentMax = Math.max(cj.rowSpan || 1, currentMax); + } + maxLen = Math.max(currentMax + i, maxLen); + } + return maxLen; + }, + /** + * 获取当前表格的最大列数 + */ + getMaxCols:function () { + var rows = this.table.rows, maxLen = 0, cellRows = {}; + for (var i = 0, row; row = rows[i]; i++) { + var cellsNum = 0; + for (var j = 0, cj; cj = row.cells[j++];) { + cellsNum += (cj.colSpan || 1); + if (cj.rowSpan && cj.rowSpan > 1) { + for (var k = 1; k < cj.rowSpan; k++) { + if (!cellRows['row_' + (i + k)]) { + cellRows['row_' + (i + k)] = (cj.colSpan || 1); + } else { + cellRows['row_' + (i + k)]++ + } + } + + } + } + cellsNum += cellRows['row_' + i] || 0; + maxLen = Math.max(cellsNum, maxLen); + } + return maxLen; + }, + getCellColIndex:function (cell) { + + }, + /** + * 获取当前cell旁边的单元格, + * @param cell + * @param right + */ + getHSideCell:function (cell, right) { + try { + var cellInfo = this.getCellInfo(cell), + previewRowIndex, previewColIndex; + var len = this.selectedTds.length, + range = this.cellsRange; + //首行或者首列没有前置单元格 + if ((!right && (!len ? !cellInfo.colIndex : !range.beginColIndex)) || (right && (!len ? (cellInfo.colIndex == (this.colsNum - 1)) : (range.endColIndex == this.colsNum - 1)))) return null; + + previewRowIndex = !len ? cellInfo.rowIndex : range.beginRowIndex; + previewColIndex = !right ? ( !len ? (cellInfo.colIndex < 1 ? 0 : (cellInfo.colIndex - 1)) : range.beginColIndex - 1) + : ( !len ? cellInfo.colIndex + 1 : range.endColIndex + 1); + return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex, this.indexTable[previewRowIndex][previewColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + getTabNextCell:function (cell, preRowIndex) { + var cellInfo = this.getCellInfo(cell), + rowIndex = preRowIndex || cellInfo.rowIndex, + colIndex = cellInfo.colIndex + 1 + (cellInfo.colSpan - 1), + nextCell; + try { + nextCell = this.getCell(this.indexTable[rowIndex][colIndex].rowIndex, this.indexTable[rowIndex][colIndex].cellIndex); + } catch (e) { + try { + rowIndex = rowIndex * 1 + 1; + colIndex = 0; + nextCell = this.getCell(this.indexTable[rowIndex][colIndex].rowIndex, this.indexTable[rowIndex][colIndex].cellIndex); + } catch (e) { + } + } + return nextCell; + + }, + /** + * 获取视觉上的后置单元格 + * @param cell + * @param bottom + */ + getVSideCell:function (cell, bottom, ignoreRange) { + try { + var cellInfo = this.getCellInfo(cell), + nextRowIndex, nextColIndex; + var len = this.selectedTds.length && !ignoreRange, + range = this.cellsRange; + //末行或者末列没有后置单元格 + if ((!bottom && (cellInfo.rowIndex == 0)) || (bottom && (!len ? (cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1) : (range.endRowIndex == this.rowsNum - 1)))) return null; + + nextRowIndex = !bottom ? ( !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1) + : ( !len ? (cellInfo.rowIndex + cellInfo.rowSpan) : range.endRowIndex + 1); + nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex; + return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex, this.indexTable[nextRowIndex][nextColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + /** + * 获取相同结束位置的单元格,xOrY指代了是获取x轴相同还是y轴相同 + */ + getSameEndPosCells:function (cell, xOrY) { + try { + var flag = (xOrY.toLowerCase() === "x"), + end = domUtils.getXY(cell)[flag ? 'x' : 'y'] + cell["offset" + (flag ? 'Width' : 'Height')], + rows = this.table.rows, + cells = null, returns = []; + for (var i = 0; i < this.rowsNum; i++) { + cells = rows[i].cells; + for (var j = 0, tmpCell; tmpCell = cells[j++];) { + var tmpEnd = domUtils.getXY(tmpCell)[flag ? 'x' : 'y'] + tmpCell["offset" + (flag ? 'Width' : 'Height')]; + //对应行的td已经被上面行rowSpan了 + if (tmpEnd > end && flag) break; + if (cell == tmpCell || end == tmpEnd) { + //只获取单一的单元格 + //todo 仅获取单一单元格在特定情况下会造成returns为空,从而影响后续的拖拽实现,修正这个。需考虑性能 + if (tmpCell[flag ? "colSpan" : "rowSpan"] == 1) { + returns.push(tmpCell); + } + if (flag) break; + } + } + } + return returns; + } catch (e) { + showError(e); + } + }, + setCellContent:function (cell, content) { + cell.innerHTML = content || (browser.ie ? domUtils.fillChar : "
    "); + }, + cloneCell:UETable.cloneCell, + /** + * 获取跟当前单元格的右边竖线为左边的所有未合并单元格 + */ + getSameStartPosXCells:function (cell) { + try { + var start = domUtils.getXY(cell).x + cell.offsetWidth, + rows = this.table.rows, cells , returns = []; + for (var i = 0; i < this.rowsNum; i++) { + cells = rows[i].cells; + for (var j = 0, tmpCell; tmpCell = cells[j++];) { + var tmpStart = domUtils.getXY(tmpCell).x; + if (tmpStart > start) break; + if (tmpStart == start && tmpCell.colSpan == 1) { + returns.push(tmpCell); + break; + } + } + } + return returns; + } catch (e) { + showError(e); + } + }, + /** + * 更新table对应的索引表 + */ + update:function (table) { + this.table = table || this.table; + this.selectedTds = []; + this.cellsRange = {}; + this.indexTable = []; + var rows = this.table.rows, + rowsNum = this.getMaxRows(), + dNum = rowsNum - rows.length, + colsNum = this.getMaxCols(); + while (dNum--) { + this.table.insertRow(rows.length); + } + this.rowsNum = rowsNum; + this.colsNum = colsNum; + for (var i = 0, len = rows.length; i < len; i++) { + this.indexTable[i] = new Array(colsNum); + } + //填充索引表 + for (var rowIndex = 0, row; row = rows[rowIndex]; rowIndex++) { + for (var cellIndex = 0, cell, cells = row.cells; cell = cells[cellIndex]; cellIndex++) { + //修正整行被rowSpan时导致的行数计算错误 + if (cell.rowSpan > rowsNum) { + cell.rowSpan = rowsNum; + } + var colIndex = cellIndex, + rowSpan = cell.rowSpan || 1, + colSpan = cell.colSpan || 1; + //当已经被上一行rowSpan或者被前一列colSpan了,则跳到下一个单元格进行 + while (this.indexTable[rowIndex][colIndex]) colIndex++; + for (var j = 0; j < rowSpan; j++) { + for (var k = 0; k < colSpan; k++) { + this.indexTable[rowIndex + j][colIndex + k] = { + rowIndex:rowIndex, + cellIndex:cellIndex, + colIndex:colIndex, + rowSpan:rowSpan, + colSpan:colSpan + } + } + } + } + } + //修复残缺td + for (j = 0; j < rowsNum; j++) { + for (k = 0; k < colsNum; k++) { + if (this.indexTable[j][k] === undefined) { + row = rows[j]; + cell = row.cells[row.cells.length - 1]; + cell = cell ? cell.cloneNode(true) : this.table.ownerDocument.createElement("td"); + this.setCellContent(cell); + if (cell.colSpan !== 1)cell.colSpan = 1; + if (cell.rowSpan !== 1)cell.rowSpan = 1; + row.appendChild(cell); + this.indexTable[j][k] = { + rowIndex:j, + cellIndex:cell.cellIndex, + colIndex:k, + rowSpan:1, + colSpan:1 + } + } + } + } + //当框选后删除行或者列后撤销,需要重建选区。 + var tds = domUtils.getElementsByTagName(this.table, "td"), + selectTds = []; + utils.each(tds, function (td) { + if (domUtils.hasClass(td, "selectTdClass")) { + selectTds.push(td); + } + }); + if (selectTds.length) { + var start = selectTds[0], + end = selectTds[selectTds.length - 1], + startInfo = this.getCellInfo(start), + endInfo = this.getCellInfo(end); + this.selectedTds = selectTds; + this.cellsRange = { + beginRowIndex:startInfo.rowIndex, + beginColIndex:startInfo.colIndex, + endRowIndex:endInfo.rowIndex + endInfo.rowSpan - 1, + endColIndex:endInfo.colIndex + endInfo.colSpan - 1 + }; + } + //给第一行设置firstRow的样式名称,在排序图标的样式上使用到 + if(!domUtils.hasClass(this.table.rows[0], "firstRow")) { + domUtils.addClass(this.table.rows[0], "firstRow"); + for(var i = 1; i< this.table.rows.length; i++) { + domUtils.removeClasses(this.table.rows[i], "firstRow"); + } + } + }, + /** + * 获取单元格的索引信息 + */ + getCellInfo:function (cell) { + if (!cell) return; + var cellIndex = cell.cellIndex, + rowIndex = cell.parentNode.rowIndex, + rowInfo = this.indexTable[rowIndex], + numCols = this.colsNum; + for (var colIndex = cellIndex; colIndex < numCols; colIndex++) { + var cellInfo = rowInfo[colIndex]; + if (cellInfo.rowIndex === rowIndex && cellInfo.cellIndex === cellIndex) { + return cellInfo; + } + } + }, + /** + * 根据行列号获取单元格 + */ + getCell:function (rowIndex, cellIndex) { + return rowIndex < this.rowsNum && this.table.rows[rowIndex].cells[cellIndex] || null; + }, + /** + * 删除单元格 + */ + deleteCell:function (cell, rowIndex) { + rowIndex = typeof rowIndex == 'number' ? rowIndex : cell.parentNode.rowIndex; + var row = this.table.rows[rowIndex]; + row.deleteCell(cell.cellIndex); + }, + /** + * 根据始末两个单元格获取被框选的所有单元格范围 + */ + getCellsRange:function (cellA, cellB) { + function checkRange(beginRowIndex, beginColIndex, endRowIndex, endColIndex) { + var tmpBeginRowIndex = beginRowIndex, + tmpBeginColIndex = beginColIndex, + tmpEndRowIndex = endRowIndex, + tmpEndColIndex = endColIndex, + cellInfo, colIndex, rowIndex; + // 通过indexTable检查是否存在超出TableRange上边界的情况 + if (beginRowIndex > 0) { + for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) { + cellInfo = me.indexTable[beginRowIndex][colIndex]; + rowIndex = cellInfo.rowIndex; + if (rowIndex < beginRowIndex) { + tmpBeginRowIndex = Math.min(rowIndex, tmpBeginRowIndex); + } + } + } + // 通过indexTable检查是否存在超出TableRange右边界的情况 + if (endColIndex < me.colsNum) { + for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) { + cellInfo = me.indexTable[rowIndex][endColIndex]; + colIndex = cellInfo.colIndex + cellInfo.colSpan - 1; + if (colIndex > endColIndex) { + tmpEndColIndex = Math.max(colIndex, tmpEndColIndex); + } + } + } + // 检查是否有超出TableRange下边界的情况 + if (endRowIndex < me.rowsNum) { + for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) { + cellInfo = me.indexTable[endRowIndex][colIndex]; + rowIndex = cellInfo.rowIndex + cellInfo.rowSpan - 1; + if (rowIndex > endRowIndex) { + tmpEndRowIndex = Math.max(rowIndex, tmpEndRowIndex); + } + } + } + // 检查是否有超出TableRange左边界的情况 + if (beginColIndex > 0) { + for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) { + cellInfo = me.indexTable[rowIndex][beginColIndex]; + colIndex = cellInfo.colIndex; + if (colIndex < beginColIndex) { + tmpBeginColIndex = Math.min(cellInfo.colIndex, tmpBeginColIndex); + } + } + } + //递归调用直至所有完成所有框选单元格的扩展 + if (tmpBeginRowIndex != beginRowIndex || tmpBeginColIndex != beginColIndex || tmpEndRowIndex != endRowIndex || tmpEndColIndex != endColIndex) { + return checkRange(tmpBeginRowIndex, tmpBeginColIndex, tmpEndRowIndex, tmpEndColIndex); + } else { + // 不需要扩展TableRange的情况 + return { + beginRowIndex:beginRowIndex, + beginColIndex:beginColIndex, + endRowIndex:endRowIndex, + endColIndex:endColIndex + }; + } + } + + try { + var me = this, + cellAInfo = me.getCellInfo(cellA); + if (cellA === cellB) { + return { + beginRowIndex:cellAInfo.rowIndex, + beginColIndex:cellAInfo.colIndex, + endRowIndex:cellAInfo.rowIndex + cellAInfo.rowSpan - 1, + endColIndex:cellAInfo.colIndex + cellAInfo.colSpan - 1 + }; + } + var cellBInfo = me.getCellInfo(cellB); + // 计算TableRange的四个边 + var beginRowIndex = Math.min(cellAInfo.rowIndex, cellBInfo.rowIndex), + beginColIndex = Math.min(cellAInfo.colIndex, cellBInfo.colIndex), + endRowIndex = Math.max(cellAInfo.rowIndex + cellAInfo.rowSpan - 1, cellBInfo.rowIndex + cellBInfo.rowSpan - 1), + endColIndex = Math.max(cellAInfo.colIndex + cellAInfo.colSpan - 1, cellBInfo.colIndex + cellBInfo.colSpan - 1); + + return checkRange(beginRowIndex, beginColIndex, endRowIndex, endColIndex); + } catch (e) { + //throw e; + } + }, + /** + * 依据cellsRange获取对应的单元格集合 + */ + getCells:function (range) { + //每次获取cells之前必须先清除上次的选择,否则会对后续获取操作造成影响 + this.clearSelected(); + var beginRowIndex = range.beginRowIndex, + beginColIndex = range.beginColIndex, + endRowIndex = range.endRowIndex, + endColIndex = range.endColIndex, + cellInfo, rowIndex, colIndex, tdHash = {}, returnTds = []; + for (var i = beginRowIndex; i <= endRowIndex; i++) { + for (var j = beginColIndex; j <= endColIndex; j++) { + cellInfo = this.indexTable[i][j]; + rowIndex = cellInfo.rowIndex; + colIndex = cellInfo.colIndex; + // 如果Cells里已经包含了此Cell则跳过 + var key = rowIndex + '|' + colIndex; + if (tdHash[key]) continue; + tdHash[key] = 1; + if (rowIndex < i || colIndex < j || rowIndex + cellInfo.rowSpan - 1 > endRowIndex || colIndex + cellInfo.colSpan - 1 > endColIndex) { + return null; + } + returnTds.push(this.getCell(rowIndex, cellInfo.cellIndex)); + } + } + return returnTds; + }, + /** + * 清理已经选中的单元格 + */ + clearSelected:function () { + UETable.removeSelectedClass(this.selectedTds); + this.selectedTds = []; + this.cellsRange = {}; + }, + /** + * 根据range设置已经选中的单元格 + */ + setSelected:function (range) { + var cells = this.getCells(range); + UETable.addSelectedClass(cells); + this.selectedTds = cells; + this.cellsRange = range; + }, + isFullRow:function () { + var range = this.cellsRange; + return (range.endColIndex - range.beginColIndex + 1) == this.colsNum; + }, + isFullCol:function () { + var range = this.cellsRange, + table = this.table, + ths = table.getElementsByTagName("th"), + rows = range.endRowIndex - range.beginRowIndex + 1; + return !ths.length ? rows == this.rowsNum : rows == this.rowsNum || (rows == this.rowsNum - 1); + + }, + /** + * 获取视觉上的前置单元格,默认是左边,top传入时 + * @param cell + * @param top + */ + getNextCell:function (cell, bottom, ignoreRange) { + try { + var cellInfo = this.getCellInfo(cell), + nextRowIndex, nextColIndex; + var len = this.selectedTds.length && !ignoreRange, + range = this.cellsRange; + //末行或者末列没有后置单元格 + if ((!bottom && (cellInfo.rowIndex == 0)) || (bottom && (!len ? (cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1) : (range.endRowIndex == this.rowsNum - 1)))) return null; + + nextRowIndex = !bottom ? ( !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1) + : ( !len ? (cellInfo.rowIndex + cellInfo.rowSpan) : range.endRowIndex + 1); + nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex; + return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex, this.indexTable[nextRowIndex][nextColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + getPreviewCell:function (cell, top) { + try { + var cellInfo = this.getCellInfo(cell), + previewRowIndex, previewColIndex; + var len = this.selectedTds.length, + range = this.cellsRange; + //首行或者首列没有前置单元格 + if ((!top && (!len ? !cellInfo.colIndex : !range.beginColIndex)) || (top && (!len ? (cellInfo.rowIndex > (this.colsNum - 1)) : (range.endColIndex == this.colsNum - 1)))) return null; + + previewRowIndex = !top ? ( !len ? cellInfo.rowIndex : range.beginRowIndex ) + : ( !len ? (cellInfo.rowIndex < 1 ? 0 : (cellInfo.rowIndex - 1)) : range.beginRowIndex); + previewColIndex = !top ? ( !len ? (cellInfo.colIndex < 1 ? 0 : (cellInfo.colIndex - 1)) : range.beginColIndex - 1) + : ( !len ? cellInfo.colIndex : range.endColIndex + 1); + return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex, this.indexTable[previewRowIndex][previewColIndex].cellIndex); + } catch (e) { + showError(e); + } + }, + /** + * 移动单元格中的内容 + */ + moveContent:function (cellTo, cellFrom) { + if (UETable.isEmptyBlock(cellFrom)) return; + if (UETable.isEmptyBlock(cellTo)) { + cellTo.innerHTML = cellFrom.innerHTML; + return; + } + var child = cellTo.lastChild; + if (child.nodeType == 3 || !dtd.$block[child.tagName]) { + cellTo.appendChild(cellTo.ownerDocument.createElement('br')) + } + while (child = cellFrom.firstChild) { + cellTo.appendChild(child); + } + }, + /** + * 向右合并单元格 + */ + mergeRight:function (cell) { + var cellInfo = this.getCellInfo(cell), + rightColIndex = cellInfo.colIndex + cellInfo.colSpan, + rightCellInfo = this.indexTable[cellInfo.rowIndex][rightColIndex], + rightCell = this.getCell(rightCellInfo.rowIndex, rightCellInfo.cellIndex); + //合并 + cell.colSpan = cellInfo.colSpan + rightCellInfo.colSpan; + //被合并的单元格不应存在宽度属性 + cell.removeAttribute("width"); + //移动内容 + this.moveContent(cell, rightCell); + //删掉被合并的Cell + this.deleteCell(rightCell, rightCellInfo.rowIndex); + this.update(); + }, + /** + * 向下合并单元格 + */ + mergeDown:function (cell) { + var cellInfo = this.getCellInfo(cell), + downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan, + downCellInfo = this.indexTable[downRowIndex][cellInfo.colIndex], + downCell = this.getCell(downCellInfo.rowIndex, downCellInfo.cellIndex); + cell.rowSpan = cellInfo.rowSpan + downCellInfo.rowSpan; + cell.removeAttribute("height"); + this.moveContent(cell, downCell); + this.deleteCell(downCell, downCellInfo.rowIndex); + this.update(); + }, + /** + * 合并整个range中的内容 + */ + mergeRange:function () { + //由于合并操作可以在任意时刻进行,所以无法通过鼠标位置等信息实时生成range,只能通过缓存实例中的cellsRange对象来访问 + var range = this.cellsRange, + leftTopCell = this.getCell(range.beginRowIndex, this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex); + + if (leftTopCell.tagName == "TH" && range.endRowIndex !== range.beginRowIndex) { + var index = this.indexTable, + info = this.getCellInfo(leftTopCell); + leftTopCell = this.getCell(1, index[1][info.colIndex].cellIndex); + range = this.getCellsRange(leftTopCell, this.getCell(index[this.rowsNum - 1][info.colIndex].rowIndex, index[this.rowsNum - 1][info.colIndex].cellIndex)); + } + + // 删除剩余的Cells + var cells = this.getCells(range); + for(var i= 0,ci;ci=cells[i++];){ + if (ci !== leftTopCell) { + this.moveContent(leftTopCell, ci); + this.deleteCell(ci); + } + } + // 修改左上角Cell的rowSpan和colSpan,并调整宽度属性设置 + leftTopCell.rowSpan = range.endRowIndex - range.beginRowIndex + 1; + leftTopCell.rowSpan > 1 && leftTopCell.removeAttribute("height"); + leftTopCell.colSpan = range.endColIndex - range.beginColIndex + 1; + leftTopCell.colSpan > 1 && leftTopCell.removeAttribute("width"); + if (leftTopCell.rowSpan == this.rowsNum && leftTopCell.colSpan != 1) { + leftTopCell.colSpan = 1; + } + + if (leftTopCell.colSpan == this.colsNum && leftTopCell.rowSpan != 1) { + var rowIndex = leftTopCell.parentNode.rowIndex; + //解决IE下的表格操作问题 + if( this.table.deleteRow ) { + for (var i = rowIndex+ 1, curIndex=rowIndex+ 1, len=leftTopCell.rowSpan; i < len; i++) { + this.table.deleteRow(curIndex); + } + } else { + for (var i = 0, len=leftTopCell.rowSpan - 1; i < len; i++) { + var row = this.table.rows[rowIndex + 1]; + row.parentNode.removeChild(row); + } + } + leftTopCell.rowSpan = 1; + } + this.update(); + }, + /** + * 插入一行单元格 + */ + insertRow:function (rowIndex, sourceCell) { + var numCols = this.colsNum, + table = this.table, + row = table.insertRow(rowIndex), cell, + isInsertTitle = typeof sourceCell == 'string' && sourceCell.toUpperCase() == 'TH'; + + function replaceTdToTh(colIndex, cell, tableRow) { + if (colIndex == 0) { + var tr = tableRow.nextSibling || tableRow.previousSibling, + th = tr.cells[colIndex]; + if (th.tagName == 'TH') { + th = cell.ownerDocument.createElement("th"); + th.appendChild(cell.firstChild); + tableRow.insertBefore(th, cell); + domUtils.remove(cell) + } + }else{ + if (cell.tagName == 'TH') { + var td = cell.ownerDocument.createElement("td"); + td.appendChild(cell.firstChild); + tableRow.insertBefore(td, cell); + domUtils.remove(cell) + } + } + } + + //首行直接插入,无需考虑部分单元格被rowspan的情况 + if (rowIndex == 0 || rowIndex == this.rowsNum) { + for (var colIndex = 0; colIndex < numCols; colIndex++) { + cell = this.cloneCell(sourceCell, true); + this.setCellContent(cell); + cell.getAttribute('vAlign') && cell.setAttribute('vAlign', cell.getAttribute('vAlign')); + row.appendChild(cell); + if(!isInsertTitle) replaceTdToTh(colIndex, cell, row); + } + } else { + var infoRow = this.indexTable[rowIndex], + cellIndex = 0; + for (colIndex = 0; colIndex < numCols; colIndex++) { + var cellInfo = infoRow[colIndex]; + //如果存在某个单元格的rowspan穿过待插入行的位置,则修改该单元格的rowspan即可,无需插入单元格 + if (cellInfo.rowIndex < rowIndex) { + cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + cell.rowSpan = cellInfo.rowSpan + 1; + } else { + cell = this.cloneCell(sourceCell, true); + this.setCellContent(cell); + row.appendChild(cell); + } + if(!isInsertTitle) replaceTdToTh(colIndex, cell, row); + } + } + //框选时插入不触发contentchange,需要手动更新索引。 + this.update(); + return row; + }, + /** + * 删除一行单元格 + * @param rowIndex + */ + deleteRow:function (rowIndex) { + var row = this.table.rows[rowIndex], + infoRow = this.indexTable[rowIndex], + colsNum = this.colsNum, + count = 0; //处理计数 + for (var colIndex = 0; colIndex < colsNum;) { + var cellInfo = infoRow[colIndex], + cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + if (cell.rowSpan > 1) { + if (cellInfo.rowIndex == rowIndex) { + var clone = cell.cloneNode(true); + clone.rowSpan = cell.rowSpan - 1; + clone.innerHTML = ""; + cell.rowSpan = 1; + var nextRowIndex = rowIndex + 1, + nextRow = this.table.rows[nextRowIndex], + insertCellIndex, + preMerged = this.getPreviewMergedCellsNum(nextRowIndex, colIndex) - count; + if (preMerged < colIndex) { + insertCellIndex = colIndex - preMerged - 1; + //nextRow.insertCell(insertCellIndex); + domUtils.insertAfter(nextRow.cells[insertCellIndex], clone); + } else { + if (nextRow.cells.length) nextRow.insertBefore(clone, nextRow.cells[0]) + } + count += 1; + //cell.parentNode.removeChild(cell); + } + } + colIndex += cell.colSpan || 1; + } + var deleteTds = [], cacheMap = {}; + for (colIndex = 0; colIndex < colsNum; colIndex++) { + var tmpRowIndex = infoRow[colIndex].rowIndex, + tmpCellIndex = infoRow[colIndex].cellIndex, + key = tmpRowIndex + "_" + tmpCellIndex; + if (cacheMap[key])continue; + cacheMap[key] = 1; + cell = this.getCell(tmpRowIndex, tmpCellIndex); + deleteTds.push(cell); + } + var mergeTds = []; + utils.each(deleteTds, function (td) { + if (td.rowSpan == 1) { + td.parentNode.removeChild(td); + } else { + mergeTds.push(td); + } + }); + utils.each(mergeTds, function (td) { + td.rowSpan--; + }); + row.parentNode.removeChild(row); + //浏览器方法本身存在bug,采用自定义方法删除 + //this.table.deleteRow(rowIndex); + this.update(); + }, + insertCol:function (colIndex, sourceCell, defaultValue) { + var rowsNum = this.rowsNum, + rowIndex = 0, + tableRow, cell, + backWidth = parseInt((this.table.offsetWidth - (this.colsNum + 1) * 20 - (this.colsNum + 1)) / (this.colsNum + 1), 10), + isInsertTitleCol = typeof sourceCell == 'string' && sourceCell.toUpperCase() == 'TH'; + + function replaceTdToTh(rowIndex, cell, tableRow) { + if (rowIndex == 0) { + var th = cell.nextSibling || cell.previousSibling; + if (th.tagName == 'TH') { + th = cell.ownerDocument.createElement("th"); + th.appendChild(cell.firstChild); + tableRow.insertBefore(th, cell); + domUtils.remove(cell) + } + }else{ + if (cell.tagName == 'TH') { + var td = cell.ownerDocument.createElement("td"); + td.appendChild(cell.firstChild); + tableRow.insertBefore(td, cell); + domUtils.remove(cell) + } + } + } + + var preCell; + if (colIndex == 0 || colIndex == this.colsNum) { + for (; rowIndex < rowsNum; rowIndex++) { + tableRow = this.table.rows[rowIndex]; + preCell = tableRow.cells[colIndex == 0 ? colIndex : tableRow.cells.length]; + cell = this.cloneCell(sourceCell, true); //tableRow.insertCell(colIndex == 0 ? colIndex : tableRow.cells.length); + this.setCellContent(cell); + cell.setAttribute('vAlign', cell.getAttribute('vAlign')); + preCell && cell.setAttribute('width', preCell.getAttribute('width')); + if (!colIndex) { + tableRow.insertBefore(cell, tableRow.cells[0]); + } else { + domUtils.insertAfter(tableRow.cells[tableRow.cells.length - 1], cell); + } + if(!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow) + } + } else { + for (; rowIndex < rowsNum; rowIndex++) { + var cellInfo = this.indexTable[rowIndex][colIndex]; + if (cellInfo.colIndex < colIndex) { + cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + cell.colSpan = cellInfo.colSpan + 1; + } else { + tableRow = this.table.rows[rowIndex]; + preCell = tableRow.cells[cellInfo.cellIndex]; + + cell = this.cloneCell(sourceCell, true);//tableRow.insertCell(cellInfo.cellIndex); + this.setCellContent(cell); + cell.setAttribute('vAlign', cell.getAttribute('vAlign')); + preCell && cell.setAttribute('width', preCell.getAttribute('width')); + //防止IE下报错 + preCell ? tableRow.insertBefore(cell, preCell) : tableRow.appendChild(cell); + } + if(!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow); + } + } + //框选时插入不触发contentchange,需要手动更新索引 + this.update(); + this.updateWidth(backWidth, defaultValue || {tdPadding:10, tdBorder:1}); + }, + updateWidth:function (width, defaultValue) { + var table = this.table, + tmpWidth = UETable.getWidth(table) - defaultValue.tdPadding * 2 - defaultValue.tdBorder + width; + if (tmpWidth < table.ownerDocument.body.offsetWidth) { + table.setAttribute("width", tmpWidth); + return; + } + var tds = domUtils.getElementsByTagName(this.table, "td th"); + utils.each(tds, function (td) { + td.setAttribute("width", width); + }) + }, + deleteCol:function (colIndex) { + var indexTable = this.indexTable, + tableRows = this.table.rows, + backTableWidth = this.table.getAttribute("width"), + backTdWidth = 0, + rowsNum = this.rowsNum, + cacheMap = {}; + for (var rowIndex = 0; rowIndex < rowsNum;) { + var infoRow = indexTable[rowIndex], + cellInfo = infoRow[colIndex], + key = cellInfo.rowIndex + '_' + cellInfo.colIndex; + // 跳过已经处理过的Cell + if (cacheMap[key])continue; + cacheMap[key] = 1; + var cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex); + if (!backTdWidth) backTdWidth = cell && parseInt(cell.offsetWidth / cell.colSpan, 10).toFixed(0); + // 如果Cell的colSpan大于1, 就修改colSpan, 否则就删掉这个Cell + if (cell.colSpan > 1) { + cell.colSpan--; + } else { + tableRows[rowIndex].deleteCell(cellInfo.cellIndex); + } + rowIndex += cellInfo.rowSpan || 1; + } + this.table.setAttribute("width", backTableWidth - backTdWidth); + this.update(); + }, + splitToCells:function (cell) { + var me = this, + cells = this.splitToRows(cell); + utils.each(cells, function (cell) { + me.splitToCols(cell); + }) + }, + splitToRows:function (cell) { + var cellInfo = this.getCellInfo(cell), + rowIndex = cellInfo.rowIndex, + colIndex = cellInfo.colIndex, + results = []; + // 修改Cell的rowSpan + cell.rowSpan = 1; + results.push(cell); + // 补齐单元格 + for (var i = rowIndex, endRow = rowIndex + cellInfo.rowSpan; i < endRow; i++) { + if (i == rowIndex)continue; + var tableRow = this.table.rows[i], + tmpCell = tableRow.insertCell(colIndex - this.getPreviewMergedCellsNum(i, colIndex)); + tmpCell.colSpan = cellInfo.colSpan; + this.setCellContent(tmpCell); + tmpCell.setAttribute('vAlign', cell.getAttribute('vAlign')); + tmpCell.setAttribute('align', cell.getAttribute('align')); + if (cell.style.cssText) { + tmpCell.style.cssText = cell.style.cssText; + } + results.push(tmpCell); + } + this.update(); + return results; + }, + getPreviewMergedCellsNum:function (rowIndex, colIndex) { + var indexRow = this.indexTable[rowIndex], + num = 0; + for (var i = 0; i < colIndex;) { + var colSpan = indexRow[i].colSpan, + tmpRowIndex = indexRow[i].rowIndex; + num += (colSpan - (tmpRowIndex == rowIndex ? 1 : 0)); + i += colSpan; + } + return num; + }, + splitToCols:function (cell) { + var backWidth = (cell.offsetWidth / cell.colSpan - 22).toFixed(0), + + cellInfo = this.getCellInfo(cell), + rowIndex = cellInfo.rowIndex, + colIndex = cellInfo.colIndex, + results = []; + // 修改Cell的rowSpan + cell.colSpan = 1; + cell.setAttribute("width", backWidth); + results.push(cell); + // 补齐单元格 + for (var j = colIndex, endCol = colIndex + cellInfo.colSpan; j < endCol; j++) { + if (j == colIndex)continue; + var tableRow = this.table.rows[rowIndex], + tmpCell = tableRow.insertCell(this.indexTable[rowIndex][j].cellIndex + 1); + tmpCell.rowSpan = cellInfo.rowSpan; + this.setCellContent(tmpCell); + tmpCell.setAttribute('vAlign', cell.getAttribute('vAlign')); + tmpCell.setAttribute('align', cell.getAttribute('align')); + tmpCell.setAttribute('width', backWidth); + if (cell.style.cssText) { + tmpCell.style.cssText = cell.style.cssText; + } + //处理th的情况 + if (cell.tagName == 'TH') { + var th = cell.ownerDocument.createElement('th'); + th.appendChild(tmpCell.firstChild); + th.setAttribute('vAlign', cell.getAttribute('vAlign')); + th.rowSpan = tmpCell.rowSpan; + tableRow.insertBefore(th, tmpCell); + domUtils.remove(tmpCell); + } + results.push(tmpCell); + } + this.update(); + return results; + }, + isLastCell:function (cell, rowsNum, colsNum) { + rowsNum = rowsNum || this.rowsNum; + colsNum = colsNum || this.colsNum; + var cellInfo = this.getCellInfo(cell); + return ((cellInfo.rowIndex + cellInfo.rowSpan) == rowsNum) && + ((cellInfo.colIndex + cellInfo.colSpan) == colsNum); + }, + getLastCell:function (cells) { + cells = cells || this.table.getElementsByTagName("td"); + var firstInfo = this.getCellInfo(cells[0]); + var me = this, last = cells[0], + tr = last.parentNode, + cellsNum = 0, cols = 0, rows; + utils.each(cells, function (cell) { + if (cell.parentNode == tr)cols += cell.colSpan || 1; + cellsNum += cell.rowSpan * cell.colSpan || 1; + }); + rows = cellsNum / cols; + utils.each(cells, function (cell) { + if (me.isLastCell(cell, rows, cols)) { + last = cell; + return false; + } + }); + return last; + + }, + selectRow:function (rowIndex) { + var indexRow = this.indexTable[rowIndex], + start = this.getCell(indexRow[0].rowIndex, indexRow[0].cellIndex), + end = this.getCell(indexRow[this.colsNum - 1].rowIndex, indexRow[this.colsNum - 1].cellIndex), + range = this.getCellsRange(start, end); + this.setSelected(range); + }, + selectTable:function () { + var tds = this.table.getElementsByTagName("td"), + range = this.getCellsRange(tds[0], tds[tds.length - 1]); + this.setSelected(range); + }, + setBackground:function (cells, value) { + if (typeof value === "string") { + utils.each(cells, function (cell) { + cell.style.backgroundColor = value; + }) + } else if (typeof value === "object") { + value = utils.extend({ + repeat:true, + colorList:["#ddd", "#fff"] + }, value); + var rowIndex = this.getCellInfo(cells[0]).rowIndex, + count = 0, + colors = value.colorList, + getColor = function (list, index, repeat) { + return list[index] ? list[index] : repeat ? list[index % list.length] : ""; + }; + for (var i = 0, cell; cell = cells[i++];) { + var cellInfo = this.getCellInfo(cell); + cell.style.backgroundColor = getColor(colors, ((rowIndex + count) == cellInfo.rowIndex) ? count : ++count, value.repeat); + } + } + }, + removeBackground:function (cells) { + utils.each(cells, function (cell) { + cell.style.backgroundColor = ""; + }) + } + + + }; + function showError(e) { + } +})(); + +// plugins/table.cmds.js +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 13-2-20 + * Time: 下午6:25 + * To change this template use File | Settings | File Templates. + */ +; +(function () { + var UT = UE.UETable, + getTableItemsByRange = function (editor) { + return UT.getTableItemsByRange(editor); + }, + getUETableBySelected = function (editor) { + return UT.getUETableBySelected(editor) + }, + getDefaultValue = function (editor, table) { + return UT.getDefaultValue(editor, table); + }, + getUETable = function (tdOrTable) { + return UT.getUETable(tdOrTable); + }; + + + UE.commands['inserttable'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? -1 : 0; + }, + execCommand: function (cmd, opt) { + function createTable(opt, tdWidth) { + var html = [], + rowsNum = opt.numRows, + colsNum = opt.numCols; + for (var r = 0; r < rowsNum; r++) { + html.push(''); + for (var c = 0; c < colsNum; c++) { + html.push('
  • ' + (browser.ie && browser.version < 11 ? domUtils.fillChar : '
    ') + '
    ' + html.join('') + '
    ' + } + + if (!opt) { + opt = utils.extend({}, { + numCols: this.options.defaultCols, + numRows: this.options.defaultRows, + tdvalign: this.options.tdvalign + }) + } + var me = this; + var range = this.selection.getRange(), + start = range.startContainer, + firstParentBlock = domUtils.findParent(start, function (node) { + return domUtils.isBlockElm(node); + }, true) || me.body; + + var defaultValue = getDefaultValue(me), + tableWidth = firstParentBlock.offsetWidth, + tdWidth = Math.floor(tableWidth / opt.numCols - defaultValue.tdPadding * 2 - defaultValue.tdBorder); + + //todo其他属性 + !opt.tdvalign && (opt.tdvalign = me.options.tdvalign); + me.execCommand("inserthtml", createTable(opt, tdWidth)); + } + }; + + UE.commands['insertparagraphbeforetable'] = { + queryCommandState: function () { + return getTableItemsByRange(this).cell ? 0 : -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var p = this.document.createElement("p"); + p.innerHTML = browser.ie ? ' ' : '
    '; + table.parentNode.insertBefore(p, table); + this.selection.getRange().setStart(p, 0).setCursor(); + } + } + }; + + UE.commands['deletetable'] = { + queryCommandState: function () { + var rng = this.selection.getRange(); + return domUtils.findParentByTagName(rng.startContainer, 'table', true) ? 0 : -1; + }, + execCommand: function (cmd, table) { + var rng = this.selection.getRange(); + table = table || domUtils.findParentByTagName(rng.startContainer, 'table', true); + if (table) { + var next = table.nextSibling; + if (!next) { + next = domUtils.createElement(this.document, 'p', { + 'innerHTML': browser.ie ? domUtils.fillChar : '
    ' + }); + table.parentNode.insertBefore(next, table); + } + domUtils.remove(table); + rng = this.selection.getRange(); + if (next.nodeType == 3) { + rng.setStartBefore(next) + } else { + rng.setStart(next, 0) + } + rng.setCursor(false, true) + this.fireEvent("tablehasdeleted") + + } + + } + }; + UE.commands['cellalign'] = { + queryCommandState: function () { + return getSelectedArr(this).length ? 0 : -1 + }, + execCommand: function (cmd, align) { + var selectedTds = getSelectedArr(this); + if (selectedTds.length) { + for (var i = 0, ci; ci = selectedTds[i++];) { + ci.setAttribute('align', align); + } + } + } + }; + UE.commands['cellvalign'] = { + queryCommandState: function () { + return getSelectedArr(this).length ? 0 : -1; + }, + execCommand: function (cmd, valign) { + var selectedTds = getSelectedArr(this); + if (selectedTds.length) { + for (var i = 0, ci; ci = selectedTds[i++];) { + ci.setAttribute('vAlign', valign); + } + } + } + }; + UE.commands['insertcaption'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + return table.getElementsByTagName('caption').length == 0 ? 1 : -1; + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var caption = this.document.createElement('caption'); + caption.innerHTML = browser.ie ? domUtils.fillChar : '
    '; + table.insertBefore(caption, table.firstChild); + var range = this.selection.getRange(); + range.setStart(caption, 0).setCursor(); + } + + } + }; + UE.commands['deletecaption'] = { + queryCommandState: function () { + var rng = this.selection.getRange(), + table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + return table.getElementsByTagName('caption').length == 0 ? -1 : 1; + } + return -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + domUtils.remove(table.getElementsByTagName('caption')[0]); + var range = this.selection.getRange(); + range.setStart(table.rows[0].cells[0], 0).setCursor(); + } + + } + }; + UE.commands['inserttitle'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var firstRow = table.rows[0]; + return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() != 'th' ? 0 : -1 + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + getUETable(table).insertRow(0, 'th'); + } + var th = table.getElementsByTagName('th')[0]; + this.selection.getRange().setStart(th, 0).setCursor(false, true); + } + }; + UE.commands['deletetitle'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var firstRow = table.rows[0]; + return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() == 'th' ? 0 : -1 + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + domUtils.remove(table.rows[0]) + } + var td = table.getElementsByTagName('td')[0]; + this.selection.getRange().setStart(td, 0).setCursor(false, true); + } + }; + UE.commands['inserttitlecol'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var lastRow = table.rows[table.rows.length-1]; + return lastRow.getElementsByTagName('th').length ? -1 : 0; + } + return -1; + }, + execCommand: function (cmd) { + var table = getTableItemsByRange(this).table; + if (table) { + getUETable(table).insertCol(0, 'th'); + } + resetTdWidth(table, this); + var th = table.getElementsByTagName('th')[0]; + this.selection.getRange().setStart(th, 0).setCursor(false, true); + } + }; + UE.commands['deletetitlecol'] = { + queryCommandState: function () { + var table = getTableItemsByRange(this).table; + if (table) { + var lastRow = table.rows[table.rows.length-1]; + return lastRow.getElementsByTagName('th').length ? 0 : -1; + } + return -1; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + if (table) { + for(var i = 0; i< table.rows.length; i++ ){ + domUtils.remove(table.rows[i].children[0]) + } + } + resetTdWidth(table, this); + var td = table.getElementsByTagName('td')[0]; + this.selection.getRange().setStart(td, 0).setCursor(false, true); + } + }; + + UE.commands["mergeright"] = { + queryCommandState: function (cmd) { + var tableItems = getTableItemsByRange(this), + table = tableItems.table, + cell = tableItems.cell; + + if (!table || !cell) return -1; + var ut = getUETable(table); + if (ut.selectedTds.length) return -1; + + var cellInfo = ut.getCellInfo(cell), + rightColIndex = cellInfo.colIndex + cellInfo.colSpan; + if (rightColIndex >= ut.colsNum) return -1; // 如果处于最右边则不能向右合并 + + var rightCellInfo = ut.indexTable[cellInfo.rowIndex][rightColIndex], + rightCell = table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex]; + if (!rightCell || cell.tagName != rightCell.tagName) return -1; // TH和TD不能相互合并 + + // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并 + return (rightCellInfo.rowIndex == cellInfo.rowIndex && rightCellInfo.rowSpan == cellInfo.rowSpan) ? 0 : -1; + }, + execCommand: function (cmd) { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.mergeRight(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["mergedown"] = { + queryCommandState: function (cmd) { + var tableItems = getTableItemsByRange(this), + table = tableItems.table, + cell = tableItems.cell; + + if (!table || !cell) return -1; + var ut = getUETable(table); + if (ut.selectedTds.length)return -1; + + var cellInfo = ut.getCellInfo(cell), + downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan; + if (downRowIndex >= ut.rowsNum) return -1; // 如果处于最下边则不能向下合并 + + var downCellInfo = ut.indexTable[downRowIndex][cellInfo.colIndex], + downCell = table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex]; + if (!downCell || cell.tagName != downCell.tagName) return -1; // TH和TD不能相互合并 + + // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并 + return (downCellInfo.colIndex == cellInfo.colIndex && downCellInfo.colSpan == cellInfo.colSpan) ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.mergeDown(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["mergecells"] = { + queryCommandState: function () { + return getUETableBySelected(this) ? 0 : -1; + }, + execCommand: function () { + var ut = getUETableBySelected(this); + if (ut && ut.selectedTds.length) { + var cell = ut.selectedTds[0]; + ut.mergeRange(); + var rng = this.selection.getRange(); + if (domUtils.isEmptyBlock(cell)) { + rng.setStart(cell, 0).collapse(true) + } else { + rng.selectNodeContents(cell) + } + rng.select(); + } + + + } + }; + UE.commands["insertrow"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && tableItems.tr !== tableItems.table.rows[0])) && + getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell, + table = tableItems.table, + ut = getUETable(table), + cellInfo = ut.getCellInfo(cell); + //ut.insertRow(!ut.selectedTds.length ? cellInfo.rowIndex:ut.cellsRange.beginRowIndex,''); + if (!ut.selectedTds.length) { + ut.insertRow(cellInfo.rowIndex, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) { + ut.insertRow(range.beginRowIndex, cell); + } + } + rng.moveToBookmark(bk).select(); + if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table); + } + }; + //后插入行 + UE.commands["insertrownext"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && (cell.tagName == "TD") && getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell, + table = tableItems.table, + ut = getUETable(table), + cellInfo = ut.getCellInfo(cell); + //ut.insertRow(!ut.selectedTds.length? cellInfo.rowIndex + cellInfo.rowSpan : ut.cellsRange.endRowIndex + 1,''); + if (!ut.selectedTds.length) { + ut.insertRow(cellInfo.rowIndex + cellInfo.rowSpan, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) { + ut.insertRow(range.endRowIndex + 1, cell); + } + } + rng.moveToBookmark(bk).select(); + if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table); + } + }; + UE.commands["deleterow"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this); + return tableItems.cell ? 0 : -1; + }, + execCommand: function () { + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + cellsRange = ut.cellsRange, + cellInfo = ut.getCellInfo(cell), + preCell = ut.getVSideCell(cell), + nextCell = ut.getVSideCell(cell, true), + rng = this.selection.getRange(); + if (utils.isEmptyObject(cellsRange)) { + ut.deleteRow(cellInfo.rowIndex); + } else { + for (var i = cellsRange.beginRowIndex; i < cellsRange.endRowIndex + 1; i++) { + ut.deleteRow(cellsRange.beginRowIndex); + } + } + var table = ut.table; + if (!table.getElementsByTagName('td').length) { + var nextSibling = table.nextSibling; + domUtils.remove(table); + if (nextSibling) { + rng.setStart(nextSibling, 0).setCursor(false, true); + } + } else { + if (cellInfo.rowSpan == 1 || cellInfo.rowSpan == cellsRange.endRowIndex - cellsRange.beginRowIndex + 1) { + if (nextCell || preCell) rng.selectNodeContents(nextCell || preCell).setCursor(false, true); + } else { + var newCell = ut.getCell(cellInfo.rowIndex, ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex); + if (newCell) rng.selectNodeContents(newCell).setCursor(false, true); + } + } + if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table); + } + }; + UE.commands["insertcol"] = { + queryCommandState: function (cmd) { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && cell !== tableItems.tr.cells[0])) && + getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1; + }, + execCommand: function (cmd) { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + if (this.queryCommandState(cmd) == -1)return; + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + cellInfo = ut.getCellInfo(cell); + + //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex:ut.cellsRange.beginColIndex); + if (!ut.selectedTds.length) { + ut.insertCol(cellInfo.colIndex, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) { + ut.insertCol(range.beginColIndex, cell); + } + } + rng.moveToBookmark(bk).select(true); + } + }; + UE.commands["insertcolnext"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + return cell && getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + cellInfo = ut.getCellInfo(cell); + //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex + cellInfo.colSpan:ut.cellsRange.endColIndex +1); + if (!ut.selectedTds.length) { + ut.insertCol(cellInfo.colIndex + cellInfo.colSpan, cell); + } else { + var range = ut.cellsRange; + for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) { + ut.insertCol(range.endColIndex + 1, cell); + } + } + rng.moveToBookmark(bk).select(); + } + }; + + UE.commands["deletecol"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this); + return tableItems.cell ? 0 : -1; + }, + execCommand: function () { + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell), + range = ut.cellsRange, + cellInfo = ut.getCellInfo(cell), + preCell = ut.getHSideCell(cell), + nextCell = ut.getHSideCell(cell, true); + if (utils.isEmptyObject(range)) { + ut.deleteCol(cellInfo.colIndex); + } else { + for (var i = range.beginColIndex; i < range.endColIndex + 1; i++) { + ut.deleteCol(range.beginColIndex); + } + } + var table = ut.table, + rng = this.selection.getRange(); + + if (!table.getElementsByTagName('td').length) { + var nextSibling = table.nextSibling; + domUtils.remove(table); + if (nextSibling) { + rng.setStart(nextSibling, 0).setCursor(false, true); + } + } else { + if (domUtils.inDoc(cell, this.document)) { + rng.setStart(cell, 0).setCursor(false, true); + } else { + if (nextCell && domUtils.inDoc(nextCell, this.document)) { + rng.selectNodeContents(nextCell).setCursor(false, true); + } else { + if (preCell && domUtils.inDoc(preCell, this.document)) { + rng.selectNodeContents(preCell).setCursor(true, true); + } + } + } + } + } + }; + UE.commands["splittocells"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + if (!cell) return -1; + var ut = getUETable(tableItems.table); + if (ut.selectedTds.length > 0) return -1; + return cell && (cell.colSpan > 1 || cell.rowSpan > 1) ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.splitToCells(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["splittorows"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + if (!cell) return -1; + var ut = getUETable(tableItems.table); + if (ut.selectedTds.length > 0) return -1; + return cell && cell.rowSpan > 1 ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.splitToRows(cell); + rng.moveToBookmark(bk).select(); + } + }; + UE.commands["splittocols"] = { + queryCommandState: function () { + var tableItems = getTableItemsByRange(this), + cell = tableItems.cell; + if (!cell) return -1; + var ut = getUETable(tableItems.table); + if (ut.selectedTds.length > 0) return -1; + return cell && cell.colSpan > 1 ? 0 : -1; + }, + execCommand: function () { + var rng = this.selection.getRange(), + bk = rng.createBookmark(true); + var cell = getTableItemsByRange(this).cell, + ut = getUETable(cell); + ut.splitToCols(cell); + rng.moveToBookmark(bk).select(); + + } + }; + + UE.commands["adaptbytext"] = + UE.commands["adaptbywindow"] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd) { + var tableItems = getTableItemsByRange(this), + table = tableItems.table; + if (table) { + if (cmd == 'adaptbywindow') { + resetTdWidth(table, this); + } else { + var cells = domUtils.getElementsByTagName(table, "td th"); + utils.each(cells, function (cell) { + cell.removeAttribute("width"); + }); + table.removeAttribute("width"); + } + } + } + }; + + //平均分配各列 + UE.commands['averagedistributecol'] = { + queryCommandState: function () { + var ut = getUETableBySelected(this); + if (!ut) return -1; + return ut.isFullRow() || ut.isFullCol() ? 0 : -1; + }, + execCommand: function (cmd) { + var me = this, + ut = getUETableBySelected(me); + + function getAverageWidth() { + var tb = ut.table, + averageWidth, sumWidth = 0, colsNum = 0, + tbAttr = getDefaultValue(me, tb); + + if (ut.isFullRow()) { + sumWidth = tb.offsetWidth; + colsNum = ut.colsNum; + } else { + var begin = ut.cellsRange.beginColIndex, + end = ut.cellsRange.endColIndex, + node; + for (var i = begin; i <= end;) { + node = ut.selectedTds[i]; + sumWidth += node.offsetWidth; + i += node.colSpan; + colsNum += 1; + } + } + averageWidth = Math.ceil(sumWidth / colsNum) - tbAttr.tdBorder * 2 - tbAttr.tdPadding * 2; + return averageWidth; + } + + function setAverageWidth(averageWidth) { + utils.each(domUtils.getElementsByTagName(ut.table, "th"), function (node) { + node.setAttribute("width", ""); + }); + var cells = ut.isFullRow() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds; + + utils.each(cells, function (node) { + if (node.colSpan == 1) { + node.setAttribute("width", averageWidth); + } + }); + } + + if (ut && ut.selectedTds.length) { + setAverageWidth(getAverageWidth()); + } + } + }; + //平均分配各行 + UE.commands['averagedistributerow'] = { + queryCommandState: function () { + var ut = getUETableBySelected(this); + if (!ut) return -1; + if (ut.selectedTds && /th/ig.test(ut.selectedTds[0].tagName)) return -1; + return ut.isFullRow() || ut.isFullCol() ? 0 : -1; + }, + execCommand: function (cmd) { + var me = this, + ut = getUETableBySelected(me); + + function getAverageHeight() { + var averageHeight, rowNum, sumHeight = 0, + tb = ut.table, + tbAttr = getDefaultValue(me, tb), + tdpadding = parseInt(domUtils.getComputedStyle(tb.getElementsByTagName('td')[0], "padding-top")); + + if (ut.isFullCol()) { + var captionArr = domUtils.getElementsByTagName(tb, "caption"), + thArr = domUtils.getElementsByTagName(tb, "th"), + captionHeight, thHeight; + + if (captionArr.length > 0) { + captionHeight = captionArr[0].offsetHeight; + } + if (thArr.length > 0) { + thHeight = thArr[0].offsetHeight; + } + + sumHeight = tb.offsetHeight - (captionHeight || 0) - (thHeight || 0); + rowNum = thArr.length == 0 ? ut.rowsNum : (ut.rowsNum - 1); + } else { + var begin = ut.cellsRange.beginRowIndex, + end = ut.cellsRange.endRowIndex, + count = 0, + trs = domUtils.getElementsByTagName(tb, "tr"); + for (var i = begin; i <= end; i++) { + sumHeight += trs[i].offsetHeight; + count += 1; + } + rowNum = count; + } + //ie8下是混杂模式 + if (browser.ie && browser.version < 9) { + averageHeight = Math.ceil(sumHeight / rowNum); + } else { + averageHeight = Math.ceil(sumHeight / rowNum) - tbAttr.tdBorder * 2 - tdpadding * 2; + } + return averageHeight; + } + + function setAverageHeight(averageHeight) { + var cells = ut.isFullCol() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds; + utils.each(cells, function (node) { + if (node.rowSpan == 1) { + node.setAttribute("height", averageHeight); + } + }); + } + + if (ut && ut.selectedTds.length) { + setAverageHeight(getAverageHeight()); + } + } + }; + + //单元格对齐方式 + UE.commands['cellalignment'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, data) { + var me = this, + ut = getUETableBySelected(me); + + if (!ut) { + var start = me.selection.getStart(), + cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true); + if (!/caption/ig.test(cell.tagName)) { + domUtils.setAttributes(cell, data); + } else { + cell.style.textAlign = data.align; + cell.style.verticalAlign = data.vAlign; + } + me.selection.getRange().setCursor(true); + } else { + utils.each(ut.selectedTds, function (cell) { + domUtils.setAttributes(cell, data); + }); + } + }, + /** + * 查询当前点击的单元格的对齐状态, 如果当前已经选择了多个单元格, 则会返回所有单元格经过统一协调过后的状态 + * @see UE.UETable.getTableCellAlignState + */ + queryCommandValue: function (cmd) { + + var activeMenuCell = getTableItemsByRange( this).cell; + + if( !activeMenuCell ) { + activeMenuCell = getSelectedArr(this)[0]; + } + + if (!activeMenuCell) { + + return null; + + } else { + + //获取同时选中的其他单元格 + var cells = UE.UETable.getUETable(activeMenuCell).selectedTds; + + !cells.length && ( cells = activeMenuCell ); + + return UE.UETable.getTableCellAlignState(cells); + + } + + } + }; + //表格对齐方式 + UE.commands['tablealignment'] = { + queryCommandState: function () { + if (browser.ie && browser.version < 8) { + return -1; + } + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, value) { + var me = this, + start = me.selection.getStart(), + table = start && domUtils.findParentByTagName(start, ["table"], true); + + if (table) { + table.setAttribute("align",value); + } + } + }; + + //表格属性 + UE.commands['edittable'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, color) { + var rng = this.selection.getRange(), + table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + var arr = domUtils.getElementsByTagName(table, "td").concat( + domUtils.getElementsByTagName(table, "th"), + domUtils.getElementsByTagName(table, "caption") + ); + utils.each(arr, function (node) { + node.style.borderColor = color; + }); + } + } + }; + //单元格属性 + UE.commands['edittd'] = { + queryCommandState: function () { + return getTableItemsByRange(this).table ? 0 : -1 + }, + execCommand: function (cmd, bkColor) { + var me = this, + ut = getUETableBySelected(me); + + if (!ut) { + var start = me.selection.getStart(), + cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true); + if (cell) { + cell.style.backgroundColor = bkColor; + } + } else { + utils.each(ut.selectedTds, function (cell) { + cell.style.backgroundColor = bkColor; + }); + } + } + }; + + UE.commands["settablebackground"] = { + queryCommandState: function () { + return getSelectedArr(this).length > 1 ? 0 : -1; + }, + execCommand: function (cmd, value) { + var cells, ut; + cells = getSelectedArr(this); + ut = getUETable(cells[0]); + ut.setBackground(cells, value); + } + }; + + UE.commands["cleartablebackground"] = { + queryCommandState: function () { + var cells = getSelectedArr(this); + if (!cells.length)return -1; + for (var i = 0, cell; cell = cells[i++];) { + if (cell.style.backgroundColor !== "") return 0; + } + return -1; + }, + execCommand: function () { + var cells = getSelectedArr(this), + ut = getUETable(cells[0]); + ut.removeBackground(cells); + } + }; + + UE.commands["interlacetable"] = UE.commands["uninterlacetable"] = { + queryCommandState: function (cmd) { + var table = getTableItemsByRange(this).table; + if (!table) return -1; + var interlaced = table.getAttribute("interlaced"); + if (cmd == "interlacetable") { + //TODO 待定 + //是否需要待定,如果设置,则命令只能单次执行成功,但反射具备toggle效果;否则可以覆盖前次命令,但反射将不存在toggle效果 + return (interlaced === "enabled") ? -1 : 0; + } else { + return (!interlaced || interlaced === "disabled") ? -1 : 0; + } + }, + execCommand: function (cmd, classList) { + var table = getTableItemsByRange(this).table; + if (cmd == "interlacetable") { + table.setAttribute("interlaced", "enabled"); + this.fireEvent("interlacetable", table, classList); + } else { + table.setAttribute("interlaced", "disabled"); + this.fireEvent("uninterlacetable", table); + } + } + }; + UE.commands["setbordervisible"] = { + queryCommandState: function (cmd) { + var table = getTableItemsByRange(this).table; + if (!table) return -1; + return 0; + }, + execCommand: function () { + var table = getTableItemsByRange(this).table; + utils.each(domUtils.getElementsByTagName(table,'td'),function(td){ + td.style.borderWidth = '1px'; + td.style.borderStyle = 'solid'; + }) + } + }; + function resetTdWidth(table, editor) { + var tds = domUtils.getElementsByTagName(table,'td th'); + utils.each(tds, function (td) { + td.removeAttribute("width"); + }); + table.setAttribute('width', getTableWidth(editor, true, getDefaultValue(editor, table))); + var tdsWidths = []; + setTimeout(function () { + utils.each(tds, function (td) { + (td.colSpan == 1) && tdsWidths.push(td.offsetWidth) + }) + utils.each(tds, function (td,i) { + (td.colSpan == 1) && td.setAttribute("width", tdsWidths[i] + ""); + }) + }, 0); + } + + function getTableWidth(editor, needIEHack, defaultValue) { + var body = editor.body; + return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0); + } + + function getSelectedArr(editor) { + var cell = getTableItemsByRange(editor).cell; + if (cell) { + var ut = getUETable(cell); + return ut.selectedTds.length ? ut.selectedTds : [cell]; + } else { + return []; + } + } +})(); + + +// plugins/table.action.js +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-10-12 + * Time: 上午10:05 + * To change this template use File | Settings | File Templates. + */ +UE.plugins['table'] = function () { + var me = this, + tabTimer = null, + //拖动计时器 + tableDragTimer = null, + //双击计时器 + tableResizeTimer = null, + //单元格最小宽度 + cellMinWidth = 5, + isInResizeBuffer = false, + //单元格边框大小 + cellBorderWidth = 5, + //鼠标偏移距离 + offsetOfTableCell = 10, + //记录在有限时间内的点击状态, 共有3个取值, 0, 1, 2。 0代表未初始化, 1代表单击了1次,2代表2次 + singleClickState = 0, + userActionStatus = null, + //双击允许的时间范围 + dblclickTime = 360, + UT = UE.UETable, + getUETable = function (tdOrTable) { + return UT.getUETable(tdOrTable); + }, + getUETableBySelected = function (editor) { + return UT.getUETableBySelected(editor); + }, + getDefaultValue = function (editor, table) { + return UT.getDefaultValue(editor, table); + }, + removeSelectedClass = function (cells) { + return UT.removeSelectedClass(cells); + }; + + function showError(e) { +// throw e; + } + me.ready(function(){ + var me = this; + var orgGetText = me.selection.getText; + me.selection.getText = function(){ + var table = getUETableBySelected(me); + if(table){ + var str = ''; + utils.each(table.selectedTds,function(td){ + str += td[browser.ie?'innerText':'textContent']; + }) + return str; + }else{ + return orgGetText.call(me.selection) + } + + } + }) + + //处理拖动及框选相关方法 + var startTd = null, //鼠标按下时的锚点td + currentTd = null, //当前鼠标经过时的td + onDrag = "", //指示当前拖动状态,其值可为"","h","v" ,分别表示未拖动状态,横向拖动状态,纵向拖动状态,用于鼠标移动过程中的判断 + onBorder = false, //检测鼠标按下时是否处在单元格边缘位置 + dragButton = null, + dragOver = false, + dragLine = null, //模拟的拖动线 + dragTd = null; //发生拖动的目标td + + var mousedown = false, + //todo 判断混乱模式 + needIEHack = true; + + me.setOpt({ + 'maxColNum':20, + 'maxRowNum':100, + 'defaultCols':5, + 'defaultRows':5, + 'tdvalign':'top', + 'cursorpath':me.options.UEDITOR_HOME_URL + "themes/default/images/cursor_", + 'tableDragable':false, + 'classList':["ue-table-interlace-color-single","ue-table-interlace-color-double"] + }); + me.getUETable = getUETable; + var commands = { + 'deletetable':1, + 'inserttable':1, + 'cellvalign':1, + 'insertcaption':1, + 'deletecaption':1, + 'inserttitle':1, + 'deletetitle':1, + "mergeright":1, + "mergedown":1, + "mergecells":1, + "insertrow":1, + "insertrownext":1, + "deleterow":1, + "insertcol":1, + "insertcolnext":1, + "deletecol":1, + "splittocells":1, + "splittorows":1, + "splittocols":1, + "adaptbytext":1, + "adaptbywindow":1, + "adaptbycustomer":1, + "insertparagraph":1, + "insertparagraphbeforetable":1, + "averagedistributecol":1, + "averagedistributerow":1 + }; + me.ready(function () { + utils.cssRule('table', + //选中的td上的样式 + '.selectTdClass{background-color:#edf5fa !important}' + + 'table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}' + + //插入的表格的默认样式 + 'table{margin-bottom:10px;border-collapse:collapse;display:table;}' + + 'td,th{padding: 5px 10px;border: 1px solid #DDD;}' + + 'caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' + + 'th{border-top:1px solid #BBB;background-color:#F7F7F7;}' + + 'table tr.firstRow th{border-top-width:2px;}' + + '.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }' + + 'td p{margin:0;padding:0;}', me.document); + + var tableCopyList, isFullCol, isFullRow; + //注册del/backspace事件 + me.addListener('keydown', function (cmd, evt) { + var me = this; + var keyCode = evt.keyCode || evt.which; + + if (keyCode == 8) { + + var ut = getUETableBySelected(me); + if (ut && ut.selectedTds.length) { + + if (ut.isFullCol()) { + me.execCommand('deletecol') + } else if (ut.isFullRow()) { + me.execCommand('deleterow') + } else { + me.fireEvent('delcells'); + } + domUtils.preventDefault(evt); + } + + var caption = domUtils.findParentByTagName(me.selection.getStart(), 'caption', true), + range = me.selection.getRange(); + if (range.collapsed && caption && isEmptyBlock(caption)) { + me.fireEvent('saveScene'); + var table = caption.parentNode; + domUtils.remove(caption); + if (table) { + range.setStart(table.rows[0].cells[0], 0).setCursor(false, true); + } + me.fireEvent('saveScene'); + } + + } + + if (keyCode == 46) { + + ut = getUETableBySelected(me); + if (ut) { + me.fireEvent('saveScene'); + for (var i = 0, ci; ci = ut.selectedTds[i++];) { + domUtils.fillNode(me.document, ci) + } + me.fireEvent('saveScene'); + domUtils.preventDefault(evt); + + } + + } + if (keyCode == 13) { + + var rng = me.selection.getRange(), + caption = domUtils.findParentByTagName(rng.startContainer, 'caption', true); + if (caption) { + var table = domUtils.findParentByTagName(caption, 'table'); + if (!rng.collapsed) { + + rng.deleteContents(); + me.fireEvent('saveScene'); + } else { + if (caption) { + rng.setStart(table.rows[0].cells[0], 0).setCursor(false, true); + } + } + domUtils.preventDefault(evt); + return; + } + if (rng.collapsed) { + var table = domUtils.findParentByTagName(rng.startContainer, 'table'); + if (table) { + var cell = table.rows[0].cells[0], + start = domUtils.findParentByTagName(me.selection.getStart(), ['td', 'th'], true), + preNode = table.previousSibling; + if (cell === start && (!preNode || preNode.nodeType == 1 && preNode.tagName == 'TABLE' ) && domUtils.isStartInblock(rng)) { + var first = domUtils.findParent(me.selection.getStart(), function(n){return domUtils.isBlockElm(n)}, true); + if(first && ( /t(h|d)/i.test(first.tagName) || first === start.firstChild )){ + me.execCommand('insertparagraphbeforetable'); + domUtils.preventDefault(evt); + } + + } + } + } + } + + if ((evt.ctrlKey || evt.metaKey) && evt.keyCode == '67') { + tableCopyList = null; + var ut = getUETableBySelected(me); + if (ut) { + var tds = ut.selectedTds; + isFullCol = ut.isFullCol(); + isFullRow = ut.isFullRow(); + tableCopyList = [ + [ut.cloneCell(tds[0],null,true)] + ]; + for (var i = 1, ci; ci = tds[i]; i++) { + if (ci.parentNode !== tds[i - 1].parentNode) { + tableCopyList.push([ut.cloneCell(ci,null,true)]); + } else { + tableCopyList[tableCopyList.length - 1].push(ut.cloneCell(ci,null,true)); + } + + } + } + } + }); + me.addListener("tablehasdeleted",function(){ + toggleDraggableState(this, false, "", null); + if (dragButton)domUtils.remove(dragButton); + }); + + me.addListener('beforepaste', function (cmd, html) { + var me = this; + var rng = me.selection.getRange(); + if (domUtils.findParentByTagName(rng.startContainer, 'caption', true)) { + var div = me.document.createElement("div"); + div.innerHTML = html.html; + //trace:3729 + html.html = div[browser.ie9below ? 'innerText' : 'textContent']; + return; + } + var table = getUETableBySelected(me); + if (tableCopyList) { + me.fireEvent('saveScene'); + var rng = me.selection.getRange(); + var td = domUtils.findParentByTagName(rng.startContainer, ['td', 'th'], true), tmpNode, preNode; + if (td) { + var ut = getUETable(td); + if (isFullRow) { + var rowIndex = ut.getCellInfo(td).rowIndex; + if (td.tagName == 'TH') { + rowIndex++; + } + for (var i = 0, ci; ci = tableCopyList[i++];) { + var tr = ut.insertRow(rowIndex++, "td"); + for (var j = 0, cj; cj = ci[j]; j++) { + var cell = tr.cells[j]; + if (!cell) { + cell = tr.insertCell(j) + } + cell.innerHTML = cj.innerHTML; + cj.getAttribute('width') && cell.setAttribute('width', cj.getAttribute('width')); + cj.getAttribute('vAlign') && cell.setAttribute('vAlign', cj.getAttribute('vAlign')); + cj.getAttribute('align') && cell.setAttribute('align', cj.getAttribute('align')); + cj.style.cssText && (cell.style.cssText = cj.style.cssText) + } + for (var j = 0, cj; cj = tr.cells[j]; j++) { + if (!ci[j]) + break; + cj.innerHTML = ci[j].innerHTML; + ci[j].getAttribute('width') && cj.setAttribute('width', ci[j].getAttribute('width')); + ci[j].getAttribute('vAlign') && cj.setAttribute('vAlign', ci[j].getAttribute('vAlign')); + ci[j].getAttribute('align') && cj.setAttribute('align', ci[j].getAttribute('align')); + ci[j].style.cssText && (cj.style.cssText = ci[j].style.cssText) + } + } + } else { + if (isFullCol) { + cellInfo = ut.getCellInfo(td); + var maxColNum = 0; + for (var j = 0, ci = tableCopyList[0], cj; cj = ci[j++];) { + maxColNum += cj.colSpan || 1; + } + me.__hasEnterExecCommand = true; + for (i = 0; i < maxColNum; i++) { + me.execCommand('insertcol'); + } + me.__hasEnterExecCommand = false; + td = ut.table.rows[0].cells[cellInfo.cellIndex]; + if (td.tagName == 'TH') { + td = ut.table.rows[1].cells[cellInfo.cellIndex]; + } + } + for (var i = 0, ci; ci = tableCopyList[i++];) { + tmpNode = td; + for (var j = 0, cj; cj = ci[j++];) { + if (td) { + td.innerHTML = cj.innerHTML; + //todo 定制处理 + cj.getAttribute('width') && td.setAttribute('width', cj.getAttribute('width')); + cj.getAttribute('vAlign') && td.setAttribute('vAlign', cj.getAttribute('vAlign')); + cj.getAttribute('align') && td.setAttribute('align', cj.getAttribute('align')); + cj.style.cssText && (td.style.cssText = cj.style.cssText); + preNode = td; + td = td.nextSibling; + } else { + var cloneTd = cj.cloneNode(true); + domUtils.removeAttributes(cloneTd, ['class', 'rowSpan', 'colSpan']); + + preNode.parentNode.appendChild(cloneTd) + } + } + td = ut.getNextCell(tmpNode, true, true); + if (!tableCopyList[i]) + break; + if (!td) { + var cellInfo = ut.getCellInfo(tmpNode); + ut.table.insertRow(ut.table.rows.length); + ut.update(); + td = ut.getVSideCell(tmpNode, true); + } + } + } + ut.update(); + } else { + table = me.document.createElement('table'); + for (var i = 0, ci; ci = tableCopyList[i++];) { + var tr = table.insertRow(table.rows.length); + for (var j = 0, cj; cj = ci[j++];) { + cloneTd = UT.cloneCell(cj,null,true); + domUtils.removeAttributes(cloneTd, ['class']); + tr.appendChild(cloneTd) + } + if (j == 2 && cloneTd.rowSpan > 1) { + cloneTd.rowSpan = 1; + } + } + + var defaultValue = getDefaultValue(me), + width = me.body.offsetWidth - + (needIEHack ? parseInt(domUtils.getComputedStyle(me.body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (me.options.offsetWidth || 0); + me.execCommand('insertHTML', '' + table.innerHTML.replace(/>\s*<').replace(/\bth\b/gi, "td") + '
    ') + } + me.fireEvent('contentchange'); + me.fireEvent('saveScene'); + html.html = ''; + return true; + } else { + var div = me.document.createElement("div"), tables; + div.innerHTML = html.html; + tables = div.getElementsByTagName("table"); + if (domUtils.findParentByTagName(me.selection.getStart(), 'table')) { + utils.each(tables, function (t) { + domUtils.remove(t) + }); + if (domUtils.findParentByTagName(me.selection.getStart(), 'caption', true)) { + div.innerHTML = div[browser.ie ? 'innerText' : 'textContent']; + } + } else { + utils.each(tables, function (table) { + removeStyleSize(table, true); + domUtils.removeAttributes(table, ['style', 'border']); + utils.each(domUtils.getElementsByTagName(table, "td"), function (td) { + if (isEmptyBlock(td)) { + domUtils.fillNode(me.document, td); + } + removeStyleSize(td, true); +// domUtils.removeAttributes(td, ['style']) + }); + }); + } + html.html = div.innerHTML; + } + }); + + me.addListener('afterpaste', function () { + utils.each(domUtils.getElementsByTagName(me.body, "table"), function (table) { + if (table.offsetWidth > me.body.offsetWidth) { + var defaultValue = getDefaultValue(me, table); + table.style.width = me.body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(me.body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (me.options.offsetWidth || 0) + 'px' + } + }) + }); + me.addListener('blur', function () { + tableCopyList = null; + }); + var timer; + me.addListener('keydown', function () { + clearTimeout(timer); + timer = setTimeout(function () { + var rng = me.selection.getRange(), + cell = domUtils.findParentByTagName(rng.startContainer, ['th', 'td'], true); + if (cell) { + var table = cell.parentNode.parentNode.parentNode; + if (table.offsetWidth > table.getAttribute("width")) { + cell.style.wordBreak = "break-all"; + } + } + + }, 100); + }); + me.addListener("selectionchange", function () { + toggleDraggableState(me, false, "", null); + }); + + + //内容变化时触发索引更新 + //todo 可否考虑标记检测,如果不涉及表格的变化就不进行索引重建和更新 + me.addListener("contentchange", function () { + var me = this; + //尽可能排除一些不需要更新的状况 + hideDragLine(me); + if (getUETableBySelected(me))return; + var rng = me.selection.getRange(); + var start = rng.startContainer; + start = domUtils.findParentByTagName(start, ['td', 'th'], true); + utils.each(domUtils.getElementsByTagName(me.document, 'table'), function (table) { + if (me.fireEvent("excludetable", table) === true) return; + table.ueTable = new UT(table); + //trace:3742 +// utils.each(domUtils.getElementsByTagName(me.document, 'td'), function (td) { +// +// if (domUtils.isEmptyBlock(td) && td !== start) { +// domUtils.fillNode(me.document, td); +// if (browser.ie && browser.version == 6) { +// td.innerHTML = ' ' +// } +// } +// }); +// utils.each(domUtils.getElementsByTagName(me.document, 'th'), function (th) { +// if (domUtils.isEmptyBlock(th) && th !== start) { +// domUtils.fillNode(me.document, th); +// if (browser.ie && browser.version == 6) { +// th.innerHTML = ' ' +// } +// } +// }); + table.onmouseover = function () { + me.fireEvent('tablemouseover', table); + }; + table.onmousemove = function () { + me.fireEvent('tablemousemove', table); + me.options.tableDragable && toggleDragButton(true, this, me); + utils.defer(function(){ + me.fireEvent('contentchange',50) + },true) + }; + table.onmouseout = function () { + me.fireEvent('tablemouseout', table); + toggleDraggableState(me, false, "", null); + hideDragLine(me); + }; + table.onclick = function (evt) { + evt = me.window.event || evt; + var target = getParentTdOrTh(evt.target || evt.srcElement); + if (!target)return; + var ut = getUETable(target), + table = ut.table, + cellInfo = ut.getCellInfo(target), + cellsRange, + rng = me.selection.getRange(); +// if ("topLeft" == inPosition(table, mouseCoords(evt))) { +// cellsRange = ut.getCellsRange(ut.table.rows[0].cells[0], ut.getLastCell()); +// ut.setSelected(cellsRange); +// return; +// } +// if ("bottomRight" == inPosition(table, mouseCoords(evt))) { +// +// return; +// } + if (inTableSide(table, target, evt, true)) { + var endTdCol = ut.getCell(ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].rowIndex, ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].cellIndex); + if (evt.shiftKey && ut.selectedTds.length) { + if (ut.selectedTds[0] !== endTdCol) { + cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdCol); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdCol).select(); + } + } else { + if (target !== endTdCol) { + cellsRange = ut.getCellsRange(target, endTdCol); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdCol).select(); + } + } + return; + } + if (inTableSide(table, target, evt)) { + var endTdRow = ut.getCell(ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].rowIndex, ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].cellIndex); + if (evt.shiftKey && ut.selectedTds.length) { + if (ut.selectedTds[0] !== endTdRow) { + cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdRow); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdRow).select(); + } + } else { + if (target !== endTdRow) { + cellsRange = ut.getCellsRange(target, endTdRow); + ut.setSelected(cellsRange); + } else { + rng && rng.selectNodeContents(endTdRow).select(); + } + } + } + }; + }); + + switchBorderColor(me, true); + }); + + domUtils.on(me.document, "mousemove", mouseMoveEvent); + + domUtils.on(me.document, "mouseout", function (evt) { + var target = evt.target || evt.srcElement; + if (target.tagName == "TABLE") { + toggleDraggableState(me, false, "", null); + } + }); + /** + * 表格隔行变色 + */ + me.addListener("interlacetable",function(type,table,classList){ + if(!table) return; + var me = this, + rows = table.rows, + len = rows.length, + getClass = function(list,index,repeat){ + return list[index] ? list[index] : repeat ? list[index % list.length]: ""; + }; + for(var i = 0;i 1 ? currentRowIndex : ua.getCellInfo(cell).rowIndex; + var nextCell = ua.getTabNextCell(cell, currentRowIndex); + if (nextCell) { + if (isEmptyBlock(nextCell)) { + range.setStart(nextCell, 0).setCursor(false, true) + } else { + range.selectNodeContents(nextCell).select() + } + } else { + me.fireEvent('saveScene'); + me.__hasEnterExecCommand = true; + this.execCommand('insertrownext'); + me.__hasEnterExecCommand = false; + range = this.selection.getRange(); + range.setStart(table.rows[table.rows.length - 1].cells[0], 0).setCursor(); + me.fireEvent('saveScene'); + } + } + return true; + } + + }); + browser.ie && me.addListener('selectionchange', function () { + toggleDraggableState(this, false, "", null); + }); + me.addListener("keydown", function (type, evt) { + var me = this; + //处理在表格的最后一个输入tab产生新的表格 + var keyCode = evt.keyCode || evt.which; + if (keyCode == 8 || keyCode == 46) { + return; + } + var notCtrlKey = !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey; + notCtrlKey && removeSelectedClass(domUtils.getElementsByTagName(me.body, "td")); + var ut = getUETableBySelected(me); + if (!ut) return; + notCtrlKey && ut.clearSelected(); + }); + + me.addListener("beforegetcontent", function () { + switchBorderColor(this, false); + browser.ie && utils.each(this.document.getElementsByTagName('caption'), function (ci) { + if (domUtils.isEmptyNode(ci)) { + ci.innerHTML = ' ' + } + }); + }); + me.addListener("aftergetcontent", function () { + switchBorderColor(this, true); + }); + me.addListener("getAllHtml", function () { + removeSelectedClass(me.document.getElementsByTagName("td")); + }); + //修正全屏状态下插入的表格宽度在非全屏状态下撑开编辑器的情况 + me.addListener("fullscreenchanged", function (type, fullscreen) { + if (!fullscreen) { + var ratio = this.body.offsetWidth / document.body.offsetWidth, + tables = domUtils.getElementsByTagName(this.body, "table"); + utils.each(tables, function (table) { + if (table.offsetWidth < me.body.offsetWidth) return false; + var tds = domUtils.getElementsByTagName(table, "td"), + backWidths = []; + utils.each(tds, function (td) { + backWidths.push(td.offsetWidth); + }); + for (var i = 0, td; td = tds[i]; i++) { + td.setAttribute("width", Math.floor(backWidths[i] * ratio)); + } + table.setAttribute("width", Math.floor(getTableWidth(me, needIEHack, getDefaultValue(me)))) + }); + } + }); + + //重写execCommand命令,用于处理框选时的处理 + var oldExecCommand = me.execCommand; + me.execCommand = function (cmd, datatat) { + + var me = this, + args = arguments; + + cmd = cmd.toLowerCase(); + var ut = getUETableBySelected(me), tds, + range = new dom.Range(me.document), + cmdFun = me.commands[cmd] || UE.commands[cmd], + result; + if (!cmdFun) return; + if (ut && !commands[cmd] && !cmdFun.notNeedUndo && !me.__hasEnterExecCommand) { + me.__hasEnterExecCommand = true; + me.fireEvent("beforeexeccommand", cmd); + tds = ut.selectedTds; + var lastState = -2, lastValue = -2, value, state; + for (var i = 0, td; td = tds[i]; i++) { + if (isEmptyBlock(td)) { + range.setStart(td, 0).setCursor(false, true) + } else { + range.selectNode(td).select(true); + } + state = me.queryCommandState(cmd); + value = me.queryCommandValue(cmd); + if (state != -1) { + if (lastState !== state || lastValue !== value) { + me._ignoreContentChange = true; + result = oldExecCommand.apply(me, arguments); + me._ignoreContentChange = false; + + } + lastState = me.queryCommandState(cmd); + lastValue = me.queryCommandValue(cmd); + if (domUtils.isEmptyBlock(td)) { + domUtils.fillNode(me.document, td) + } + } + } + range.setStart(tds[0], 0).shrinkBoundary(true).setCursor(false, true); + me.fireEvent('contentchange'); + me.fireEvent("afterexeccommand", cmd); + me.__hasEnterExecCommand = false; + me._selectionChange(); + } else { + result = oldExecCommand.apply(me, arguments); + } + return result; + }; + + + }); + /** + * 删除obj的宽高style,改成属性宽高 + * @param obj + * @param replaceToProperty + */ + function removeStyleSize(obj, replaceToProperty) { + removeStyle(obj, "width", true); + removeStyle(obj, "height", true); + } + + function removeStyle(obj, styleName, replaceToProperty) { + if (obj.style[styleName]) { + replaceToProperty && obj.setAttribute(styleName, parseInt(obj.style[styleName], 10)); + obj.style[styleName] = ""; + } + } + + function getParentTdOrTh(ele) { + if (ele.tagName == "TD" || ele.tagName == "TH") return ele; + var td; + if (td = domUtils.findParentByTagName(ele, "td", true) || domUtils.findParentByTagName(ele, "th", true)) return td; + return null; + } + + function isEmptyBlock(node) { + var reg = new RegExp(domUtils.fillChar, 'g'); + if (node[browser.ie ? 'innerText' : 'textContent'].replace(/^\s*$/, '').replace(reg, '').length > 0) { + return 0; + } + for (var n in dtd.$isNotEmpty) { + if (node.getElementsByTagName(n).length) { + return 0; + } + } + return 1; + } + + + function mouseCoords(evt) { + if (evt.pageX || evt.pageY) { + return { x:evt.pageX, y:evt.pageY }; + } + return { + x:evt.clientX + me.document.body.scrollLeft - me.document.body.clientLeft, + y:evt.clientY + me.document.body.scrollTop - me.document.body.clientTop + }; + } + + function mouseMoveEvent(evt) { + + if( isEditorDisabled() ) { + return; + } + + try { + + //普通状态下鼠标移动 + var target = getParentTdOrTh(evt.target || evt.srcElement), + pos; + + //区分用户的行为是拖动还是双击 + if( isInResizeBuffer ) { + + me.body.style.webkitUserSelect = 'none'; + + if( Math.abs( userActionStatus.x - evt.clientX ) > offsetOfTableCell || Math.abs( userActionStatus.y - evt.clientY ) > offsetOfTableCell ) { + clearTableDragTimer(); + isInResizeBuffer = false; + singleClickState = 0; + //drag action + tableBorderDrag(evt); + } + } + + //修改单元格大小时的鼠标移动 + if (onDrag && dragTd) { + singleClickState = 0; + me.body.style.webkitUserSelect = 'none'; + me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + pos = mouseCoords(evt); + toggleDraggableState(me, true, onDrag, pos, target); + if (onDrag == "h") { + dragLine.style.left = getPermissionX(dragTd, evt) + "px"; + } else if (onDrag == "v") { + dragLine.style.top = getPermissionY(dragTd, evt) + "px"; + } + return; + } + //当鼠标处于table上时,修改移动过程中的光标状态 + if (target) { + //针对使用table作为容器的组件不触发拖拽效果 + if (me.fireEvent('excludetable', target) === true) + return; + pos = mouseCoords(evt); + var state = getRelation(target, pos), + table = domUtils.findParentByTagName(target, "table", true); + + if (inTableSide(table, target, evt, true)) { + if (me.fireEvent("excludetable", table) === true) return; + me.body.style.cursor = "url(" + me.options.cursorpath + "h.png),pointer"; + } else if (inTableSide(table, target, evt)) { + if (me.fireEvent("excludetable", table) === true) return; + me.body.style.cursor = "url(" + me.options.cursorpath + "v.png),pointer"; + } else { + me.body.style.cursor = "text"; + var curCell = target; + if (/\d/.test(state)) { + state = state.replace(/\d/, ''); + target = getUETable(target).getPreviewCell(target, state == "v"); + } + //位于第一行的顶部或者第一列的左边时不可拖动 + toggleDraggableState(me, target ? !!state : false, target ? state : '', pos, target); + + } + } else { + toggleDragButton(false, table, me); + } + + } catch (e) { + showError(e); + } + } + + var dragButtonTimer; + + function toggleDragButton(show, table, editor) { + if (!show) { + if (dragOver)return; + dragButtonTimer = setTimeout(function () { + !dragOver && dragButton && dragButton.parentNode && dragButton.parentNode.removeChild(dragButton); + }, 2000); + } else { + createDragButton(table, editor); + } + } + + function createDragButton(table, editor) { + var pos = domUtils.getXY(table), + doc = table.ownerDocument; + if (dragButton && dragButton.parentNode)return dragButton; + dragButton = doc.createElement("div"); + dragButton.contentEditable = false; + dragButton.innerHTML = ""; + dragButton.style.cssText = "width:15px;height:15px;background-image:url(" + editor.options.UEDITOR_HOME_URL + "dialogs/table/dragicon.png);position: absolute;cursor:move;top:" + (pos.y - 15) + "px;left:" + (pos.x) + "px;"; + domUtils.unSelectable(dragButton); + dragButton.onmouseover = function (evt) { + dragOver = true; + }; + dragButton.onmouseout = function (evt) { + dragOver = false; + }; + domUtils.on(dragButton, 'click', function (type, evt) { + doClick(evt, this); + }); + domUtils.on(dragButton, 'dblclick', function (type, evt) { + doDblClick(evt); + }); + domUtils.on(dragButton, 'dragstart', function (type, evt) { + domUtils.preventDefault(evt); + }); + var timer; + + function doClick(evt, button) { + // 部分浏览器下需要清理 + clearTimeout(timer); + timer = setTimeout(function () { + editor.fireEvent("tableClicked", table, button); + }, 300); + } + + function doDblClick(evt) { + clearTimeout(timer); + var ut = getUETable(table), + start = table.rows[0].cells[0], + end = ut.getLastCell(), + range = ut.getCellsRange(start, end); + editor.selection.getRange().setStart(start, 0).setCursor(false, true); + ut.setSelected(range); + } + + doc.body.appendChild(dragButton); + } + + +// function inPosition(table, pos) { +// var tablePos = domUtils.getXY(table), +// width = table.offsetWidth, +// height = table.offsetHeight; +// if (pos.x - tablePos.x < 5 && pos.y - tablePos.y < 5) { +// return "topLeft"; +// } else if (tablePos.x + width - pos.x < 5 && tablePos.y + height - pos.y < 5) { +// return "bottomRight"; +// } +// } + + function inTableSide(table, cell, evt, top) { + var pos = mouseCoords(evt), + state = getRelation(cell, pos); + + if (top) { + var caption = table.getElementsByTagName("caption")[0], + capHeight = caption ? caption.offsetHeight : 0; + return (state == "v1") && ((pos.y - domUtils.getXY(table).y - capHeight) < 8); + } else { + return (state == "h1") && ((pos.x - domUtils.getXY(table).x) < 8); + } + } + + /** + * 获取拖动时允许的X轴坐标 + * @param dragTd + * @param evt + */ + function getPermissionX(dragTd, evt) { + var ut = getUETable(dragTd); + if (ut) { + var preTd = ut.getSameEndPosCells(dragTd, "x")[0], + nextTd = ut.getSameStartPosXCells(dragTd)[0], + mouseX = mouseCoords(evt).x, + left = (preTd ? domUtils.getXY(preTd).x : domUtils.getXY(ut.table).x) + 20 , + right = nextTd ? domUtils.getXY(nextTd).x + nextTd.offsetWidth - 20 : (me.body.offsetWidth + 5 || parseInt(domUtils.getComputedStyle(me.body, "width"), 10)); + + left += cellMinWidth; + right -= cellMinWidth; + + return mouseX < left ? left : mouseX > right ? right : mouseX; + } + } + + /** + * 获取拖动时允许的Y轴坐标 + */ + function getPermissionY(dragTd, evt) { + try { + var top = domUtils.getXY(dragTd).y, + mousePosY = mouseCoords(evt).y; + return mousePosY < top ? top : mousePosY; + } catch (e) { + showError(e); + } + } + + /** + * 移动状态切换 + */ + function toggleDraggableState(editor, draggable, dir, mousePos, cell) { + try { + editor.body.style.cursor = dir == "h" ? "col-resize" : dir == "v" ? "row-resize" : "text"; + if (browser.ie) { + if (dir && !mousedown && !getUETableBySelected(editor)) { + getDragLine(editor, editor.document); + showDragLineAt(dir, cell); + } else { + hideDragLine(editor) + } + } + onBorder = draggable; + } catch (e) { + showError(e); + } + } + + /** + * 获取与UETable相关的resize line + * @param uetable UETable对象 + */ + function getResizeLineByUETable() { + + var lineId = '_UETableResizeLine', + line = this.document.getElementById( lineId ); + + if( !line ) { + line = this.document.createElement("div"); + line.id = lineId; + line.contnetEditable = false; + line.setAttribute("unselectable", "on"); + + var styles = { + width: 2*cellBorderWidth + 1 + 'px', + position: 'absolute', + 'z-index': 100000, + cursor: 'col-resize', + background: 'red', + display: 'none' + }; + + //切换状态 + line.onmouseout = function(){ + this.style.display = 'none'; + }; + + utils.extend( line.style, styles ); + + this.document.body.appendChild( line ); + + } + + return line; + + } + + /** + * 更新resize-line + */ + function updateResizeLine( cell, uetable ) { + + var line = getResizeLineByUETable.call( this ), + table = uetable.table, + styles = { + top: domUtils.getXY( table ).y + 'px', + left: domUtils.getXY( cell).x + cell.offsetWidth - cellBorderWidth + 'px', + display: 'block', + height: table.offsetHeight + 'px' + }; + + utils.extend( line.style, styles ); + + } + + /** + * 显示resize-line + */ + function showResizeLine( cell ) { + + var uetable = getUETable( cell ); + + updateResizeLine.call( this, cell, uetable ); + + } + + /** + * 获取鼠标与当前单元格的相对位置 + * @param ele + * @param mousePos + */ + function getRelation(ele, mousePos) { + var elePos = domUtils.getXY(ele); + + if( !elePos ) { + return ''; + } + + if (elePos.x + ele.offsetWidth - mousePos.x < cellBorderWidth) { + return "h"; + } + if (mousePos.x - elePos.x < cellBorderWidth) { + return 'h1' + } + if (elePos.y + ele.offsetHeight - mousePos.y < cellBorderWidth) { + return "v"; + } + if (mousePos.y - elePos.y < cellBorderWidth) { + return 'v1' + } + return ''; + } + + function mouseDownEvent(type, evt) { + + if( isEditorDisabled() ) { + return ; + } + + userActionStatus = { + x: evt.clientX, + y: evt.clientY + }; + + //右键菜单单独处理 + if (evt.button == 2) { + var ut = getUETableBySelected(me), + flag = false; + + if (ut) { + var td = getTargetTd(me, evt); + utils.each(ut.selectedTds, function (ti) { + if (ti === td) { + flag = true; + } + }); + if (!flag) { + removeSelectedClass(domUtils.getElementsByTagName(me.body, "th td")); + ut.clearSelected() + } else { + td = ut.selectedTds[0]; + setTimeout(function () { + me.selection.getRange().setStart(td, 0).setCursor(false, true); + }, 0); + + } + } + } else { + tableClickHander( evt ); + } + + } + + //清除表格的计时器 + function clearTableTimer() { + tabTimer && clearTimeout( tabTimer ); + tabTimer = null; + } + + //双击收缩 + function tableDbclickHandler(evt) { + singleClickState = 0; + evt = evt || me.window.event; + var target = getParentTdOrTh(evt.target || evt.srcElement); + if (target) { + var h; + if (h = getRelation(target, mouseCoords(evt))) { + + hideDragLine( me ); + + if (h == 'h1') { + h = 'h'; + if (inTableSide(domUtils.findParentByTagName(target, "table"), target, evt)) { + me.execCommand('adaptbywindow'); + } else { + target = getUETable(target).getPreviewCell(target); + if (target) { + var rng = me.selection.getRange(); + rng.selectNodeContents(target).setCursor(true, true) + } + } + } + if (h == 'h') { + var ut = getUETable(target), + table = ut.table, + cells = getCellsByMoveBorder( target, table, true ); + + cells = extractArray( cells, 'left' ); + + ut.width = ut.offsetWidth; + + var oldWidth = [], + newWidth = []; + + utils.each( cells, function( cell ){ + + oldWidth.push( cell.offsetWidth ); + + } ); + + utils.each( cells, function( cell ){ + + cell.removeAttribute("width"); + + } ); + + window.setTimeout( function(){ + + //是否允许改变 + var changeable = true; + + utils.each( cells, function( cell, index ){ + + var width = cell.offsetWidth; + + if( width > oldWidth[index] ) { + changeable = false; + return false; + } + + newWidth.push( width ); + + } ); + + var change = changeable ? newWidth : oldWidth; + + utils.each( cells, function( cell, index ){ + + cell.width = change[index] - getTabcellSpace(); + + } ); + + + }, 0 ); + +// minWidth -= cellMinWidth; +// +// table.removeAttribute("width"); +// utils.each(cells, function (cell) { +// cell.style.width = ""; +// cell.width -= minWidth; +// }); + + } + } + } + } + + function tableClickHander( evt ) { + + removeSelectedClass(domUtils.getElementsByTagName(me.body, "td th")); + //trace:3113 + //选中单元格,点击table外部,不会清掉table上挂的ueTable,会引起getUETableBySelected方法返回值 + utils.each(me.document.getElementsByTagName('table'), function (t) { + t.ueTable = null; + }); + startTd = getTargetTd(me, evt); + if( !startTd ) return; + var table = domUtils.findParentByTagName(startTd, "table", true); + ut = getUETable(table); + ut && ut.clearSelected(); + + //判断当前鼠标状态 + if (!onBorder) { + me.document.body.style.webkitUserSelect = ''; + mousedown = true; + me.addListener('mouseover', mouseOverEvent); + } else { + //边框上的动作处理 + borderActionHandler( evt ); + } + + + } + + //处理表格边框上的动作, 这里做延时处理,避免两种动作互相影响 + function borderActionHandler( evt ) { + + if ( browser.ie ) { + evt = reconstruct(evt ); + } + + clearTableDragTimer(); + + //是否正在等待resize的缓冲中 + isInResizeBuffer = true; + + tableDragTimer = setTimeout(function(){ + tableBorderDrag( evt ); + }, dblclickTime); + + } + + function extractArray( originArr, key ) { + + var result = [], + tmp = null; + + for( var i = 0, len = originArr.length; i 0 && singleClickState--; + }, dblclickTime ); + + if( singleClickState === 2 ) { + + singleClickState = 0; + tableDbclickHandler(evt); + return; + + } + + } + + if (evt.button == 2)return; + var me = this; + //清除表格上原生跨选问题 + var range = me.selection.getRange(), + start = domUtils.findParentByTagName(range.startContainer, 'table', true), + end = domUtils.findParentByTagName(range.endContainer, 'table', true); + + if (start || end) { + if (start === end) { + start = domUtils.findParentByTagName(range.startContainer, ['td', 'th', 'caption'], true); + end = domUtils.findParentByTagName(range.endContainer, ['td', 'th', 'caption'], true); + if (start !== end) { + me.selection.clearRange() + } + } else { + me.selection.clearRange() + } + } + mousedown = false; + me.document.body.style.webkitUserSelect = ''; + //拖拽状态下的mouseUP + if ( onDrag && dragTd ) { + + me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + + singleClickState = 0; + dragLine = me.document.getElementById('ue_tableDragLine'); + + // trace 3973 + if (dragLine) { + var dragTdPos = domUtils.getXY(dragTd), + dragLinePos = domUtils.getXY(dragLine); + + switch (onDrag) { + case "h": + changeColWidth(dragTd, dragLinePos.x - dragTdPos.x); + break; + case "v": + changeRowHeight(dragTd, dragLinePos.y - dragTdPos.y - dragTd.offsetHeight); + break; + default: + } + onDrag = ""; + dragTd = null; + + hideDragLine(me); + me.fireEvent('saveScene'); + return; + } + } + //正常状态下的mouseup + if (!startTd) { + var target = domUtils.findParentByTagName(evt.target || evt.srcElement, "td", true); + if (!target) target = domUtils.findParentByTagName(evt.target || evt.srcElement, "th", true); + if (target && (target.tagName == "TD" || target.tagName == "TH")) { + if (me.fireEvent("excludetable", target) === true) return; + range = new dom.Range(me.document); + range.setStart(target, 0).setCursor(false, true); + } + } else { + var ut = getUETable(startTd), + cell = ut ? ut.selectedTds[0] : null; + if (cell) { + range = new dom.Range(me.document); + if (domUtils.isEmptyBlock(cell)) { + range.setStart(cell, 0).setCursor(false, true); + } else { + range.selectNodeContents(cell).shrinkBoundary().setCursor(false, true); + } + } else { + range = me.selection.getRange().shrinkBoundary(); + if (!range.collapsed) { + var start = domUtils.findParentByTagName(range.startContainer, ['td', 'th'], true), + end = domUtils.findParentByTagName(range.endContainer, ['td', 'th'], true); + //在table里边的不能清除 + if (start && !end || !start && end || start && end && start !== end) { + range.setCursor(false, true); + } + } + } + startTd = null; + me.removeListener('mouseover', mouseOverEvent); + } + me._selectionChange(250, evt); + } + + function mouseOverEvent(type, evt) { + + if( isEditorDisabled() ) { + return; + } + + var me = this, + tar = evt.target || evt.srcElement; + currentTd = domUtils.findParentByTagName(tar, "td", true) || domUtils.findParentByTagName(tar, "th", true); + //需要判断两个TD是否位于同一个表格内 + if (startTd && currentTd && + ((startTd.tagName == "TD" && currentTd.tagName == "TD") || (startTd.tagName == "TH" && currentTd.tagName == "TH")) && + domUtils.findParentByTagName(startTd, 'table') == domUtils.findParentByTagName(currentTd, 'table')) { + var ut = getUETable(currentTd); + if (startTd != currentTd) { + me.document.body.style.webkitUserSelect = 'none'; + me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges'](); + var range = ut.getCellsRange(startTd, currentTd); + ut.setSelected(range); + } else { + me.document.body.style.webkitUserSelect = ''; + ut.clearSelected(); + } + + } + evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false); + } + + function setCellHeight(cell, height, backHeight) { + var lineHight = parseInt(domUtils.getComputedStyle(cell, "line-height"), 10), + tmpHeight = backHeight + height; + height = tmpHeight < lineHight ? lineHight : tmpHeight; + if (cell.style.height) cell.style.height = ""; + cell.rowSpan == 1 ? cell.setAttribute("height", height) : (cell.removeAttribute && cell.removeAttribute("height")); + } + + function getWidth(cell) { + if (!cell)return 0; + return parseInt(domUtils.getComputedStyle(cell, "width"), 10); + } + + function changeColWidth(cell, changeValue) { + + var ut = getUETable(cell); + if (ut) { + + //根据当前移动的边框获取相关的单元格 + var table = ut.table, + cells = getCellsByMoveBorder( cell, table ); + + table.style.width = ""; + table.removeAttribute("width"); + + //修正改变量 + changeValue = correctChangeValue( changeValue, cell, cells ); + + if (cell.nextSibling) { + + var i=0; + + utils.each( cells, function( cellGroup ){ + + cellGroup.left.width = (+cellGroup.left.width)+changeValue; + cellGroup.right && ( cellGroup.right.width = (+cellGroup.right.width)-changeValue ); + + } ); + + } else { + + utils.each( cells, function( cellGroup ){ + cellGroup.left.width -= -changeValue; + } ); + + } + } + + } + + function isEditorDisabled() { + return me.body.contentEditable === "false"; + } + + function changeRowHeight(td, changeValue) { + if (Math.abs(changeValue) < 10) return; + var ut = getUETable(td); + if (ut) { + var cells = ut.getSameEndPosCells(td, "y"), + //备份需要连带变化的td的原始高度,否则后期无法获取正确的值 + backHeight = cells[0] ? cells[0].offsetHeight : 0; + for (var i = 0, cell; cell = cells[i++];) { + setCellHeight(cell, changeValue, backHeight); + } + } + + } + + /** + * 获取调整单元格大小的相关单元格 + * @isContainMergeCell 返回的结果中是否包含发生合并后的单元格 + */ + function getCellsByMoveBorder( cell, table, isContainMergeCell ) { + + if( !table ) { + table = domUtils.findParentByTagName( cell, 'table' ); + } + + if( !table ) { + return null; + } + + //获取到该单元格所在行的序列号 + var index = domUtils.getNodeIndex( cell ), + temp = cell, + rows = table.rows, + colIndex = 0; + + while( temp ) { + //获取到当前单元格在未发生单元格合并时的序列 + if( temp.nodeType === 1 ) { + colIndex += (temp.colSpan || 1); + } + temp = temp.previousSibling; + } + + temp = null; + + //记录想关的单元格 + var borderCells = []; + + utils.each(rows, function( tabRow ){ + + var cells = tabRow.cells, + currIndex = 0; + + utils.each( cells, function( tabCell ){ + + currIndex += (tabCell.colSpan || 1); + + if( currIndex === colIndex ) { + + borderCells.push({ + left: tabCell, + right: tabCell.nextSibling || null + }); + + return false; + + } else if( currIndex > colIndex ) { + + if( isContainMergeCell ) { + borderCells.push({ + left: tabCell + }); + } + + return false; + } + + + } ); + + }); + + return borderCells; + + } + + + /** + * 通过给定的单元格集合获取最小的单元格width + */ + function getMinWidthByTableCells( cells ) { + + var minWidth = Number.MAX_VALUE; + + for( var i = 0, curCell; curCell = cells[ i ] ; i++ ) { + + minWidth = Math.min( minWidth, curCell.width || getTableCellWidth( curCell ) ); + + } + + return minWidth; + + } + + function correctChangeValue( changeValue, relatedCell, cells ) { + + //为单元格的paading预留空间 + changeValue -= getTabcellSpace(); + + if( changeValue < 0 ) { + return 0; + } + + changeValue -= getTableCellWidth( relatedCell ); + + //确定方向 + var direction = changeValue < 0 ? 'left':'right'; + + changeValue = Math.abs(changeValue); + + //只关心非最后一个单元格就可以 + utils.each( cells, function( cellGroup ){ + + var curCell = cellGroup[direction]; + + //为单元格保留最小空间 + if( curCell ) { + changeValue = Math.min( changeValue, getTableCellWidth( curCell )-cellMinWidth ); + } + + + } ); + + + //修正越界 + changeValue = changeValue < 0 ? 0 : changeValue; + + return direction === 'left' ? -changeValue : changeValue; + + } + + function getTableCellWidth( cell ) { + + var width = 0, + //偏移纠正量 + offset = 0, + width = cell.offsetWidth - getTabcellSpace(); + + //最后一个节点纠正一下 + if( !cell.nextSibling ) { + + width -= getTableCellOffset( cell ); + + } + + width = width < 0 ? 0 : width; + + try { + cell.width = width; + } catch(e) { + } + + return width; + + } + + /** + * 获取单元格所在表格的最末单元格的偏移量 + */ + function getTableCellOffset( cell ) { + + tab = domUtils.findParentByTagName( cell, "table", false); + + if( tab.offsetVal === undefined ) { + + var prev = cell.previousSibling; + + if( prev ) { + + //最后一个单元格和前一个单元格的width diff结果 如果恰好为一个border width, 则条件成立 + tab.offsetVal = cell.offsetWidth - prev.offsetWidth === UT.borderWidth ? UT.borderWidth : 0; + + } else { + tab.offsetVal = 0; + } + + } + + return tab.offsetVal; + + } + + function getTabcellSpace() { + + if( UT.tabcellSpace === undefined ) { + + var cell = null, + tab = me.document.createElement("table"), + tbody = me.document.createElement("tbody"), + trow = me.document.createElement("tr"), + tabcell = me.document.createElement("td"), + mirror = null; + + tabcell.style.cssText = 'border: 0;'; + tabcell.width = 1; + + trow.appendChild( tabcell ); + trow.appendChild( mirror = tabcell.cloneNode( false ) ); + + tbody.appendChild( trow ); + + tab.appendChild( tbody ); + + tab.style.cssText = "visibility: hidden;"; + + me.body.appendChild( tab ); + + UT.paddingSpace = tabcell.offsetWidth - 1; + + var tmpTabWidth = tab.offsetWidth; + + tabcell.style.cssText = ''; + mirror.style.cssText = ''; + + UT.borderWidth = ( tab.offsetWidth - tmpTabWidth ) / 3; + + UT.tabcellSpace = UT.paddingSpace + UT.borderWidth; + + me.body.removeChild( tab ); + + } + + getTabcellSpace = function(){ return UT.tabcellSpace; }; + + return UT.tabcellSpace; + + } + + function getDragLine(editor, doc) { + if (mousedown)return; + dragLine = editor.document.createElement("div"); + domUtils.setAttributes(dragLine, { + id:"ue_tableDragLine", + unselectable:'on', + contenteditable:false, + 'onresizestart':'return false', + 'ondragstart':'return false', + 'onselectstart':'return false', + style:"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)" + }); + editor.body.appendChild(dragLine); + } + + function hideDragLine(editor) { + if (mousedown)return; + var line; + while (line = editor.document.getElementById('ue_tableDragLine')) { + domUtils.remove(line) + } + } + + /** + * 依据state(v|h)在cell位置显示横线 + * @param state + * @param cell + */ + function showDragLineAt(state, cell) { + if (!cell) return; + var table = domUtils.findParentByTagName(cell, "table"), + caption = table.getElementsByTagName('caption'), + width = table.offsetWidth, + height = table.offsetHeight - (caption.length > 0 ? caption[0].offsetHeight : 0), + tablePos = domUtils.getXY(table), + cellPos = domUtils.getXY(cell), css; + switch (state) { + case "h": + css = 'height:' + height + 'px;top:' + (tablePos.y + (caption.length > 0 ? caption[0].offsetHeight : 0)) + 'px;left:' + (cellPos.x + cell.offsetWidth); + dragLine.style.cssText = css + 'px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)'; + break; + case "v": + css = 'width:' + width + 'px;left:' + tablePos.x + 'px;top:' + (cellPos.y + cell.offsetHeight ); + //必须加上border:0和color:blue,否则低版ie不支持背景色显示 + dragLine.style.cssText = css + 'px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)'; + break; + default: + } + } + + /** + * 当表格边框颜色为白色时设置为虚线,true为添加虚线 + * @param editor + * @param flag + */ + function switchBorderColor(editor, flag) { + var tableArr = domUtils.getElementsByTagName(editor.body, "table"), color; + for (var i = 0, node; node = tableArr[i++];) { + var td = domUtils.getElementsByTagName(node, "td"); + if (td[0]) { + if (flag) { + color = (td[0].style.borderColor).replace(/\s/g, ""); + if (/(#ffffff)|(rgb\(255,255,255\))/ig.test(color)) + domUtils.addClass(node, "noBorderTable") + } else { + domUtils.removeClasses(node, "noBorderTable") + } + } + + } + } + + function getTableWidth(editor, needIEHack, defaultValue) { + var body = editor.body; + return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0); + } + + /** + * 获取当前拖动的单元格 + */ + function getTargetTd(editor, evt) { + + var target = domUtils.findParentByTagName(evt.target || evt.srcElement, ["td", "th"], true), + dir = null; + + if( !target ) { + return null; + } + + dir = getRelation( target, mouseCoords( evt ) ); + + //如果有前一个节点, 需要做一个修正, 否则可能会得到一个错误的td + + if( !target ) { + return null; + } + + if( dir === 'h1' && target.previousSibling ) { + + var position = domUtils.getXY( target), + cellWidth = target.offsetWidth; + + if( Math.abs( position.x + cellWidth - evt.clientX ) > cellWidth / 3 ) { + target = target.previousSibling; + } + + } else if( dir === 'v1' && target.parentNode.previousSibling ) { + + var position = domUtils.getXY( target), + cellHeight = target.offsetHeight; + + if( Math.abs( position.y + cellHeight - evt.clientY ) > cellHeight / 3 ) { + target = target.parentNode.previousSibling.firstChild; + } + + } + + + //排除了非td内部以及用于代码高亮部分的td + return target && !(editor.fireEvent("excludetable", target) === true) ? target : null; + } + +}; + + +// plugins/table.sort.js +/** + * Created with JetBrains PhpStorm. + * User: Jinqn + * Date: 13-10-12 + * Time: 上午10:20 + * To change this template use File | Settings | File Templates. + */ + +UE.UETable.prototype.sortTable = function (sortByCellIndex, compareFn) { + var table = this.table, + rows = table.rows, + trArray = [], + flag = rows[0].cells[0].tagName === "TH", + lastRowIndex = 0; + if(this.selectedTds.length){ + var range = this.cellsRange, + len = range.endRowIndex + 1; + for (var i = range.beginRowIndex; i < len; i++) { + trArray[i] = rows[i]; + } + trArray.splice(0,range.beginRowIndex); + lastRowIndex = (range.endRowIndex +1) === this.rowsNum ? 0 : range.endRowIndex +1; + }else{ + for (var i = 0,len = rows.length; i < len; i++) { + trArray[i] = rows[i]; + } + } + + var Fn = { + 'reversecurrent': function(td1,td2){ + return 1; + }, + 'orderbyasc': function(td1,td2){ + var value1 = td1.innerText||td1.textContent, + value2 = td2.innerText||td2.textContent; + return value1.localeCompare(value2); + }, + 'reversebyasc': function(td1,td2){ + var value1 = td1.innerHTML, + value2 = td2.innerHTML; + return value2.localeCompare(value1); + }, + 'orderbynum': function(td1,td2){ + var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/), + value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/); + if(value1) value1 = +value1[0]; + if(value2) value2 = +value2[0]; + return (value1||0) - (value2||0); + }, + 'reversebynum': function(td1,td2){ + var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/), + value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/); + if(value1) value1 = +value1[0]; + if(value2) value2 = +value2[0]; + return (value2||0) - (value1||0); + } + }; + + //对表格设置排序的标记data-sort-type + table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn:''); + + //th不参与排序 + flag && trArray.splice(0, 1); + trArray = utils.sort(trArray,function (tr1, tr2) { + var result; + if (compareFn && typeof compareFn === "function") { + result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } else if (compareFn && typeof compareFn === "number") { + result = 1; + } else if (compareFn && typeof compareFn === "string" && Fn[compareFn]) { + result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } else { + result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } + return result; + }); + var fragment = table.ownerDocument.createDocumentFragment(); + for (var j = 0, len = trArray.length; j < len; j++) { + fragment.appendChild(trArray[j]); + } + var tbody = table.getElementsByTagName("tbody")[0]; + if(!lastRowIndex){ + tbody.appendChild(fragment); + }else{ + tbody.insertBefore(fragment,rows[lastRowIndex- range.endRowIndex + range.beginRowIndex - 1]) + } +}; + +UE.plugins['tablesort'] = function () { + var me = this, + UT = UE.UETable, + getUETable = function (tdOrTable) { + return UT.getUETable(tdOrTable); + }, + getTableItemsByRange = function (editor) { + return UT.getTableItemsByRange(editor); + }; + + + me.ready(function () { + //添加表格可排序的样式 + utils.cssRule('tablesort', + 'table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;' + + ' background-image:url(' + me.options.themePath + me.options.theme + '/images/sortable.png);}', + me.document); + + //做单元格合并操作时,清除可排序标识 + me.addListener("afterexeccommand", function (type, cmd) { + if( cmd == 'mergeright' || cmd == 'mergedown' || cmd == 'mergecells') { + this.execCommand('disablesort'); + } + }); + }); + + + + //表格排序 + UE.commands['sorttable'] = { + queryCommandState: function () { + var me = this, + tableItems = getTableItemsByRange(me); + if (!tableItems.cell) return -1; + var table = tableItems.table, + cells = table.getElementsByTagName("td"); + for (var i = 0, cell; cell = cells[i++];) { + if (cell.rowSpan != 1 || cell.colSpan != 1) return -1; + } + return 0; + }, + execCommand: function (cmd, fn) { + var me = this, + range = me.selection.getRange(), + bk = range.createBookmark(true), + tableItems = getTableItemsByRange(me), + cell = tableItems.cell, + ut = getUETable(tableItems.table), + cellInfo = ut.getCellInfo(cell); + ut.sortTable(cellInfo.cellIndex, fn); + range.moveToBookmark(bk); + try{ + range.select(); + }catch(e){} + } + }; + + //设置表格可排序,清除表格可排序 + UE.commands["enablesort"] = UE.commands["disablesort"] = { + queryCommandState: function (cmd) { + var table = getTableItemsByRange(this).table; + if(table && cmd=='enablesort') { + var cells = domUtils.getElementsByTagName(table, 'th td'); + for(var i = 0; i1 || cells[i].getAttribute('rowspan')>1) return -1; + } + } + + return !table ? -1: cmd=='enablesort' ^ table.getAttribute('data-sort')!='sortEnabled' ? -1:0; + }, + execCommand: function (cmd) { + var table = getTableItemsByRange(this).table; + table.setAttribute("data-sort", cmd == "enablesort" ? "sortEnabled" : "sortDisabled"); + cmd == "enablesort" ? domUtils.addClass(table,"sortEnabled"):domUtils.removeClasses(table,"sortEnabled"); + } + }; +}; + + +// plugins/contextmenu.js +///import core +///commands 右键菜单 +///commandsName ContextMenu +///commandsTitle 右键菜单 +/** + * 右键菜单 + * @function + * @name baidu.editor.plugins.contextmenu + * @author zhanyi + */ + +UE.plugins['contextmenu'] = function () { + var me = this; + me.setOpt('enableContextMenu',true); + if(me.getOpt('enableContextMenu') === false){ + return; + } + var lang = me.getLang( "contextMenu" ), + menu, + items = me.options.contextMenu || [ + {label:lang['selectall'], cmdName:'selectall'}, + { + label:lang.cleardoc, + cmdName:'cleardoc', + exec:function () { + if ( confirm( lang.confirmclear ) ) { + this.execCommand( 'cleardoc' ); + } + } + }, + '-', + { + label:lang.unlink, + cmdName:'unlink' + }, + '-', + { + group:lang.paragraph, + icon:'justifyjustify', + subMenu:[ + { + label:lang.justifyleft, + cmdName:'justify', + value:'left' + }, + { + label:lang.justifyright, + cmdName:'justify', + value:'right' + }, + { + label:lang.justifycenter, + cmdName:'justify', + value:'center' + }, + { + label:lang.justifyjustify, + cmdName:'justify', + value:'justify' + } + ] + }, + '-', + { + group:lang.table, + icon:'table', + subMenu:[ + { + label:lang.inserttable, + cmdName:'inserttable' + }, + { + label:lang.deletetable, + cmdName:'deletetable' + }, + '-', + { + label:lang.deleterow, + cmdName:'deleterow' + }, + { + label:lang.deletecol, + cmdName:'deletecol' + }, + { + label:lang.insertcol, + cmdName:'insertcol' + }, + { + label:lang.insertcolnext, + cmdName:'insertcolnext' + }, + { + label:lang.insertrow, + cmdName:'insertrow' + }, + { + label:lang.insertrownext, + cmdName:'insertrownext' + }, + '-', + { + label:lang.insertcaption, + cmdName:'insertcaption' + }, + { + label:lang.deletecaption, + cmdName:'deletecaption' + }, + { + label:lang.inserttitle, + cmdName:'inserttitle' + }, + { + label:lang.deletetitle, + cmdName:'deletetitle' + }, + { + label:lang.inserttitlecol, + cmdName:'inserttitlecol' + }, + { + label:lang.deletetitlecol, + cmdName:'deletetitlecol' + }, + '-', + { + label:lang.mergecells, + cmdName:'mergecells' + }, + { + label:lang.mergeright, + cmdName:'mergeright' + }, + { + label:lang.mergedown, + cmdName:'mergedown' + }, + '-', + { + label:lang.splittorows, + cmdName:'splittorows' + }, + { + label:lang.splittocols, + cmdName:'splittocols' + }, + { + label:lang.splittocells, + cmdName:'splittocells' + }, + '-', + { + label:lang.averageDiseRow, + cmdName:'averagedistributerow' + }, + { + label:lang.averageDisCol, + cmdName:'averagedistributecol' + }, + '-', + { + label:lang.edittd, + cmdName:'edittd', + exec:function () { + if ( UE.ui['edittd'] ) { + new UE.ui['edittd']( this ); + } + this.getDialog('edittd').open(); + } + }, + { + label:lang.edittable, + cmdName:'edittable', + exec:function () { + if ( UE.ui['edittable'] ) { + new UE.ui['edittable']( this ); + } + this.getDialog('edittable').open(); + } + }, + { + label:lang.setbordervisible, + cmdName:'setbordervisible' + } + ] + }, + { + group:lang.tablesort, + icon:'tablesort', + subMenu:[ + { + label:lang.enablesort, + cmdName:'enablesort' + }, + { + label:lang.disablesort, + cmdName:'disablesort' + }, + '-', + { + label:lang.reversecurrent, + cmdName:'sorttable', + value:'reversecurrent' + }, + { + label:lang.orderbyasc, + cmdName:'sorttable', + value:'orderbyasc' + }, + { + label:lang.reversebyasc, + cmdName:'sorttable', + value:'reversebyasc' + }, + { + label:lang.orderbynum, + cmdName:'sorttable', + value:'orderbynum' + }, + { + label:lang.reversebynum, + cmdName:'sorttable', + value:'reversebynum' + } + ] + }, + { + group:lang.borderbk, + icon:'borderBack', + subMenu:[ + { + label:lang.setcolor, + cmdName:"interlacetable", + exec:function(){ + this.execCommand("interlacetable"); + } + }, + { + label:lang.unsetcolor, + cmdName:"uninterlacetable", + exec:function(){ + this.execCommand("uninterlacetable"); + } + }, + { + label:lang.setbackground, + cmdName:"settablebackground", + exec:function(){ + this.execCommand("settablebackground",{repeat:true,colorList:["#bbb","#ccc"]}); + } + }, + { + label:lang.unsetbackground, + cmdName:"cleartablebackground", + exec:function(){ + this.execCommand("cleartablebackground"); + } + }, + { + label:lang.redandblue, + cmdName:"settablebackground", + exec:function(){ + this.execCommand("settablebackground",{repeat:true,colorList:["red","blue"]}); + } + }, + { + label:lang.threecolorgradient, + cmdName:"settablebackground", + exec:function(){ + this.execCommand("settablebackground",{repeat:true,colorList:["#aaa","#bbb","#ccc"]}); + } + } + ] + }, + { + group:lang.aligntd, + icon:'aligntd', + subMenu:[ + { + cmdName:'cellalignment', + value:{align:'left',vAlign:'top'} + }, + { + cmdName:'cellalignment', + value:{align:'center',vAlign:'top'} + }, + { + cmdName:'cellalignment', + value:{align:'right',vAlign:'top'} + }, + { + cmdName:'cellalignment', + value:{align:'left',vAlign:'middle'} + }, + { + cmdName:'cellalignment', + value:{align:'center',vAlign:'middle'} + }, + { + cmdName:'cellalignment', + value:{align:'right',vAlign:'middle'} + }, + { + cmdName:'cellalignment', + value:{align:'left',vAlign:'bottom'} + }, + { + cmdName:'cellalignment', + value:{align:'center',vAlign:'bottom'} + }, + { + cmdName:'cellalignment', + value:{align:'right',vAlign:'bottom'} + } + ] + }, + { + group:lang.aligntable, + icon:'aligntable', + subMenu:[ + { + cmdName:'tablealignment', + className: 'left', + label:lang.tableleft, + value:"left" + }, + { + cmdName:'tablealignment', + className: 'center', + label:lang.tablecenter, + value:"center" + }, + { + cmdName:'tablealignment', + className: 'right', + label:lang.tableright, + value:"right" + } + ] + }, + '-', + { + label:lang.insertparagraphbefore, + cmdName:'insertparagraph', + value:true + }, + { + label:lang.insertparagraphafter, + cmdName:'insertparagraph' + }, + { + label:lang['copy'], + cmdName:'copy' + }, + { + label:lang['paste'], + cmdName:'paste' + } + ]; + if ( !items.length ) { + return; + } + var uiUtils = UE.ui.uiUtils; + + me.addListener( 'contextmenu', function ( type, evt ) { + + var offset = uiUtils.getViewportOffsetByEvent( evt ); + me.fireEvent( 'beforeselectionchange' ); + if ( menu ) { + menu.destroy(); + } + for ( var i = 0, ti, contextItems = []; ti = items[i]; i++ ) { + var last; + (function ( item ) { + if ( item == '-' ) { + if ( (last = contextItems[contextItems.length - 1 ] ) && last !== '-' ) { + contextItems.push( '-' ); + } + } else if ( item.hasOwnProperty( "group" ) ) { + for ( var j = 0, cj, subMenu = []; cj = item.subMenu[j]; j++ ) { + (function ( subItem ) { + if ( subItem == '-' ) { + if ( (last = subMenu[subMenu.length - 1 ] ) && last !== '-' ) { + subMenu.push( '-' ); + }else{ + subMenu.splice(subMenu.length-1); + } + } else { + if ( (me.commands[subItem.cmdName] || UE.commands[subItem.cmdName] || subItem.query) && + (subItem.query ? subItem.query() : me.queryCommandState( subItem.cmdName )) > -1 ) { + subMenu.push( { + 'label':subItem.label || me.getLang( "contextMenu." + subItem.cmdName + (subItem.value || '') )||"", + 'className':'edui-for-' +subItem.cmdName + ( subItem.className ? ( ' edui-for-' + subItem.cmdName + '-' + subItem.className ) : '' ), + onclick:subItem.exec ? function () { + subItem.exec.call( me ); + } : function () { + me.execCommand( subItem.cmdName, subItem.value ); + } + } ); + } + } + })( cj ); + } + if ( subMenu.length ) { + function getLabel(){ + switch (item.icon){ + case "table": + return me.getLang( "contextMenu.table" ); + case "justifyjustify": + return me.getLang( "contextMenu.paragraph" ); + case "aligntd": + return me.getLang("contextMenu.aligntd"); + case "aligntable": + return me.getLang("contextMenu.aligntable"); + case "tablesort": + return lang.tablesort; + case "borderBack": + return lang.borderbk; + default : + return ''; + } + } + contextItems.push( { + //todo 修正成自动获取方式 + 'label':getLabel(), + className:'edui-for-' + item.icon, + 'subMenu':{ + items:subMenu, + editor:me + } + } ); + } + + } else { + //有可能commmand没有加载右键不能出来,或者没有command也想能展示出来添加query方法 + if ( (me.commands[item.cmdName] || UE.commands[item.cmdName] || item.query) && + (item.query ? item.query.call(me) : me.queryCommandState( item.cmdName )) > -1 ) { + + contextItems.push( { + 'label':item.label || me.getLang( "contextMenu." + item.cmdName ), + className:'edui-for-' + (item.icon ? item.icon : item.cmdName + (item.value || '')), + onclick:item.exec ? function () { + item.exec.call( me ); + } : function () { + me.execCommand( item.cmdName, item.value ); + } + } ); + } + + } + + })( ti ); + } + if ( contextItems[contextItems.length - 1] == '-' ) { + contextItems.pop(); + } + + menu = new UE.ui.Menu( { + items:contextItems, + className:"edui-contextmenu", + editor:me + } ); + menu.render(); + menu.showAt( offset ); + + me.fireEvent("aftershowcontextmenu",menu); + + domUtils.preventDefault( evt ); + if ( browser.ie ) { + var ieRange; + try { + ieRange = me.selection.getNative().createRange(); + } catch ( e ) { + return; + } + if ( ieRange.item ) { + var range = new dom.Range( me.document ); + range.selectNode( ieRange.item( 0 ) ).select( true, true ); + } + } + }); + + // 添加复制的flash按钮 + me.addListener('aftershowcontextmenu', function(type, menu) { + if (me.zeroclipboard) { + var items = menu.items; + for (var key in items) { + if (items[key].className == 'edui-for-copy') { + me.zeroclipboard.clip(items[key].getDom()); + } + } + } + }); + +}; + + +// plugins/shortcutmenu.js +///import core +///commands 弹出菜单 +// commandsName popupmenu +///commandsTitle 弹出菜单 +/** + * 弹出菜单 + * @function + * @name baidu.editor.plugins.popupmenu + * @author xuheng + */ + +UE.plugins['shortcutmenu'] = function () { + var me = this, + menu, + items = me.options.shortcutMenu || []; + + if (!items.length) { + return; + } + + me.addListener ('contextmenu mouseup' , function (type , e) { + var me = this, + customEvt = { + type : type , + target : e.target || e.srcElement , + screenX : e.screenX , + screenY : e.screenY , + clientX : e.clientX , + clientY : e.clientY + }; + + setTimeout (function () { + var rng = me.selection.getRange (); + if (rng.collapsed === false || type == "contextmenu") { + + if (!menu) { + menu = new baidu.editor.ui.ShortCutMenu ({ + editor : me , + items : items , + theme : me.options.theme , + className : 'edui-shortcutmenu' + }); + + menu.render (); + me.fireEvent ("afterrendershortcutmenu" , menu); + } + + menu.show (customEvt , !!UE.plugins['contextmenu']); + } + }); + + if (type == 'contextmenu') { + domUtils.preventDefault (e); + if (browser.ie9below) { + var ieRange; + try { + ieRange = me.selection.getNative().createRange(); + } catch (e) { + return; + } + if (ieRange.item) { + var range = new dom.Range (me.document); + range.selectNode (ieRange.item (0)).select (true , true); + + } + } + } + }); + + me.addListener ('keydown' , function (type) { + if (type == "keydown") { + menu && !menu.isHidden && menu.hide (); + } + + }); + +}; + + + + +// plugins/basestyle.js +/** + * B、I、sub、super命令支持 + * @file + * @since 1.2.6.1 + */ + +UE.plugins['basestyle'] = function(){ + + /** + * 字体加粗 + * @command bold + * @param { String } cmd 命令字符串 + * @remind 对已加粗的文本内容执行该命令, 将取消加粗 + * @method execCommand + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行加粗操作 + * //第一次执行, 文本内容加粗 + * editor.execCommand( 'bold' ); + * + * //第二次执行, 文本内容取消加粗 + * editor.execCommand( 'bold' ); + * ``` + */ + + + /** + * 字体倾斜 + * @command italic + * @method execCommand + * @param { String } cmd 命令字符串 + * @remind 对已倾斜的文本内容执行该命令, 将取消倾斜 + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行斜体操作 + * //第一次操作, 文本内容将变成斜体 + * editor.execCommand( 'italic' ); + * + * //再次对同一文本内容执行, 则文本内容将恢复正常 + * editor.execCommand( 'italic' ); + * ``` + */ + + /** + * 下标文本,与“superscript”命令互斥 + * @command subscript + * @method execCommand + * @remind 把选中的文本内容切换成下标文本, 如果当前选中的文本已经是下标, 则该操作会把文本内容还原成正常文本 + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行下标操作 + * //第一次操作, 文本内容将变成下标文本 + * editor.execCommand( 'subscript' ); + * + * //再次对同一文本内容执行, 则文本内容将恢复正常 + * editor.execCommand( 'subscript' ); + * ``` + */ + + /** + * 上标文本,与“subscript”命令互斥 + * @command superscript + * @method execCommand + * @remind 把选中的文本内容切换成上标文本, 如果当前选中的文本已经是上标, 则该操作会把文本内容还原成正常文本 + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * //对当前选中的文本内容执行上标操作 + * //第一次操作, 文本内容将变成上标文本 + * editor.execCommand( 'superscript' ); + * + * //再次对同一文本内容执行, 则文本内容将恢复正常 + * editor.execCommand( 'superscript' ); + * ``` + */ + var basestyles = { + 'bold':['strong','b'], + 'italic':['em','i'], + 'subscript':['sub'], + 'superscript':['sup'] + }, + getObj = function(editor,tagNames){ + return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames); + }, + me = this; + //添加快捷键 + me.addshortcutkey({ + "Bold" : "ctrl+66",//^B + "Italic" : "ctrl+73", //^I + "Underline" : "ctrl+85"//^U + }); + me.addInputRule(function(root){ + utils.each(root.getNodesByTagName('b i'),function(node){ + switch (node.tagName){ + case 'b': + node.tagName = 'strong'; + break; + case 'i': + node.tagName = 'em'; + } + }); + }); + for ( var style in basestyles ) { + (function( cmd, tagNames ) { + me.commands[cmd] = { + execCommand : function( cmdName ) { + var range = me.selection.getRange(),obj = getObj(this,tagNames); + if ( range.collapsed ) { + if ( obj ) { + var tmpText = me.document.createTextNode(''); + range.insertNode( tmpText ).removeInlineStyle( tagNames ); + range.setStartBefore(tmpText); + domUtils.remove(tmpText); + } else { + var tmpNode = range.document.createElement( tagNames[0] ); + if(cmdName == 'superscript' || cmdName == 'subscript'){ + tmpText = me.document.createTextNode(''); + range.insertNode(tmpText) + .removeInlineStyle(['sub','sup']) + .setStartBefore(tmpText) + .collapse(true); + } + range.insertNode( tmpNode ).setStart( tmpNode, 0 ); + } + range.collapse( true ); + } else { + if(cmdName == 'superscript' || cmdName == 'subscript'){ + if(!obj || obj.tagName.toLowerCase() != cmdName){ + range.removeInlineStyle(['sub','sup']); + } + } + obj ? range.removeInlineStyle( tagNames ) : range.applyInlineStyle( tagNames[0] ); + } + range.select(); + }, + queryCommandState : function() { + return getObj(this,tagNames) ? 1 : 0; + } + }; + })( style, basestyles[style] ); + } +}; + + + +// plugins/elementpath.js +/** + * 选取路径命令 + * @file + */ +UE.plugins['elementpath'] = function(){ + var currentLevel, + tagNames, + me = this; + me.setOpt('elementPathEnabled',true); + if(!me.options.elementPathEnabled){ + return; + } + me.commands['elementpath'] = { + execCommand : function( cmdName, level ) { + var start = tagNames[level], + range = me.selection.getRange(); + currentLevel = level*1; + range.selectNode(start).select(); + }, + queryCommandValue : function() { + //产生一个副本,不能修改原来的startElementPath; + var parents = [].concat(this.selection.getStartElementPath()).reverse(), + names = []; + tagNames = parents; + for(var i=0,ci;ci=parents[i];i++){ + if(ci.nodeType == 3) { + continue; + } + var name = ci.tagName.toLowerCase(); + if(name == 'img' && ci.getAttribute('anchorname')){ + name = 'anchor'; + } + names[i] = name; + if(currentLevel == i){ + currentLevel = -1; + break; + } + } + return names; + } + }; +}; + + + +// plugins/formatmatch.js +/** + * 格式刷,只格式inline的 + * @file + * @since 1.2.6.1 + */ + +/** + * 格式刷 + * @command formatmatch + * @method execCommand + * @remind 该操作不能复制段落格式 + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * //获取格式刷 + * editor.execCommand( 'formatmatch' ); + * ``` + */ +UE.plugins['formatmatch'] = function(){ + + var me = this, + list = [],img, + flag = 0; + + me.addListener('reset',function(){ + list = []; + flag = 0; + }); + + function addList(type,evt){ + + if(browser.webkit){ + var target = evt.target.tagName == 'IMG' ? evt.target : null; + } + + function addFormat(range){ + + if(text){ + range.selectNode(text); + } + return range.applyInlineStyle(list[list.length-1].tagName,null,list); + + } + + me.undoManger && me.undoManger.save(); + + var range = me.selection.getRange(), + imgT = target || range.getClosedNode(); + if(img && imgT && imgT.tagName == 'IMG'){ + //trace:964 + + imgT.style.cssText += ';float:' + (img.style.cssFloat || img.style.styleFloat ||'none') + ';display:' + (img.style.display||'inline'); + + img = null; + }else{ + if(!img){ + var collapsed = range.collapsed; + if(collapsed){ + var text = me.document.createTextNode('match'); + range.insertNode(text).select(); + + + } + me.__hasEnterExecCommand = true; + //不能把block上的属性干掉 + //trace:1553 + var removeFormatAttributes = me.options.removeFormatAttributes; + me.options.removeFormatAttributes = ''; + me.execCommand('removeformat'); + me.options.removeFormatAttributes = removeFormatAttributes; + me.__hasEnterExecCommand = false; + //trace:969 + range = me.selection.getRange(); + if(list.length){ + addFormat(range); + } + if(text){ + range.setStartBefore(text).collapse(true); + + } + range.select(); + text && domUtils.remove(text); + } + + } + + + + + me.undoManger && me.undoManger.save(); + me.removeListener('mouseup',addList); + flag = 0; + } + + me.commands['formatmatch'] = { + execCommand : function( cmdName ) { + + if(flag){ + flag = 0; + list = []; + me.removeListener('mouseup',addList); + return; + } + + + + var range = me.selection.getRange(); + img = range.getClosedNode(); + if(!img || img.tagName != 'IMG'){ + range.collapse(true).shrinkBoundary(); + var start = range.startContainer; + list = domUtils.findParents(start,true,function(node){ + return !domUtils.isBlockElm(node) && node.nodeType == 1; + }); + //a不能加入格式刷, 并且克隆节点 + for(var i=0,ci;ci=list[i];i++){ + if(ci.tagName == 'A'){ + list.splice(i,1); + break; + } + } + + } + + me.addListener('mouseup',addList); + flag = 1; + + + }, + queryCommandState : function() { + return flag; + }, + notNeedUndo : 1 + }; +}; + + + +// plugins/searchreplace.js +///import core +///commands 查找替换 +///commandsName SearchReplace +///commandsTitle 查询替换 +///commandsDialog dialogs\searchreplace +/** + * @description 查找替换 + * @author zhanyi + */ + +UE.plugin.register('searchreplace',function(){ + var me = this; + + var _blockElm = {'table':1,'tbody':1,'tr':1,'ol':1,'ul':1}; + + function findTextInString(textContent,opt,currentIndex){ + var str = opt.searchStr; + if(opt.dir == -1){ + textContent = textContent.split('').reverse().join(''); + str = str.split('').reverse().join(''); + currentIndex = textContent.length - currentIndex; + + } + var reg = new RegExp(str,'g' + (opt.casesensitive ? '' : 'i')),match; + + while(match = reg.exec(textContent)){ + if(match.index >= currentIndex){ + return opt.dir == -1 ? textContent.length - match.index - opt.searchStr.length : match.index; + } + } + return -1 + } + function findTextBlockElm(node,currentIndex,opt){ + var textContent,index,methodName = opt.all || opt.dir == 1 ? 'getNextDomNode' : 'getPreDomNode'; + if(domUtils.isBody(node)){ + node = node.firstChild; + } + var first = 1; + while(node){ + textContent = node.nodeType == 3 ? node.nodeValue : node[browser.ie ? 'innerText' : 'textContent']; + index = findTextInString(textContent,opt,currentIndex ); + first = 0; + if(index!=-1){ + return { + 'node':node, + 'index':index + } + } + node = domUtils[methodName](node); + while(node && _blockElm[node.nodeName.toLowerCase()]){ + node = domUtils[methodName](node,true); + } + if(node){ + currentIndex = opt.dir == -1 ? (node.nodeType == 3 ? node.nodeValue : node[browser.ie ? 'innerText' : 'textContent']).length : 0; + } + + } + } + function findNTextInBlockElm(node,index,str){ + var currentIndex = 0, + currentNode = node.firstChild, + currentNodeLength = 0, + result; + while(currentNode){ + if(currentNode.nodeType == 3){ + currentNodeLength = currentNode.nodeValue.replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,'').length; + currentIndex += currentNodeLength; + if(currentIndex >= index){ + return { + 'node':currentNode, + 'index': currentNodeLength - (currentIndex - index) + } + } + }else if(!dtd.$empty[currentNode.tagName]){ + currentNodeLength = currentNode[browser.ie ? 'innerText' : 'textContent'].replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,'').length + currentIndex += currentNodeLength; + if(currentIndex >= index){ + result = findNTextInBlockElm(currentNode,currentNodeLength - (currentIndex - index),str); + if(result){ + return result; + } + } + } + currentNode = domUtils.getNextDomNode(currentNode); + + } + } + + function searchReplace(me,opt){ + + var rng = me.selection.getRange(), + startBlockNode, + searchStr = opt.searchStr, + span = me.document.createElement('span'); + span.innerHTML = '$$ueditor_searchreplace_key$$'; + + rng.shrinkBoundary(true); + + //判断是不是第一次选中 + if(!rng.collapsed){ + rng.select(); + var rngText = me.selection.getText(); + if(new RegExp('^' + opt.searchStr + '$',(opt.casesensitive ? '' : 'i')).test(rngText)){ + if(opt.replaceStr != undefined){ + replaceText(rng,opt.replaceStr); + rng.select(); + return true; + }else{ + rng.collapse(opt.dir == -1) + } + + } + } + + + rng.insertNode(span); + rng.enlargeToBlockElm(true); + startBlockNode = rng.startContainer; + var currentIndex = startBlockNode[browser.ie ? 'innerText' : 'textContent'].indexOf('$$ueditor_searchreplace_key$$'); + rng.setStartBefore(span); + domUtils.remove(span); + var result = findTextBlockElm(startBlockNode,currentIndex,opt); + if(result){ + var rngStart = findNTextInBlockElm(result.node,result.index,searchStr); + var rngEnd = findNTextInBlockElm(result.node,result.index + searchStr.length,searchStr); + rng.setStart(rngStart.node,rngStart.index).setEnd(rngEnd.node,rngEnd.index); + + if(opt.replaceStr !== undefined){ + replaceText(rng,opt.replaceStr) + } + rng.select(); + return true; + }else{ + rng.setCursor() + } + + } + function replaceText(rng,str){ + + str = me.document.createTextNode(str); + rng.deleteContents().insertNode(str); + + } + return { + commands:{ + 'searchreplace':{ + execCommand:function(cmdName,opt){ + utils.extend(opt,{ + all : false, + casesensitive : false, + dir : 1 + },true); + var num = 0; + if(opt.all){ + + var rng = me.selection.getRange(), + first = me.body.firstChild; + if(first && first.nodeType == 1){ + rng.setStart(first,0); + rng.shrinkBoundary(true); + }else if(first.nodeType == 3){ + rng.setStartBefore(first) + } + rng.collapse(true).select(true); + if(opt.replaceStr !== undefined){ + me.fireEvent('saveScene'); + } + while(searchReplace(this,opt)){ + num++; + } + if(num){ + me.fireEvent('saveScene'); + } + }else{ + if(opt.replaceStr !== undefined){ + me.fireEvent('saveScene'); + } + if(searchReplace(this,opt)){ + num++ + } + if(num){ + me.fireEvent('saveScene'); + } + + } + + return num; + }, + notNeedUndo:1 + } + } + } +}); + +// plugins/customstyle.js +/** + * 自定义样式 + * @file + * @since 1.2.6.1 + */ + +/** + * 根据config配置文件里“customstyle”选项的值对匹配的标签执行样式替换。 + * @command customstyle + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand( 'customstyle' ); + * ``` + */ +UE.plugins['customstyle'] = function() { + var me = this; + me.setOpt({ 'customstyle':[ + {tag:'h1',name:'tc', style:'font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'}, + {tag:'h1',name:'tl', style:'font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;'}, + {tag:'span',name:'im', style:'font-size:16px;font-style:italic;font-weight:bold;line-height:18px;'}, + {tag:'span',name:'hi', style:'font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;'} + ]}); + me.commands['customstyle'] = { + execCommand : function(cmdName, obj) { + var me = this, + tagName = obj.tag, + node = domUtils.findParent(me.selection.getStart(), function(node) { + return node.getAttribute('label'); + }, true), + range,bk,tmpObj = {}; + for (var p in obj) { + if(obj[p]!==undefined) + tmpObj[p] = obj[p]; + } + delete tmpObj.tag; + if (node && node.getAttribute('label') == obj.label) { + range = this.selection.getRange(); + bk = range.createBookmark(); + if (range.collapsed) { + //trace:1732 删掉自定义标签,要有p来回填站位 + if(dtd.$block[node.tagName]){ + var fillNode = me.document.createElement('p'); + domUtils.moveChild(node, fillNode); + node.parentNode.insertBefore(fillNode, node); + domUtils.remove(node); + }else{ + domUtils.remove(node,true); + } + + } else { + + var common = domUtils.getCommonAncestor(bk.start, bk.end), + nodes = domUtils.getElementsByTagName(common, tagName); + if(new RegExp(tagName,'i').test(common.tagName)){ + nodes.push(common); + } + for (var i = 0,ni; ni = nodes[i++];) { + if (ni.getAttribute('label') == obj.label) { + var ps = domUtils.getPosition(ni, bk.start),pe = domUtils.getPosition(ni, bk.end); + if ((ps & domUtils.POSITION_FOLLOWING || ps & domUtils.POSITION_CONTAINS) + && + (pe & domUtils.POSITION_PRECEDING || pe & domUtils.POSITION_CONTAINS) + ) + if (dtd.$block[tagName]) { + var fillNode = me.document.createElement('p'); + domUtils.moveChild(ni, fillNode); + ni.parentNode.insertBefore(fillNode, ni); + } + domUtils.remove(ni, true); + } + } + node = domUtils.findParent(common, function(node) { + return node.getAttribute('label') == obj.label; + }, true); + if (node) { + + domUtils.remove(node, true); + + } + + } + range.moveToBookmark(bk).select(); + } else { + if (dtd.$block[tagName]) { + this.execCommand('paragraph', tagName, tmpObj,'customstyle'); + range = me.selection.getRange(); + if (!range.collapsed) { + range.collapse(); + node = domUtils.findParent(me.selection.getStart(), function(node) { + return node.getAttribute('label') == obj.label; + }, true); + var pNode = me.document.createElement('p'); + domUtils.insertAfter(node, pNode); + domUtils.fillNode(me.document, pNode); + range.setStart(pNode, 0).setCursor(); + } + } else { + + range = me.selection.getRange(); + if (range.collapsed) { + node = me.document.createElement(tagName); + domUtils.setAttributes(node, tmpObj); + range.insertNode(node).setStart(node, 0).setCursor(); + + return; + } + + bk = range.createBookmark(); + range.applyInlineStyle(tagName, tmpObj).moveToBookmark(bk).select(); + } + } + + }, + queryCommandValue : function() { + var parent = domUtils.filterNodeList( + this.selection.getStartElementPath(), + function(node){return node.getAttribute('label')} + ); + return parent ? parent.getAttribute('label') : ''; + } + }; + //当去掉customstyle是,如果是块元素,用p代替 + me.addListener('keyup', function(type, evt) { + var keyCode = evt.keyCode || evt.which; + + if (keyCode == 32 || keyCode == 13) { + var range = me.selection.getRange(); + if (range.collapsed) { + var node = domUtils.findParent(me.selection.getStart(), function(node) { + return node.getAttribute('label'); + }, true); + if (node && dtd.$block[node.tagName] && domUtils.isEmptyNode(node)) { + var p = me.document.createElement('p'); + domUtils.insertAfter(node, p); + domUtils.fillNode(me.document, p); + domUtils.remove(node); + range.setStart(p, 0).setCursor(); + + + } + } + } + }); +}; + +// plugins/catchremoteimage.js +///import core +///commands 远程图片抓取 +///commandsName catchRemoteImage,catchremoteimageenable +///commandsTitle 远程图片抓取 +/** + * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片 + */ +UE.plugins['catchremoteimage'] = function () { + var me = this, + ajax = UE.ajax; + + /* 设置默认值 */ + if (me.options.catchRemoteImageEnable === false) return; + me.setOpt({ + catchRemoteImageEnable: false + }); + + me.addListener("afterpaste", function () { + me.fireEvent("catchRemoteImage"); + }); + + me.addListener("catchRemoteImage", function () { + + var catcherLocalDomain = me.getOpt('catcherLocalDomain'), + catcherActionUrl = me.getActionUrl(me.getOpt('catcherActionName')), + catcherUrlPrefix = me.getOpt('catcherUrlPrefix'), + catcherFieldName = me.getOpt('catcherFieldName'); + + var remoteImages = [], + imgs = domUtils.getElementsByTagName(me.document, "img"), + test = function (src, urls) { + if (src.indexOf(location.host) != -1 || /(^\.)|(^\/)/.test(src)) { + return true; + } + if (urls) { + for (var j = 0, url; url = urls[j++];) { + if (src.indexOf(url) !== -1) { + return true; + } + } + } + return false; + }; + + for (var i = 0, ci; ci = imgs[i++];) { + if (ci.getAttribute("word_img")) { + continue; + } + var src = ci.getAttribute("_src") || ci.src || ""; + if (/^(https?|ftp):/i.test(src) && !test(src, catcherLocalDomain)) { + remoteImages.push(src); + } + } + + if (remoteImages.length) { + catchremoteimage(remoteImages, { + //成功抓取 + success: function (r) { + try { + var info = r.state !== undefined ? r:eval("(" + r.responseText + ")"); + } catch (e) { + return; + } + + /* 获取源路径和新路径 */ + var i, j, ci, cj, oldSrc, newSrc, list = info.list; + + for (i = 0; ci = imgs[i++];) { + oldSrc = ci.getAttribute("_src") || ci.src || ""; + for (j = 0; cj = list[j++];) { + if (oldSrc == cj.source && cj.state == "SUCCESS") { //抓取失败时不做替换处理 + newSrc = catcherUrlPrefix + cj.url; + domUtils.setAttributes(ci, { + "src": newSrc, + "_src": newSrc + }); + break; + } + } + } + me.fireEvent('catchremotesuccess') + }, + //回调失败,本次请求超时 + error: function () { + me.fireEvent("catchremoteerror"); + } + }); + } + + function catchremoteimage(imgs, callbacks) { + var params = utils.serializeParam(me.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(catcherActionUrl + (catcherActionUrl.indexOf('?') == -1 ? '?':'&') + params), + isJsonp = utils.isCrossDomainUrl(url), + opt = { + 'method': 'POST', + 'dataType': isJsonp ? 'jsonp':'', + 'timeout': 60000, //单位:毫秒,回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值 + 'onsuccess': callbacks["success"], + 'onerror': callbacks["error"] + }; + opt[catcherFieldName] = imgs; + ajax.request(url, opt); + } + + }); +}; + +// plugins/snapscreen.js +/** + * 截屏插件,为UEditor提供插入支持 + * @file + * @since 1.4.2 + */ +UE.plugin.register('snapscreen', function (){ + + var me = this; + var snapplugin; + + function getLocation(url){ + var search, + a = document.createElement('a'), + params = utils.serializeParam(me.queryCommandValue('serverparam')) || ''; + + a.href = url; + if (browser.ie) { + a.href = a.href; + } + + + search = a.search; + if (params) { + search = search + (search.indexOf('?') == -1 ? '?':'&')+ params; + search = search.replace(/[&]+/ig, '&'); + } + return { + 'port': a.port, + 'hostname': a.hostname, + 'path': a.pathname + search || + a.hash + } + } + + return { + commands:{ + /** + * 字体背景颜色 + * @command snapscreen + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand('snapscreen'); + * ``` + */ + 'snapscreen':{ + execCommand:function (cmd) { + var url, local, res; + var lang = me.getLang("snapScreen_plugin"); + + if(!snapplugin){ + var container = me.container; + var doc = me.container.ownerDocument || me.container.document; + snapplugin = doc.createElement("object"); + try{snapplugin.type = "application/x-pluginbaidusnap";}catch(e){ + return; + } + snapplugin.style.cssText = "position:absolute;left:-9999px;width:0;height:0;"; + snapplugin.setAttribute("width","0"); + snapplugin.setAttribute("height","0"); + container.appendChild(snapplugin); + } + + function onSuccess(rs){ + try{ + rs = eval("("+ rs +")"); + if(rs.state == 'SUCCESS'){ + var opt = me.options; + me.execCommand('insertimage', { + src: opt.snapscreenUrlPrefix + rs.url, + _src: opt.snapscreenUrlPrefix + rs.url, + alt: rs.title || '', + floatStyle: opt.snapscreenImgAlign + }); + } else { + alert(rs.state); + } + }catch(e){ + alert(lang.callBackErrorMsg); + } + } + url = me.getActionUrl(me.getOpt('snapscreenActionName')); + local = getLocation(url); + setTimeout(function () { + try{ + res =snapplugin.saveSnapshot(local.hostname, local.path, local.port); + }catch(e){ + me.ui._dialogs['snapscreenDialog'].open(); + return; + } + + onSuccess(res); + }, 50); + }, + queryCommandState: function(){ + return (navigator.userAgent.indexOf("Windows",0) != -1) ? 0:-1; + } + } + } + } +}); + + +// plugins/insertparagraph.js +/** + * 插入段落 + * @file + * @since 1.2.6.1 + */ + + +/** + * 插入段落 + * @command insertparagraph + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * //editor是编辑器实例 + * editor.execCommand( 'insertparagraph' ); + * ``` + */ + +UE.commands['insertparagraph'] = { + execCommand : function( cmdName,front) { + var me = this, + range = me.selection.getRange(), + start = range.startContainer,tmpNode; + while(start ){ + if(domUtils.isBody(start)){ + break; + } + tmpNode = start; + start = start.parentNode; + } + if(tmpNode){ + var p = me.document.createElement('p'); + if(front){ + tmpNode.parentNode.insertBefore(p,tmpNode) + }else{ + tmpNode.parentNode.insertBefore(p,tmpNode.nextSibling) + } + domUtils.fillNode(me.document,p); + range.setStart(p,0).setCursor(false,true); + } + } +}; + + + +// plugins/webapp.js +/** + * 百度应用 + * @file + * @since 1.2.6.1 + */ + + +/** + * 插入百度应用 + * @command webapp + * @method execCommand + * @remind 需要百度APPKey + * @remind 百度应用主页: http://app.baidu.com/ + * @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度, + * height=>应用容器高度,logo=>应用logo,url=>应用地址 + * @example + * ```javascript + * //editor是编辑器实例 + * //在编辑器里插入一个“植物大战僵尸”的APP + * editor.execCommand( 'webapp' , { + * title: '植物大战僵尸', + * width: 560, + * height: 465, + * logo: '应用展示的图片', + * url: '百度应用的地址' + * } ); + * ``` + */ + +//UE.plugins['webapp'] = function () { +// var me = this; +// function createInsertStr( obj, toIframe, addParagraph ) { +// return !toIframe ? +// (addParagraph ? '

    ' : '') + '' + +// (addParagraph ? '

    ' : '') +// : +// ''; +// } +// +// function switchImgAndIframe( img2frame ) { +// var tmpdiv, +// nodes = domUtils.getElementsByTagName( me.document, !img2frame ? "iframe" : "img" ); +// for ( var i = 0, node; node = nodes[i++]; ) { +// if ( node.className != "edui-faked-webapp" ){ +// continue; +// } +// tmpdiv = me.document.createElement( "div" ); +// tmpdiv.innerHTML = createInsertStr( img2frame ? {url:node.getAttribute( "_url" ), width:node.width, height:node.height,title:node.title,logo:node.style.backgroundImage.replace("url(","").replace(")","")} : {url:node.getAttribute( "src", 2 ),title:node.title, width:node.width, height:node.height,logo:node.getAttribute("logo_url")}, img2frame ? true : false,false ); +// node.parentNode.replaceChild( tmpdiv.firstChild, node ); +// } +// } +// +// me.addListener( "beforegetcontent", function () { +// switchImgAndIframe( true ); +// } ); +// me.addListener( 'aftersetcontent', function () { +// switchImgAndIframe( false ); +// } ); +// me.addListener( 'aftergetcontent', function ( cmdName ) { +// if ( cmdName == 'aftergetcontent' && me.queryCommandState( 'source' ) ){ +// return; +// } +// switchImgAndIframe( false ); +// } ); +// +// me.commands['webapp'] = { +// execCommand:function ( cmd, obj ) { +// me.execCommand( "inserthtml", createInsertStr( obj, false,true ) ); +// } +// }; +//}; + +UE.plugin.register('webapp', function (){ + var me = this; + function createInsertStr(obj,toEmbed){ + return !toEmbed ? + '' + : + '' + + } + return { + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(node){ + var html; + if(node.getAttr('class') == 'edui-faked-webapp'){ + html = createInsertStr({ + title:node.getAttr('title'), + 'width':node.getAttr('width'), + 'height':node.getAttr('height'), + 'align':node.getAttr('align'), + 'cssfloat':node.getStyle('float'), + 'url':node.getAttr("_url"), + 'logo':node.getAttr('_logo_url') + },true); + var embed = UE.uNode.createElement(html); + node.parentNode.replaceChild(embed,node); + } + }) + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('iframe'),function(node){ + if(node.getAttr('class') == 'edui-faked-webapp'){ + var img = UE.uNode.createElement(createInsertStr({ + title:node.getAttr('title'), + 'width':node.getAttr('width'), + 'height':node.getAttr('height'), + 'align':node.getAttr('align'), + 'cssfloat':node.getStyle('float'), + 'url':node.getAttr("src"), + 'logo':node.getAttr('logo_url') + })); + node.parentNode.replaceChild(img,node); + } + }) + + }, + commands:{ + /** + * 插入百度应用 + * @command webapp + * @method execCommand + * @remind 需要百度APPKey + * @remind 百度应用主页: http://app.baidu.com/ + * @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度, + * height=>应用容器高度,logo=>应用logo,url=>应用地址 + * @example + * ```javascript + * //editor是编辑器实例 + * //在编辑器里插入一个“植物大战僵尸”的APP + * editor.execCommand( 'webapp' , { + * title: '植物大战僵尸', + * width: 560, + * height: 465, + * logo: '应用展示的图片', + * url: '百度应用的地址' + * } ); + * ``` + */ + 'webapp':{ + execCommand:function (cmd, obj) { + + var me = this, + str = createInsertStr(utils.extend(obj,{ + align:'none' + }), false); + me.execCommand("inserthtml",str); + }, + queryCommandState:function () { + var me = this, + img = me.selection.getRange().getClosedNode(), + flag = img && (img.className == "edui-faked-webapp"); + return flag ? 1 : 0; + } + } + } + } +}); + +// plugins/template.js +///import core +///import plugins\inserthtml.js +///import plugins\cleardoc.js +///commands 模板 +///commandsName template +///commandsTitle 模板 +///commandsDialog dialogs\template +UE.plugins['template'] = function () { + UE.commands['template'] = { + execCommand:function (cmd, obj) { + obj.html && this.execCommand("inserthtml", obj.html); + } + }; + this.addListener("click", function (type, evt) { + var el = evt.target || evt.srcElement, + range = this.selection.getRange(); + var tnode = domUtils.findParent(el, function (node) { + if (node.className && domUtils.hasClass(node, "ue_t")) { + return node; + } + }, true); + tnode && range.selectNode(tnode).shrinkBoundary().select(); + }); + this.addListener("keydown", function (type, evt) { + var range = this.selection.getRange(); + if (!range.collapsed) { + if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) { + var tnode = domUtils.findParent(range.startContainer, function (node) { + if (node.className && domUtils.hasClass(node, "ue_t")) { + return node; + } + }, true); + if (tnode) { + domUtils.removeClasses(tnode, ["ue_t"]); + } + } + } + }); +}; + + +// plugins/music.js +/** + * 插入音乐命令 + * @file + */ +UE.plugin.register('music', function (){ + var me = this; + function creatInsertStr(url,width,height,align,cssfloat,toEmbed){ + return !toEmbed ? + '' + : + ''; + } + return { + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(node){ + var html; + if(node.getAttr('class') == 'edui-faked-music'){ + var cssfloat = node.getStyle('float'); + var align = node.getAttr('align'); + html = creatInsertStr(node.getAttr("_url"), node.getAttr('width'), node.getAttr('height'), align, cssfloat, true); + var embed = UE.uNode.createElement(html); + node.parentNode.replaceChild(embed,node); + } + }) + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('embed'),function(node){ + if(node.getAttr('class') == 'edui-faked-music'){ + var cssfloat = node.getStyle('float'); + var align = node.getAttr('align'); + html = creatInsertStr(node.getAttr("src"), node.getAttr('width'), node.getAttr('height'), align, cssfloat,false); + var img = UE.uNode.createElement(html); + node.parentNode.replaceChild(img,node); + } + }) + + }, + commands:{ + /** + * 插入音乐 + * @command music + * @method execCommand + * @param { Object } musicOptions 插入音乐的参数项, 支持的key有: url=>音乐地址; + * width=>音乐容器宽度;height=>音乐容器高度;align=>音乐文件的对齐方式, 可选值有: left, center, right, none + * @example + * ```javascript + * //editor是编辑器实例 + * //在编辑器里插入一个“植物大战僵尸”的APP + * editor.execCommand( 'music' , { + * width: 400, + * height: 95, + * align: "center", + * url: "音乐地址" + * } ); + * ``` + */ + 'music':{ + execCommand:function (cmd, musicObj) { + var me = this, + str = creatInsertStr(musicObj.url, musicObj.width || 400, musicObj.height || 95, "none", false); + me.execCommand("inserthtml",str); + }, + queryCommandState:function () { + var me = this, + img = me.selection.getRange().getClosedNode(), + flag = img && (img.className == "edui-faked-music"); + return flag ? 1 : 0; + } + } + } + } +}); + +// plugins/autoupload.js +/** + * @description + * 1.拖放文件到编辑区域,自动上传并插入到选区 + * 2.插入粘贴板的图片,自动上传并插入到选区 + * @author Jinqn + * @date 2013-10-14 + */ +UE.plugin.register('autoupload', function (){ + + function sendAndInsertFile(file, editor) { + var me = editor; + //模拟数据 + var fieldName, urlPrefix, maxSize, allowFiles, actionUrl, + loadingHtml, errorHandler, successHandler, + filetype = /image\/\w+/i.test(file.type) ? 'image':'file', + loadingId = 'loading_' + (+new Date()).toString(36); + + fieldName = me.getOpt(filetype + 'FieldName'); + urlPrefix = me.getOpt(filetype + 'UrlPrefix'); + maxSize = me.getOpt(filetype + 'MaxSize'); + allowFiles = me.getOpt(filetype + 'AllowFiles'); + actionUrl = me.getActionUrl(me.getOpt(filetype + 'ActionName')); + errorHandler = function(title) { + var loader = me.document.getElementById(loadingId); + loader && domUtils.remove(loader); + me.fireEvent('showmessage', { + 'id': loadingId, + 'content': title, + 'type': 'error', + 'timeout': 4000 + }); + }; + + if (filetype == 'image') { + loadingHtml = ''; + successHandler = function(data) { + var link = urlPrefix + data.url, + loader = me.document.getElementById(loadingId); + if (loader) { + loader.setAttribute('src', link); + loader.setAttribute('_src', link); + loader.setAttribute('title', data.title || ''); + loader.setAttribute('alt', data.original || ''); + loader.removeAttribute('id'); + domUtils.removeClasses(loader, 'loadingclass'); + } + }; + } else { + loadingHtml = '

    ' + + '' + + '

    '; + successHandler = function(data) { + var link = urlPrefix + data.url, + loader = me.document.getElementById(loadingId); + + var rng = me.selection.getRange(), + bk = rng.createBookmark(); + rng.selectNode(loader).select(); + me.execCommand('insertfile', {'url': link}); + rng.moveToBookmark(bk).select(); + }; + } + + /* 插入loading的占位符 */ + me.execCommand('inserthtml', loadingHtml); + + /* 判断后端配置是否没有加载成功 */ + if (!me.getOpt(filetype + 'ActionName')) { + errorHandler(me.getLang('autoupload.errorLoadConfig')); + return; + } + /* 判断文件大小是否超出限制 */ + if(file.size > maxSize) { + errorHandler(me.getLang('autoupload.exceedSizeError')); + return; + } + /* 判断文件格式是否超出允许 */ + var fileext = file.name ? file.name.substr(file.name.lastIndexOf('.')):''; + if ((fileext && filetype != 'image') || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) { + errorHandler(me.getLang('autoupload.exceedTypeError')); + return; + } + + /* 创建Ajax并提交 */ + var xhr = new XMLHttpRequest(), + fd = new FormData(), + params = utils.serializeParam(me.queryCommandValue('serverparam')) || '', + url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params); + + fd.append(fieldName, file, file.name || ('blob.' + file.type.substr('image/'.length))); + fd.append('type', 'ajax'); + xhr.open("post", url, true); + xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + xhr.addEventListener('load', function (e) { + try{ + var json = (new Function("return " + utils.trim(e.target.response)))(); + if (json.state == 'SUCCESS' && json.url) { + successHandler(json); + } else { + errorHandler(json.state); + } + }catch(er){ + errorHandler(me.getLang('autoupload.loadError')); + } + }); + xhr.send(fd); + } + + function getPasteImage(e){ + return e.clipboardData && e.clipboardData.items && e.clipboardData.items.length == 1 && /^image\//.test(e.clipboardData.items[0].type) ? e.clipboardData.items:null; + } + function getDropImage(e){ + return e.dataTransfer && e.dataTransfer.files ? e.dataTransfer.files:null; + } + + return { + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(n){ + if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + utils.each(root.getNodesByTagName('p'),function(n){ + if (/\bloadpara\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + }, + bindEvents:{ + //插入粘贴板的图片,拖放插入图片 + 'ready':function(e){ + var me = this; + if(window.FormData && window.FileReader) { + domUtils.on(me.body, 'paste drop', function(e){ + var hasImg = false, + items; + //获取粘贴板文件列表或者拖放文件列表 + items = e.type == 'paste' ? getPasteImage(e):getDropImage(e); + if(items){ + var len = items.length, + file; + while (len--){ + file = items[len]; + if(file.getAsFile) file = file.getAsFile(); + if(file && file.size > 0) { + sendAndInsertFile(file, me); + hasImg = true; + } + } + hasImg && e.preventDefault(); + } + + }); + //取消拖放图片时出现的文字光标位置提示 + domUtils.on(me.body, 'dragover', function (e) { + if(e.dataTransfer.types[0] == 'Files') { + e.preventDefault(); + } + }); + + //设置loading的样式 + utils.cssRule('loading', + '.loadingclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\n' + + '.loaderrorclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' + + '}', + this.document); + } + } + } + } +}); + +// plugins/autosave.js +UE.plugin.register('autosave', function (){ + + var me = this, + //无限循环保护 + lastSaveTime = new Date(), + //最小保存间隔时间 + MIN_TIME = 20, + //auto save key + saveKey = null; + + function save ( editor ) { + + var saveData; + + if ( new Date() - lastSaveTime < MIN_TIME ) { + return; + } + + if ( !editor.hasContents() ) { + //这里不能调用命令来删除, 会造成事件死循环 + saveKey && me.removePreferences( saveKey ); + return; + } + + lastSaveTime = new Date(); + + editor._saveFlag = null; + + saveData = me.body.innerHTML; + + if ( editor.fireEvent( "beforeautosave", { + content: saveData + } ) === false ) { + return; + } + + me.setPreferences( saveKey, saveData ); + + editor.fireEvent( "afterautosave", { + content: saveData + } ); + + } + + return { + defaultOptions: { + //默认间隔时间 + saveInterval: 500 + }, + bindEvents:{ + 'ready':function(){ + + var _suffix = "-drafts-data", + key = null; + + if ( me.key ) { + key = me.key + _suffix; + } else { + key = ( me.container.parentNode.id || 'ue-common' ) + _suffix; + } + + //页面地址+编辑器ID 保持唯一 + saveKey = ( location.protocol + location.host + location.pathname ).replace( /[.:\/]/g, '_' ) + key; + + }, + + 'contentchange': function () { + + if ( !saveKey ) { + return; + } + + if ( me._saveFlag ) { + window.clearTimeout( me._saveFlag ); + } + + if ( me.options.saveInterval > 0 ) { + + me._saveFlag = window.setTimeout( function () { + + save( me ); + + }, me.options.saveInterval ); + + } else { + + save(me); + + } + + + } + }, + commands:{ + 'clearlocaldata':{ + execCommand:function (cmd, name) { + if ( saveKey && me.getPreferences( saveKey ) ) { + me.removePreferences( saveKey ) + } + }, + notNeedUndo: true, + ignoreContentChange:true + }, + + 'getlocaldata':{ + execCommand:function (cmd, name) { + return saveKey ? me.getPreferences( saveKey ) || '' : ''; + }, + notNeedUndo: true, + ignoreContentChange:true + }, + + 'drafts':{ + execCommand:function (cmd, name) { + if ( saveKey ) { + me.body.innerHTML = me.getPreferences( saveKey ) || '

    '+domUtils.fillHtml+'

    '; + me.focus(true); + } + }, + queryCommandState: function () { + return saveKey ? ( me.getPreferences( saveKey ) === null ? -1 : 0 ) : -1; + }, + notNeedUndo: true, + ignoreContentChange:true + } + } + } + +}); + +// plugins/charts.js +UE.plugin.register('charts', function (){ + + var me = this; + + return { + bindEvents: { + 'chartserror': function () { + } + }, + commands:{ + 'charts': { + execCommand: function ( cmd, data ) { + + var tableNode = domUtils.findParentByTagName(this.selection.getRange().startContainer, 'table', true), + flagText = [], + config = {}; + + if ( !tableNode ) { + return false; + } + + if ( !validData( tableNode ) ) { + me.fireEvent( "chartserror" ); + return false; + } + + config.title = data.title || ''; + config.subTitle = data.subTitle || ''; + config.xTitle = data.xTitle || ''; + config.yTitle = data.yTitle || ''; + config.suffix = data.suffix || ''; + config.tip = data.tip || ''; + //数据对齐方式 + config.dataFormat = data.tableDataFormat || ''; + //图表类型 + config.chartType = data.chartType || 0; + + for ( var key in config ) { + + if ( !config.hasOwnProperty( key ) ) { + continue; + } + + flagText.push( key+":"+config[ key ] ); + + } + + tableNode.setAttribute( "data-chart", flagText.join( ";" ) ); + domUtils.addClass( tableNode, "edui-charts-table" ); + + + + }, + queryCommandState: function ( cmd, name ) { + + var tableNode = domUtils.findParentByTagName(this.selection.getRange().startContainer, 'table', true); + return tableNode && validData( tableNode ) ? 0 : -1; + + } + } + }, + inputRule:function(root){ + utils.each(root.getNodesByTagName('table'),function( tableNode ){ + + if ( tableNode.getAttr("data-chart") !== undefined ) { + tableNode.setAttr("style"); + } + + }) + + }, + outputRule:function(root){ + utils.each(root.getNodesByTagName('table'),function( tableNode ){ + + if ( tableNode.getAttr("data-chart") !== undefined ) { + tableNode.setAttr("style", "display: none;"); + } + + }) + + } + } + + function validData ( table ) { + + var firstRows = null, + cellCount = 0; + + //行数不够 + if ( table.rows.length < 2 ) { + return false; + } + + //列数不够 + if ( table.rows[0].cells.length < 2 ) { + return false; + } + + //第一行所有cell必须是th + firstRows = table.rows[ 0 ].cells; + cellCount = firstRows.length; + + for ( var i = 0, cell; cell = firstRows[ i ]; i++ ) { + + if ( cell.tagName.toLowerCase() !== 'th' ) { + return false; + } + + } + + for ( var i = 1, row; row = table.rows[ i ]; i++ ) { + + //每行单元格数不匹配, 返回false + if ( row.cells.length != cellCount ) { + return false; + } + + //第一列不是th也返回false + if ( row.cells[0].tagName.toLowerCase() !== 'th' ) { + return false; + } + + for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) { + + var value = utils.trim( ( cell.innerText || cell.textContent || '' ) ); + + value = value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' ); + + //必须是数字 + if ( !/^\d*\.?\d+$/.test( value ) ) { + return false; + } + + } + + } + + return true; + + } + +}); + +// plugins/section.js +/** + * 目录大纲支持插件 + * @file + * @since 1.3.0 + */ +UE.plugin.register('section', function (){ + /* 目录节点对象 */ + function Section(option){ + this.tag = ''; + this.level = -1, + this.dom = null; + this.nextSection = null; + this.previousSection = null; + this.parentSection = null; + this.startAddress = []; + this.endAddress = []; + this.children = []; + } + function getSection(option) { + var section = new Section(); + return utils.extend(section, option); + } + function getNodeFromAddress(startAddress, root) { + var current = root; + for(var i = 0;i < startAddress.length; i++) { + if(!current.childNodes) return null; + current = current.childNodes[startAddress[i]]; + } + return current; + } + + var me = this; + + return { + bindMultiEvents:{ + type: 'aftersetcontent afterscencerestore', + handler: function(){ + me.fireEvent('updateSections'); + } + }, + bindEvents:{ + /* 初始化、拖拽、粘贴、执行setcontent之后 */ + 'ready': function (){ + me.fireEvent('updateSections'); + domUtils.on(me.body, 'drop paste', function(){ + me.fireEvent('updateSections'); + }); + }, + /* 执行paragraph命令之后 */ + 'afterexeccommand': function (type, cmd) { + if(cmd == 'paragraph') { + me.fireEvent('updateSections'); + } + }, + /* 部分键盘操作,触发updateSections事件 */ + 'keyup': function (type, e) { + var me = this, + range = me.selection.getRange(); + if(range.collapsed != true) { + me.fireEvent('updateSections'); + } else { + var keyCode = e.keyCode || e.which; + if(keyCode == 13 || keyCode == 8 || keyCode == 46) { + me.fireEvent('updateSections'); + } + } + } + }, + commands:{ + 'getsections': { + execCommand: function (cmd, levels) { + var levelFn = levels || ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; + + for (var i = 0; i < levelFn.length; i++) { + if (typeof levelFn[i] == 'string') { + levelFn[i] = function(fn){ + return function(node){ + return node.tagName == fn.toUpperCase() + }; + }(levelFn[i]); + } else if (typeof levelFn[i] != 'function') { + levelFn[i] = function (node) { + return null; + } + } + } + function getSectionLevel(node) { + for (var i = 0; i < levelFn.length; i++) { + if (levelFn[i](node)) return i; + } + return -1; + } + + var me = this, + Directory = getSection({'level':-1, 'title':'root'}), + previous = Directory; + + function traversal(node, Directory) { + var level, + tmpSection = null, + parent, + child, + children = node.childNodes; + for (var i = 0, len = children.length; i < len; i++) { + child = children[i]; + level = getSectionLevel(child); + if (level >= 0) { + var address = me.selection.getRange().selectNode(child).createAddress(true).startAddress, + current = getSection({ + 'tag': child.tagName, + 'title': child.innerText || child.textContent || '', + 'level': level, + 'dom': child, + 'startAddress': utils.clone(address, []), + 'endAddress': utils.clone(address, []), + 'children': [] + }); + previous.nextSection = current; + current.previousSection = previous; + parent = previous; + while(level <= parent.level){ + parent = parent.parentSection; + } + current.parentSection = parent; + parent.children.push(current); + tmpSection = previous = current; + } else { + child.nodeType === 1 && traversal(child, Directory); + tmpSection && tmpSection.endAddress[tmpSection.endAddress.length - 1] ++; + } + } + } + traversal(me.body, Directory); + return Directory; + }, + notNeedUndo: true + }, + 'movesection': { + execCommand: function (cmd, sourceSection, targetSection, isAfter) { + + var me = this, + targetAddress, + target; + + if(!sourceSection || !targetSection || targetSection.level == -1) return; + + targetAddress = isAfter ? targetSection.endAddress:targetSection.startAddress; + target = getNodeFromAddress(targetAddress, me.body); + + /* 判断目标地址是否被源章节包含 */ + if(!targetAddress || !target || isContainsAddress(sourceSection.startAddress, sourceSection.endAddress, targetAddress)) return; + + var startNode = getNodeFromAddress(sourceSection.startAddress, me.body), + endNode = getNodeFromAddress(sourceSection.endAddress, me.body), + current, + nextNode; + + if(isAfter) { + current = endNode; + while ( current && !(domUtils.getPosition( startNode, current ) & domUtils.POSITION_FOLLOWING) ) { + nextNode = current.previousSibling; + domUtils.insertAfter(target, current); + if(current == startNode) break; + current = nextNode; + } + } else { + current = startNode; + while ( current && !(domUtils.getPosition( current, endNode ) & domUtils.POSITION_FOLLOWING) ) { + nextNode = current.nextSibling; + target.parentNode.insertBefore(current, target); + if(current == endNode) break; + current = nextNode; + } + } + + me.fireEvent('updateSections'); + + /* 获取地址的包含关系 */ + function isContainsAddress(startAddress, endAddress, addressTarget){ + var isAfterStartAddress = false, + isBeforeEndAddress = false; + for(var i = 0; i< startAddress.length; i++){ + if(i >= addressTarget.length) break; + if(addressTarget[i] > startAddress[i]) { + isAfterStartAddress = true; + break; + } else if(addressTarget[i] < startAddress[i]) { + break; + } + } + for(var i = 0; i< endAddress.length; i++){ + if(i >= addressTarget.length) break; + if(addressTarget[i] < startAddress[i]) { + isBeforeEndAddress = true; + break; + } else if(addressTarget[i] > startAddress[i]) { + break; + } + } + return isAfterStartAddress && isBeforeEndAddress; + } + } + }, + 'deletesection': { + execCommand: function (cmd, section, keepChildren) { + var me = this; + + if(!section) return; + + function getNodeFromAddress(startAddress) { + var current = me.body; + for(var i = 0;i < startAddress.length; i++) { + if(!current.childNodes) return null; + current = current.childNodes[startAddress[i]]; + } + return current; + } + + var startNode = getNodeFromAddress(section.startAddress), + endNode = getNodeFromAddress(section.endAddress), + current = startNode, + nextNode; + + if(!keepChildren) { + while ( current && domUtils.inDoc(endNode, me.document) && !(domUtils.getPosition( current, endNode ) & domUtils.POSITION_FOLLOWING) ) { + nextNode = current.nextSibling; + domUtils.remove(current); + current = nextNode; + } + } else { + domUtils.remove(current); + } + + me.fireEvent('updateSections'); + } + }, + 'selectsection': { + execCommand: function (cmd, section) { + if(!section && !section.dom) return false; + var me = this, + range = me.selection.getRange(), + address = { + 'startAddress':utils.clone(section.startAddress, []), + 'endAddress':utils.clone(section.endAddress, []) + }; + address.endAddress[address.endAddress.length - 1]++; + range.moveToAddress(address).select().scrollToView(); + return true; + }, + notNeedUndo: true + }, + 'scrolltosection': { + execCommand: function (cmd, section) { + if(!section && !section.dom) return false; + var me = this, + range = me.selection.getRange(), + address = { + 'startAddress':section.startAddress, + 'endAddress':section.endAddress + }; + address.endAddress[address.endAddress.length - 1]++; + range.moveToAddress(address).scrollToView(); + return true; + }, + notNeedUndo: true + } + } + } +}); + +// plugins/simpleupload.js +/** + * @description + * 简单上传:点击按钮,直接选择文件上传 + * @author Jinqn + * @date 2014-03-31 + */ +UE.plugin.register('simpleupload', function (){ + var me = this, + isLoaded = false, + containerBtn; + + function initUploadBtn(){ + var w = containerBtn.offsetWidth || 20, + h = containerBtn.offsetHeight || 20, + btnIframe = document.createElement('iframe'), + btnStyle = 'display:block;width:' + w + 'px;height:' + h + 'px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;'; + + domUtils.on(btnIframe, 'load', function(){ + + var timestrap = (+new Date()).toString(36), + wrapper, + btnIframeDoc, + btnIframeBody; + + btnIframeDoc = (btnIframe.contentDocument || btnIframe.contentWindow.document); + btnIframeBody = btnIframeDoc.body; + wrapper = btnIframeDoc.createElement('div'); + + wrapper.innerHTML = '
    ' + + '' + + '
    ' + + ''; + + wrapper.className = 'edui-' + me.options.theme; + wrapper.id = me.ui.id + '_iframeupload'; + btnIframeBody.style.cssText = btnStyle; + btnIframeBody.style.width = w + 'px'; + btnIframeBody.style.height = h + 'px'; + btnIframeBody.appendChild(wrapper); + + if (btnIframeBody.parentNode) { + btnIframeBody.parentNode.style.width = w + 'px'; + btnIframeBody.parentNode.style.height = w + 'px'; + } + + var form = btnIframeDoc.getElementById('edui_form_' + timestrap); + var input = btnIframeDoc.getElementById('edui_input_' + timestrap); + var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap); + + domUtils.on(input, 'change', function(){ + if(!input.value) return; + var loadingId = 'loading_' + (+new Date()).toString(36); + var params = utils.serializeParam(me.queryCommandValue('serverparam')) || ''; + + var imageActionUrl = me.getActionUrl(me.getOpt('imageActionName')); + var allowFiles = me.getOpt('imageAllowFiles'); + + me.focus(); + me.execCommand('inserthtml', ''); + + function callback(){ + try{ + var link, json, loader, + body = (iframe.contentDocument || iframe.contentWindow.document).body, + result = body.innerText || body.textContent || ''; + json = (new Function("return " + result))(); + link = me.options.imageUrlPrefix + json.url; + if(json.state == 'SUCCESS' && json.url) { + loader = me.document.getElementById(loadingId); + loader.setAttribute('src', link); + loader.setAttribute('_src', link); + loader.setAttribute('title', json.title || ''); + loader.setAttribute('alt', json.original || ''); + loader.removeAttribute('id'); + domUtils.removeClasses(loader, 'loadingclass'); + } else { + showErrorLoader && showErrorLoader(json.state); + } + }catch(er){ + showErrorLoader && showErrorLoader(me.getLang('simpleupload.loadError')); + } + form.reset(); + domUtils.un(iframe, 'load', callback); + } + function showErrorLoader(title){ + if(loadingId) { + var loader = me.document.getElementById(loadingId); + loader && domUtils.remove(loader); + me.fireEvent('showmessage', { + 'id': loadingId, + 'content': title, + 'type': 'error', + 'timeout': 4000 + }); + } + } + + /* 判断后端配置是否没有加载成功 */ + if (!me.getOpt('imageActionName')) { + errorHandler(me.getLang('autoupload.errorLoadConfig')); + return; + } + // 判断文件格式是否错误 + var filename = input.value, + fileext = filename ? filename.substr(filename.lastIndexOf('.')):''; + if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) { + showErrorLoader(me.getLang('simpleupload.exceedTypeError')); + return; + } + + domUtils.on(iframe, 'load', callback); + form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?':'&') + params); + form.submit(); + }); + + var stateTimer; + me.addListener('selectionchange', function () { + clearTimeout(stateTimer); + stateTimer = setTimeout(function() { + var state = me.queryCommandState('simpleupload'); + if (state == -1) { + input.disabled = 'disabled'; + } else { + input.disabled = false; + } + }, 400); + }); + isLoaded = true; + }); + + btnIframe.style.cssText = btnStyle; + containerBtn.appendChild(btnIframe); + } + + return { + bindEvents:{ + 'ready': function() { + //设置loading的样式 + utils.cssRule('loading', + '.loadingclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loading.gif\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n' + + '.loaderrorclass{display:inline-block;cursor:default;background: url(\'' + + this.options.themePath + + this.options.theme +'/images/loaderror.png\') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;' + + '}', + this.document); + }, + /* 初始化简单上传按钮 */ + 'simpleuploadbtnready': function(type, container) { + containerBtn = container; + me.afterConfigReady(initUploadBtn); + } + }, + outputRule: function(root){ + utils.each(root.getNodesByTagName('img'),function(n){ + if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr('class'))) { + n.parentNode.removeChild(n); + } + }); + }, + commands: { + 'simpleupload': { + queryCommandState: function () { + return isLoaded ? 0:-1; + } + } + } + } +}); + +// plugins/serverparam.js +/** + * 服务器提交的额外参数列表设置插件 + * @file + * @since 1.2.6.1 + */ +UE.plugin.register('serverparam', function (){ + + var me = this, + serverParam = {}; + + return { + commands:{ + /** + * 修改服务器提交的额外参数列表,清除所有项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.execCommand('serverparam'); + * editor.queryCommandValue('serverparam'); //返回空 + * ``` + */ + /** + * 修改服务器提交的额外参数列表,删除指定项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } key 要清除的属性 + * @example + * ```javascript + * editor.execCommand('serverparam', 'name'); //删除属性name + * ``` + */ + /** + * 修改服务器提交的额外参数列表,使用键值添加项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { String } key 要添加的属性 + * @param { String } value 要添加属性的值 + * @example + * ```javascript + * editor.execCommand('serverparam', 'name', 'hello'); + * editor.queryCommandValue('serverparam'); //返回对象 {'name': 'hello'} + * ``` + */ + /** + * 修改服务器提交的额外参数列表,传入键值对对象添加多项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Object } key 传入的键值对对象 + * @example + * ```javascript + * editor.execCommand('serverparam', {'name': 'hello'}); + * editor.queryCommandValue('serverparam'); //返回对象 {'name': 'hello'} + * ``` + */ + /** + * 修改服务器提交的额外参数列表,使用自定义函数添加多项 + * @command serverparam + * @method execCommand + * @param { String } cmd 命令字符串 + * @param { Function } key 自定义获取参数的函数 + * @example + * ```javascript + * editor.execCommand('serverparam', function(editor){ + * return {'key': 'value'}; + * }); + * editor.queryCommandValue('serverparam'); //返回对象 {'key': 'value'} + * ``` + */ + + /** + * 获取服务器提交的额外参数列表 + * @command serverparam + * @method queryCommandValue + * @param { String } cmd 命令字符串 + * @example + * ```javascript + * editor.queryCommandValue( 'serverparam' ); //返回对象 {'key': 'value'} + * ``` + */ + 'serverparam':{ + execCommand:function (cmd, key, value) { + if (key === undefined || key === null) { //不传参数,清空列表 + serverParam = {}; + } else if (utils.isString(key)) { //传入键值 + if(value === undefined || value === null) { + delete serverParam[key]; + } else { + serverParam[key] = value; + } + } else if (utils.isObject(key)) { //传入对象,覆盖列表项 + utils.extend(serverParam, key, true); + } else if (utils.isFunction(key)){ //传入函数,添加列表项 + utils.extend(serverParam, key(), true); + } + }, + queryCommandValue: function(){ + return serverParam || {}; + } + } + } + } +}); + + +// plugins/insertfile.js +/** + * 插入附件 + */ +UE.plugin.register('insertfile', function (){ + + var me = this; + + function getFileIcon(url){ + var ext = url.substr(url.lastIndexOf('.') + 1).toLowerCase(), + maps = { + "rar":"icon_rar.gif", + "zip":"icon_rar.gif", + "tar":"icon_rar.gif", + "gz":"icon_rar.gif", + "bz2":"icon_rar.gif", + "doc":"icon_doc.gif", + "docx":"icon_doc.gif", + "pdf":"icon_pdf.gif", + "mp3":"icon_mp3.gif", + "xls":"icon_xls.gif", + "chm":"icon_chm.gif", + "ppt":"icon_ppt.gif", + "pptx":"icon_ppt.gif", + "avi":"icon_mv.gif", + "rmvb":"icon_mv.gif", + "wmv":"icon_mv.gif", + "flv":"icon_mv.gif", + "swf":"icon_mv.gif", + "rm":"icon_mv.gif", + "exe":"icon_exe.gif", + "psd":"icon_psd.gif", + "txt":"icon_txt.gif", + "jpg":"icon_jpg.gif", + "png":"icon_jpg.gif", + "jpeg":"icon_jpg.gif", + "gif":"icon_jpg.gif", + "ico":"icon_jpg.gif", + "bmp":"icon_jpg.gif" + }; + return maps[ext] ? maps[ext]:maps['txt']; + } + + return { + commands:{ + 'insertfile': { + execCommand: function (command, filelist){ + filelist = utils.isArray(filelist) ? filelist : [filelist]; + + var i, item, icon, title, + html = '', + URL = me.getOpt('UEDITOR_HOME_URL'), + iconDir = URL + (URL.substr(URL.length - 1) == '/' ? '':'/') + 'dialogs/attachment/fileTypeImages/'; + for (i = 0; i < filelist.length; i++) { + item = filelist[i]; + icon = iconDir + getFileIcon(item.url); + title = item.title || item.url.substr(item.url.lastIndexOf('/') + 1); + html += '

    ' + + '' + + '' + title + '' + + '

    '; + } + me.execCommand('insertHtml', html); + } + } + } + } +}); + + + + +// plugins/xssFilter.js +/** + * @file xssFilter.js + * @desc xss过滤器 + * @author robbenmu + */ + +UE.plugins.xssFilter = function() { + + var config = UEDITOR_CONFIG; + var whitList = config.whitList; + + function filter(node) { + + var tagName = node.tagName; + var attrs = node.attrs; + + if (!whitList.hasOwnProperty(tagName)) { + node.parentNode.removeChild(node); + return false; + } + + UE.utils.each(attrs, function (val, key) { + + if (whitList[tagName].indexOf(key) === -1) { + node.setAttr(key); + } + }); + } + + // 添加inserthtml\paste等操作用的过滤规则 + if (whitList && config.xssFilterRules) { + this.options.filterRules = function () { + + var result = {}; + + UE.utils.each(whitList, function(val, key) { + result[key] = function (node) { + return filter(node); + }; + }); + + return result; + }(); + } + + var tagList = []; + + UE.utils.each(whitList, function (val, key) { + tagList.push(key); + }); + + // 添加input过滤规则 + // + if (whitList && config.inputXssFilter) { + this.addInputRule(function (root) { + + root.traversal(function(node) { + if (node.type !== 'element') { + return false; + } + filter(node); + }); + }); + } + // 添加output过滤规则 + // + if (whitList && config.outputXssFilter) { + this.addOutputRule(function (root) { + + root.traversal(function(node) { + if (node.type !== 'element') { + return false; + } + filter(node); + }); + }); + } + +}; + + +// ui/ui.js +var baidu = baidu || {}; +baidu.editor = baidu.editor || {}; +UE.ui = baidu.editor.ui = {}; + +// ui/uiutils.js +(function (){ + var browser = baidu.editor.browser, + domUtils = baidu.editor.dom.domUtils; + + var magic = '$EDITORUI'; + var root = window[magic] = {}; + var uidMagic = 'ID' + magic; + var uidCount = 0; + + var uiUtils = baidu.editor.ui.uiUtils = { + uid: function (obj){ + return (obj ? obj[uidMagic] || (obj[uidMagic] = ++ uidCount) : ++ uidCount); + }, + hook: function ( fn, callback ) { + var dg; + if (fn && fn._callbacks) { + dg = fn; + } else { + dg = function (){ + var q; + if (fn) { + q = fn.apply(this, arguments); + } + var callbacks = dg._callbacks; + var k = callbacks.length; + while (k --) { + var r = callbacks[k].apply(this, arguments); + if (q === undefined) { + q = r; + } + } + return q; + }; + dg._callbacks = []; + } + dg._callbacks.push(callback); + return dg; + }, + createElementByHtml: function (html){ + var el = document.createElement('div'); + el.innerHTML = html; + el = el.firstChild; + el.parentNode.removeChild(el); + return el; + }, + getViewportElement: function (){ + return (browser.ie && browser.quirks) ? + document.body : document.documentElement; + }, + getClientRect: function (element){ + var bcr; + //trace IE6下在控制编辑器显隐时可能会报错,catch一下 + try{ + bcr = element.getBoundingClientRect(); + }catch(e){ + bcr={left:0,top:0,height:0,width:0} + } + var rect = { + left: Math.round(bcr.left), + top: Math.round(bcr.top), + height: Math.round(bcr.bottom - bcr.top), + width: Math.round(bcr.right - bcr.left) + }; + var doc; + while ((doc = element.ownerDocument) !== document && + (element = domUtils.getWindow(doc).frameElement)) { + bcr = element.getBoundingClientRect(); + rect.left += bcr.left; + rect.top += bcr.top; + } + rect.bottom = rect.top + rect.height; + rect.right = rect.left + rect.width; + return rect; + }, + getViewportRect: function (){ + var viewportEl = uiUtils.getViewportElement(); + var width = (window.innerWidth || viewportEl.clientWidth) | 0; + var height = (window.innerHeight ||viewportEl.clientHeight) | 0; + return { + left: 0, + top: 0, + height: height, + width: width, + bottom: height, + right: width + }; + }, + setViewportOffset: function (element, offset){ + var rect; + var fixedLayer = uiUtils.getFixedLayer(); + if (element.parentNode === fixedLayer) { + element.style.left = offset.left + 'px'; + element.style.top = offset.top + 'px'; + } else { + domUtils.setViewportOffset(element, offset); + } + }, + getEventOffset: function (evt){ + var el = evt.target || evt.srcElement; + var rect = uiUtils.getClientRect(el); + var offset = uiUtils.getViewportOffsetByEvent(evt); + return { + left: offset.left - rect.left, + top: offset.top - rect.top + }; + }, + getViewportOffsetByEvent: function (evt){ + var el = evt.target || evt.srcElement; + var frameEl = domUtils.getWindow(el).frameElement; + var offset = { + left: evt.clientX, + top: evt.clientY + }; + if (frameEl && el.ownerDocument !== document) { + var rect = uiUtils.getClientRect(frameEl); + offset.left += rect.left; + offset.top += rect.top; + } + return offset; + }, + setGlobal: function (id, obj){ + root[id] = obj; + return magic + '["' + id + '"]'; + }, + unsetGlobal: function (id){ + delete root[id]; + }, + copyAttributes: function (tgt, src){ + var attributes = src.attributes; + var k = attributes.length; + while (k --) { + var attrNode = attributes[k]; + if ( attrNode.nodeName != 'style' && attrNode.nodeName != 'class' && (!browser.ie || attrNode.specified) ) { + tgt.setAttribute(attrNode.nodeName, attrNode.nodeValue); + } + } + if (src.className) { + domUtils.addClass(tgt,src.className); + } + if (src.style.cssText) { + tgt.style.cssText += ';' + src.style.cssText; + } + }, + removeStyle: function (el, styleName){ + if (el.style.removeProperty) { + el.style.removeProperty(styleName); + } else if (el.style.removeAttribute) { + el.style.removeAttribute(styleName); + } else throw ''; + }, + contains: function (elA, elB){ + return elA && elB && (elA === elB ? false : ( + elA.contains ? elA.contains(elB) : + elA.compareDocumentPosition(elB) & 16 + )); + }, + startDrag: function (evt, callbacks,doc){ + var doc = doc || document; + var startX = evt.clientX; + var startY = evt.clientY; + function handleMouseMove(evt){ + var x = evt.clientX - startX; + var y = evt.clientY - startY; + callbacks.ondragmove(x, y,evt); + if (evt.stopPropagation) { + evt.stopPropagation(); + } else { + evt.cancelBubble = true; + } + } + if (doc.addEventListener) { + function handleMouseUp(evt){ + doc.removeEventListener('mousemove', handleMouseMove, true); + doc.removeEventListener('mouseup', handleMouseUp, true); + window.removeEventListener('mouseup', handleMouseUp, true); + callbacks.ondragstop(); + } + doc.addEventListener('mousemove', handleMouseMove, true); + doc.addEventListener('mouseup', handleMouseUp, true); + window.addEventListener('mouseup', handleMouseUp, true); + + evt.preventDefault(); + } else { + var elm = evt.srcElement; + elm.setCapture(); + function releaseCaptrue(){ + elm.releaseCapture(); + elm.detachEvent('onmousemove', handleMouseMove); + elm.detachEvent('onmouseup', releaseCaptrue); + elm.detachEvent('onlosecaptrue', releaseCaptrue); + callbacks.ondragstop(); + } + elm.attachEvent('onmousemove', handleMouseMove); + elm.attachEvent('onmouseup', releaseCaptrue); + elm.attachEvent('onlosecaptrue', releaseCaptrue); + evt.returnValue = false; + } + callbacks.ondragstart(); + }, + getFixedLayer: function (){ + var layer = document.getElementById('edui_fixedlayer'); + if (layer == null) { + layer = document.createElement('div'); + layer.id = 'edui_fixedlayer'; + document.body.appendChild(layer); + if (browser.ie && browser.version <= 8) { + layer.style.position = 'absolute'; + bindFixedLayer(); + setTimeout(updateFixedOffset); + } else { + layer.style.position = 'fixed'; + } + layer.style.left = '0'; + layer.style.top = '0'; + layer.style.width = '0'; + layer.style.height = '0'; + } + return layer; + }, + makeUnselectable: function (element){ + if (browser.opera || (browser.ie && browser.version < 9)) { + element.unselectable = 'on'; + if (element.hasChildNodes()) { + for (var i=0; i
    '; + } + }; + utils.inherits(Separator, UIBase); + +})(); + + +// ui/mask.js +///import core +///import uicore +(function (){ + var utils = baidu.editor.utils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + uiUtils = baidu.editor.ui.uiUtils; + + var Mask = baidu.editor.ui.Mask = function (options){ + this.initOptions(options); + this.initUIBase(); + }; + Mask.prototype = { + getHtmlTpl: function (){ + return '
    '; + }, + postRender: function (){ + var me = this; + domUtils.on(window, 'resize', function (){ + setTimeout(function (){ + if (!me.isHidden()) { + me._fill(); + } + }); + }); + }, + show: function (zIndex){ + this._fill(); + this.getDom().style.display = ''; + this.getDom().style.zIndex = zIndex; + }, + hide: function (){ + this.getDom().style.display = 'none'; + this.getDom().style.zIndex = ''; + }, + isHidden: function (){ + return this.getDom().style.display == 'none'; + }, + _onMouseDown: function (){ + return false; + }, + _onClick: function (e, target){ + this.fireEvent('click', e, target); + }, + _fill: function (){ + var el = this.getDom(); + var vpRect = uiUtils.getViewportRect(); + el.style.width = vpRect.width + 'px'; + el.style.height = vpRect.height + 'px'; + } + }; + utils.inherits(Mask, UIBase); +})(); + + +// ui/popup.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + Popup = baidu.editor.ui.Popup = function (options){ + this.initOptions(options); + this.initPopup(); + }; + + var allPopups = []; + function closeAllPopup( evt,el ){ + for ( var i = 0; i < allPopups.length; i++ ) { + var pop = allPopups[i]; + if (!pop.isHidden()) { + if (pop.queryAutoHide(el) !== false) { + if(evt&&/scroll/ig.test(evt.type)&&pop.className=="edui-wordpastepop") return; + pop.hide(); + } + } + } + + if(allPopups.length) + pop.editor.fireEvent("afterhidepop"); + } + + Popup.postHide = closeAllPopup; + + var ANCHOR_CLASSES = ['edui-anchor-topleft','edui-anchor-topright', + 'edui-anchor-bottomleft','edui-anchor-bottomright']; + Popup.prototype = { + SHADOW_RADIUS: 5, + content: null, + _hidden: false, + autoRender: true, + canSideLeft: true, + canSideUp: true, + initPopup: function (){ + this.initUIBase(); + allPopups.push( this ); + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ' + + ' ' + + '
    ' + + '
    ' + + this.getContentHtmlTpl() + + '
    ' + + '
    ' + + '
    '; + }, + getContentHtmlTpl: function (){ + if(this.content){ + if (typeof this.content == 'string') { + return this.content; + } + return this.content.renderHtml(); + }else{ + return '' + } + + }, + _UIBase_postRender: UIBase.prototype.postRender, + postRender: function (){ + + + if (this.content instanceof UIBase) { + this.content.postRender(); + } + + //捕获鼠标滚轮 + if( this.captureWheel && !this.captured ) { + + this.captured = true; + + var winHeight = ( document.documentElement.clientHeight || document.body.clientHeight ) - 80, + _height = this.getDom().offsetHeight, + _top = uiUtils.getClientRect( this.combox.getDom() ).top, + content = this.getDom('content'), + ifr = this.getDom('body').getElementsByTagName('iframe'), + me = this; + + ifr.length && ( ifr = ifr[0] ); + + while( _top + _height > winHeight ) { + _height -= 30; + } + content.style.height = _height + 'px'; + //同步更改iframe高度 + ifr && ( ifr.style.height = _height + 'px' ); + + //阻止在combox上的鼠标滚轮事件, 防止用户的正常操作被误解 + if( window.XMLHttpRequest ) { + + domUtils.on( content, ( 'onmousewheel' in document.body ) ? 'mousewheel' :'DOMMouseScroll' , function(e){ + + if(e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + + if( e.wheelDelta ) { + + content.scrollTop -= ( e.wheelDelta / 120 )*60; + + } else { + + content.scrollTop -= ( e.detail / -3 )*60; + + } + + }); + + } else { + + //ie6 + domUtils.on( this.getDom(), 'mousewheel' , function(e){ + + e.returnValue = false; + + me.getDom('content').scrollTop -= ( e.wheelDelta / 120 )*60; + + }); + + } + + } + this.fireEvent('postRenderAfter'); + this.hide(true); + this._UIBase_postRender(); + }, + _doAutoRender: function (){ + if (!this.getDom() && this.autoRender) { + this.render(); + } + }, + mesureSize: function (){ + var box = this.getDom('content'); + return uiUtils.getClientRect(box); + }, + fitSize: function (){ + if( this.captureWheel && this.sized ) { + return this.__size; + } + this.sized = true; + var popBodyEl = this.getDom('body'); + popBodyEl.style.width = ''; + popBodyEl.style.height = ''; + var size = this.mesureSize(); + if( this.captureWheel ) { + popBodyEl.style.width = -(-20 -size.width) + 'px'; + var height = parseInt( this.getDom('content').style.height, 10 ); + !window.isNaN( height ) && ( size.height = height ); + } else { + popBodyEl.style.width = size.width + 'px'; + } + popBodyEl.style.height = size.height + 'px'; + this.__size = size; + this.captureWheel && (this.getDom('content').style.overflow = 'auto'); + return size; + }, + showAnchor: function ( element, hoz ){ + this.showAnchorRect( uiUtils.getClientRect( element ), hoz ); + }, + showAnchorRect: function ( rect, hoz, adj ){ + this._doAutoRender(); + var vpRect = uiUtils.getViewportRect(); + this.getDom().style.visibility = 'hidden'; + this._show(); + var popSize = this.fitSize(); + + var sideLeft, sideUp, left, top; + if (hoz) { + sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width); + sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height); + left = (sideLeft ? rect.left - popSize.width : rect.right); + top = (sideUp ? rect.bottom - popSize.height : rect.top); + } else { + sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width); + sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height); + left = (sideLeft ? rect.right - popSize.width : rect.left); + top = (sideUp ? rect.top - popSize.height : rect.bottom); + } + + var popEl = this.getDom(); + uiUtils.setViewportOffset(popEl, { + left: left, + top: top + }); + domUtils.removeClasses(popEl, ANCHOR_CLASSES); + popEl.className += ' ' + ANCHOR_CLASSES[(sideUp ? 1 : 0) * 2 + (sideLeft ? 1 : 0)]; + if(this.editor){ + popEl.style.zIndex = this.editor.container.style.zIndex * 1 + 10; + baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = popEl.style.zIndex - 1; + } + this.getDom().style.visibility = 'visible'; + + }, + showAt: function (offset) { + var left = offset.left; + var top = offset.top; + var rect = { + left: left, + top: top, + right: left, + bottom: top, + height: 0, + width: 0 + }; + this.showAnchorRect(rect, false, true); + }, + _show: function (){ + if (this._hidden) { + var box = this.getDom(); + box.style.display = ''; + this._hidden = false; +// if (box.setActive) { +// box.setActive(); +// } + this.fireEvent('show'); + } + }, + isHidden: function (){ + return this._hidden; + }, + show: function (){ + this._doAutoRender(); + this._show(); + }, + hide: function (notNofity){ + if (!this._hidden && this.getDom()) { + this.getDom().style.display = 'none'; + this._hidden = true; + if (!notNofity) { + this.fireEvent('hide'); + } + } + }, + queryAutoHide: function (el){ + return !el || !uiUtils.contains(this.getDom(), el); + } + }; + utils.inherits(Popup, UIBase); + + domUtils.on( document, 'mousedown', function ( evt ) { + var el = evt.target || evt.srcElement; + closeAllPopup( evt,el ); + } ); + domUtils.on( window, 'scroll', function (evt,el) { + closeAllPopup( evt,el ); + } ); + +})(); + + +// ui/colorpicker.js +///import core +///import uicore +(function (){ + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase, + ColorPicker = baidu.editor.ui.ColorPicker = function (options){ + this.initOptions(options); + this.noColorText = this.noColorText || this.editor.getLang("clearColor"); + this.initUIBase(); + }; + + ColorPicker.prototype = { + getHtmlTpl: function (){ + return genColorPicker(this.noColorText,this.editor); + }, + _onTableClick: function (evt){ + var tgt = evt.target || evt.srcElement; + var color = tgt.getAttribute('data-color'); + if (color) { + this.fireEvent('pickcolor', color); + } + }, + _onTableOver: function (evt){ + var tgt = evt.target || evt.srcElement; + var color = tgt.getAttribute('data-color'); + if (color) { + this.getDom('preview').style.backgroundColor = color; + } + }, + _onTableOut: function (){ + this.getDom('preview').style.backgroundColor = ''; + }, + _onPickNoColor: function (){ + this.fireEvent('picknocolor'); + } + }; + utils.inherits(ColorPicker, UIBase); + + var COLORS = ( + 'ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,' + + 'f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,' + + 'd8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,' + + 'bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,' + + 'a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,' + + '7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,' + + 'c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,').split(','); + + function genColorPicker(noColorText,editor){ + var html = '
    ' + + '
    ' + + '
    ' + + '
    '+ noColorText +'
    ' + + '
    ' + + '' + + ''+ + ''; + for (var i=0; i':'')+''; + } + html += i<70 ? '':''; + } + html += '
    '+editor.getLang("themeColor")+'
    '+editor.getLang("standardColor")+'
    '; + return html; + } +})(); + + +// ui/tablepicker.js +///import core +///import uicore +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase; + + var TablePicker = baidu.editor.ui.TablePicker = function (options){ + this.initOptions(options); + this.initTablePicker(); + }; + TablePicker.prototype = { + defaultNumRows: 10, + defaultNumCols: 10, + maxNumRows: 20, + maxNumCols: 20, + numRows: 10, + numCols: 10, + lengthOfCellSide: 22, + initTablePicker: function (){ + this.initUIBase(); + }, + getHtmlTpl: function (){ + var me = this; + return '
    ' + + '
    ' + + '
    ' + + '' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + }, + _UIBase_render: UIBase.prototype.render, + render: function (holder){ + this._UIBase_render(holder); + this.getDom('label').innerHTML = '0'+this.editor.getLang("t_row")+' x 0'+this.editor.getLang("t_col"); + }, + _track: function (numCols, numRows){ + var style = this.getDom('overlay').style; + var sideLen = this.lengthOfCellSide; + style.width = numCols * sideLen + 'px'; + style.height = numRows * sideLen + 'px'; + var label = this.getDom('label'); + label.innerHTML = numCols +this.editor.getLang("t_col")+' x ' + numRows + this.editor.getLang("t_row"); + this.numCols = numCols; + this.numRows = numRows; + }, + _onMouseOver: function (evt, el){ + var rel = evt.relatedTarget || evt.fromElement; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.getDom('label').innerHTML = '0'+this.editor.getLang("t_col")+' x 0'+this.editor.getLang("t_row"); + this.getDom('overlay').style.visibility = ''; + } + }, + _onMouseOut: function (evt, el){ + var rel = evt.relatedTarget || evt.toElement; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.getDom('label').innerHTML = '0'+this.editor.getLang("t_col")+' x 0'+this.editor.getLang("t_row"); + this.getDom('overlay').style.visibility = 'hidden'; + } + }, + _onMouseMove: function (evt, el){ + var style = this.getDom('overlay').style; + var offset = uiUtils.getEventOffset(evt); + var sideLen = this.lengthOfCellSide; + var numCols = Math.ceil(offset.left / sideLen); + var numRows = Math.ceil(offset.top / sideLen); + this._track(numCols, numRows); + }, + _onClick: function (){ + this.fireEvent('picktable', this.numCols, this.numRows); + } + }; + utils.inherits(TablePicker, UIBase); +})(); + + +// ui/stateful.js +(function (){ + var browser = baidu.editor.browser, + domUtils = baidu.editor.dom.domUtils, + uiUtils = baidu.editor.ui.uiUtils; + + var TPL_STATEFUL = 'onmousedown="$$.Stateful_onMouseDown(event, this);"' + + ' onmouseup="$$.Stateful_onMouseUp(event, this);"' + + ( browser.ie ? ( + ' onmouseenter="$$.Stateful_onMouseEnter(event, this);"' + + ' onmouseleave="$$.Stateful_onMouseLeave(event, this);"' ) + : ( + ' onmouseover="$$.Stateful_onMouseOver(event, this);"' + + ' onmouseout="$$.Stateful_onMouseOut(event, this);"' )); + + baidu.editor.ui.Stateful = { + alwalysHoverable: false, + target:null,//目标元素和this指向dom不一样 + Stateful_init: function (){ + this._Stateful_dGetHtmlTpl = this.getHtmlTpl; + this.getHtmlTpl = this.Stateful_getHtmlTpl; + }, + Stateful_getHtmlTpl: function (){ + var tpl = this._Stateful_dGetHtmlTpl(); + // 使用function避免$转义 + return tpl.replace(/stateful/g, function (){ return TPL_STATEFUL; }); + }, + Stateful_onMouseEnter: function (evt, el){ + this.target=el; + if (!this.isDisabled() || this.alwalysHoverable) { + this.addState('hover'); + this.fireEvent('over'); + } + }, + Stateful_onMouseLeave: function (evt, el){ + if (!this.isDisabled() || this.alwalysHoverable) { + this.removeState('hover'); + this.removeState('active'); + this.fireEvent('out'); + } + }, + Stateful_onMouseOver: function (evt, el){ + var rel = evt.relatedTarget; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.Stateful_onMouseEnter(evt, el); + } + }, + Stateful_onMouseOut: function (evt, el){ + var rel = evt.relatedTarget; + if (!uiUtils.contains(el, rel) && el !== rel) { + this.Stateful_onMouseLeave(evt, el); + } + }, + Stateful_onMouseDown: function (evt, el){ + if (!this.isDisabled()) { + this.addState('active'); + } + }, + Stateful_onMouseUp: function (evt, el){ + if (!this.isDisabled()) { + this.removeState('active'); + } + }, + Stateful_postRender: function (){ + if (this.disabled && !this.hasState('disabled')) { + this.addState('disabled'); + } + }, + hasState: function (state){ + return domUtils.hasClass(this.getStateDom(), 'edui-state-' + state); + }, + addState: function (state){ + if (!this.hasState(state)) { + this.getStateDom().className += ' edui-state-' + state; + } + }, + removeState: function (state){ + if (this.hasState(state)) { + domUtils.removeClasses(this.getStateDom(), ['edui-state-' + state]); + } + }, + getStateDom: function (){ + return this.getDom('state'); + }, + isChecked: function (){ + return this.hasState('checked'); + }, + setChecked: function (checked){ + if (!this.isDisabled() && checked) { + this.addState('checked'); + } else { + this.removeState('checked'); + } + }, + isDisabled: function (){ + return this.hasState('disabled'); + }, + setDisabled: function (disabled){ + if (disabled) { + this.removeState('hover'); + this.removeState('checked'); + this.removeState('active'); + this.addState('disabled'); + } else { + this.removeState('disabled'); + } + } + }; +})(); + + +// ui/button.js +///import core +///import uicore +///import ui/stateful.js +(function (){ + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase, + Stateful = baidu.editor.ui.Stateful, + Button = baidu.editor.ui.Button = function (options){ + if(options.name){ + var btnName = options.name; + var cssRules = options.cssRules; + if(!options.className){ + options.className = 'edui-for-' + btnName; + } + options.cssRules = '.edui-default .edui-for-'+ btnName +' .edui-icon {'+ cssRules +'}' + } + this.initOptions(options); + this.initButton(); + }; + Button.prototype = { + uiName: 'button', + label: '', + title: '', + showIcon: true, + showText: true, + cssRules:'', + initButton: function (){ + this.initUIBase(); + this.Stateful_init(); + if(this.cssRules){ + utils.cssRule('edui-customize-'+this.name+'-style',this.cssRules); + } + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ' + + '
    ' + + (this.showIcon ? '
    ' : '') + + (this.showText ? '
    ' + this.label + '
    ' : '') + + '
    ' + + '
    ' + + '
    '; + }, + postRender: function (){ + this.Stateful_postRender(); + this.setDisabled(this.disabled) + }, + _onMouseDown: function (e){ + var target = e.target || e.srcElement, + tagName = target && target.tagName && target.tagName.toLowerCase(); + if (tagName == 'input' || tagName == 'object' || tagName == 'object') { + return false; + } + }, + _onClick: function (){ + if (!this.isDisabled()) { + this.fireEvent('click'); + } + }, + setTitle: function(text){ + var label = this.getDom('label'); + label.innerHTML = text; + } + }; + utils.inherits(Button, UIBase); + utils.extend(Button.prototype, Stateful); + +})(); + + +// ui/splitbutton.js +///import core +///import uicore +///import ui/stateful.js +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + Stateful = baidu.editor.ui.Stateful, + SplitButton = baidu.editor.ui.SplitButton = function (options){ + this.initOptions(options); + this.initSplitButton(); + }; + SplitButton.prototype = { + popup: null, + uiName: 'splitbutton', + title: '', + initSplitButton: function (){ + this.initUIBase(); + this.Stateful_init(); + var me = this; + if (this.popup != null) { + var popup = this.popup; + this.popup = null; + this.setPopup(popup); + } + }, + _UIBase_postRender: UIBase.prototype.postRender, + postRender: function (){ + this.Stateful_postRender(); + this._UIBase_postRender(); + }, + setPopup: function (popup){ + if (this.popup === popup) return; + if (this.popup != null) { + this.popup.dispose(); + } + popup.addListener('show', utils.bind(this._onPopupShow, this)); + popup.addListener('hide', utils.bind(this._onPopupHide, this)); + popup.addListener('postrender', utils.bind(function (){ + popup.getDom('body').appendChild( + uiUtils.createElementByHtml('
    ') + ); + popup.getDom().className += ' ' + this.className; + }, this)); + this.popup = popup; + }, + _onPopupShow: function (){ + this.addState('opened'); + }, + _onPopupHide: function (){ + this.removeState('opened'); + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + }, + showPopup: function (){ + // 当popup往上弹出的时候,做特殊处理 + var rect = uiUtils.getClientRect(this.getDom()); + rect.top -= this.popup.SHADOW_RADIUS; + rect.height += this.popup.SHADOW_RADIUS; + this.popup.showAnchorRect(rect); + }, + _onArrowClick: function (event, el){ + if (!this.isDisabled()) { + this.showPopup(); + } + }, + _onButtonClick: function (){ + if (!this.isDisabled()) { + this.fireEvent('buttonclick'); + } + } + }; + utils.inherits(SplitButton, UIBase); + utils.extend(SplitButton.prototype, Stateful, true); + +})(); + + +// ui/colorbutton.js +///import core +///import uicore +///import ui/colorpicker.js +///import ui/popup.js +///import ui/splitbutton.js +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + ColorPicker = baidu.editor.ui.ColorPicker, + Popup = baidu.editor.ui.Popup, + SplitButton = baidu.editor.ui.SplitButton, + ColorButton = baidu.editor.ui.ColorButton = function (options){ + this.initOptions(options); + this.initColorButton(); + }; + ColorButton.prototype = { + initColorButton: function (){ + var me = this; + this.popup = new Popup({ + content: new ColorPicker({ + noColorText: me.editor.getLang("clearColor"), + editor:me.editor, + onpickcolor: function (t, color){ + me._onPickColor(color); + }, + onpicknocolor: function (t, color){ + me._onPickNoColor(color); + } + }), + editor:me.editor + }); + this.initSplitButton(); + }, + _SplitButton_postRender: SplitButton.prototype.postRender, + postRender: function (){ + this._SplitButton_postRender(); + this.getDom('button_body').appendChild( + uiUtils.createElementByHtml('
    ') + ); + this.getDom().className += ' edui-colorbutton'; + }, + setColor: function (color){ + this.getDom('colorlump').style.backgroundColor = color; + this.color = color; + }, + _onPickColor: function (color){ + if (this.fireEvent('pickcolor', color) !== false) { + this.setColor(color); + this.popup.hide(); + } + }, + _onPickNoColor: function (color){ + if (this.fireEvent('picknocolor') !== false) { + this.popup.hide(); + } + } + }; + utils.inherits(ColorButton, SplitButton); + +})(); + + +// ui/tablebutton.js +///import core +///import uicore +///import ui/popup.js +///import ui/tablepicker.js +///import ui/splitbutton.js +(function (){ + var utils = baidu.editor.utils, + Popup = baidu.editor.ui.Popup, + TablePicker = baidu.editor.ui.TablePicker, + SplitButton = baidu.editor.ui.SplitButton, + TableButton = baidu.editor.ui.TableButton = function (options){ + this.initOptions(options); + this.initTableButton(); + }; + TableButton.prototype = { + initTableButton: function (){ + var me = this; + this.popup = new Popup({ + content: new TablePicker({ + editor:me.editor, + onpicktable: function (t, numCols, numRows){ + me._onPickTable(numCols, numRows); + } + }), + 'editor':me.editor + }); + this.initSplitButton(); + }, + _onPickTable: function (numCols, numRows){ + if (this.fireEvent('picktable', numCols, numRows) !== false) { + this.popup.hide(); + } + } + }; + utils.inherits(TableButton, SplitButton); + +})(); + + +// ui/autotypesetpicker.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase; + + var AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker = function (options) { + this.initOptions(options); + this.initAutoTypeSetPicker(); + }; + AutoTypeSetPicker.prototype = { + initAutoTypeSetPicker:function () { + this.initUIBase(); + }, + getHtmlTpl:function () { + var me = this.editor, + opt = me.options.autotypeset, + lang = me.getLang("autoTypeSet"); + + var textAlignInputName = 'textAlignValue' + me.uid, + imageBlockInputName = 'imageBlockLineValue' + me.uid, + symbolConverInputName = 'symbolConverValue' + me.uid; + + return '
    ' + + '
    ' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
    ' + lang.mergeLine + '' + lang.delLine + '
    ' + lang.removeFormat + '' + lang.indent + '
    ' + lang.alignment + '' + + '' + me.getLang("justifyleft") + + '' + me.getLang("justifycenter") + + '' + me.getLang("justifyright") + + '
    ' + lang.imageFloat + '' + + '' + me.getLang("default") + + '' + me.getLang("justifyleft") + + '' + me.getLang("justifycenter") + + '' + me.getLang("justifyright") + + '
    ' + lang.removeFontsize + '' + lang.removeFontFamily + '
    ' + lang.removeHtml + '
    ' + lang.pasteFilter + '
    ' + lang.symbol + '' + + '' + lang.bdc2sb + + '' + lang.tobdc + '' + + '
    ' + + '
    ' + + '
    '; + + + }, + _UIBase_render:UIBase.prototype.render + }; + utils.inherits(AutoTypeSetPicker, UIBase); +})(); + + +// ui/autotypesetbutton.js +///import core +///import uicore +///import ui/popup.js +///import ui/autotypesetpicker.js +///import ui/splitbutton.js +(function (){ + var utils = baidu.editor.utils, + Popup = baidu.editor.ui.Popup, + AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker, + SplitButton = baidu.editor.ui.SplitButton, + AutoTypeSetButton = baidu.editor.ui.AutoTypeSetButton = function (options){ + this.initOptions(options); + this.initAutoTypeSetButton(); + }; + function getPara(me){ + + var opt = {}, + cont = me.getDom(), + editorId = me.editor.uid, + inputType = null, + attrName = null, + ipts = domUtils.getElementsByTagName(cont,"input"); + for(var i=ipts.length-1,ipt;ipt=ipts[i--];){ + inputType = ipt.getAttribute("type"); + if(inputType=="checkbox"){ + attrName = ipt.getAttribute("name"); + opt[attrName] && delete opt[attrName]; + if(ipt.checked){ + var attrValue = document.getElementById( attrName + "Value" + editorId ); + if(attrValue){ + if(/input/ig.test(attrValue.tagName)){ + opt[attrName] = attrValue.value; + } else { + var iptChilds = attrValue.getElementsByTagName("input"); + for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){ + if(iptchild.checked){ + opt[attrName] = iptchild.value; + break; + } + } + } + } else { + opt[attrName] = true; + } + } else { + opt[attrName] = false; + } + } else { + opt[ipt.getAttribute("value")] = ipt.checked; + } + + } + + var selects = domUtils.getElementsByTagName(cont,"select"); + for(var i=0,si;si=selects[i++];){ + var attr = si.getAttribute('name'); + opt[attr] = opt[attr] ? si.value : ''; + } + + utils.extend(me.editor.options.autotypeset,opt); + + me.editor.setPreferences('autotypeset', opt); + } + + AutoTypeSetButton.prototype = { + initAutoTypeSetButton: function (){ + + var me = this; + this.popup = new Popup({ + //传入配置参数 + content: new AutoTypeSetPicker({editor:me.editor}), + 'editor':me.editor, + hide : function(){ + if (!this._hidden && this.getDom()) { + getPara(this); + this.getDom().style.display = 'none'; + this._hidden = true; + this.fireEvent('hide'); + } + } + }); + var flag = 0; + this.popup.addListener('postRenderAfter',function(){ + var popupUI = this; + if(flag)return; + var cont = this.getDom(), + btn = cont.getElementsByTagName('button')[0]; + + btn.onclick = function(){ + getPara(popupUI); + me.editor.execCommand('autotypeset'); + popupUI.hide() + }; + + domUtils.on(cont, 'click', function(e) { + var target = e.target || e.srcElement, + editorId = me.editor.uid; + if (target && target.tagName == 'INPUT') { + + // 点击图片浮动的checkbox,去除对应的radio + if (target.name == 'imageBlockLine' || target.name == 'textAlign' || target.name == 'symbolConver') { + var checked = target.checked, + radioTd = document.getElementById( target.name + 'Value' + editorId), + radios = radioTd.getElementsByTagName('input'), + defalutSelect = { + 'imageBlockLine': 'none', + 'textAlign': 'left', + 'symbolConver': 'tobdc' + }; + + for (var i = 0; i < radios.length; i++) { + if (checked) { + if (radios[i].value == defalutSelect[target.name]) { + radios[i].checked = 'checked'; + } + } else { + radios[i].checked = false; + } + } + } + // 点击radio,选中对应的checkbox + if (target.name == ('imageBlockLineValue' + editorId) || target.name == ('textAlignValue' + editorId) || target.name == 'bdc') { + var checkboxs = target.parentNode.previousSibling.getElementsByTagName('input'); + checkboxs && (checkboxs[0].checked = true); + } + + getPara(popupUI); + } + }); + + flag = 1; + }); + this.initSplitButton(); + } + }; + utils.inherits(AutoTypeSetButton, SplitButton); + +})(); + + +// ui/cellalignpicker.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + Popup = baidu.editor.ui.Popup, + Stateful = baidu.editor.ui.Stateful, + UIBase = baidu.editor.ui.UIBase; + + /** + * 该参数将新增一个参数: selected, 参数类型为一个Object, 形如{ 'align': 'center', 'valign': 'top' }, 表示单元格的初始 + * 对齐状态为: 竖直居上,水平居中; 其中 align的取值为:'center', 'left', 'right'; valign的取值为: 'top', 'middle', 'bottom' + * @update 2013/4/2 hancong03@baidu.com + */ + var CellAlignPicker = baidu.editor.ui.CellAlignPicker = function (options) { + this.initOptions(options); + this.initSelected(); + this.initCellAlignPicker(); + }; + CellAlignPicker.prototype = { + //初始化选中状态, 该方法将根据传递进来的参数获取到应该选中的对齐方式图标的索引 + initSelected: function(){ + + var status = { + + valign: { + top: 0, + middle: 1, + bottom: 2 + }, + align: { + left: 0, + center: 1, + right: 2 + }, + count: 3 + + }, + result = -1; + + if( this.selected ) { + this.selectedIndex = status.valign[ this.selected.valign ] * status.count + status.align[ this.selected.align ]; + } + + }, + initCellAlignPicker:function () { + this.initUIBase(); + this.Stateful_init(); + }, + getHtmlTpl:function () { + + var alignType = [ 'left', 'center', 'right' ], + COUNT = 9, + tempClassName = null, + tempIndex = -1, + tmpl = []; + + + for( var i= 0; i'); + + tmpl.push( '
    ' ); + + tempIndex === 2 && tmpl.push(''); + + } + + return '
    ' + + '
    ' + + '' + + tmpl.join('') + + '
    ' + + '
    ' + + '
    '; + }, + getStateDom: function (){ + return this.target; + }, + _onClick: function (evt){ + var target= evt.target || evt.srcElement; + if(/icon/.test(target.className)){ + this.items[target.parentNode.getAttribute("index")].onclick(); + Popup.postHide(evt); + } + }, + _UIBase_render:UIBase.prototype.render + }; + utils.inherits(CellAlignPicker, UIBase); + utils.extend(CellAlignPicker.prototype, Stateful,true); +})(); + + + + + +// ui/pastepicker.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + Stateful = baidu.editor.ui.Stateful, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase; + + var PastePicker = baidu.editor.ui.PastePicker = function (options) { + this.initOptions(options); + this.initPastePicker(); + }; + PastePicker.prototype = { + initPastePicker:function () { + this.initUIBase(); + this.Stateful_init(); + }, + getHtmlTpl:function () { + return '
    ' + + '
    ' + + '
    ' + this.editor.getLang("pasteOpt") + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + }, + getStateDom:function () { + return this.target; + }, + format:function (param) { + this.editor.ui._isTransfer = true; + this.editor.fireEvent('pasteTransfer', param); + }, + _onClick:function (cur) { + var node = domUtils.getNextDomNode(cur), + screenHt = uiUtils.getViewportRect().height, + subPop = uiUtils.getClientRect(node); + + if ((subPop.top + subPop.height) > screenHt) + node.style.top = (-subPop.height - cur.offsetHeight) + "px"; + else + node.style.top = ""; + + if (/hidden/ig.test(domUtils.getComputedStyle(node, "visibility"))) { + node.style.visibility = "visible"; + domUtils.addClass(cur, "edui-state-opened"); + } else { + node.style.visibility = "hidden"; + domUtils.removeClasses(cur, "edui-state-opened") + } + }, + _UIBase_render:UIBase.prototype.render + }; + utils.inherits(PastePicker, UIBase); + utils.extend(PastePicker.prototype, Stateful, true); +})(); + + + + + + +// ui/toolbar.js +(function (){ + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase, + Toolbar = baidu.editor.ui.Toolbar = function (options){ + this.initOptions(options); + this.initToolbar(); + }; + Toolbar.prototype = { + items: null, + initToolbar: function (){ + this.items = this.items || []; + this.initUIBase(); + }, + add: function (item,index){ + if(index === undefined){ + this.items.push(item); + }else{ + this.items.splice(index,0,item) + } + + }, + getHtmlTpl: function (){ + var buff = []; + for (var i=0; i' + + buff.join('') + + '
    ' + }, + postRender: function (){ + var box = this.getDom(); + for (var i=0; i
    '; + }, + postRender:function () { + }, + queryAutoHide:function () { + return true; + } + }; + Menu.prototype = { + items:null, + uiName:'menu', + initMenu:function () { + this.items = this.items || []; + this.initPopup(); + this.initItems(); + }, + initItems:function () { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item == '-') { + this.items[i] = this.getSeparator(); + } else if (!(item instanceof MenuItem)) { + item.editor = this.editor; + item.theme = this.editor.options.theme; + this.items[i] = this.createItem(item); + } + } + }, + getSeparator:function () { + return menuSeparator; + }, + createItem:function (item) { + //新增一个参数menu, 该参数存储了menuItem所对应的menu引用 + item.menu = this; + return new MenuItem(item); + }, + _Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl, + getContentHtmlTpl:function () { + if (this.items.length == 0) { + return this._Popup_getContentHtmlTpl(); + } + var buff = []; + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + buff[i] = item.renderHtml(); + } + return ('
    ' + buff.join('') + '
    '); + }, + _Popup_postRender:Popup.prototype.postRender, + postRender:function () { + var me = this; + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + item.ownerMenu = this; + item.postRender(); + } + domUtils.on(this.getDom(), 'mouseover', function (evt) { + evt = evt || event; + var rel = evt.relatedTarget || evt.fromElement; + var el = me.getDom(); + if (!uiUtils.contains(el, rel) && el !== rel) { + me.fireEvent('over'); + } + }); + this._Popup_postRender(); + }, + queryAutoHide:function (el) { + if (el) { + if (uiUtils.contains(this.getDom(), el)) { + return false; + } + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + if (item.queryAutoHide(el) === false) { + return false; + } + } + } + }, + clearItems:function () { + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + clearTimeout(item._showingTimer); + clearTimeout(item._closingTimer); + if (item.subMenu) { + item.subMenu.destroy(); + } + } + this.items = []; + }, + destroy:function () { + if (this.getDom()) { + domUtils.remove(this.getDom()); + } + this.clearItems(); + }, + dispose:function () { + this.destroy(); + } + }; + utils.inherits(Menu, Popup); + + /** + * @update 2013/04/03 hancong03 新增一个参数menu, 该参数存储了menuItem所对应的menu引用 + * @type {Function} + */ + var MenuItem = baidu.editor.ui.MenuItem = function (options) { + this.initOptions(options); + this.initUIBase(); + this.Stateful_init(); + if (this.subMenu && !(this.subMenu instanceof Menu)) { + if (options.className && options.className.indexOf("aligntd") != -1) { + var me = this; + + //获取单元格对齐初始状态 + this.subMenu.selected = this.editor.queryCommandValue( 'cellalignment' ); + + this.subMenu = new Popup({ + content:new CellAlignPicker(this.subMenu), + parentMenu:me, + editor:me.editor, + destroy:function () { + if (this.getDom()) { + domUtils.remove(this.getDom()); + } + } + }); + this.subMenu.addListener("postRenderAfter", function () { + domUtils.on(this.getDom(), "mouseover", function () { + me.addState('opened'); + }); + }); + } else { + this.subMenu = new Menu(this.subMenu); + } + } + }; + MenuItem.prototype = { + label:'', + subMenu:null, + ownerMenu:null, + uiName:'menuitem', + alwalysHoverable:true, + getHtmlTpl:function () { + return '
    ' + + '
    ' + + this.renderLabelHtml() + + '
    ' + + '
    '; + }, + postRender:function () { + var me = this; + this.addListener('over', function () { + me.ownerMenu.fireEvent('submenuover', me); + if (me.subMenu) { + me.delayShowSubMenu(); + } + }); + if (this.subMenu) { + this.getDom().className += ' edui-hassubmenu'; + this.subMenu.render(); + this.addListener('out', function () { + me.delayHideSubMenu(); + }); + this.subMenu.addListener('over', function () { + clearTimeout(me._closingTimer); + me._closingTimer = null; + me.addState('opened'); + }); + this.ownerMenu.addListener('hide', function () { + me.hideSubMenu(); + }); + this.ownerMenu.addListener('submenuover', function (t, subMenu) { + if (subMenu !== me) { + me.delayHideSubMenu(); + } + }); + this.subMenu._bakQueryAutoHide = this.subMenu.queryAutoHide; + this.subMenu.queryAutoHide = function (el) { + if (el && uiUtils.contains(me.getDom(), el)) { + return false; + } + return this._bakQueryAutoHide(el); + }; + } + this.getDom().style.tabIndex = '-1'; + uiUtils.makeUnselectable(this.getDom()); + this.Stateful_postRender(); + }, + delayShowSubMenu:function () { + var me = this; + if (!me.isDisabled()) { + me.addState('opened'); + clearTimeout(me._showingTimer); + clearTimeout(me._closingTimer); + me._closingTimer = null; + me._showingTimer = setTimeout(function () { + me.showSubMenu(); + }, 250); + } + }, + delayHideSubMenu:function () { + var me = this; + if (!me.isDisabled()) { + me.removeState('opened'); + clearTimeout(me._showingTimer); + if (!me._closingTimer) { + me._closingTimer = setTimeout(function () { + if (!me.hasState('opened')) { + me.hideSubMenu(); + } + me._closingTimer = null; + }, 400); + } + } + }, + renderLabelHtml:function () { + return '
    ' + + '
    ' + + '
    ' + (this.label || '') + '
    '; + }, + getStateDom:function () { + return this.getDom(); + }, + queryAutoHide:function (el) { + if (this.subMenu && this.hasState('opened')) { + return this.subMenu.queryAutoHide(el); + } + }, + _onClick:function (event, this_) { + if (this.hasState('disabled')) return; + if (this.fireEvent('click', event, this_) !== false) { + if (this.subMenu) { + this.showSubMenu(); + } else { + Popup.postHide(event); + } + } + }, + showSubMenu:function () { + var rect = uiUtils.getClientRect(this.getDom()); + rect.right -= 5; + rect.left += 2; + rect.width -= 7; + rect.top -= 4; + rect.bottom += 4; + rect.height += 8; + this.subMenu.showAnchorRect(rect, true, true); + }, + hideSubMenu:function () { + this.subMenu.hide(); + } + }; + utils.inherits(MenuItem, UIBase); + utils.extend(MenuItem.prototype, Stateful, true); +})(); + + +// ui/combox.js +///import core +///import uicore +///import ui/menu.js +///import ui/splitbutton.js +(function (){ + // todo: menu和item提成通用list + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + Menu = baidu.editor.ui.Menu, + SplitButton = baidu.editor.ui.SplitButton, + Combox = baidu.editor.ui.Combox = function (options){ + this.initOptions(options); + this.initCombox(); + }; + Combox.prototype = { + uiName: 'combox', + onbuttonclick:function () { + this.showPopup(); + }, + initCombox: function (){ + var me = this; + this.items = this.items || []; + for (var i=0; i vpRect.right) { + left = vpRect.right - rect.width; + } + var top = offset.top; + if (top + rect.height > vpRect.bottom) { + top = vpRect.bottom - rect.height; + } + el.style.left = Math.max(left, 0) + 'px'; + el.style.top = Math.max(top, 0) + 'px'; + }, + showAtCenter: function (){ + + var vpRect = uiUtils.getViewportRect(); + + if ( !this.fullscreen ) { + this.getDom().style.display = ''; + var popSize = this.fitSize(); + var titleHeight = this.getDom('titlebar').offsetHeight | 0; + var left = vpRect.width / 2 - popSize.width / 2; + var top = vpRect.height / 2 - (popSize.height - titleHeight) / 2 - titleHeight; + var popEl = this.getDom(); + this.safeSetOffset({ + left: Math.max(left | 0, 0), + top: Math.max(top | 0, 0) + }); + if (!domUtils.hasClass(popEl, 'edui-state-centered')) { + popEl.className += ' edui-state-centered'; + } + } else { + var dialogWrapNode = this.getDom(), + contentNode = this.getDom('content'); + + dialogWrapNode.style.display = "block"; + + var wrapRect = UE.ui.uiUtils.getClientRect( dialogWrapNode ), + contentRect = UE.ui.uiUtils.getClientRect( contentNode ); + dialogWrapNode.style.left = "-100000px"; + + contentNode.style.width = ( vpRect.width - wrapRect.width + contentRect.width ) + "px"; + contentNode.style.height = ( vpRect.height - wrapRect.height + contentRect.height ) + "px"; + + dialogWrapNode.style.width = vpRect.width + "px"; + dialogWrapNode.style.height = vpRect.height + "px"; + dialogWrapNode.style.left = 0; + + //保存环境的overflow值 + this._originalContext = { + html: { + overflowX: document.documentElement.style.overflowX, + overflowY: document.documentElement.style.overflowY + }, + body: { + overflowX: document.body.style.overflowX, + overflowY: document.body.style.overflowY + } + }; + + document.documentElement.style.overflowX = 'hidden'; + document.documentElement.style.overflowY = 'hidden'; + document.body.style.overflowX = 'hidden'; + document.body.style.overflowY = 'hidden'; + + } + + this._show(); + }, + getContentHtml: function (){ + var contentHtml = ''; + if (typeof this.content == 'string') { + contentHtml = this.content; + } else if (this.iframeUrl) { + contentHtml = ''; + } + return contentHtml; + }, + getHtmlTpl: function (){ + var footHtml = ''; + + if (this.buttons) { + var buff = []; + for (var i=0; i' + buff.join('') + '' + + ''; + } + + return '
    ' + + '
    ' + + '
    ' + + '
    ' + + '' + (this.title || '') + '' + + '
    ' + + this.closeButton.renderHtml() + + '
    ' + + '
    '+ ( this.autoReset ? '' : this.getContentHtml()) +'
    ' + + footHtml + + '
    '; + }, + postRender: function (){ + // todo: 保持居中/记住上次关闭位置选项 + if (!this.modalMask.getDom()) { + this.modalMask.render(); + this.modalMask.hide(); + } + if (!this.dragMask.getDom()) { + this.dragMask.render(); + this.dragMask.hide(); + } + var me = this; + this.addListener('show', function (){ + me.modalMask.show(this.getDom().style.zIndex - 2); + }); + this.addListener('hide', function (){ + me.modalMask.hide(); + }); + if (this.buttons) { + for (var i=0; i'; + me.editor.container.style.zIndex && (this.getDom().style.zIndex = me.editor.container.style.zIndex * 1 + 1); + } + } + // canSideUp:false, + // canSideLeft:false + }); + this.onbuttonclick = function(){ + this.showPopup(); + }; + this.initSplitButton(); + } + + }; + + utils.inherits(MultiMenuPop, SplitButton); +})(); + + +// ui/shortcutmenu.js +(function () { + var UI = baidu.editor.ui, + UIBase = UI.UIBase, + uiUtils = UI.uiUtils, + utils = baidu.editor.utils, + domUtils = baidu.editor.dom.domUtils; + + var allMenus = [],//存储所有快捷菜单 + timeID, + isSubMenuShow = false;//是否有子pop显示 + + var ShortCutMenu = UI.ShortCutMenu = function (options) { + this.initOptions (options); + this.initShortCutMenu (); + }; + + ShortCutMenu.postHide = hideAllMenu; + + ShortCutMenu.prototype = { + isHidden : true , + SPACE : 5 , + initShortCutMenu : function () { + this.items = this.items || []; + this.initUIBase (); + this.initItems (); + this.initEvent (); + allMenus.push (this); + } , + initEvent : function () { + var me = this, + doc = me.editor.document; + + domUtils.on (doc , "mousemove" , function (e) { + if (me.isHidden === false) { + //有pop显示就不隐藏快捷菜单 + if (me.getSubMenuMark () || me.eventType == "contextmenu") return; + + + var flag = true, + el = me.getDom (), + wt = el.offsetWidth, + ht = el.offsetHeight, + distanceX = wt / 2 + me.SPACE,//距离中心X标准 + distanceY = ht / 2,//距离中心Y标准 + x = Math.abs (e.screenX - me.left),//离中心距离横坐标 + y = Math.abs (e.screenY - me.top);//离中心距离纵坐标 + + clearTimeout (timeID); + timeID = setTimeout (function () { + if (y > 0 && y < distanceY) { + me.setOpacity (el , "1"); + } else if (y > distanceY && y < distanceY + 70) { + me.setOpacity (el , "0.5"); + flag = false; + } else if (y > distanceY + 70 && y < distanceY + 140) { + me.hide (); + } + + if (flag && x > 0 && x < distanceX) { + me.setOpacity (el , "1") + } else if (x > distanceX && x < distanceX + 70) { + me.setOpacity (el , "0.5") + } else if (x > distanceX + 70 && x < distanceX + 140) { + me.hide (); + } + }); + } + }); + + //ie\ff下 mouseout不准 + if (browser.chrome) { + domUtils.on (doc , "mouseout" , function (e) { + var relatedTgt = e.relatedTarget || e.toElement; + + if (relatedTgt == null || relatedTgt.tagName == "HTML") { + me.hide (); + } + }); + } + + me.editor.addListener ("afterhidepop" , function () { + if (!me.isHidden) { + isSubMenuShow = true; + } + }); + + } , + initItems : function () { + if (utils.isArray (this.items)) { + for (var i = 0, len = this.items.length ; i < len ; i++) { + var item = this.items[i].toLowerCase (); + + if (UI[item]) { + this.items[i] = new UI[item] (this.editor); + this.items[i].className += " edui-shortcutsubmenu "; + } + } + } + } , + setOpacity : function (el , value) { + if (browser.ie && browser.version < 9) { + el.style.filter = "alpha(opacity = " + parseFloat (value) * 100 + ");" + } else { + el.style.opacity = value; + } + } , + getSubMenuMark : function () { + isSubMenuShow = false; + var layerEle = uiUtils.getFixedLayer (); + var list = domUtils.getElementsByTagName (layerEle , "div" , function (node) { + return domUtils.hasClass (node , "edui-shortcutsubmenu edui-popup") + }); + + for (var i = 0, node ; node = list[i++] ;) { + if (node.style.display != "none") { + isSubMenuShow = true; + } + } + return isSubMenuShow; + } , + show : function (e , hasContextmenu) { + var me = this, + offset = {}, + el = this.getDom (), + fixedlayer = uiUtils.getFixedLayer (); + + function setPos (offset) { + if (offset.left < 0) { + offset.left = 0; + } + if (offset.top < 0) { + offset.top = 0; + } + el.style.cssText = "position:absolute;left:" + offset.left + "px;top:" + offset.top + "px;"; + } + + function setPosByCxtMenu (menu) { + if (!menu.tagName) { + menu = menu.getDom (); + } + offset.left = parseInt (menu.style.left); + offset.top = parseInt (menu.style.top); + offset.top -= el.offsetHeight + 15; + setPos (offset); + } + + + me.eventType = e.type; + el.style.cssText = "display:block;left:-9999px"; + + if (e.type == "contextmenu" && hasContextmenu) { + var menu = domUtils.getElementsByTagName (fixedlayer , "div" , "edui-contextmenu")[0]; + if (menu) { + setPosByCxtMenu (menu) + } else { + me.editor.addListener ("aftershowcontextmenu" , function (type , menu) { + setPosByCxtMenu (menu); + }); + } + } else { + offset = uiUtils.getViewportOffsetByEvent (e); + offset.top -= el.offsetHeight + me.SPACE; + offset.left += me.SPACE + 20; + setPos (offset); + me.setOpacity (el , 0.2); + } + + + me.isHidden = false; + me.left = e.screenX + el.offsetWidth / 2 - me.SPACE; + me.top = e.screenY - (el.offsetHeight / 2) - me.SPACE; + + if (me.editor) { + el.style.zIndex = me.editor.container.style.zIndex * 1 + 10; + fixedlayer.style.zIndex = el.style.zIndex - 1; + } + } , + hide : function () { + if (this.getDom ()) { + this.getDom ().style.display = "none"; + } + this.isHidden = true; + } , + postRender : function () { + if (utils.isArray (this.items)) { + for (var i = 0, item ; item = this.items[i++] ;) { + item.postRender (); + } + } + } , + getHtmlTpl : function () { + var buff; + if (utils.isArray (this.items)) { + buff = []; + for (var i = 0 ; i < this.items.length ; i++) { + buff[i] = this.items[i].renderHtml (); + } + buff = buff.join (""); + } else { + buff = this.items; + } + + return '
    ' + + buff + + '
    '; + } + }; + + utils.inherits (ShortCutMenu , UIBase); + + function hideAllMenu (e) { + var tgt = e.target || e.srcElement, + cur = domUtils.findParent (tgt , function (node) { + return domUtils.hasClass (node , "edui-shortcutmenu") || domUtils.hasClass (node , "edui-popup"); + } , true); + + if (!cur) { + for (var i = 0, menu ; menu = allMenus[i++] ;) { + menu.hide () + } + } + } + + domUtils.on (document , 'mousedown' , function (e) { + hideAllMenu (e); + }); + + domUtils.on (window , 'scroll' , function (e) { + hideAllMenu (e); + }); + +}) (); + + +// ui/breakline.js +(function (){ + var utils = baidu.editor.utils, + UIBase = baidu.editor.ui.UIBase, + Breakline = baidu.editor.ui.Breakline = function (options){ + this.initOptions(options); + this.initSeparator(); + }; + Breakline.prototype = { + uiName: 'Breakline', + initSeparator: function (){ + this.initUIBase(); + }, + getHtmlTpl: function (){ + return '
    '; + } + }; + utils.inherits(Breakline, UIBase); + +})(); + + +// ui/message.js +///import core +///import uicore +(function () { + var utils = baidu.editor.utils, + domUtils = baidu.editor.dom.domUtils, + UIBase = baidu.editor.ui.UIBase, + Message = baidu.editor.ui.Message = function (options){ + this.initOptions(options); + this.initMessage(); + }; + + Message.prototype = { + initMessage: function (){ + this.initUIBase(); + }, + getHtmlTpl: function (){ + return '
    ' + + '
    ×
    ' + + '
    ' + + ' ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + }, + reset: function(opt){ + var me = this; + if (!opt.keepshow) { + clearTimeout(this.timer); + me.timer = setTimeout(function(){ + me.hide(); + }, opt.timeout || 4000); + } + + opt.content !== undefined && me.setContent(opt.content); + opt.type !== undefined && me.setType(opt.type); + + me.show(); + }, + postRender: function(){ + var me = this, + closer = this.getDom('closer'); + closer && domUtils.on(closer, 'click', function(){ + me.hide(); + }); + }, + setContent: function(content){ + this.getDom('content').innerHTML = content; + }, + setType: function(type){ + type = type || 'info'; + var body = this.getDom('body'); + body.className = body.className.replace(/edui-message-type-[\w-]+/, 'edui-message-type-' + type); + }, + getContent: function(){ + return this.getDom('content').innerHTML; + }, + getType: function(){ + var arr = this.getDom('body').match(/edui-message-type-([\w-]+)/); + return arr ? arr[1]:''; + }, + show: function (){ + this.getDom().style.display = 'block'; + }, + hide: function (){ + var dom = this.getDom(); + if (dom) { + dom.style.display = 'none'; + dom.parentNode && dom.parentNode.removeChild(dom); + } + } + }; + + utils.inherits(Message, UIBase); + +})(); + + +// adapter/editorui.js +//ui跟编辑器的适配層 +//那个按钮弹出是dialog,是下拉筐等都是在这个js中配置 +//自己写的ui也要在这里配置,放到baidu.editor.ui下边,当编辑器实例化的时候会根据ueditor.config中的toolbars找到相应的进行实例化 +(function () { + var utils = baidu.editor.utils; + var editorui = baidu.editor.ui; + var _Dialog = editorui.Dialog; + editorui.buttons = {}; + + editorui.Dialog = function (options) { + var dialog = new _Dialog(options); + dialog.addListener('hide', function () { + + if (dialog.editor) { + var editor = dialog.editor; + try { + if (browser.gecko) { + var y = editor.window.scrollY, + x = editor.window.scrollX; + editor.body.focus(); + editor.window.scrollTo(x, y); + } else { + editor.focus(); + } + + + } catch (ex) { + } + } + }); + return dialog; + }; + + var iframeUrlMap = { + 'anchor':'~/dialogs/anchor/anchor.html', + 'insertimage':'~/dialogs/image/image.html', + 'link':'~/dialogs/link/link.html', + 'spechars':'~/dialogs/spechars/spechars.html', + 'searchreplace':'~/dialogs/searchreplace/searchreplace.html', + 'map':'~/dialogs/map/map.html', + 'gmap':'~/dialogs/gmap/gmap.html', + 'insertvideo':'~/dialogs/video/video.html', + 'help':'~/dialogs/help/help.html', + 'preview':'~/dialogs/preview/preview.html', + 'emotion':'~/dialogs/emotion/emotion.html', + 'wordimage':'~/dialogs/wordimage/wordimage.html', + 'attachment':'~/dialogs/attachment/attachment.html', + 'insertframe':'~/dialogs/insertframe/insertframe.html', + 'edittip':'~/dialogs/table/edittip.html', + 'edittable':'~/dialogs/table/edittable.html', + 'edittd':'~/dialogs/table/edittd.html', + 'webapp':'~/dialogs/webapp/webapp.html', + 'snapscreen':'~/dialogs/snapscreen/snapscreen.html', + 'scrawl':'~/dialogs/scrawl/scrawl.html', + 'music':'~/dialogs/music/music.html', + 'template':'~/dialogs/template/template.html', + 'background':'~/dialogs/background/background.html', + 'charts': '~/dialogs/charts/charts.html' + }; + //为工具栏添加按钮,以下都是统一的按钮触发命令,所以写在一起 + var btnCmds = ['undo', 'redo', 'formatmatch', + 'bold', 'italic', 'underline', 'fontborder', 'touppercase', 'tolowercase', + 'strikethrough', 'subscript', 'superscript', 'source', 'indent', 'outdent', + 'blockquote', 'pasteplain', 'pagebreak', + 'selectall', 'print','horizontal', 'removeformat', 'time', 'date', 'unlink', + 'insertparagraphbeforetable', 'insertrow', 'insertcol', 'mergeright', 'mergedown', 'deleterow', + 'deletecol', 'splittorows', 'splittocols', 'splittocells', 'mergecells', 'deletetable', 'drafts']; + + for (var i = 0, ci; ci = btnCmds[i++];) { + ci = ci.toLowerCase(); + editorui[ci] = function (cmd) { + return function (editor) { + var ui = new editorui.Button({ + className:'edui-for-' + cmd, + title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '', + onclick:function () { + editor.execCommand(cmd); + }, + theme:editor.options.theme, + showText:false + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + var state = editor.queryCommandState(cmd); + if (state == -1) { + ui.setDisabled(true); + ui.setChecked(false); + } else { + if (!uiReady) { + ui.setDisabled(false); + ui.setChecked(state); + } + } + }); + return ui; + }; + }(ci); + } + + //清除文档 + editorui.cleardoc = function (editor) { + var ui = new editorui.Button({ + className:'edui-for-cleardoc', + title:editor.options.labelMap.cleardoc || editor.getLang("labelMap.cleardoc") || '', + theme:editor.options.theme, + onclick:function () { + if (confirm(editor.getLang("confirmClear"))) { + editor.execCommand('cleardoc'); + } + } + }); + editorui.buttons["cleardoc"] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('cleardoc') == -1); + }); + return ui; + }; + + //排版,图片排版,文字方向 + var typeset = { + 'justify':['left', 'right', 'center', 'justify'], + 'imagefloat':['none', 'left', 'center', 'right'], + 'directionality':['ltr', 'rtl'] + }; + + for (var p in typeset) { + + (function (cmd, val) { + for (var i = 0, ci; ci = val[i++];) { + (function (cmd2) { + editorui[cmd.replace('float', '') + cmd2] = function (editor) { + var ui = new editorui.Button({ + className:'edui-for-' + cmd.replace('float', '') + cmd2, + title:editor.options.labelMap[cmd.replace('float', '') + cmd2] || editor.getLang("labelMap." + cmd.replace('float', '') + cmd2) || '', + theme:editor.options.theme, + onclick:function () { + editor.execCommand(cmd, cmd2); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + ui.setDisabled(editor.queryCommandState(cmd) == -1); + ui.setChecked(editor.queryCommandValue(cmd) == cmd2 && !uiReady); + }); + return ui; + }; + })(ci) + } + })(p, typeset[p]) + } + + //字体颜色和背景颜色 + for (var i = 0, ci; ci = ['backcolor', 'forecolor'][i++];) { + editorui[ci] = function (cmd) { + return function (editor) { + var ui = new editorui.ColorButton({ + className:'edui-for-' + cmd, + color:'default', + title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '', + editor:editor, + onpickcolor:function (t, color) { + editor.execCommand(cmd, color); + }, + onpicknocolor:function () { + editor.execCommand(cmd, 'default'); + this.setColor('transparent'); + this.color = 'default'; + }, + onbuttonclick:function () { + editor.execCommand(cmd, this.color); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState(cmd) == -1); + }); + return ui; + }; + }(ci); + } + + + var dialogBtns = { + noOk:['searchreplace', 'help', 'spechars', 'webapp','preview'], + ok:['attachment', 'anchor', 'link', 'insertimage', 'map', 'gmap', 'insertframe', 'wordimage', + 'insertvideo', 'insertframe', 'edittip', 'edittable', 'edittd', 'scrawl', 'template', 'music', 'background', 'charts'] + }; + + for (var p in dialogBtns) { + (function (type, vals) { + for (var i = 0, ci; ci = vals[i++];) { + //todo opera下存在问题 + if (browser.opera && ci === "searchreplace") { + continue; + } + (function (cmd) { + editorui[cmd] = function (editor, iframeUrl, title) { + iframeUrl = iframeUrl || (editor.options.iframeUrlMap || {})[cmd] || iframeUrlMap[cmd]; + title = editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || ''; + + var dialog; + //没有iframeUrl不创建dialog + if (iframeUrl) { + dialog = new editorui.Dialog(utils.extend({ + iframeUrl:editor.ui.mapUrl(iframeUrl), + editor:editor, + className:'edui-for-' + cmd, + title:title, + holdScroll: cmd === 'insertimage', + fullscreen: /charts|preview/.test(cmd), + closeDialog:editor.getLang("closeDialog") + }, type == 'ok' ? { + buttons:[ + { + className:'edui-okbutton', + label:editor.getLang("ok"), + editor:editor, + onclick:function () { + dialog.close(true); + } + }, + { + className:'edui-cancelbutton', + label:editor.getLang("cancel"), + editor:editor, + onclick:function () { + dialog.close(false); + } + } + ] + } : {})); + + editor.ui._dialogs[cmd + "Dialog"] = dialog; + } + + var ui = new editorui.Button({ + className:'edui-for-' + cmd, + title:title, + onclick:function () { + if (dialog) { + switch (cmd) { + case "wordimage": + var images = editor.execCommand("wordimage"); + if (images && images.length) { + dialog.render(); + dialog.open(); + } + break; + case "scrawl": + if (editor.queryCommandState("scrawl") != -1) { + dialog.render(); + dialog.open(); + } + + break; + default: + dialog.render(); + dialog.open(); + } + } + }, + theme:editor.options.theme, + disabled:(cmd == 'scrawl' && editor.queryCommandState("scrawl") == -1) || ( cmd == 'charts' ) + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + //只存在于右键菜单而无工具栏按钮的ui不需要检测状态 + var unNeedCheckState = {'edittable':1}; + if (cmd in unNeedCheckState)return; + + var state = editor.queryCommandState(cmd); + if (ui.getDom()) { + ui.setDisabled(state == -1); + ui.setChecked(state); + } + + }); + + return ui; + }; + })(ci.toLowerCase()) + } + })(p, dialogBtns[p]); + } + + editorui.snapscreen = function (editor, iframeUrl, title) { + title = editor.options.labelMap['snapscreen'] || editor.getLang("labelMap.snapscreen") || ''; + var ui = new editorui.Button({ + className:'edui-for-snapscreen', + title:title, + onclick:function () { + editor.execCommand("snapscreen"); + }, + theme:editor.options.theme + + }); + editorui.buttons['snapscreen'] = ui; + iframeUrl = iframeUrl || (editor.options.iframeUrlMap || {})["snapscreen"] || iframeUrlMap["snapscreen"]; + if (iframeUrl) { + var dialog = new editorui.Dialog({ + iframeUrl:editor.ui.mapUrl(iframeUrl), + editor:editor, + className:'edui-for-snapscreen', + title:title, + buttons:[ + { + className:'edui-okbutton', + label:editor.getLang("ok"), + editor:editor, + onclick:function () { + dialog.close(true); + } + }, + { + className:'edui-cancelbutton', + label:editor.getLang("cancel"), + editor:editor, + onclick:function () { + dialog.close(false); + } + } + ] + + }); + dialog.render(); + editor.ui._dialogs["snapscreenDialog"] = dialog; + } + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('snapscreen') == -1); + }); + return ui; + }; + + editorui.insertcode = function (editor, list, title) { + list = editor.options['insertcode'] || []; + title = editor.options.labelMap['insertcode'] || editor.getLang("labelMap.insertcode") || ''; + // if (!list.length) return; + var items = []; + utils.each(list,function(key,val){ + items.push({ + label:key, + value:val, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }); + }); + + var ui = new editorui.Combox({ + editor:editor, + items:items, + onselect:function (t, index) { + editor.execCommand('insertcode', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + title:title, + initValue:title, + className:'edui-for-insertcode', + indexByValue:function (value) { + if (value) { + for (var i = 0, ci; ci = this.items[i]; i++) { + if (ci.value.indexOf(value) != -1) + return i; + } + } + + return -1; + } + }); + editorui.buttons['insertcode'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('insertcode'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('insertcode'); + if(!value){ + ui.setValue(title); + return; + } + //trace:1871 ie下从源码模式切换回来时,字体会带单引号,而且会有逗号 + value && (value = value.replace(/['"]/g, '').split(',')[0]); + ui.setValue(value); + + } + } + + }); + return ui; + }; + editorui.fontfamily = function (editor, list, title) { + + list = editor.options['fontfamily'] || []; + title = editor.options.labelMap['fontfamily'] || editor.getLang("labelMap.fontfamily") || ''; + if (!list.length) return; + for (var i = 0, ci, items = []; ci = list[i]; i++) { + var langLabel = editor.getLang('fontfamily')[ci.name] || ""; + (function (key, val) { + items.push({ + label:key, + value:val, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }); + })(ci.label || langLabel, ci.val) + } + var ui = new editorui.Combox({ + editor:editor, + items:items, + onselect:function (t, index) { + editor.execCommand('FontFamily', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + title:title, + initValue:title, + className:'edui-for-fontfamily', + indexByValue:function (value) { + if (value) { + for (var i = 0, ci; ci = this.items[i]; i++) { + if (ci.value.indexOf(value) != -1) + return i; + } + } + + return -1; + } + }); + editorui.buttons['fontfamily'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('FontFamily'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('FontFamily'); + //trace:1871 ie下从源码模式切换回来时,字体会带单引号,而且会有逗号 + value && (value = value.replace(/['"]/g, '').split(',')[0]); + ui.setValue(value); + + } + } + + }); + return ui; + }; + + editorui.fontsize = function (editor, list, title) { + title = editor.options.labelMap['fontsize'] || editor.getLang("labelMap.fontsize") || ''; + list = list || editor.options['fontsize'] || []; + if (!list.length) return; + var items = []; + for (var i = 0; i < list.length; i++) { + var size = list[i] + 'px'; + items.push({ + label:size, + value:size, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }); + } + var ui = new editorui.Combox({ + editor:editor, + items:items, + title:title, + initValue:title, + onselect:function (t, index) { + editor.execCommand('FontSize', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + className:'edui-for-fontsize' + }); + editorui.buttons['fontsize'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('FontSize'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + ui.setValue(editor.queryCommandValue('FontSize')); + } + } + + }); + return ui; + }; + + editorui.paragraph = function (editor, list, title) { + title = editor.options.labelMap['paragraph'] || editor.getLang("labelMap.paragraph") || ''; + list = editor.options['paragraph'] || []; + if (utils.isEmptyObject(list)) return; + var items = []; + for (var i in list) { + items.push({ + value:i, + label:list[i] || editor.getLang("paragraph")[i], + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + (this.label || '') + '
    '; + } + }) + } + var ui = new editorui.Combox({ + editor:editor, + items:items, + title:title, + initValue:title, + className:'edui-for-paragraph', + onselect:function (t, index) { + editor.execCommand('Paragraph', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + } + }); + editorui.buttons['paragraph'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('Paragraph'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('Paragraph'); + var index = ui.indexByValue(value); + if (index != -1) { + ui.setValue(value); + } else { + ui.setValue(ui.initValue); + } + } + } + + }); + return ui; + }; + + + //自定义标题 + editorui.customstyle = function (editor) { + var list = editor.options['customstyle'] || [], + title = editor.options.labelMap['customstyle'] || editor.getLang("labelMap.customstyle") || ''; + if (!list.length)return; + var langCs = editor.getLang('customstyle'); + for (var i = 0, items = [], t; t = list[i++];) { + (function (t) { + var ck = {}; + ck.label = t.label ? t.label : langCs[t.name]; + ck.style = t.style; + ck.className = t.className; + ck.tag = t.tag; + items.push({ + label:ck.label, + value:ck, + theme:editor.options.theme, + renderLabelHtml:function () { + return '
    ' + '<' + ck.tag + ' ' + (ck.className ? ' class="' + ck.className + '"' : "") + + (ck.style ? ' style="' + ck.style + '"' : "") + '>' + ck.label + "<\/" + ck.tag + ">" + + '
    '; + } + }); + })(t); + } + + var ui = new editorui.Combox({ + editor:editor, + items:items, + title:title, + initValue:title, + className:'edui-for-customstyle', + onselect:function (t, index) { + editor.execCommand('customstyle', this.items[index].value); + }, + onbuttonclick:function () { + this.showPopup(); + }, + indexByValue:function (value) { + for (var i = 0, ti; ti = this.items[i++];) { + if (ti.label == value) { + return i - 1 + } + } + return -1; + } + }); + editorui.buttons['customstyle'] = ui; + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + if (!uiReady) { + var state = editor.queryCommandState('customstyle'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('customstyle'); + var index = ui.indexByValue(value); + if (index != -1) { + ui.setValue(value); + } else { + ui.setValue(ui.initValue); + } + } + } + + }); + return ui; + }; + editorui.inserttable = function (editor, iframeUrl, title) { + title = editor.options.labelMap['inserttable'] || editor.getLang("labelMap.inserttable") || ''; + var ui = new editorui.TableButton({ + editor:editor, + title:title, + className:'edui-for-inserttable', + onpicktable:function (t, numCols, numRows) { + editor.execCommand('InsertTable', {numRows:numRows, numCols:numCols, border:1}); + }, + onbuttonclick:function () { + this.showPopup(); + } + }); + editorui.buttons['inserttable'] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('inserttable') == -1); + }); + return ui; + }; + + editorui.lineheight = function (editor) { + var val = editor.options.lineheight || []; + if (!val.length)return; + for (var i = 0, ci, items = []; ci = val[i++];) { + items.push({ + //todo:写死了 + label:ci, + value:ci, + theme:editor.options.theme, + onclick:function () { + editor.execCommand("lineheight", this.value); + } + }) + } + var ui = new editorui.MenuButton({ + editor:editor, + className:'edui-for-lineheight', + title:editor.options.labelMap['lineheight'] || editor.getLang("labelMap.lineheight") || '', + items:items, + onbuttonclick:function () { + var value = editor.queryCommandValue('LineHeight') || this.value; + editor.execCommand("LineHeight", value); + } + }); + editorui.buttons['lineheight'] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState('LineHeight'); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('LineHeight'); + value && ui.setValue((value + '').replace(/cm/, '')); + ui.setChecked(state) + } + }); + return ui; + }; + + var rowspacings = ['top', 'bottom']; + for (var r = 0, ri; ri = rowspacings[r++];) { + (function (cmd) { + editorui['rowspacing' + cmd] = function (editor) { + var val = editor.options['rowspacing' + cmd] || []; + if (!val.length) return null; + for (var i = 0, ci, items = []; ci = val[i++];) { + items.push({ + label:ci, + value:ci, + theme:editor.options.theme, + onclick:function () { + editor.execCommand("rowspacing", this.value, cmd); + } + }) + } + var ui = new editorui.MenuButton({ + editor:editor, + className:'edui-for-rowspacing' + cmd, + title:editor.options.labelMap['rowspacing' + cmd] || editor.getLang("labelMap.rowspacing" + cmd) || '', + items:items, + onbuttonclick:function () { + var value = editor.queryCommandValue('rowspacing', cmd) || this.value; + editor.execCommand("rowspacing", value, cmd); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState('rowspacing', cmd); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue('rowspacing', cmd); + value && ui.setValue((value + '').replace(/%/, '')); + ui.setChecked(state) + } + }); + return ui; + } + })(ri) + } + //有序,无序列表 + var lists = ['insertorderedlist', 'insertunorderedlist']; + for (var l = 0, cl; cl = lists[l++];) { + (function (cmd) { + editorui[cmd] = function (editor) { + var vals = editor.options[cmd], + _onMenuClick = function () { + editor.execCommand(cmd, this.value); + }, items = []; + for (var i in vals) { + items.push({ + label:vals[i] || editor.getLang()[cmd][i] || "", + value:i, + theme:editor.options.theme, + onclick:_onMenuClick + }) + } + var ui = new editorui.MenuButton({ + editor:editor, + className:'edui-for-' + cmd, + title:editor.getLang("labelMap." + cmd) || '', + 'items':items, + onbuttonclick:function () { + var value = editor.queryCommandValue(cmd) || this.value; + editor.execCommand(cmd, value); + } + }); + editorui.buttons[cmd] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState(cmd); + if (state == -1) { + ui.setDisabled(true); + } else { + ui.setDisabled(false); + var value = editor.queryCommandValue(cmd); + ui.setValue(value); + ui.setChecked(state) + } + }); + return ui; + }; + })(cl) + } + + editorui.fullscreen = function (editor, title) { + title = editor.options.labelMap['fullscreen'] || editor.getLang("labelMap.fullscreen") || ''; + var ui = new editorui.Button({ + className:'edui-for-fullscreen', + title:title, + theme:editor.options.theme, + onclick:function () { + if (editor.ui) { + editor.ui.setFullScreen(!editor.ui.isFullScreen()); + } + this.setChecked(editor.ui.isFullScreen()); + } + }); + editorui.buttons['fullscreen'] = ui; + editor.addListener('selectionchange', function () { + var state = editor.queryCommandState('fullscreen'); + ui.setDisabled(state == -1); + ui.setChecked(editor.ui.isFullScreen()); + }); + return ui; + }; + + // 表情 + editorui["emotion"] = function (editor, iframeUrl) { + var cmd = "emotion"; + var ui = new editorui.MultiMenuPop({ + title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd + "") || '', + editor:editor, + className:'edui-for-' + cmd, + iframeUrl:editor.ui.mapUrl(iframeUrl || (editor.options.iframeUrlMap || {})[cmd] || iframeUrlMap[cmd]) + }); + editorui.buttons[cmd] = ui; + + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState(cmd) == -1) + }); + return ui; + }; + + editorui.autotypeset = function (editor) { + var ui = new editorui.AutoTypeSetButton({ + editor:editor, + title:editor.options.labelMap['autotypeset'] || editor.getLang("labelMap.autotypeset") || '', + className:'edui-for-autotypeset', + onbuttonclick:function () { + editor.execCommand('autotypeset') + } + }); + editorui.buttons['autotypeset'] = ui; + editor.addListener('selectionchange', function () { + ui.setDisabled(editor.queryCommandState('autotypeset') == -1); + }); + return ui; + }; + + /* 简单上传插件 */ + editorui["simpleupload"] = function (editor) { + var name = 'simpleupload', + ui = new editorui.Button({ + className:'edui-for-' + name, + title:editor.options.labelMap[name] || editor.getLang("labelMap." + name) || '', + onclick:function () {}, + theme:editor.options.theme, + showText:false + }); + editorui.buttons[name] = ui; + editor.addListener('ready', function() { + var b = ui.getDom('body'), + iconSpan = b.children[0]; + editor.fireEvent('simpleuploadbtnready', iconSpan); + }); + editor.addListener('selectionchange', function (type, causeByUi, uiReady) { + var state = editor.queryCommandState(name); + if (state == -1) { + ui.setDisabled(true); + ui.setChecked(false); + } else { + if (!uiReady) { + ui.setDisabled(false); + ui.setChecked(state); + } + } + }); + return ui; + }; + +})(); + + +// adapter/editor.js +///import core +///commands 全屏 +///commandsName FullScreen +///commandsTitle 全屏 +(function () { + var utils = baidu.editor.utils, + uiUtils = baidu.editor.ui.uiUtils, + UIBase = baidu.editor.ui.UIBase, + domUtils = baidu.editor.dom.domUtils; + var nodeStack = []; + + function EditorUI(options) { + this.initOptions(options); + this.initEditorUI(); + } + + EditorUI.prototype = { + uiName:'editor', + initEditorUI:function () { + this.editor.ui = this; + this._dialogs = {}; + this.initUIBase(); + this._initToolbars(); + var editor = this.editor, + me = this; + + editor.addListener('ready', function () { + //提供getDialog方法 + editor.getDialog = function (name) { + return editor.ui._dialogs[name + "Dialog"]; + }; + domUtils.on(editor.window, 'scroll', function (evt) { + baidu.editor.ui.Popup.postHide(evt); + }); + //提供编辑器实时宽高(全屏时宽高不变化) + editor.ui._actualFrameWidth = editor.options.initialFrameWidth; + + UE.browser.ie && UE.browser.version === 6 && editor.container.ownerDocument.execCommand("BackgroundImageCache", false, true); + + //display bottom-bar label based on config + if (editor.options.elementPathEnabled) { + editor.ui.getDom('elementpath').innerHTML = '
    ' + editor.getLang("elementPathTip") + ':
    '; + } + if (editor.options.wordCount) { + function countFn() { + setCount(editor,me); + domUtils.un(editor.document, "click", arguments.callee); + } + domUtils.on(editor.document, "click", countFn); + editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip"); + } + editor.ui._scale(); + if (editor.options.scaleEnabled) { + if (editor.autoHeightEnabled) { + editor.disableAutoHeight(); + } + me.enableScale(); + } else { + me.disableScale(); + } + if (!editor.options.elementPathEnabled && !editor.options.wordCount && !editor.options.scaleEnabled) { + editor.ui.getDom('elementpath').style.display = "none"; + editor.ui.getDom('wordcount').style.display = "none"; + editor.ui.getDom('scale').style.display = "none"; + } + + if (!editor.selection.isFocus())return; + editor.fireEvent('selectionchange', false, true); + + + }); + + editor.addListener('mousedown', function (t, evt) { + var el = evt.target || evt.srcElement; + baidu.editor.ui.Popup.postHide(evt, el); + baidu.editor.ui.ShortCutMenu.postHide(evt); + + }); + editor.addListener("delcells", function () { + if (UE.ui['edittip']) { + new UE.ui['edittip'](editor); + } + editor.getDialog('edittip').open(); + }); + + var pastePop, isPaste = false, timer; + editor.addListener("afterpaste", function () { + if(editor.queryCommandState('pasteplain')) + return; + if(baidu.editor.ui.PastePicker){ + pastePop = new baidu.editor.ui.Popup({ + content:new baidu.editor.ui.PastePicker({editor:editor}), + editor:editor, + className:'edui-wordpastepop' + }); + pastePop.render(); + } + isPaste = true; + }); + + editor.addListener("afterinserthtml", function () { + clearTimeout(timer); + timer = setTimeout(function () { + if (pastePop && (isPaste || editor.ui._isTransfer)) { + if(pastePop.isHidden()){ + var span = domUtils.createElement(editor.document, 'span', { + 'style':"line-height:0px;", + 'innerHTML':'\ufeff' + }), + range = editor.selection.getRange(); + range.insertNode(span); + var tmp= getDomNode(span, 'firstChild', 'previousSibling'); + tmp && pastePop.showAnchor(tmp.nodeType == 3 ? tmp.parentNode : tmp); + domUtils.remove(span); + }else{ + pastePop.show(); + } + delete editor.ui._isTransfer; + isPaste = false; + } + }, 200) + }); + editor.addListener('contextmenu', function (t, evt) { + baidu.editor.ui.Popup.postHide(evt); + }); + editor.addListener('keydown', function (t, evt) { + if (pastePop) pastePop.dispose(evt); + var keyCode = evt.keyCode || evt.which; + if(evt.altKey&&keyCode==90){ + UE.ui.buttons['fullscreen'].onclick(); + } + }); + editor.addListener('wordcount', function (type) { + setCount(this,me); + }); + function setCount(editor,ui) { + editor.setOpt({ + wordCount:true, + maximumWords:10000, + wordCountMsg:editor.options.wordCountMsg || editor.getLang("wordCountMsg"), + wordOverFlowMsg:editor.options.wordOverFlowMsg || editor.getLang("wordOverFlowMsg") + }); + var opt = editor.options, + max = opt.maximumWords, + msg = opt.wordCountMsg , + errMsg = opt.wordOverFlowMsg, + countDom = ui.getDom('wordcount'); + if (!opt.wordCount) { + return; + } + var count = editor.getContentLength(true); + if (count > max) { + countDom.innerHTML = errMsg; + editor.fireEvent("wordcountoverflow"); + } else { + countDom.innerHTML = msg.replace("{#leave}", max - count).replace("{#count}", count); + } + } + + editor.addListener('selectionchange', function () { + if (editor.options.elementPathEnabled) { + me[(editor.queryCommandState('elementpath') == -1 ? 'dis' : 'en') + 'ableElementPath']() + } + if (editor.options.scaleEnabled) { + me[(editor.queryCommandState('scale') == -1 ? 'dis' : 'en') + 'ableScale'](); + + } + }); + var popup = new baidu.editor.ui.Popup({ + editor:editor, + content:'', + className:'edui-bubble', + _onEditButtonClick:function () { + this.hide(); + editor.ui._dialogs.linkDialog.open(); + }, + _onImgEditButtonClick:function (name) { + this.hide(); + editor.ui._dialogs[name] && editor.ui._dialogs[name].open(); + + }, + _onImgSetFloat:function (value) { + this.hide(); + editor.execCommand("imagefloat", value); + + }, + _setIframeAlign:function (value) { + var frame = popup.anchorEl; + var newFrame = frame.cloneNode(true); + switch (value) { + case -2: + newFrame.setAttribute("align", ""); + break; + case -1: + newFrame.setAttribute("align", "left"); + break; + case 1: + newFrame.setAttribute("align", "right"); + break; + } + frame.parentNode.insertBefore(newFrame, frame); + domUtils.remove(frame); + popup.anchorEl = newFrame; + popup.showAnchor(popup.anchorEl); + }, + _updateIframe:function () { + var frame = editor._iframe = popup.anchorEl; + if(domUtils.hasClass(frame, 'ueditor_baidumap')) { + editor.selection.getRange().selectNode(frame).select(); + editor.ui._dialogs.mapDialog.open(); + popup.hide(); + } else { + editor.ui._dialogs.insertframeDialog.open(); + popup.hide(); + } + }, + _onRemoveButtonClick:function (cmdName) { + editor.execCommand(cmdName); + this.hide(); + }, + queryAutoHide:function (el) { + if (el && el.ownerDocument == editor.document) { + if (el.tagName.toLowerCase() == 'img' || domUtils.findParentByTagName(el, 'a', true)) { + return el !== popup.anchorEl; + } + } + return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, el); + } + }); + popup.render(); + if (editor.options.imagePopup) { + editor.addListener('mouseover', function (t, evt) { + evt = evt || window.event; + var el = evt.target || evt.srcElement; + if (editor.ui._dialogs.insertframeDialog && /iframe/ig.test(el.tagName)) { + var html = popup.formatHtml( + '' + editor.getLang("property") + ': ' + editor.getLang("default") + '  ' + editor.getLang("justifyleft") + '  ' + editor.getLang("justifyright") + '  ' + + ' ' + editor.getLang("modify") + ''); + if (html) { + popup.getDom('content').innerHTML = html; + popup.anchorEl = el; + popup.showAnchor(popup.anchorEl); + } else { + popup.hide(); + } + } + }); + editor.addListener('selectionchange', function (t, causeByUi) { + if (!causeByUi) return; + var html = '', str = "", + img = editor.selection.getRange().getClosedNode(), + dialogs = editor.ui._dialogs; + if (img && img.tagName == 'IMG') { + var dialogName = 'insertimageDialog'; + if (img.className.indexOf("edui-faked-video") != -1 || img.className.indexOf("edui-upload-video") != -1) { + dialogName = "insertvideoDialog" + } + if (img.className.indexOf("edui-faked-webapp") != -1) { + dialogName = "webappDialog" + } + if (img.src.indexOf("http://api.map.baidu.com") != -1) { + dialogName = "mapDialog" + } + if (img.className.indexOf("edui-faked-music") != -1) { + dialogName = "musicDialog" + } + if (img.src.indexOf("http://maps.google.com/maps/api/staticmap") != -1) { + dialogName = "gmapDialog" + } + if (img.getAttribute("anchorname")) { + dialogName = "anchorDialog"; + html = popup.formatHtml( + '' + editor.getLang("property") + ': ' + editor.getLang("modify") + '  ' + + '' + editor.getLang("delete") + ''); + } + if (img.getAttribute("word_img")) { + //todo 放到dialog去做查询 + editor.word_img = [img.getAttribute("word_img")]; + dialogName = "wordimageDialog" + } + if(domUtils.hasClass(img, 'loadingclass') || domUtils.hasClass(img, 'loaderrorclass')) { + dialogName = ""; + } + if (!dialogs[dialogName]) { + return; + } + str = '' + editor.getLang("property") + ': '+ + '' + editor.getLang("default") + '  ' + + '' + editor.getLang("justifyleft") + '  ' + + '' + editor.getLang("justifyright") + '  ' + + '' + editor.getLang("justifycenter") + '  '+ + '' + editor.getLang("modify") + ''; + + !html && (html = popup.formatHtml(str)) + + } + if (editor.ui._dialogs.linkDialog) { + var link = editor.queryCommandValue('link'); + var url; + if (link && (url = (link.getAttribute('_href') || link.getAttribute('href', 2)))) { + var txt = url; + if (url.length > 30) { + txt = url.substring(0, 20) + "..."; + } + if (html) { + html += '
    ' + } + html += popup.formatHtml( + '' + editor.getLang("anthorMsg") + ': ' + txt + '' + + ' ' + editor.getLang("modify") + '' + + ' ' + editor.getLang("clear") + ''); + popup.showAnchor(link); + } + } + + if (html) { + popup.getDom('content').innerHTML = html; + popup.anchorEl = img || link; + popup.showAnchor(popup.anchorEl); + } else { + popup.hide(); + } + }); + } + + }, + _initToolbars:function () { + var editor = this.editor; + var toolbars = this.toolbars || []; + var toolbarUis = []; + for (var i = 0; i < toolbars.length; i++) { + var toolbar = toolbars[i]; + var toolbarUi = new baidu.editor.ui.Toolbar({theme:editor.options.theme}); + for (var j = 0; j < toolbar.length; j++) { + var toolbarItem = toolbar[j]; + var toolbarItemUi = null; + if (typeof toolbarItem == 'string') { + toolbarItem = toolbarItem.toLowerCase(); + if (toolbarItem == '|') { + toolbarItem = 'Separator'; + } + if(toolbarItem == '||'){ + toolbarItem = 'Breakline'; + } + if (baidu.editor.ui[toolbarItem]) { + toolbarItemUi = new baidu.editor.ui[toolbarItem](editor); + } + + //fullscreen这里单独处理一下,放到首行去 + if (toolbarItem == 'fullscreen') { + if (toolbarUis && toolbarUis[0]) { + toolbarUis[0].items.splice(0, 0, toolbarItemUi); + } else { + toolbarItemUi && toolbarUi.items.splice(0, 0, toolbarItemUi); + } + + continue; + + + } + } else { + toolbarItemUi = toolbarItem; + } + if (toolbarItemUi && toolbarItemUi.id) { + + toolbarUi.add(toolbarItemUi); + } + } + toolbarUis[i] = toolbarUi; + } + + //接受外部定制的UI + + utils.each(UE._customizeUI,function(obj,key){ + var itemUI,index; + if(obj.id && obj.id != editor.key){ + return false; + } + itemUI = obj.execFn.call(editor,editor,key); + if(itemUI){ + index = obj.index; + if(index === undefined){ + index = toolbarUi.items.length; + } + toolbarUi.add(itemUI,index) + } + }); + + this.toolbars = toolbarUis; + }, + getHtmlTpl:function () { + return '
    ' + + '
    ' + + (this.toolbars.length ? + '
    ' + + this.renderToolbarBoxHtml() + + '
    ' : '') + + '' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + //modify wdcount by matao + '
    ' + + '' + + '' + + '' + + '
    ' + + '
    ' + + '
    '; + }, + showWordImageDialog:function () { + this._dialogs['wordimageDialog'].open(); + }, + renderToolbarBoxHtml:function () { + var buff = []; + for (var i = 0; i < this.toolbars.length; i++) { + buff.push(this.toolbars[i].renderHtml()); + } + return buff.join(''); + }, + setFullScreen:function (fullscreen) { + + var editor = this.editor, + container = editor.container.parentNode.parentNode; + if (this._fullscreen != fullscreen) { + this._fullscreen = fullscreen; + this.editor.fireEvent('beforefullscreenchange', fullscreen); + if (baidu.editor.browser.gecko) { + var bk = editor.selection.getRange().createBookmark(); + } + if (fullscreen) { + while (container.tagName != "BODY") { + var position = baidu.editor.dom.domUtils.getComputedStyle(container, "position"); + nodeStack.push(position); + container.style.position = "static"; + container = container.parentNode; + } + this._bakHtmlOverflow = document.documentElement.style.overflow; + this._bakBodyOverflow = document.body.style.overflow; + this._bakAutoHeight = this.editor.autoHeightEnabled; + this._bakScrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop); + + this._bakEditorContaninerWidth = editor.iframe.parentNode.offsetWidth; + if (this._bakAutoHeight) { + //当全屏时不能执行自动长高 + editor.autoHeightEnabled = false; + this.editor.disableAutoHeight(); + } + + document.documentElement.style.overflow = 'hidden'; + //修复,滚动条不收起的问题 + + window.scrollTo(0,window.scrollY); + this._bakCssText = this.getDom().style.cssText; + this._bakCssText1 = this.getDom('iframeholder').style.cssText; + editor.iframe.parentNode.style.width = ''; + this._updateFullScreen(); + } else { + while (container.tagName != "BODY") { + container.style.position = nodeStack.shift(); + container = container.parentNode; + } + this.getDom().style.cssText = this._bakCssText; + this.getDom('iframeholder').style.cssText = this._bakCssText1; + if (this._bakAutoHeight) { + editor.autoHeightEnabled = true; + this.editor.enableAutoHeight(); + } + + document.documentElement.style.overflow = this._bakHtmlOverflow; + document.body.style.overflow = this._bakBodyOverflow; + editor.iframe.parentNode.style.width = this._bakEditorContaninerWidth + 'px'; + window.scrollTo(0, this._bakScrollTop); + } + if (browser.gecko && editor.body.contentEditable === 'true') { + var input = document.createElement('input'); + document.body.appendChild(input); + editor.body.contentEditable = false; + setTimeout(function () { + input.focus(); + setTimeout(function () { + editor.body.contentEditable = true; + editor.fireEvent('fullscreenchanged', fullscreen); + editor.selection.getRange().moveToBookmark(bk).select(true); + baidu.editor.dom.domUtils.remove(input); + fullscreen && window.scroll(0, 0); + }, 0) + }, 0) + } + + if(editor.body.contentEditable === 'true'){ + this.editor.fireEvent('fullscreenchanged', fullscreen); + this.triggerLayout(); + } + + } + }, + _updateFullScreen:function () { + if (this._fullscreen) { + var vpRect = uiUtils.getViewportRect(); + this.getDom().style.cssText = 'border:0;position:absolute;left:0;top:' + (this.editor.options.topOffset || 0) + 'px;width:' + vpRect.width + 'px;height:' + vpRect.height + 'px;z-index:' + (this.getDom().style.zIndex * 1 + 100); + uiUtils.setViewportOffset(this.getDom(), { left:0, top:this.editor.options.topOffset || 0 }); + this.editor.setHeight(vpRect.height - this.getDom('toolbarbox').offsetHeight - this.getDom('bottombar').offsetHeight - (this.editor.options.topOffset || 0),true); + //不手动调一下,会导致全屏失效 + if(browser.gecko){ + try{ + window.onresize(); + }catch(e){ + + } + + } + } + }, + _updateElementPath:function () { + var bottom = this.getDom('elementpath'), list; + if (this.elementPathEnabled && (list = this.editor.queryCommandValue('elementpath'))) { + + var buff = []; + for (var i = 0, ci; ci = list[i]; i++) { + buff[i] = this.formatHtml('' + ci + ''); + } + bottom.innerHTML = '
    ' + this.editor.getLang("elementPathTip") + ': ' + buff.join(' > ') + '
    '; + + } else { + bottom.style.display = 'none' + } + }, + disableElementPath:function () { + var bottom = this.getDom('elementpath'); + bottom.innerHTML = ''; + bottom.style.display = 'none'; + this.elementPathEnabled = false; + + }, + enableElementPath:function () { + var bottom = this.getDom('elementpath'); + bottom.style.display = ''; + this.elementPathEnabled = true; + this._updateElementPath(); + }, + _scale:function () { + var doc = document, + editor = this.editor, + editorHolder = editor.container, + editorDocument = editor.document, + toolbarBox = this.getDom("toolbarbox"), + bottombar = this.getDom("bottombar"), + scale = this.getDom("scale"), + scalelayer = this.getDom("scalelayer"); + + var isMouseMove = false, + position = null, + minEditorHeight = 0, + minEditorWidth = editor.options.minFrameWidth, + pageX = 0, + pageY = 0, + scaleWidth = 0, + scaleHeight = 0; + + function down() { + position = domUtils.getXY(editorHolder); + + if (!minEditorHeight) { + minEditorHeight = editor.options.minFrameHeight + toolbarBox.offsetHeight + bottombar.offsetHeight; + } + + scalelayer.style.cssText = "position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:" + editorHolder.offsetWidth + "px;height:" + + editorHolder.offsetHeight + "px;z-index:" + (editor.options.zIndex + 1); + + domUtils.on(doc, "mousemove", move); + domUtils.on(editorDocument, "mouseup", up); + domUtils.on(doc, "mouseup", up); + } + + var me = this; + //by xuheng 全屏时关掉缩放 + this.editor.addListener('fullscreenchanged', function (e, fullScreen) { + if (fullScreen) { + me.disableScale(); + + } else { + if (me.editor.options.scaleEnabled) { + me.enableScale(); + var tmpNode = me.editor.document.createElement('span'); + me.editor.body.appendChild(tmpNode); + me.editor.body.style.height = Math.max(domUtils.getXY(tmpNode).y, me.editor.iframe.offsetHeight - 20) + 'px'; + domUtils.remove(tmpNode) + } + } + }); + function move(event) { + clearSelection(); + var e = event || window.event; + pageX = e.pageX || (doc.documentElement.scrollLeft + e.clientX); + pageY = e.pageY || (doc.documentElement.scrollTop + e.clientY); + scaleWidth = pageX - position.x; + scaleHeight = pageY - position.y; + + if (scaleWidth >= minEditorWidth) { + isMouseMove = true; + scalelayer.style.width = scaleWidth + 'px'; + } + if (scaleHeight >= minEditorHeight) { + isMouseMove = true; + scalelayer.style.height = scaleHeight + "px"; + } + } + + function up() { + if (isMouseMove) { + isMouseMove = false; + editor.ui._actualFrameWidth = scalelayer.offsetWidth - 2; + editorHolder.style.width = editor.ui._actualFrameWidth + 'px'; + + editor.setHeight(scalelayer.offsetHeight - bottombar.offsetHeight - toolbarBox.offsetHeight - 2,true); + } + if (scalelayer) { + scalelayer.style.display = "none"; + } + clearSelection(); + domUtils.un(doc, "mousemove", move); + domUtils.un(editorDocument, "mouseup", up); + domUtils.un(doc, "mouseup", up); + } + + function clearSelection() { + if (browser.ie) + doc.selection.clear(); + else + window.getSelection().removeAllRanges(); + } + + this.enableScale = function () { + //trace:2868 + if (editor.queryCommandState("source") == 1) return; + scale.style.display = ""; + this.scaleEnabled = true; + domUtils.on(scale, "mousedown", down); + }; + this.disableScale = function () { + scale.style.display = "none"; + this.scaleEnabled = false; + domUtils.un(scale, "mousedown", down); + }; + }, + isFullScreen:function () { + return this._fullscreen; + }, + postRender:function () { + UIBase.prototype.postRender.call(this); + for (var i = 0; i < this.toolbars.length; i++) { + this.toolbars[i].postRender(); + } + var me = this; + var timerId, + domUtils = baidu.editor.dom.domUtils, + updateFullScreenTime = function () { + clearTimeout(timerId); + timerId = setTimeout(function () { + me._updateFullScreen(); + }); + }; + domUtils.on(window, 'resize', updateFullScreenTime); + + me.addListener('destroy', function () { + domUtils.un(window, 'resize', updateFullScreenTime); + clearTimeout(timerId); + }) + }, + showToolbarMsg:function (msg, flag) { + this.getDom('toolbarmsg_label').innerHTML = msg; + this.getDom('toolbarmsg').style.display = ''; + // + if (!flag) { + var w = this.getDom('upload_dialog'); + w.style.display = 'none'; + } + }, + hideToolbarMsg:function () { + this.getDom('toolbarmsg').style.display = 'none'; + }, + mapUrl:function (url) { + return url ? url.replace('~/', this.editor.options.UEDITOR_HOME_URL || '') : '' + }, + triggerLayout:function () { + var dom = this.getDom(); + if (dom.style.zoom == '1') { + dom.style.zoom = '100%'; + } else { + dom.style.zoom = '1'; + } + } + }; + utils.inherits(EditorUI, baidu.editor.ui.UIBase); + + + var instances = {}; + + + UE.ui.Editor = function (options) { + var editor = new UE.Editor(options); + editor.options.editor = editor; + utils.loadFile(document, { + href:editor.options.themePath + editor.options.theme + "/css/ueditor.css", + tag:"link", + type:"text/css", + rel:"stylesheet" + }); + + var oldRender = editor.render; + editor.render = function (holder) { + if (holder.constructor === String) { + editor.key = holder; + instances[holder] = editor; + } + utils.domReady(function () { + editor.langIsReady ? renderUI() : editor.addListener("langReady", renderUI); + function renderUI() { + editor.setOpt({ + labelMap:editor.options.labelMap || editor.getLang('labelMap') + }); + new EditorUI(editor.options); + if (holder) { + if (holder.constructor === String) { + holder = document.getElementById(holder); + } + holder && holder.getAttribute('name') && ( editor.options.textarea = holder.getAttribute('name')); + if (holder && /script|textarea/ig.test(holder.tagName)) { + var newDiv = document.createElement('div'); + holder.parentNode.insertBefore(newDiv, holder); + var cont = holder.value || holder.innerHTML; + editor.options.initialContent = /^[\t\r\n ]*$/.test(cont) ? editor.options.initialContent : + cont.replace(/>[\n\r\t]+([ ]{4})+/g, '>') + .replace(/[\n\r\t]+([ ]{4})+[\n\r\t]+<'); + holder.className && (newDiv.className = holder.className); + holder.style.cssText && (newDiv.style.cssText = holder.style.cssText); + if (/textarea/i.test(holder.tagName)) { + editor.textarea = holder; + editor.textarea.style.display = 'none'; + + + } else { + holder.parentNode.removeChild(holder); + + + } + if(holder.id){ + newDiv.id = holder.id; + domUtils.removeAttributes(holder,'id'); + } + holder = newDiv; + holder.innerHTML = ''; + } + + } + domUtils.addClass(holder, "edui-" + editor.options.theme); + editor.ui.render(holder); + var opt = editor.options; + //给实例添加一个编辑器的容器引用 + editor.container = editor.ui.getDom(); + var parents = domUtils.findParents(holder,true); + var displays = []; + for(var i = 0 ,ci;ci=parents[i];i++){ + displays[i] = ci.style.display; + ci.style.display = 'block' + } + if (opt.initialFrameWidth) { + opt.minFrameWidth = opt.initialFrameWidth; + } else { + opt.minFrameWidth = opt.initialFrameWidth = holder.offsetWidth; + var styleWidth = holder.style.width; + if(/%$/.test(styleWidth)) { + opt.initialFrameWidth = styleWidth; + } + } + if (opt.initialFrameHeight) { + opt.minFrameHeight = opt.initialFrameHeight; + } else { + opt.initialFrameHeight = opt.minFrameHeight = holder.offsetHeight; + } + for(var i = 0 ,ci;ci=parents[i];i++){ + ci.style.display = displays[i] + } + //编辑器最外容器设置了高度,会导致,编辑器不占位 + //todo 先去掉,没有找到原因 + if(holder.style.height){ + holder.style.height = '' + } + editor.container.style.width = opt.initialFrameWidth + (/%$/.test(opt.initialFrameWidth) ? '' : 'px'); + editor.container.style.zIndex = opt.zIndex; + oldRender.call(editor, editor.ui.getDom('iframeholder')); + editor.fireEvent("afteruiready"); + } + }) + }; + return editor; + }; + + + /** + * @file + * @name UE + * @short UE + * @desc UEditor的顶部命名空间 + */ + /** + * @name getEditor + * @since 1.2.4+ + * @grammar UE.getEditor(id,[opt]) => Editor实例 + * @desc 提供一个全局的方法得到编辑器实例 + * + * * ''id'' 放置编辑器的容器id, 如果容器下的编辑器已经存在,就直接返回 + * * ''opt'' 编辑器的可选参数 + * @example + * UE.getEditor('containerId',{onready:function(){//创建一个编辑器实例 + * this.setContent('hello') + * }}); + * UE.getEditor('containerId'); //返回刚创建的实例 + * + */ + UE.getEditor = function (id, opt) { + var editor = instances[id]; + if (!editor) { + editor = instances[id] = new UE.ui.Editor(opt); + editor.render(id); + } + return editor; + }; + + + UE.delEditor = function (id) { + var editor; + if (editor = instances[id]) { + editor.key && editor.destroy(); + delete instances[id] + } + }; + + UE.registerUI = function(uiName,fn,index,editorId){ + utils.each(uiName.split(/\s+/), function (name) { + UE._customizeUI[name] = { + id : editorId, + execFn:fn, + index:index + }; + }) + + } + +})(); + +// adapter/message.js +UE.registerUI('message', function(editor) { + + var editorui = baidu.editor.ui; + var Message = editorui.Message; + var holder; + var _messageItems = []; + var me = editor; + + me.addListener('ready', function(){ + holder = document.getElementById(me.ui.id + '_message_holder'); + updateHolderPos(); + setTimeout(function(){ + updateHolderPos(); + }, 500); + }); + + me.addListener('showmessage', function(type, opt){ + opt = utils.isString(opt) ? { + 'content': opt + } : opt; + var message = new Message({ + 'timeout': opt.timeout, + 'type': opt.type, + 'content': opt.content, + 'keepshow': opt.keepshow, + 'editor': me + }), + mid = opt.id || ('msg_' + (+new Date()).toString(36)); + message.render(holder); + _messageItems[mid] = message; + message.reset(opt); + updateHolderPos(); + return mid; + }); + + me.addListener('updatemessage',function(type, id, opt){ + opt = utils.isString(opt) ? { + 'content': opt + } : opt; + var message = _messageItems[id]; + message.render(holder); + message && message.reset(opt); + }); + + me.addListener('hidemessage',function(type, id){ + var message = _messageItems[id]; + message && message.hide(); + }); + + function updateHolderPos(){ + var toolbarbox = me.ui.getDom('toolbarbox'); + if (toolbarbox) { + holder.style.top = toolbarbox.offsetHeight + 3 + 'px'; + } + holder.style.zIndex = Math.max(me.options.zIndex, me.iframe.style.zIndex) + 1; + } + +}); + + +// adapter/autosave.js +UE.registerUI('autosave', function(editor) { + var timer = null,uid = null; + editor.on('afterautosave',function(){ + clearTimeout(timer); + + timer = setTimeout(function(){ + if(uid){ + editor.trigger('hidemessage',uid); + } + uid = editor.trigger('showmessage',{ + content : editor.getLang('autosave.success'), + timeout : 2000 + }); + + },2000) + }) + +}); + + + +})(); diff --git a/express/Campari-vue/www/public/ueditor/ueditor.all.min.js b/express/Campari-vue/www/public/ueditor/ueditor.all.min.js new file mode 100644 index 0000000..b357d50 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/ueditor.all.min.js @@ -0,0 +1,18 @@ +/*! + * UEditor + * version: ueditor + * build: Wed Aug 10 2016 11:06:16 GMT+0800 (CST) + */ + +!function(){function getListener(a,b,c){var d;return b=b.toLowerCase(),(d=a.__allListeners||c&&(a.__allListeners={}))&&(d[b]||c&&(d[b]=[]))}function getDomNode(a,b,c,d,e,f){var g,h=d&&a[b];for(!h&&(h=a[c]);!h&&(g=(g||a).parentNode);){if("BODY"==g.tagName||f&&!f(g))return null;h=g[c]}return h&&e&&!e(h)?getDomNode(h,b,c,!1,e):h}UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var baidu=window.baidu||{};window.baidu=baidu,window.UE=baidu.editor=window.UE||{},UE.plugins={},UE.commands={},UE.instants={},UE.I18N={},UE._customizeUI={},UE.version="1.4.3";var dom=UE.dom={},browser=UE.browser=function(){var a=navigator.userAgent.toLowerCase(),b=window.opera,c={ie:/(msie\s|trident.*rv:)([\w.]+)/.test(a),opera:!!b&&b.version,webkit:a.indexOf(" applewebkit/")>-1,mac:a.indexOf("macintosh")>-1,quirks:"BackCompat"==document.compatMode};c.gecko="Gecko"==navigator.product&&!c.webkit&&!c.opera&&!c.ie;var d=0;if(c.ie){var e=a.match(/(?:msie\s([\w.]+))/),f=a.match(/(?:trident.*rv:([\w.]+))/);d=e&&f&&e[1]&&f[1]?Math.max(1*e[1],1*f[1]):e&&e[1]?1*e[1]:f&&f[1]?1*f[1]:0,c.ie11Compat=11==document.documentMode,c.ie9Compat=9==document.documentMode,c.ie8=!!document.documentMode,c.ie8Compat=8==document.documentMode,c.ie7Compat=7==d&&!document.documentMode||7==document.documentMode,c.ie6Compat=d<7||c.quirks,c.ie9above=d>8,c.ie9below=d<9,c.ie11above=d>10,c.ie11below=d<11}if(c.gecko){var g=a.match(/rv:([\d\.]+)/);g&&(g=g[1].split("."),d=1e4*g[0]+100*(g[1]||0)+1*(g[2]||0))}return/chrome\/(\d+\.\d)/i.test(a)&&(c.chrome=+RegExp.$1),/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(a)&&!/chrome/i.test(a)&&(c.safari=+(RegExp.$1||RegExp.$2)),c.opera&&(d=parseFloat(b.version())),c.webkit&&(d=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])),c.version=d,c.isCompatible=!c.mobile&&(c.ie&&d>=6||c.gecko&&d>=10801||c.opera&&d>=9.5||c.air&&d>=1||c.webkit&&d>=522||!1),c}(),ie=browser.ie,webkit=browser.webkit,gecko=browser.gecko,opera=browser.opera,utils=UE.utils={each:function(a,b,c){if(null!=a)if(a.length===+a.length){for(var d=0,e=a.length;d=c&&a===b)return d=e,!1}),d},removeItem:function(a,b){for(var c=0,d=a.length;c'](?:(amp|lt|quot|gt|#39|nbsp|#\d+);)?/g,function(a,b){return b?a:{"<":"<","&":"&",'"':""",">":">","'":"'"}[a]}):""},unhtmlForUrl:function(a,b){return a?a.replace(b||/[<">']/g,function(a){return{"<":"<","&":"&",'"':""",">":">","'":"'"}[a]}):""},html:function(a){return a?a.replace(/&((g|l|quo)t|amp|#39|nbsp);/g,function(a){return{"<":"<","&":"&",""":'"',">":">","'":"'"," ":" "}[a]}):""},cssStyleToDomStyle:function(){var a=document.createElement("div").style,b={"float":void 0!=a.cssFloat?"cssFloat":void 0!=a.styleFloat?"styleFloat":"float"};return function(a){return b[a]||(b[a]=a.toLowerCase().replace(/-./g,function(a){return a.charAt(1).toUpperCase()}))}}(),loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)"tag"!=h&&g.push(h+'="'+d[h]+'"');return void c.write("<"+d.tag+" "+g.join(" ")+" >")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error("The load "+(d.href||d.src)+" fails,check the url settings of file ueditor.config.js ")},c.getElementsByTagName("head")[0].appendChild(i)}}}(),isEmptyObject:function(a){if(null==a)return!0;if(this.isArray(a)||this.isString(a))return 0===a.length;for(var b in a)if(a.hasOwnProperty(b))return!1;return!0},fixColor:function(a,b){if(/color/i.test(a)&&/rgba?/.test(b)){var c=b.split(",");if(c.length>3)return"";b="#";for(var d,e=0;d=c[e++];)d=parseInt(d.replace(/[^\d]/gi,""),10).toString(16),b+=1==d.length?"0"+d:d;b=b.toUpperCase()}return b},optCss:function(a){function b(a,b){if(!a)return"";var c=a.top,d=a.bottom,e=a.left,f=a.right,g="";if(c&&e&&d&&f)g+=";"+b+":"+(c==d&&d==e&&e==f?c:c==d&&e==f?c+" "+e:e==f?c+" "+e+" "+d:c+" "+f+" "+d+" "+e)+";";else for(var h in a)g+=";"+b+"-"+h+":"+a[h]+";";return g}var c,d;return a=a.replace(/(padding|margin|border)\-([^:]+):([^;]+);?/gi,function(a,b,e,f){if(1==f.split(" ").length)switch(b){case"padding":return!c&&(c={}),c[e]=f,"";case"margin":return!d&&(d={}),d[e]=f,"";case"border":return"initial"==f?"":a}return a}),a+=b(c,"padding")+b(d,"margin"),a.replace(/^[ \n\r\t;]*|[ \n\r\t]*$/,"").replace(/;([ \n\r\t]+)|\1;/g,";").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+";;":";"})},clone:function(a,b){var c;b=b||{};for(var d in a)a.hasOwnProperty(d)&&(c=a[d],"object"==typeof c?(b[d]=utils.isArray(c)?[]:{},utils.clone(a[d],b[d])):b[d]=c);return b},transUnitToPx:function(a){if(!/(pt|cm)/.test(a))return a;var b;switch(a.replace(/([\d.]+)(\w+)/,function(c,d,e){a=d,b=e}),b){case"cm":a=25*parseFloat(a);break;case"pt":a=Math.round(96*parseFloat(a)/72)}return a+(a?"px":"")},domReady:function(){function a(a){a.isReady=!0;for(var c;c=b.pop();c());}var b=[];return function(c,d){d=d||window;var e=d.document;c&&b.push(c),"complete"===e.readyState?a(e):(e.isReady&&a(e),browser.ie&&11!=browser.version?(!function(){if(!e.isReady){try{e.documentElement.doScroll("left")}catch(b){return void setTimeout(arguments.callee,0)}a(e)}}(),d.attachEvent("onload",function(){a(e)})):(e.addEventListener("DOMContentLoaded",function(){e.removeEventListener("DOMContentLoaded",arguments.callee,!1),a(e)},!1),d.addEventListener("load",function(){a(e)},!1)))}}(),cssRule:browser.ie&&11!=browser.version?function(a,b,c){var d,e;if(void 0===b||b&&b.nodeType&&9==b.nodeType){if(c=b&&b.nodeType&&9==b.nodeType?b:c||document,d=c.indexList||(c.indexList={}),e=d[a],void 0!==e)return c.styleSheets[e].cssText}else{if(c=c||document,d=c.indexList||(c.indexList={}),e=d[a],""===b)return void 0!==e&&(c.styleSheets[e].cssText="",delete d[a],!0);void 0!==e?sheetStyle=c.styleSheets[e]:(sheetStyle=c.createStyleSheet("",e=c.styleSheets.length),d[a]=e),sheetStyle.cssText=b}}:function(a,b,c){var d;return void 0===b||b&&b.nodeType&&9==b.nodeType?(c=b&&b.nodeType&&9==b.nodeType?b:c||document,d=c.getElementById(a),d?d.innerHTML:void 0):(c=c||document,d=c.getElementById(a),""===b?!!d&&(d.parentNode.removeChild(d),!0):void(d?d.innerHTML=b:(d=c.createElement("style"),d.id=a,d.innerHTML=b,c.getElementsByTagName("head")[0].appendChild(d))))},sort:function(a,b){b=b||function(a,b){return a.localeCompare(b)};for(var c=0,d=a.length;c0){var g=a[c];a[c]=a[e],a[e]=g}return a},serializeParam:function(a){var b=[];for(var c in a)if("method"!=c&&"timeout"!=c&&"async"!=c)if("function"!=(typeof a[c]).toLowerCase()&&"object"!=(typeof a[c]).toLowerCase())b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));else if(utils.isArray(a[c]))for(var d=0;d1||b!==a.parentNode){a.style.cssText=b.style.cssText+";"+a.style.cssText,b=b.parentNode;continue}b.style.cssText+=";"+a.style.cssText,"A"==b.tagName&&(b.style.textDecoration="underline")}if("A"!=b.tagName){b===a.parentNode&&domUtils.remove(a,!0);break}}b=b.parentNode}},mergeSibling:function(a,b,c){function d(a,b,c){var d;if((d=c[a])&&!domUtils.isBookmarkNode(d)&&1==d.nodeType&&domUtils.isSameElement(c,d)){for(;d.firstChild;)"firstChild"==b?c.insertBefore(d.lastChild,c.firstChild):c.appendChild(d.firstChild);domUtils.remove(d)}}!b&&d("previousSibling","firstChild",a),!c&&d("nextSibling","lastChild",a)},unSelectable:ie&&browser.ie9below||browser.opera?function(a){a.onselectstart=function(){return!1},a.onclick=a.onkeyup=a.onkeydown=function(){return!1},a.unselectable="on",a.setAttribute("unselectable","on");for(var b,c=0;b=a.all[c++];)switch(b.tagName.toLowerCase()){case"iframe":case"textarea":case"input":case"select":break;default:b.unselectable="on",a.setAttribute("unselectable","on")}}:function(a){a.style.MozUserSelect=a.style.webkitUserSelect=a.style.msUserSelect=a.style.KhtmlUserSelect="none"},removeAttributes:function(a,b){b=utils.isArray(b)?b:utils.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c,d=0;c=b[d++];){switch(c=attrFix[c]||c){case"className":a[c]="";break;case"style":a.style.cssText="";var e=a.getAttributeNode("style");!browser.ie&&e&&a.removeAttributeNode(e)}a.removeAttribute(c)}},createElement:function(a,b,c){return domUtils.setAttributes(a.createElement(b),c)},setAttributes:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];switch(c){case"class":a.className=d;break;case"style":a.style.cssText=a.style.cssText+";"+d;break;case"innerHTML":a[c]=d;break;case"value":a.value=d;break;default:a.setAttribute(attrFix[c]||c,d)}}return a},getComputedStyle:function(a,b){var c="width height top left";if(c.indexOf(b)>-1)return a["offset"+b.replace(/^\w/,function(a){return a.toUpperCase()})]+"px";if(3==a.nodeType&&(a=a.parentNode),browser.ie&&browser.version<9&&"font-size"==b&&!a.style.fontSize&&!dtd.$empty[a.tagName]&&!dtd.$nonChild[a.tagName]){var d=a.ownerDocument.createElement("span");d.style.cssText="padding:0;border:0;font-family:simsun;",d.innerHTML=".",a.appendChild(d);var e=d.offsetHeight;return a.removeChild(d),d=null,e+"px"}try{var f=domUtils.getStyle(a,b)||(window.getComputedStyle?domUtils.getWindow(a).getComputedStyle(a,"").getPropertyValue(b):(a.currentStyle||a.style)[utils.cssStyleToDomStyle(b)])}catch(g){return""}return utils.transUnitToPx(utils.fixColor(b,f))},removeClasses:function(a,b){b=utils.isArray(b)?b:utils.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp("\\b"+c+"\\b"),"");e=utils.trim(e).replace(/[ ]{2,}/g," "),e?a.className=e:domUtils.removeAttributes(a,["class"])},addClass:function(a,b){if(a){b=utils.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c,d=0,e=a.className;c=b[d++];)new RegExp("\\b"+c+"\\b").test(e)||(e+=" "+c);a.className=utils.trim(e)}},hasClass:function(a,b){if(utils.isRegExp(b))return b.test(a.className);b=utils.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp("\\b"+c+"\\b","i").test(e))return!1;return d-1==b.length},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},removeStyle:function(a,b){browser.ie?("color"==b&&(b="(^|;)"+b),a.style.cssText=a.style.cssText.replace(new RegExp(b+"[^:]*:[^;]+;?","ig"),"")):a.style.removeProperty?a.style.removeProperty(b):a.style.removeAttribute(utils.cssStyleToDomStyle(b)),a.style.cssText||domUtils.removeAttributes(a,["style"])},getStyle:function(a,b){var c=a.style[utils.cssStyleToDomStyle(b)];return utils.fixColor(b,c)},setStyle:function(a,b,c){a.style[utils.cssStyleToDomStyle(b)]=c,utils.trim(a.style.cssText)||this.removeAttributes(a,"style")},setStyles:function(a,b){for(var c in b)b.hasOwnProperty(c)&&domUtils.setStyle(a,c,b[c])},removeDirtyAttr:function(a){for(var b,c=0,d=a.getElementsByTagName("*");b=d[c++];)b.removeAttribute("_moz_dirty");a.removeAttribute("_moz_dirty")},getChildCount:function(a,b){var c=0,d=a.firstChild;for(b=b||function(){return 1};d;)b(d)&&c++,d=d.nextSibling;return c},isEmptyNode:function(a){return!a.firstChild||0==domUtils.getChildCount(a,function(a){return!domUtils.isBr(a)&&!domUtils.isBookmarkNode(a)&&!domUtils.isWhitespace(a)})},clearSelectedArr:function(a){for(var b;b=a.pop();)domUtils.removeAttributes(b,["class"])},scrollToView:function(a,b,c){var d=function(){var a=b.document,c="CSS1Compat"==a.compatMode;return{width:(c?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(c?a.documentElement.clientHeight:a.body.clientHeight)||0}},e=function(a){if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};var b=a.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop||b.body.scrollTop||0}},f=d().height,g=f*-1+c;g+=a.offsetHeight||0;var h=domUtils.getXY(a);g+=h.y;var i=e(b).y;(g>i||g0)return 0;for(var c in dtd.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1},setViewportOffset:function(a,b){var c=0|parseInt(a.style.left),d=0|parseInt(a.style.top),e=a.getBoundingClientRect(),f=b.left-e.left,g=b.top-e.top;f&&(a.style.left=c+f+"px"),g&&(a.style.top=d+g+"px")},fillNode:function(a,b){var c=browser.ie?a.createTextNode(domUtils.fillChar):a.createElement("br");b.innerHTML="",b.appendChild(c)},moveChild:function(a,b,c){for(;a.firstChild;)c&&b.firstChild?b.insertBefore(a.lastChild,b.firstChild):b.appendChild(a.firstChild)},hasNoAttributes:function(a){return browser.ie?/^<\w+\s*?>/.test(a.outerHTML):0==a.attributes.length},isCustomeNode:function(a){return 1==a.nodeType&&a.getAttribute("_ue_custom_node_")},isTagNode:function(a,b){return 1==a.nodeType&&new RegExp("\\b"+a.tagName+"\\b","i").test(b)},filterNodeList:function(a,b,c){var d=[];if(!utils.isFunction(b)){var e=b;b=function(a){return utils.indexOf(utils.isArray(e)?e:e.split(" "),a.tagName.toLowerCase())!=-1}}return utils.each(a,function(a){b(a)&&d.push(a)}),0==d.length?null:1!=d.length&&c?d:d[0]},isInNodeEndBoundary:function(a,b){var c=a.startContainer;if(3==c.nodeType&&a.startOffset!=c.nodeValue.length)return 0;if(1==c.nodeType&&a.startOffset!=c.childNodes.length)return 0;for(;c!==b;){if(c.nextSibling)return 0;c=c.parentNode}return 1},isBoundaryNode:function(a,b){for(var c;!domUtils.isBody(a);)if(c=a,a=a.parentNode,c!==a[b])return!1;return!0},fillHtml:browser.ie11below?" ":"
    "},fillCharReg=new RegExp(domUtils.fillChar,"g");!function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer===a.endContainer&&a.startOffset==a.endOffset}function b(a){return!a.collapsed&&1==a.startContainer.nodeType&&a.startContainer===a.endContainer&&a.endOffset-a.startOffset==1}function c(b,c,d,e){return 1==c.nodeType&&(dtd.$empty[c.tagName]||dtd.$nonChild[c.tagName])&&(d=domUtils.getNodeIndex(c)+(b?0:1),c=c.parentNode),b?(e.startContainer=c,e.startOffset=d,e.endContainer||e.collapse(!0)):(e.endContainer=c,e.endOffset=d,e.startContainer||e.collapse(!1)),a(e),e}function d(a,b){var c,d,e=a.startContainer,f=a.endContainer,g=a.startOffset,h=a.endOffset,i=a.document,j=i.createDocumentFragment();if(1==e.nodeType&&(e=e.childNodes[g]||(c=e.appendChild(i.createTextNode("")))),1==f.nodeType&&(f=f.childNodes[h]||(d=f.appendChild(i.createTextNode("")))),e===f&&3==e.nodeType)return j.appendChild(i.createTextNode(e.substringData(g,h-g))),b&&(e.deleteData(g,h-g),a.collapse(!0)),j;for(var k,l,m=j,n=domUtils.findParents(e,!0),o=domUtils.findParents(f,!0),p=0;n[p]==o[p];)p++;for(var q,r=p;q=n[r];r++){for(k=q.nextSibling,q==e?c||(3==a.startContainer.nodeType?(m.appendChild(i.createTextNode(e.nodeValue.slice(g))),b&&e.deleteData(g,e.nodeValue.length-g)):m.appendChild(b?e:e.cloneNode(!0))):(l=q.cloneNode(!1),m.appendChild(l));k&&k!==f&&k!==o[r];)q=k.nextSibling,m.appendChild(b?k:k.cloneNode(!0)),k=q;m=l}m=j,n[p]||(m.appendChild(n[p-1].cloneNode(!1)),m=m.firstChild);for(var s,r=p;s=o[r];r++){if(k=s.previousSibling,s==f?d||3!=a.endContainer.nodeType||(m.appendChild(i.createTextNode(f.substringData(0,h))),b&&f.deleteData(0,h)):(l=s.cloneNode(!1),m.appendChild(l)),r!=p||!n[p])for(;k&&k!==e;)s=k.previousSibling,m.insertBefore(b?k:k.cloneNode(!0),m.firstChild),k=s;m=l}return b&&a.setStartBefore(o[p]?n[p]?o[p]:n[p-1]:o[p-1]).collapse(!0),c&&domUtils.remove(c),d&&domUtils.remove(d),j}function e(a,b){try{if(g&&domUtils.inDoc(g,a))if(g.nodeValue.replace(fillCharReg,"").length)g.nodeValue=g.nodeValue.replace(fillCharReg,"");else{var c=g.parentNode;for(domUtils.remove(g);c&&domUtils.isEmptyInlineElement(c)&&(browser.safari?!(domUtils.getPosition(c,b)&domUtils.POSITION_CONTAINS):!c.contains(b));)g=c.parentNode,domUtils.remove(c),c=g}}catch(d){} +}function f(a,b){var c;for(a=a[b];a&&domUtils.isFillChar(a);)c=a[b],domUtils.remove(a),a=c}var g,h=0,i=domUtils.fillChar,j=dom.Range=function(a){var b=this;b.startContainer=b.startOffset=b.endContainer=b.endOffset=null,b.document=a,b.collapsed=!0};j.prototype={cloneContents:function(){return this.collapsed?null:d(this,0)},deleteContents:function(){var a;return this.collapsed||d(this,1),browser.webkit&&(a=this.startContainer,3!=a.nodeType||a.nodeValue.length||(this.setStartBefore(a).collapse(!0),domUtils.remove(a))),this},extractContents:function(){return this.collapsed?null:d(this,2)},setStart:function(a,b){return c(!0,a,b,this)},setEnd:function(a,b){return c(!1,a,b,this)},setStartAfter:function(a){return this.setStart(a.parentNode,domUtils.getNodeIndex(a)+1)},setStartBefore:function(a){return this.setStart(a.parentNode,domUtils.getNodeIndex(a))},setEndAfter:function(a){return this.setEnd(a.parentNode,domUtils.getNodeIndex(a)+1)},setEndBefore:function(a){return this.setEnd(a.parentNode,domUtils.getNodeIndex(a))},setStartAtFirst:function(a){return this.setStart(a,0)},setStartAtLast:function(a){return this.setStart(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},setEndAtFirst:function(a){return this.setEnd(a,0)},setEndAtLast:function(a){return this.setEnd(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},selectNode:function(a){return this.setStartBefore(a).setEndAfter(a)},selectNodeContents:function(a){return this.setStart(a,0).setEndAtLast(a)},cloneRange:function(){var a=this;return new j(a.document).setStart(a.startContainer,a.startOffset).setEnd(a.endContainer,a.endOffset)},collapse:function(a){var b=this;return a?(b.endContainer=b.startContainer,b.endOffset=b.startOffset):(b.startContainer=b.endContainer,b.startOffset=b.endOffset),b.collapsed=!0,b},shrinkBoundary:function(a){function b(a){return 1==a.nodeType&&!domUtils.isBookmarkNode(a)&&!dtd.$empty[a.tagName]&&!dtd.$nonChild[a.tagName]}for(var c,d=this,e=d.collapsed;1==d.startContainer.nodeType&&(c=d.startContainer.childNodes[d.startOffset])&&b(c);)d.setStart(c,0);if(e)return d.collapse(!0);if(!a)for(;1==d.endContainer.nodeType&&d.endOffset>0&&(c=d.endContainer.childNodes[d.endOffset-1])&&b(c);)d.setEnd(c,c.childNodes.length);return d},getCommonAncestor:function(a,c){var d=this,e=d.startContainer,f=d.endContainer;return e===f?a&&b(this)&&(e=e.childNodes[d.startOffset],1==e.nodeType)?e:c&&3==e.nodeType?e.parentNode:e:domUtils.getCommonAncestor(e,f)},trimBoundary:function(a){this.txtToElmBoundary();var b=this.startContainer,c=this.startOffset,d=this.collapsed,e=this.endContainer;if(3==b.nodeType){if(0==c)this.setStartBefore(b);else if(c>=b.nodeValue.length)this.setStartAfter(b);else{var f=domUtils.split(b,c);b===e?this.setEnd(f,this.endOffset-c):b.parentNode===e&&(this.endOffset+=1),this.setStartBefore(f)}if(d)return this.collapse(!0)}return a||(c=this.endOffset,e=this.endContainer,3==e.nodeType&&(0==c?this.setEndBefore(e):(c=c.nodeValue.length&&a["set"+b.replace(/(\w)/,function(a){return a.toUpperCase()})+"After"](c):a["set"+b.replace(/(\w)/,function(a){return a.toUpperCase()})+"Before"](c))}return!a&&this.collapsed||(b(this,"start"),b(this,"end")),this},insertNode:function(a){var b=a,c=1;11==a.nodeType&&(b=a.firstChild,c=a.childNodes.length),this.trimBoundary(!0);var d=this.startContainer,e=this.startOffset,f=d.childNodes[e];return f?d.insertBefore(a,f):d.appendChild(a),b.parentNode===this.endContainer&&(this.endOffset=this.endOffset+c),this.setStartBefore(b)},setCursor:function(a,b){return this.collapse(!a).select(b)},createBookmark:function(a,b){var c,d=this.document.createElement("span");return d.style.cssText="display:none;line-height:0px;",d.appendChild(this.document.createTextNode("‍")),d.id="_baidu_bookmark_start_"+(b?"":h++),this.collapsed||(c=d.cloneNode(!0),c.id="_baidu_bookmark_end_"+(b?"":h++)),this.insertNode(d),c&&this.collapse().insertNode(c).setEndBefore(c),this.setStartAfter(d),{start:a?d.id:d,end:c?a?c.id:c:null,id:a}},moveToBookmark:function(a){var b=a.id?this.document.getElementById(a.start):a.start,c=a.end&&a.id?this.document.getElementById(a.end):a.end;return this.setStartBefore(b),domUtils.remove(b),c?(this.setEndBefore(c),domUtils.remove(c)):this.collapse(!0),this},enlarge:function(a,b){var c,d,e=domUtils.isBody,f=this.document.createTextNode("");if(a){for(d=this.startContainer,1==d.nodeType?d.childNodes[this.startOffset]?c=d=d.childNodes[this.startOffset]:(d.appendChild(f),c=d=f):c=d;;){if(domUtils.isBlockElm(d)){for(d=c;(c=d.previousSibling)&&!domUtils.isBlockElm(c);)d=c;this.setStartBefore(d);break}c=d,d=d.parentNode}for(d=this.endContainer,1==d.nodeType?((c=d.childNodes[this.endOffset])?d.insertBefore(f,c):d.appendChild(f),c=d=f):c=d;;){if(domUtils.isBlockElm(d)){for(d=c;(c=d.nextSibling)&&!domUtils.isBlockElm(c);)d=c;this.setEndAfter(d);break}c=d,d=d.parentNode}f.parentNode===this.endContainer&&this.endOffset--,domUtils.remove(f)}if(!this.collapsed){for(;!(0!=this.startOffset||b&&b(this.startContainer)||e(this.startContainer));)this.setStartBefore(this.startContainer);for(;!(this.endOffset!=(1==this.endContainer.nodeType?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)||b&&b(this.endContainer)||e(this.endContainer));)this.setEndAfter(this.endContainer)}return this},enlargeToBlockElm:function(a){for(;!domUtils.isBlockElm(this.startContainer);)this.setStartBefore(this.startContainer);if(!a)for(;!domUtils.isBlockElm(this.endContainer);)this.setEndAfter(this.endContainer);return this},adjustmentBoundary:function(){if(!this.collapsed){for(;!domUtils.isBody(this.startContainer)&&this.startOffset==this.startContainer[3==this.startContainer.nodeType?"nodeValue":"childNodes"].length&&this.startContainer[3==this.startContainer.nodeType?"nodeValue":"childNodes"].length;)this.setStartAfter(this.startContainer);for(;!domUtils.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[3==this.endContainer.nodeType?"nodeValue":"childNodes"].length;)this.setEndBefore(this.endContainer)}return this},applyInlineStyle:function(a,b,c){if(this.collapsed)return this;this.trimBoundary().enlarge(!1,function(a){return 1==a.nodeType&&domUtils.isBlockElm(a)}).adjustmentBoundary();for(var d,e,f=this.createBookmark(),g=f.end,h=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase():!domUtils.isWhitespace(a)},i=domUtils.getNextDomNode(f.start,!1,h),j=this.cloneRange();i&&domUtils.getPosition(i,g)&domUtils.POSITION_PRECEDING;)if(3==i.nodeType||dtd[a][i.tagName]){for(j.setStartBefore(i),d=i;d&&(3==d.nodeType||dtd[a][d.tagName])&&d!==g;)e=d,d=domUtils.getNextDomNode(d,1==d.nodeType,null,function(b){return dtd[a][b.tagName]});var k,l=j.setEndAfter(e).extractContents();if(c&&c.length>0){var m,n;n=m=c[0].cloneNode(!1);for(var o,p=1;o=c[p++];)m.appendChild(o.cloneNode(!1)),m=m.firstChild;k=m}else k=j.document.createElement(a);b&&domUtils.setAttributes(k,b),k.appendChild(l),j.insertNode(c?n:k);var q;if("span"==a&&b.style&&/text\-decoration/.test(b.style)&&(q=domUtils.findParentByTagName(k,"a",!0))?(domUtils.setAttributes(q,b),domUtils.remove(k,!0),k=q):(domUtils.mergeSibling(k),domUtils.clearEmptySibling(k)),domUtils.mergeChild(k,b),i=domUtils.getNextDomNode(k,!1,h),domUtils.mergeToParent(k),d===g)break}else i=domUtils.getNextDomNode(i,!0,h);return this.moveToBookmark(f)},removeInlineStyle:function(a){if(this.collapsed)return this;a=utils.isArray(a)?a:[a],this.shrinkBoundary().adjustmentBoundary();for(var b=this.startContainer,c=this.endContainer;;){if(1==b.nodeType){if(utils.indexOf(a,b.tagName.toLowerCase())>-1)break;if("body"==b.tagName.toLowerCase()){b=null;break}}b=b.parentNode}for(;;){if(1==c.nodeType){if(utils.indexOf(a,c.tagName.toLowerCase())>-1)break;if("body"==c.tagName.toLowerCase()){c=null;break}}c=c.parentNode}var d,e,f=this.createBookmark();b&&(e=this.cloneRange().setEndBefore(f.start).setStartBefore(b),d=e.extractContents(),e.insertNode(d),domUtils.clearEmptySibling(b,!0),b.parentNode.insertBefore(f.start,b)),c&&(e=this.cloneRange().setStartAfter(f.end).setEndAfter(c),d=e.extractContents(),e.insertNode(d),domUtils.clearEmptySibling(c,!1,!0),c.parentNode.insertBefore(f.end,c.nextSibling));for(var g,h=domUtils.getNextDomNode(f.start,!1,function(a){return 1==a.nodeType});h&&h!==f.end;)g=domUtils.getNextDomNode(h,!0,function(a){return 1==a.nodeType}),utils.indexOf(a,h.tagName.toLowerCase())>-1&&domUtils.remove(h,!0),h=g;return this.moveToBookmark(f)},getClosedNode:function(){var a;if(!this.collapsed){var c=this.cloneRange().adjustmentBoundary().shrinkBoundary();if(b(c)){var d=c.startContainer.childNodes[c.startOffset];d&&1==d.nodeType&&(dtd.$empty[d.tagName]||dtd.$nonChild[d.tagName])&&(a=d)}}return a},select:browser.ie?function(a,b){var c;this.collapsed||this.shrinkBoundary();var d=this.getClosedNode();if(d&&!b){try{c=this.document.body.createControlRange(),c.addElement(d),c.select()}catch(h){}return this}var j,k=this.createBookmark(),l=k.start;if(c=this.document.body.createTextRange(),c.moveToElementText(l),c.moveStart("character",1),this.collapsed){if(!a&&3!=this.startContainer.nodeType){var m=this.document.createTextNode(i),n=this.document.createElement("span");n.appendChild(this.document.createTextNode(i)),l.parentNode.insertBefore(n,l),l.parentNode.insertBefore(m,l),e(this.document,m),g=m,f(n,"previousSibling"),f(l,"nextSibling"),c.moveStart("character",-1),c.collapse(!0)}}else{var o=this.document.body.createTextRange();j=k.end,o.moveToElementText(j),c.setEndPoint("EndToEnd",o)}this.moveToBookmark(k),n&&domUtils.remove(n);try{c.select()}catch(h){}return this}:function(a){function b(a){function b(b,c,d){3==b.nodeType&&b.nodeValue.length0)j=k-1;else{if(!(l<0))return{container:d,offset:c(e)};i=k+1}}if(k==-1){if(h.moveToElementText(d),h.setEndPoint("StartToStart",a),f=h.text.replace(/(\r\n|\r)/g,"\n").length,g=d.childNodes,!f)return e=g[g.length-1],{container:e,offset:e.nodeValue.length};for(var m=g.length;f>0;)f-=g[--m].nodeValue.length;return{container:g[m],offset:-f}}if(h.collapse(l>0),h.setEndPoint(l>0?"StartToStart":"EndToStart",a),f=h.text.replace(/(\r\n|\r)/g,"\n").length,!f)return dtd.$empty[e.tagName]||dtd.$nonChild[e.tagName]?{container:d,offset:c(e)+(l>0?0:1)}:{container:e,offset:l>0?0:e.childNodes.length};for(;f>0;)try{var n=e;e=e[l>0?"previousSibling":"nextSibling"],f-=e.nodeValue.length}catch(o){return{container:d,offset:c(n)}}return{container:e,offset:l>0?-f:e.nodeValue.length+f}}function b(b,c){if(b.item)c.selectNode(b.item(0));else{var d=a(b,!0);c.setStart(d.container,d.offset),0!=b.compareEndPoints("StartToEnd",b)&&(d=a(b,!1),c.setEnd(d.container,d.offset))}return c}function c(a){var b;try{b=a.getNative().createRange()}catch(c){return null}var d=b.item?b.item(0):b.parentElement();return(d.ownerDocument||d)===a.document?b:null}var d=dom.Selection=function(a){var b,d=this;d.document=a,browser.ie9below&&(b=domUtils.getWindow(a).frameElement,domUtils.on(b,"beforedeactivate",function(){d._bakIERange=d.getIERange()}),domUtils.on(b,"activate",function(){try{!c(d)&&d._bakIERange&&d._bakIERange.select()}catch(a){}d._bakIERange=null})),b=a=null};d.prototype={rangeInBody:function(a,b){var c=browser.ie9below||b?a.item?a.item():a.parentElement():a.startContainer;return c===this.document.body||domUtils.inDoc(c,this.document)},getNative:function(){var a=this.document;try{return a?browser.ie9below?a.selection:domUtils.getWindow(a).getSelection():null}catch(b){return null}},getIERange:function(){var a=c(this);return!a&&this._bakIERange?this._bakIERange:a},cache:function(){this.clear(),this._cachedRange=this.getRange(),this._cachedStartElement=this.getStart(),this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath)return this._cachedStartElementPath;var a=this.getStart();return a?domUtils.findParents(a,!0,null,!0):[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(browser.ie9below){var a=c(this);return!(!a||!this.rangeInBody(a))}return!!this.getNative().rangeCount}catch(b){return!1}},getRange:function(){function a(a){for(var b=c.document.body.firstChild,d=a.collapsed;b&&b.firstChild;)a.setStart(b,0),b=b.firstChild;a.startContainer||a.setStart(c.document.body,0),d&&a.collapse(!0)}var c=this;if(null!=c._cachedRange)return this._cachedRange;var d=new baidu.editor.dom.Range(c.document);if(browser.ie9below){var e=c.getIERange();if(e)try{b(e,d)}catch(f){a(d)}else a(d)}else{var g=c.getNative();if(g&&g.rangeCount){var h=g.getRangeAt(0),i=g.getRangeAt(g.rangeCount-1);d.setStart(h.startContainer,h.startOffset).setEnd(i.endContainer,i.endOffset),d.collapsed&&domUtils.isBody(d.startContainer)&&!d.startOffset&&a(d)}else{if(this._bakRange&&domUtils.inDoc(this._bakRange.startContainer,this.document))return this._bakRange;a(d)}}return this._bakRange=d},getStart:function(){if(this._cachedStartElement)return this._cachedStartElement;var a,b,c,d,e=browser.ie9below?this.getIERange():this.getRange();if(browser.ie9below){if(!e)return this.document.body.firstChild;if(e.item)return e.item(0);for(a=e.duplicate(),a.text.length>0&&a.moveStart("character",1),a.collapse(1),b=a.parentElement(),d=c=e.parentElement();c=c.parentNode;)if(c==b){b=d;break}}else if(e.shrinkBoundary(),b=e.startContainer,1==b.nodeType&&b.hasChildNodes()&&(b=b.childNodes[Math.min(b.childNodes.length-1,e.startOffset)]),3==b.nodeType)return b.parentNode;return b},getText:function(){var a,b;return this.isFocus()&&(a=this.getNative())?(b=browser.ie9below?a.createRange():a.getRangeAt(0),browser.ie9below?b.text:b.toString()):""},clearRange:function(){this.getNative()[browser.ie9below?"empty":"removeAllRanges"]()}}}(),function(){function a(a,b){var c;if(b.textarea)if(utils.isString(b.textarea)){for(var d,e=0,f=domUtils.getElementsByTagName(a,"textarea");d=f[e++];)if(d.id=="ueditor_textarea_"+b.options.textarea){c=d;break}}else c=b.textarea;c||(a.appendChild(c=domUtils.createElement(document,"textarea",{name:b.options.textarea,id:"ueditor_textarea_"+b.options.textarea,style:"display:none"})),b.textarea=c),!c.getAttribute("name")&&c.setAttribute("name",b.options.textarea),c.value=b.hasContents()?b.options.allHtmlEnabled?b.getAllHtml():b.getContent(null,null,!0):""}function b(a){for(var b in a)return b}function c(a){a.langIsReady=!0,a.fireEvent("langReady")}var d,e=0,f=UE.Editor=function(a){var d=this;d.uid=e++,EventBase.call(d),d.commands={},d.options=utils.extend(utils.clone(a||{}),UEDITOR_CONFIG,!0),d.shortcutkeys={},d.inputRules=[],d.outputRules=[],d.setOpt(f.defaultOptions(d)),d.loadServerConfig(),utils.isEmptyObject(UE.I18N)?utils.loadFile(document,{src:d.options.langPath+d.options.lang+"/"+d.options.lang+".js",tag:"script",type:"text/javascript",defer:"defer"},function(){UE.plugin.load(d),c(d)}):(d.options.lang=b(UE.I18N),UE.plugin.load(d),c(d)),UE.instants["ueditorInstant"+d.uid]=d};f.prototype={registerCommand:function(a,b){this.commands[a]=b},ready:function(a){var b=this;a&&(b.isReady?a.apply(b):b.addListener("ready",a))},setOpt:function(a,b){var c={};utils.isString(a)?c[a]=b:c=a,utils.extend(this.options,c,!0)},getOpt:function(a){return this.options[a]},destroy:function(){var a=this;a.fireEvent("destroy");var b=a.container.parentNode,c=a.textarea;c?c.style.display="":(c=document.createElement("textarea"),b.parentNode.insertBefore(c,b)),c.style.width=a.iframe.offsetWidth+"px",c.style.height=a.iframe.offsetHeight+"px",c.value=a.getContent(),c.id=a.key,b.innerHTML="",domUtils.remove(b);var d=a.key;for(var e in a)a.hasOwnProperty(e)&&delete this[e];UE.delEditor(d)},render:function(a){var b=this,c=b.options,d=function(b){return parseInt(domUtils.getComputedStyle(a,b))};if(utils.isString(a)&&(a=document.getElementById(a)),a){c.initialFrameWidth?c.minFrameWidth=c.initialFrameWidth:c.minFrameWidth=c.initialFrameWidth=a.offsetWidth,c.initialFrameHeight?c.minFrameHeight=c.initialFrameHeight:c.initialFrameHeight=c.minFrameHeight=a.offsetHeight,a.style.width=/%$/.test(c.initialFrameWidth)?"100%":c.initialFrameWidth-d("padding-left")-d("padding-right")+"px",a.style.height=/%$/.test(c.initialFrameHeight)?"100%":c.initialFrameHeight-d("padding-top")-d("padding-bottom")+"px",a.style.zIndex=c.zIndex;var e=(ie&&browser.version<9?"":"")+""+(c.iframeCssUrl?"":"")+(c.initialStyle?"":"")+"";a.appendChild(domUtils.createElement(document,"iframe",{id:"ueditor_"+b.uid,width:"100%",height:"100%",frameborder:"0",src:"javascript:void(function(){document.open();"+(c.customDomain&&document.domain!=location.hostname?'document.domain="'+document.domain+'";':"")+'document.write("'+e+'");document.close();}())'})),a.style.overflow="hidden",setTimeout(function(){/%$/.test(c.initialFrameWidth)&&(c.minFrameWidth=c.initialFrameWidth=a.offsetWidth),/%$/.test(c.initialFrameHeight)&&(c.minFrameHeight=c.initialFrameHeight=a.offsetHeight,a.style.height=c.initialFrameHeight+"px")})}},_setup:function(b){var c=this,d=c.options;ie?(b.body.disabled=!0,b.body.contentEditable=!0,b.body.disabled=!1):b.body.contentEditable=!0,b.body.spellcheck=!1,c.document=b,c.window=b.defaultView||b.parentWindow,c.iframe=c.window.frameElement,c.body=b.body,c.selection=new dom.Selection(b);var e;browser.gecko&&(e=this.selection.getNative())&&e.removeAllRanges(),this._initEvents();for(var f=this.iframe.parentNode;!domUtils.isBody(f);f=f.parentNode)if("FORM"==f.tagName){c.form=f,c.options.autoSyncData?domUtils.on(c.window,"blur",function(){a(f,c)}):domUtils.on(f,"submit",function(){a(this,c)});break}if(d.initialContent)if(d.autoClearinitialContent){var g=c.execCommand;c.execCommand=function(){return c.fireEvent("firstBeforeExecCommand"),g.apply(c,arguments)},this._setDefaultContent(d.initialContent)}else this.setContent(d.initialContent,!1,!0);domUtils.isEmptyNode(c.body)&&(c.body.innerHTML="

    "+(browser.ie?"":"
    ")+"

    "),d.focus&&setTimeout(function(){c.focus(c.options.focusInEnd),!c.options.autoClearinitialContent&&c._selectionChange()},0),c.container||(c.container=this.iframe.parentNode),d.fullscreen&&c.ui&&c.ui.setFullScreen(!0);try{c.document.execCommand("2D-position",!1,!1)}catch(h){}try{c.document.execCommand("enableInlineTableEditing",!1,!1)}catch(h){}try{c.document.execCommand("enableObjectResizing",!1,!1)}catch(h){}c._bindshortcutKeys(),c.isReady=1,c.fireEvent("ready"),d.onready&&d.onready.call(c),browser.ie9below||domUtils.on(c.window,["blur","focus"],function(a){if("blur"==a.type){c._bakRange=c.selection.getRange();try{c._bakNativeRange=c.selection.getNative().getRangeAt(0),c.selection.getNative().removeAllRanges()}catch(a){c._bakNativeRange=null}}else try{c._bakRange&&c._bakRange.select()}catch(a){}}),browser.gecko&&browser.version<=10902&&(c.body.contentEditable=!1,setTimeout(function(){c.body.contentEditable=!0},100),setInterval(function(){c.body.style.height=c.iframe.offsetHeight-20+"px"},100)),!d.isShow&&c.setHide(),d.readonly&&c.setDisabled()},sync:function(b){var c=this,d=b?document.getElementById(b):domUtils.findParent(c.iframe.parentNode,function(a){return"FORM"==a.tagName},!0);d&&a(d,c)},setHeight:function(a,b){a!==parseInt(this.iframe.parentNode.style.height)&&(this.iframe.parentNode.style.height=a+"px"),!b&&(this.options.minFrameHeight=this.options.initialFrameHeight=a),this.body.style.height=a+"px",!b&&this.trigger("setHeight")},addshortcutkey:function(a,b){var c={};b?c[a]=b:c=a,utils.extend(this.shortcutkeys,c)},_bindshortcutKeys:function(){var a=this,b=this.shortcutkeys;a.addListener("keydown",function(c,d){var e=d.keyCode||d.which;for(var f in b)for(var g,h=b[f].split(","),i=0;g=h[i++];){g=g.split(":");var j=g[0],k=g[1];(/^(ctrl)(\+shift)?\+(\d+)$/.test(j.toLowerCase())||/^(\d+)$/.test(j))&&(("ctrl"==RegExp.$1?d.ctrlKey||d.metaKey:0)&&(""!=RegExp.$2?d[RegExp.$2.slice(1)+"Key"]:1)&&e==RegExp.$3||e==RegExp.$1)&&(a.queryCommandState(f,k)!=-1&&a.execCommand(f,k),domUtils.preventDefault(d))}})},getContent:function(a,b,c,d,e){var f=this;if(a&&utils.isFunction(a)&&(b=a,a=""),b?!b():!this.hasContents())return"";f.fireEvent("beforegetcontent");var g=UE.htmlparser(f.body.innerHTML,d);return f.filterOutputRule(g),f.fireEvent("aftergetcontent",a,g),g.toHtml(e)},getAllHtml:function(){var a=this,b=[];if(a.fireEvent("getAllHtml",b),browser.ie&&browser.version>8){var c="";utils.each(a.document.styleSheets,function(a){c+=a.href?'':""}),utils.each(a.document.getElementsByTagName("script"),function(a){c+=a.outerHTML})}return""+(a.options.charset?'':"")+(c||a.document.getElementsByTagName("head")[0].innerHTML)+b.join("\n")+""+a.getContent(null,null,!0)+""},getPlainTxt:function(){var a=new RegExp(domUtils.fillChar,"g"),b=this.body.innerHTML.replace(/[\n\r]/g,"");return b=b.replace(/<(p|div)[^>]*>(| )<\/\1>/gi,"\n").replace(//gi,"\n").replace(/<[^>\/]+>/g,"").replace(/(\n)?<\/([^>]+)>/g,function(a,b,c){return dtd.$block[c]?"\n":b?b:""}),b.replace(a,"").replace(/\u00a0/g," ").replace(/ /g," ")},getContentTxt:function(){var a=new RegExp(domUtils.fillChar,"g");return this.body[browser.ie?"innerText":"textContent"].replace(a,"").replace(/\u00a0/g," ")},setContent:function(b,c,d){function e(a){return"DIV"==a.tagName&&a.getAttribute("cdata_tag")}var f=this;f.fireEvent("beforesetcontent",b);var g=UE.htmlparser(b);if(f.filterInputRule(g),b=g.toHtml(),f.body.innerHTML=(c?f.body.innerHTML:"")+b,"p"==f.options.enterTag){var h,i=this.body.firstChild;if(!i||1==i.nodeType&&(dtd.$cdata[i.tagName]||e(i)||domUtils.isCustomeNode(i))&&i===this.body.lastChild)this.body.innerHTML="

    "+(browser.ie?" ":"
    ")+"

    "+this.body.innerHTML;else for(var j=f.document.createElement("p");i;){for(;i&&(3==i.nodeType||1==i.nodeType&&dtd.p[i.tagName]&&!dtd.$cdata[i.tagName]);)h=i.nextSibling,j.appendChild(i),i=h;if(j.firstChild){if(!i){f.body.appendChild(j);break}i.parentNode.insertBefore(j,i),j=f.document.createElement("p")}i=i.nextSibling}}f.fireEvent("aftersetcontent"),f.fireEvent("contentchange"),!d&&f._selectionChange(),f._bakRange=f._bakIERange=f._bakNativeRange=null;var k;browser.gecko&&(k=this.selection.getNative())&&k.removeAllRanges(),f.options.autoSyncData&&f.form&&a(f.form,f)},focus:function(a){try{var b=this,c=b.selection.getRange();if(a){var d=b.body.lastChild;d&&1==d.nodeType&&!dtd.$empty[d.tagName]&&(domUtils.isEmptyBlock(d)?c.setStartAtFirst(d):c.setStartAtLast(d),c.collapse(!0)),c.setCursor(!0)}else{if(!c.collapsed&&domUtils.isBody(c.startContainer)&&0==c.startOffset){var d=b.body.firstChild;d&&1==d.nodeType&&!dtd.$empty[d.tagName]&&c.setStartAtFirst(d).collapse(!0)}c.select(!0)}this.fireEvent("focus selectionchange")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var a=this.selection.getNative();if(a.empty&&browser.ie){var b=document.body.createTextRange();b.moveToElementText(document.body),b.collapse(!0),b.select(),a.empty()}else a.removeAllRanges()},_initEvents:function(){var a=this,b=a.document,c=a.window;a._proxyDomEvent=utils.bind(a._proxyDomEvent,a),domUtils.on(b,["click","contextmenu","mousedown","keydown","keyup","keypress","mouseup","mouseover","mouseout","selectstart"],a._proxyDomEvent),domUtils.on(c,["focus","blur"],a._proxyDomEvent),domUtils.on(a.body,"drop",function(b){browser.gecko&&b.stopPropagation&&b.stopPropagation(),a.fireEvent("contentchange")}),domUtils.on(b,["mouseup","keydown"],function(b){"keydown"==b.type&&(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)||2!=b.button&&a._selectionChange(250,b)})},_proxyDomEvent:function(a){return this.fireEvent("before"+a.type.replace(/^on/,"").toLowerCase())!==!1&&(this.fireEvent(a.type.replace(/^on/,""),a)!==!1&&this.fireEvent("after"+a.type.replace(/^on/,"").toLowerCase()))},_selectionChange:function(a,b){var c,e,f=this,g=!1;if(browser.ie&&browser.version<9&&b&&"mouseup"==b.type){var h=this.selection.getRange();h.collapsed||(g=!0,c=b.clientX,e=b.clientY)}clearTimeout(d),d=setTimeout(function(){if(f.selection&&f.selection.getNative()){var a;if(g&&"None"==f.selection.getNative().type){a=f.document.body.createTextRange();try{a.moveToPoint(c,e)}catch(d){a=null}}var h;a&&(h=f.selection.getIERange,f.selection.getIERange=function(){return a}),f.selection.cache(),h&&(f.selection.getIERange=h),f.selection._cachedRange&&f.selection._cachedStartElement&&(f.fireEvent("beforeselectionchange"),f.fireEvent("selectionchange",!!b),f.fireEvent("afterselectionchange"),f.selection.clear())}},a||50)},_callCmdFn:function(a,b){var c,d,e=b[0].toLowerCase();return c=this.commands[e]||UE.commands[e],d=c&&c[a],c&&d||"queryCommandState"!=a?d?d.apply(this,b):void 0:0},execCommand:function(a){a=a.toLowerCase();var b,c=this,d=c.commands[a]||UE.commands[a];return d&&d.execCommand?(d.notNeedUndo||c.__hasEnterExecCommand?(b=this._callCmdFn("execCommand",arguments),!c.__hasEnterExecCommand&&!d.ignoreContentChange&&!c._ignoreContentChange&&c.fireEvent("contentchange")):(c.__hasEnterExecCommand=!0,c.queryCommandState.apply(c,arguments)!=-1&&(c.fireEvent("saveScene"),c.fireEvent.apply(c,["beforeexeccommand",a].concat(arguments)),b=this._callCmdFn("execCommand",arguments),c.fireEvent.apply(c,["afterexeccommand",a].concat(arguments)),c.fireEvent("saveScene")),c.__hasEnterExecCommand=!1),!c.__hasEnterExecCommand&&!d.ignoreContentChange&&!c._ignoreContentChange&&c._selectionChange(),b):null},queryCommandState:function(a){return this._callCmdFn("queryCommandState",arguments)},queryCommandValue:function(a){return this._callCmdFn("queryCommandValue",arguments)},hasContents:function(a){if(a)for(var b,c=0;b=a[c++];)if(this.document.getElementsByTagName(b).length>0)return!0;if(!domUtils.isEmptyBlock(this.body))return!0;for(a=["div"],c=0;b=a[c++];)for(var d,e=domUtils.getElementsByTagName(this.document,b),f=0;d=e[f++];)if(domUtils.isCustomeNode(d))return!0;return!1},reset:function(){this.fireEvent("reset")},setEnabled:function(){var a,b=this;if("false"==b.body.contentEditable){b.body.contentEditable=!0,a=b.selection.getRange();try{a.moveToBookmark(b.lastBk),delete b.lastBk}catch(c){a.setStartAtFirst(b.body).collapse(!0)}a.select(!0),b.bkqueryCommandState&&(b.queryCommandState=b.bkqueryCommandState,delete b.bkqueryCommandState),b.bkqueryCommandValue&&(b.queryCommandValue=b.bkqueryCommandValue,delete b.bkqueryCommandValue),b.fireEvent("selectionchange")}},enable:function(){return this.setEnabled()},setDisabled:function(a){var b=this;a=a?utils.isArray(a)?a:[a]:[],"true"==b.body.contentEditable&&(b.lastBk||(b.lastBk=b.selection.getRange().createBookmark(!0)),b.body.contentEditable=!1,b.bkqueryCommandState=b.queryCommandState,b.bkqueryCommandValue=b.queryCommandValue,b.queryCommandState=function(c){return utils.indexOf(a,c)!=-1?b.bkqueryCommandState.apply(b,arguments):-1},b.queryCommandValue=function(c){return utils.indexOf(a,c)!=-1?b.bkqueryCommandValue.apply(b,arguments):null},b.fireEvent("selectionchange"))},disable:function(a){return this.setDisabled(a)},_setDefaultContent:function(){function a(){var b=this;b.document.getElementById("initContent")&&(b.body.innerHTML="

    "+(ie?"":"
    ")+"

    ",b.removeListener("firstBeforeExecCommand focus",a),setTimeout(function(){b.focus(),b._selectionChange()},0))}return function(b){var c=this;c.body.innerHTML='

    '+b+"

    ",c.addListener("firstBeforeExecCommand focus",a)}}(),setShow:function(){var a=this,b=a.selection.getRange();if("none"==a.container.style.display){try{b.moveToBookmark(a.lastBk),delete a.lastBk}catch(c){b.setStartAtFirst(a.body).collapse(!0)}setTimeout(function(){b.select(!0)},100),a.container.style.display=""}},show:function(){return this.setShow()},setHide:function(){ +var a=this;a.lastBk||(a.lastBk=a.selection.getRange().createBookmark(!0)),a.container.style.display="none"},hide:function(){return this.setHide()},getLang:function(a){var b=UE.I18N[this.options.lang];if(!b)throw Error("not import language file");a=(a||"").split(".");for(var c,d=0;(c=a[d++])&&(b=b[c],b););return b},getContentLength:function(a,b){var c=this.getContent(!1,!1,!0).length;if(a){b=(b||[]).concat(["hr","img","iframe"]),c=this.getContentTxt().replace(/[\t\r\n]+/g,"").length;for(var d,e=0;d=b[e++];)c+=this.document.getElementsByTagName(d).length}return c},addInputRule:function(a){this.inputRules.push(a)},filterInputRule:function(a){for(var b,c=0;b=this.inputRules[c++];)b.call(this,a)},addOutputRule:function(a){this.outputRules.push(a)},filterOutputRule:function(a){for(var b,c=0;b=this.outputRules[c++];)b.call(this,a)},getActionUrl:function(a){var b=this.getOpt(a)||a,c=this.getOpt("imageUrl"),d=this.getOpt("serverUrl");return!d&&c&&(d=c.replace(/^(.*[\/]).+([\.].+)$/,"$1controller$2")),d?(d=d+(d.indexOf("?")==-1?"?":"&")+"action="+(b||""),utils.formatUrl(d)):""}},utils.inherits(f,EventBase)}(),UE.Editor.defaultOptions=function(a){var b=a.options.UEDITOR_HOME_URL;return{isShow:!0,initialContent:"",initialStyle:"",autoClearinitialContent:!1,iframeCssUrl:b+"themes/iframe.css",textarea:"editorValue",focus:!1,focusInEnd:!0,autoClearEmptyNode:!0,fullscreen:!1,readonly:!1,zIndex:999,imagePopup:!0,enterTag:"p",customDomain:!1,lang:"zh-cn",langPath:b+"lang/",theme:"default",themePath:b+"themes/",allHtmlEnabled:!1,scaleEnabled:!1,tableNativeEditInFF:!1,autoSyncData:!0,fileNameFormat:"{time}{rand:6}"}},function(){UE.Editor.prototype.loadServerConfig=function(){function showErrorMsg(a){console&&console.error(a)}var me=this;setTimeout(function(){try{me.options.imageUrl&&me.setOpt("serverUrl",me.options.imageUrl.replace(/^(.*[\/]).+([\.].+)$/,"$1controller$2"));var configUrl=me.getActionUrl("config"),isJsonp=utils.isCrossDomainUrl(configUrl);me._serverConfigLoaded=!1,configUrl&&UE.ajax.request(configUrl,{method:"GET",dataType:isJsonp?"jsonp":"",onsuccess:function(r){try{var config=isJsonp?r:eval("("+r.responseText+")");utils.extend(me.options,config),me.fireEvent("serverConfigLoaded"),me._serverConfigLoaded=!0}catch(e){showErrorMsg(me.getLang("loadconfigFormatError"))}},onerror:function(){showErrorMsg(me.getLang("loadconfigHttpError"))}})}catch(e){showErrorMsg(me.getLang("loadconfigError"))}})},UE.Editor.prototype.isServerConfigLoaded=function(){var a=this;return a._serverConfigLoaded||!1},UE.Editor.prototype.afterConfigReady=function(a){if(a&&utils.isFunction(a)){var b=this,c=function(){a.apply(b,arguments),b.removeListener("serverConfigLoaded",c)};b.isServerConfigLoaded()?a.call(b,"serverConfigLoaded"):b.addListener("serverConfigLoaded",c)}}}(),UE.ajax=function(){function a(a){var b=[];for(var c in a)if("method"!=c&&"timeout"!=c&&"async"!=c&&"dataType"!=c&&"callback"!=c&&void 0!=a[c]&&null!=a[c])if("function"!=(typeof a[c]).toLowerCase()&&"object"!=(typeof a[c]).toLowerCase())b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));else if(utils.isArray(a[c]))for(var d=0;d/gi,"").replace(/]*>[\s\S]*?.<\/v:shape>/gi,function(a){if(browser.opera)return"";try{if(/Bitmap/i.test(a))return"";var c=a.match(/width:([ \d.]*p[tx])/i)[1],d=a.match(/height:([ \d.]*p[tx])/i)[1],e=a.match(/src=\s*"([^"]*)"/i)[1];return''}catch(f){return""}}).replace(/<\/?div[^>]*>/g,"").replace(/v:\w+=(["']?)[^'"]+\1/g,"").replace(/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi,"").replace(/

    ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

    $1

    ").replace(/\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/gi,function(a,b,c,d){return"class"==b&&"MsoListParagraph"==d?a:""}).replace(/<(font|span)[^>]*>(\s*)<\/\1>/gi,function(a,b,c){return c.replace(/[\t\r\n ]+/g," ")}).replace(/(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi,function(a,c,d,e){for(var f,g=[],h=e.replace(/^\s+|\s+$/,"").replace(/'/g,"'").replace(/"/gi,"'").replace(/[\d.]+(cm|pt)/g,function(a){return utils.transUnitToPx(a)}).split(/;\s*/g),i=0;f=h[i];i++){var j,k,l=f.split(":");if(2==l.length){if(j=l[0].toLowerCase(),k=l[1].toLowerCase(),/^(background)\w*/.test(j)&&0==k.replace(/(initial|\s)/g,"").length||/^(margin)\w*/.test(j)&&/^0\w+$/.test(k))continue;switch(j){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":/1&&(a(h,j,!0),b(h,j)),c(k,h,i,j);break;case"text":d(g,h);break;case"element":e(g,h,i,j);break;case"comment":f(g,h,i)}return h}function d(a,b){"pre"==a.parentNode.tagName?b.push(a.data):b.push(l[a.parentNode.tagName]?utils.html(a.data):a.data.replace(/[ ]{2}/g,"  "))}function e(d,e,f,g){var h="";if(d.attrs){h=[];var i=d.attrs;for(var j in i)h.push(j+(void 0!==i[j]?'="'+(k[j]?utils.html(i[j]).replace(/["]/g,function(a){return"""}):utils.unhtml(i[j]))+'"':""));h=h.join(" ")}if(e.push("<"+d.tagName+(h?" "+h:"")+(dtd.$empty[d.tagName]?"/":"")+">"),f&&!dtd.$inlineWithA[d.tagName]&&"pre"!=d.tagName&&d.children&&d.children.length&&(g=a(e,g,!0),b(e,g)),d.children&&d.children.length)for(var l,m=0;l=d.children[m++];)f&&"element"==l.type&&!dtd.$inlineWithA[l.tagName]&&m>1&&(a(e,g),b(e,g)),c(l,e,f,g);dtd.$empty[d.tagName]||(f&&!dtd.$inlineWithA[d.tagName]&&"pre"!=d.tagName&&d.children&&d.children.length&&(g=a(e,g),b(e,g)),e.push(""))}function f(a,b){b.push("")}function g(a,b){var c;if("element"==a.type&&a.getAttr("id")==b)return a;if(a.children&&a.children.length)for(var d,e=0;d=a.children[e++];)if(c=g(d,b))return c}function h(a,b,c){if("element"==a.type&&a.tagName==b&&c.push(a),a.children&&a.children.length)for(var d,e=0;d=a.children[e++];)h(d,b,c)}function i(a,b){if(a.children&&a.children.length)for(var c,d=0;c=a.children[d];)i(c,b),c.parentNode&&(c.children&&c.children.length&&b(c),c.parentNode&&d++);else b(a)}var j=UE.uNode=function(a){this.type=a.type,this.data=a.data,this.tagName=a.tagName,this.parentNode=a.parentNode,this.attrs=a.attrs||{},this.children=a.children},k={href:1,src:1,_src:1,_href:1,cdata_data:1},l={style:1,script:1},m=" ",n="\n";j.createElement=function(a){return/[<>]/.test(a)?UE.htmlparser(a).children[0]:new j({type:"element",children:[],tagName:a})},j.createText=function(a,b){return new UE.uNode({type:"text",data:b?a:utils.unhtml(a||"")})},j.prototype={toHtml:function(a){var b=[];return c(this,b,a,0),b.join("")},innerHTML:function(a){if("element"!=this.type||dtd.$empty[this.tagName])return this;if(utils.isString(a)){if(this.children)for(var b,c=0;b=this.children[c++];)b.parentNode=null;this.children=[];for(var b,d=UE.htmlparser(a),c=0;b=d.children[c++];)this.children.push(b),b.parentNode=this;return this}var d=new UE.uNode({type:"root",children:this.children});return d.toHtml()},innerText:function(a,b){if("element"!=this.type||dtd.$empty[this.tagName])return this;if(a){if(this.children)for(var c,d=0;c=this.children[d++];)c.parentNode=null;return this.children=[],this.appendChild(j.createText(a,b)),this}return this.toHtml().replace(/<[^>]+>/g,"")},getData:function(){return"element"==this.type?"":this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){for(var a,b=this.parentNode,c=0;a=b.children[c];c++)if(a===this)return 0==c?null:b.children[c-1]},nextSibling:function(){for(var a,b=this.parentNode,c=0;a=b.children[c++];)if(a===this)return b.children[c]},replaceChild:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d,1,a),b.parentNode=null,a.parentNode=this,a}},appendChild:function(a){if("root"==this.type||"element"==this.type&&!dtd.$empty[this.tagName]){this.children||(this.children=[]),a.parentNode&&a.parentNode.removeChild(a);for(var b,c=0;b=this.children[c];c++)if(b===a){this.children.splice(c,1);break}return this.children.push(a),a.parentNode=this,a}},insertBefore:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d,0,a),a.parentNode=this,a}},insertAfter:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c,d=0;c=this.children[d];d++)if(c===b)return this.children.splice(d+1,0,a),a.parentNode=this,a}},removeChild:function(a,b){if(this.children)for(var c,d=0;c=this.children[d];d++)if(c===a){if(this.children.splice(d,1),c.parentNode=null,b&&c.children&&c.children.length)for(var e,f=0;e=c.children[f];f++)this.children.splice(d+f,0,e),e.parentNode=this;return c}},getAttr:function(a){return this.attrs&&this.attrs[a.toLowerCase()]},setAttr:function(a,b){if(!a)return void delete this.attrs;if(this.attrs||(this.attrs={}),utils.isObject(a))for(var c in a)a[c]?this.attrs[c.toLowerCase()]=a[c]:delete this.attrs[c];else b?this.attrs[a.toLowerCase()]=b:delete this.attrs[a]},getIndex:function(){for(var a,b=this.parentNode,c=0;a=b.children[c];c++)if(a===this)return c;return-1},getNodeById:function(a){var b;if(this.children&&this.children.length)for(var c,d=0;c=this.children[d++];)if(b=g(c,a))return b},getNodesByTagName:function(a){a=utils.trim(a).replace(/[ ]{2,}/g," ").split(" ");var b=[],c=this;return utils.each(a,function(a){if(c.children&&c.children.length)for(var d,e=0;d=c.children[e++];)h(d,a,b)}),b},getStyle:function(a){var b=this.getAttr("style");if(!b)return"";var c=new RegExp("(^|;)\\s*"+a+":([^;]+)","i"),d=b.match(c);return d&&d[0]?d[2]:""},setStyle:function(a,b){function c(a,b){var c=new RegExp("(^|;)\\s*"+a+":([^;]+;?)","gi");d=d.replace(c,"$1"),b&&(d=a+":"+utils.unhtml(b)+";"+d)}var d=this.getAttr("style");if(d||(d=""),utils.isObject(a))for(var e in a)c(e,a[e]);else c(a,b);this.setAttr("style",utils.trim(d))},traversal:function(a){return this.children&&this.children.length&&i(this,a),this}}}();var htmlparser=UE.htmlparser=function(a,b){function c(a,b){if(m[a.tagName]){var c=k.createElement(m[a.tagName]);a.appendChild(c),c.appendChild(k.createText(b)),a=c}else a.appendChild(k.createText(b))}function d(a,b,c){var e;if(e=l[b]){for(var f,h=a;"root"!=h.type;){if(utils.isArray(e)?utils.indexOf(e,h.tagName)!=-1:e==h.tagName){a=h,f=!0;break}h=h.parentNode}f||(a=d(a,utils.isArray(e)?e[0]:e))}var i=new k({parentNode:a,type:"element",tagName:b.toLowerCase(),children:dtd.$empty[b]?null:[]});if(c){for(var m,n={};m=g.exec(c);)n[m[1].toLowerCase()]=j[m[1].toLowerCase()]?m[2]||m[3]||m[4]:utils.unhtml(m[2]||m[3]||m[4]);i.attrs=n}return a.children.push(i),dtd.$empty[b]?a:i}function e(a,b){a.children.push(new k({type:"comment",data:b,parentNode:a}))}var f=/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)-->)|(?:([^\s\/<>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g,g=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,h={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};a=a.replace(new RegExp(domUtils.fillChar,"g"),""),b||(a=a.replace(new RegExp("[\\r\\t\\n"+(b?"":" ")+"]*]*)>[\\r\\t\\n"+(b?"":" ")+"]*","g"),function(a,c){return c&&h[c.toLowerCase()]?a.replace(/(^[\n\r]+)|([\n\r]+$)/g,""):a.replace(new RegExp("^[\\r\\n"+(b?"":" ")+"]+"),"").replace(new RegExp("[\\r\\n"+(b?"":" ")+"]+$"),"")}));for(var i,j={href:1,src:1},k=UE.uNode,l={td:"tr",tr:["tbody","thead","tfoot"],tbody:"table",th:"tr",thead:"table",tfoot:"table",caption:"table",li:["ul","ol"],dt:"dl",dd:"dl",option:"select"},m={ol:"li",ul:"li"},n=0,o=0,p=new k({type:"root",children:[]}),q=p;i=f.exec(a);){n=i.index;try{if(n>o&&c(q,a.slice(o,n)),i[3])dtd.$cdata[q.tagName]?c(q,i[0]):q=d(q,i[3].toLowerCase(),i[4]);else if(i[1]){if("root"!=q.type)if(dtd.$cdata[q.tagName]&&!dtd.$cdata[i[1]])c(q,i[0]);else{for(var r=q;"element"==q.type&&q.tagName!=i[1].toLowerCase();)if(q=q.parentNode,"root"==q.type)throw q=r,"break";q=q.parentNode}}else i[2]&&e(q,i[2])}catch(s){}o=f.lastIndex}return o");break;case"div":if(b.getAttr("cdata_tag"))break;if(d=b.getAttr("class"),d&&/^line number\d+/.test(d))break;if(!e)break;for(var f,g=UE.uNode.createElement("p");f=b.firstChild();)"text"!=f.type&&UE.dom.dtd.$block[f.tagName]?g.firstChild()?(b.parentNode.insertBefore(g,b),g=UE.uNode.createElement("p")):b.parentNode.insertBefore(f,b):g.appendChild(f);g.firstChild()&&b.parentNode.insertBefore(g,b),b.parentNode.removeChild(b);break;case"dl":b.tagName="ul";break;case"dt":case"dd":b.tagName="li";break;case"li":var h=b.getAttr("class");h&&/list\-/.test(h)||b.setAttr();var i=b.getNodesByTagName("ol ul");UE.utils.each(i,function(a){b.parentNode.insertAfter(a,b)});break;case"td":case"th":case"caption":b.children&&b.children.length||b.appendChild(browser.ie11below?UE.uNode.createText(" "):UE.uNode.createElement("br"));break;case"table":a.options.disabledTableInTable&&c(b)&&(b.parentNode.insertBefore(UE.uNode.createText(b.innerText()),b),b.parentNode.removeChild(b))}}})}),a.addOutputRule(function(b){var c;b.traversal(function(b){if("element"==b.type){if(a.options.autoClearEmptyNode&&dtd.$inline[b.tagName]&&!dtd.$empty[b.tagName]&&(!b.attrs||utils.isEmptyObject(b.attrs)))return void(b.firstChild()?"span"!=b.tagName||b.attrs&&!utils.isEmptyObject(b.attrs)||b.parentNode.removeChild(b,!0):b.parentNode.removeChild(b));switch(b.tagName){case"div":(c=b.getAttr("cdata_tag"))&&(b.tagName=c,b.appendChild(UE.uNode.createText(b.getAttr("cdata_data"))),b.setAttr({cdata_tag:"",cdata_data:"",_ue_custom_node_:""}));break;case"a":(c=b.getAttr("_href"))&&b.setAttr({href:utils.html(c),_href:""});break;case"span":c=b.getAttr("id"),c&&/^_baidu_bookmark_/i.test(c)&&b.parentNode.removeChild(b);break;case"img":(c=b.getAttr("_src"))&&b.setAttr({src:b.getAttr("_src"),_src:""})}}})})},UE.commands.inserthtml={execCommand:function(a,b,c){var d,e,f=this;if(b&&f.fireEvent("beforeinserthtml",b)!==!0){if(d=f.selection.getRange(),e=d.document.createElement("div"),e.style.display="inline",!c){var g=UE.htmlparser(b);f.options.filterRules&&UE.filterNode(g,f.options.filterRules),f.filterInputRule(g),b=g.toHtml()}if(e.innerHTML=utils.trim(b),!d.collapsed){var h=d.startContainer;if(domUtils.isFillChar(h)&&d.setStartBefore(h),h=d.endContainer,domUtils.isFillChar(h)&&d.setEndAfter(h),d.txtToElmBoundary(),d.endContainer&&1==d.endContainer.nodeType&&(h=d.endContainer.childNodes[d.endOffset],h&&domUtils.isBr(h)&&d.setEndAfter(h)),0==d.startOffset&&(h=d.startContainer,domUtils.isBoundaryNode(h,"firstChild")&&(h=d.endContainer,d.endOffset==(3==h.nodeType?h.nodeValue.length:h.childNodes.length)&&domUtils.isBoundaryNode(h,"lastChild")&&(f.body.innerHTML="

    "+(browser.ie?"":"
    ")+"

    ",d.setStart(f.body.firstChild,0).collapse(!0)))),!d.collapsed&&d.deleteContents(),1==d.startContainer.nodeType){var i,j=d.startContainer.childNodes[d.startOffset];if(j&&domUtils.isBlockElm(j)&&(i=j.previousSibling)&&domUtils.isBlockElm(i)){for(d.setEnd(i,i.childNodes.length).collapse();j.firstChild;)i.appendChild(j.firstChild);domUtils.remove(j)}}}var j,k,i,l,m,n=0;d.inFillChar()&&(j=d.startContainer,domUtils.isFillChar(j)?(d.setStartBefore(j).collapse(!0),domUtils.remove(j)):domUtils.isFillChar(j,!0)&&(j.nodeValue=j.nodeValue.replace(fillCharReg,""),d.startOffset--,d.collapsed&&d.collapse(!0)));var o=domUtils.findParentByTagName(d.startContainer,"li",!0);if(o){for(var p,q;j=e.firstChild;){for(;j&&(3==j.nodeType||!domUtils.isBlockElm(j)||"HR"==j.tagName);)p=j.nextSibling,d.insertNode(j).collapse(),q=j,j=p;if(j)if(/^(ol|ul)$/i.test(j.tagName)){for(;j.firstChild;)q=j.firstChild,domUtils.insertAfter(o,j.firstChild),o=o.nextSibling;domUtils.remove(j)}else{var r;p=j.nextSibling,r=f.document.createElement("li"),domUtils.insertAfter(o,r),r.appendChild(j),q=j,j=p,o=r}}o=domUtils.findParentByTagName(d.startContainer,"li",!0),domUtils.isEmptyBlock(o)&&domUtils.remove(o),q&&d.setStartAfter(q).collapse(!0).select(!0)}else{for(;j=e.firstChild;){if(n){for(var s=f.document.createElement("p");j&&(3==j.nodeType||!dtd.$block[j.tagName]);)m=j.nextSibling,s.appendChild(j),j=m;s.firstChild&&(j=s)}if(d.insertNode(j),m=j.nextSibling,!n&&j.nodeType==domUtils.NODE_ELEMENT&&domUtils.isBlockElm(j)&&(k=domUtils.findParent(j,function(a){return domUtils.isBlockElm(a)}),k&&"body"!=k.tagName.toLowerCase()&&(!dtd[k.tagName][j.nodeName]||j.parentNode!==k))){if(dtd[k.tagName][j.nodeName])for(l=j.parentNode;l!==k;)i=l,l=l.parentNode;else i=k;domUtils.breakParent(j,i||l);var i=j.previousSibling;domUtils.trimWhiteTextNode(i),i.childNodes.length||domUtils.remove(i),!browser.ie&&(p=j.nextSibling)&&domUtils.isBlockElm(p)&&p.lastChild&&!domUtils.isBr(p.lastChild)&&p.appendChild(f.document.createElement("br")),n=1}var p=j.nextSibling;if(!e.firstChild&&p&&domUtils.isBlockElm(p)){d.setStart(p,0).collapse(!0);break}d.setEndAfter(j).collapse()}if(j=d.startContainer,m&&domUtils.isBr(m)&&domUtils.remove(m),domUtils.isBlockElm(j)&&domUtils.isEmptyNode(j))if(m=j.nextSibling)domUtils.remove(j),1==m.nodeType&&dtd.$block[m.tagName]&&d.setStart(m,0).collapse(!0).shrinkBoundary();else try{j.innerHTML=browser.ie?domUtils.fillChar:"
    "}catch(t){d.setStartBefore(j),domUtils.remove(j)}try{d.select(!0)}catch(t){}}setTimeout(function(){d=f.selection.getRange(),d.scrollToView(f.autoHeightEnabled,f.autoHeightEnabled?domUtils.getXY(f.iframe).y:0),f.fireEvent("afterinserthtml",b)},200)}}},UE.plugins.autotypeset=function(){function a(a,b){return a&&3!=a.nodeType?domUtils.isBr(a)?1:a&&a.parentNode&&l[a.tagName.toLowerCase()]?g&&g.contains(a)||a.getAttribute("pagebreak")?0:b?!domUtils.isEmptyBlock(a):domUtils.isEmptyBlock(a,new RegExp("[\\s"+domUtils.fillChar+"]","g")):void 0:0}function b(a){a.style.cssText||(domUtils.removeAttributes(a,["style"]),"span"==a.tagName.toLowerCase()&&domUtils.hasNoAttributes(a)&&domUtils.remove(a,!0))}function c(c,f){var h,l=this;if(f){if(!i.pasteFilter)return;h=l.document.createElement("div"),h.innerHTML=f.html}else h=l.document.body;for(var m,n=domUtils.getElementsByTagName(h,"*"),o=0;m=n[o++];)if(l.fireEvent("excludeNodeinautotype",m)!==!0){if(i.clearFontSize&&m.style.fontSize&&(domUtils.removeStyle(m,"font-size"),b(m)),i.clearFontFamily&&m.style.fontFamily&&(domUtils.removeStyle(m,"font-family"),b(m)),a(m)){if(i.mergeEmptyline)for(var p,q=m.nextSibling,r=domUtils.isBr(m);a(q)&&(p=q,q=p.nextSibling,!r||q&&(!q||domUtils.isBr(q)));)domUtils.remove(p);if(i.removeEmptyline&&domUtils.inDoc(m,h)&&!k[m.parentNode.tagName.toLowerCase()]){if(domUtils.isBr(m)&&(q=m.nextSibling,q&&!domUtils.isBr(q)))continue;domUtils.remove(m);continue}}if(a(m,!0)&&"SPAN"!=m.tagName&&(i.indent&&(m.style.textIndent=i.indentValue),i.textAlign&&(m.style.textAlign=i.textAlign)),i.removeClass&&m.className&&!j[m.className.toLowerCase()]){if(g&&g.contains(m))continue;domUtils.removeAttributes(m,["class"])}if(i.imageBlockLine&&"img"==m.tagName.toLowerCase()&&!m.getAttribute("emotion"))if(f){var s=m;switch(i.imageBlockLine){case"left":case"right":case"none":for(var p,t,q,u=s.parentNode;dtd.$inline[u.tagName]||"A"==u.tagName;)u=u.parentNode;if(p=u,"P"==p.tagName&&"center"==domUtils.getStyle(p,"text-align")&&!domUtils.isBody(p)&&1==domUtils.getChildCount(p,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)}))if(t=p.previousSibling,q=p.nextSibling,t&&q&&1==t.nodeType&&1==q.nodeType&&t.tagName==q.tagName&&domUtils.isBlockElm(t)){for(t.appendChild(p.firstChild);q.firstChild;)t.appendChild(q.firstChild);domUtils.remove(p),domUtils.remove(q)}else domUtils.setStyle(p,"text-align","");domUtils.setStyle(s,"float",i.imageBlockLine);break;case"center":if("center"!=l.queryCommandValue("imagefloat")){for(u=s.parentNode,domUtils.setStyle(s,"float","none"),p=s;u&&1==domUtils.getChildCount(u,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)})&&(dtd.$inline[u.tagName]||"A"==u.tagName);)p=u,u=u.parentNode;var v=l.document.createElement("p");domUtils.setAttributes(v,{style:"text-align:center"}),p.parentNode.insertBefore(v,p),v.appendChild(p),domUtils.setStyle(p,"float","")}}}else{var w=l.selection.getRange();w.selectNode(m).select(),l.execCommand("imagefloat",i.imageBlockLine)}i.removeEmptyNode&&i.removeTagNames[m.tagName.toLowerCase()]&&domUtils.hasNoAttributes(m)&&domUtils.isEmptyBlock(m)&&domUtils.remove(m)}if(i.tobdc){var x=UE.htmlparser(h.innerHTML);x.traversal(function(a){"text"==a.type&&(a.data=e(a.data))}),h.innerHTML=x.toHtml()}if(i.bdc2sb){var x=UE.htmlparser(h.innerHTML);x.traversal(function(a){"text"==a.type&&(a.data=d(a.data))}),h.innerHTML=x.toHtml()}f&&(f.html=h.innerHTML)}function d(a){for(var b="",c=0;c=65281&&d<=65373?String.fromCharCode(a.charCodeAt(c)-65248):12288==d?String.fromCharCode(a.charCodeAt(c)-12288+32):a.charAt(c)}return b}function e(a){a=utils.html(a);for(var b="",c=0;c0?e.substring(e.indexOf(d.options.imagePath),e.length-1).replace(/"|\(|\)/gi,""):"none"!=e?e.replace(/url\("?|"?\)/gi,""):"";var g=' ",b.push(g)},aftersetcontent:function(){0==c&&b()}},inputRule:function(d){c=!1,utils.each(d.getNodesByTagName("p"),function(d){var e=d.getAttr("data-background");e&&(c=!0,b(a(e)),d.parentNode.removeChild(d))})},outputRule:function(a){var b=this,c=(utils.cssRule(e,b.document)||"").replace(/[\n\r]+/g,"").match(f);c&&a.appendChild(UE.uNode.createElement('


    '))},commands:{background:{execCommand:function(a,c){b(c)},queryCommandValue:function(){var b=this,c=(utils.cssRule(e,b.document)||"").replace(/[\n\r]+/g,"").match(f);return c?a(c[1]):null},notNeedUndo:!0}}}}),UE.commands.imagefloat={execCommand:function(a,b){var c=this,d=c.selection.getRange();if(!d.collapsed){var e=d.getClosedNode();if(e&&"IMG"==e.tagName)switch(b){case"left":case"right":case"none":for(var f,g,h,i=e.parentNode;dtd.$inline[i.tagName]||"A"==i.tagName;)i=i.parentNode;if(f=i,"P"==f.tagName&&"center"==domUtils.getStyle(f,"text-align")){if(!domUtils.isBody(f)&&1==domUtils.getChildCount(f,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)}))if(g=f.previousSibling,h=f.nextSibling,g&&h&&1==g.nodeType&&1==h.nodeType&&g.tagName==h.tagName&&domUtils.isBlockElm(g)){for(g.appendChild(f.firstChild);h.firstChild;)g.appendChild(h.firstChild);domUtils.remove(f),domUtils.remove(h)}else domUtils.setStyle(f,"text-align","");d.selectNode(e).select()}domUtils.setStyle(e,"float","none"==b?"":b),"none"==b&&domUtils.removeAttributes(e,"align");break;case"center":if("center"!=c.queryCommandValue("imagefloat")){for(i=e.parentNode,domUtils.setStyle(e,"float",""),domUtils.removeAttributes(e,"align"),f=e;i&&1==domUtils.getChildCount(i,function(a){return!domUtils.isBr(a)&&!domUtils.isWhitespace(a)})&&(dtd.$inline[i.tagName]||"A"==i.tagName);)f=i,i=i.parentNode;d.setStartBefore(f).setCursor(!1),i=c.document.createElement("div"),i.appendChild(f),domUtils.setStyle(f,"float",""),c.execCommand("insertHtml",'

    '+i.innerHTML+"

    "),f=c.document.getElementById("_img_parent_tmp"),f.removeAttribute("id"),f=f.firstChild,d.selectNode(f).select(),h=f.parentNode.nextSibling,h&&domUtils.isEmptyNode(h)&&domUtils.remove(h)}}}},queryCommandValue:function(){var a,b,c=this.selection.getRange();return c.collapsed?"none":(a=c.getClosedNode(),a&&1==a.nodeType&&"IMG"==a.tagName?(b=domUtils.getComputedStyle(a,"float")||a.getAttribute("align"),"none"==b&&(b="center"==domUtils.getComputedStyle(a.parentNode,"text-align")?"center":b),{left:1,right:1,center:1}[b]?b:"none"):"none")},queryCommandState:function(){var a,b=this.selection.getRange();return b.collapsed?-1:(a=b.getClosedNode(),a&&1==a.nodeType&&"IMG"==a.tagName?0:-1)}},UE.commands.insertimage={execCommand:function(a,b){function c(a){utils.each("width,height,border,hspace,vspace".split(","),function(b){a[b]&&(a[b]=parseInt(a[b],10)||0)}),utils.each("src,_src".split(","),function(b){a[b]&&(a[b]=utils.unhtmlForUrl(a[b]))}),utils.each("title,alt".split(","),function(b){a[b]&&(a[b]=utils.unhtml(a[b]))})}if(b=utils.isArray(b)?b:[b],b.length){var d=this,e=d.selection.getRange(),f=e.getClosedNode();if(d.fireEvent("beforeinsertimage",b)!==!0){if(!f||!/img/i.test(f.tagName)||"edui-faked-video"==f.className&&f.className.indexOf("edui-upload-video")==-1||f.getAttribute("word_img")){var g,h=[],i="";if(g=b[0],1==b.length)c(g),i=''+g.alt+'","center"==g.floatStyle&&(i='

    '+i+"

    "),h.push(i);else for(var j=0;g=b[j++];)c(g),i="

    ",h.push(i);d.execCommand("insertHtml",h.join(""))}else{var k=b.shift(),l=k.floatStyle;delete k.floatStyle,domUtils.setAttributes(f,k),d.execCommand("imagefloat",l),b.length>0&&(e.setStartAfter(f).setCursor(!1,!0),d.execCommand("insertimage",b))}d.fireEvent("afterinsertimage",b)}}}},UE.plugins.justify=function(){var a=domUtils.isBlockElm,b={left:1,right:1,center:1,justify:1},c=function(b,c){var d=b.createBookmark(),e=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase()&&!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)};b.enlarge(!0);for(var f,g=b.createBookmark(),h=domUtils.getNextDomNode(g.start,!1,e),i=b.cloneRange();h&&!(domUtils.getPosition(h,g.end)&domUtils.POSITION_FOLLOWING);)if(3!=h.nodeType&&a(h))h=domUtils.getNextDomNode(h,!0,e);else{for(i.setStartBefore(h);h&&h!==g.end&&!a(h);)f=h,h=domUtils.getNextDomNode(h,!1,null,function(b){return!a(b)});i.setEndAfter(f);var j=i.getCommonAncestor();if(!domUtils.isBody(j)&&a(j))domUtils.setStyles(j,utils.isString(c)?{"text-align":c}:c),h=j;else{var k=b.document.createElement("p");domUtils.setStyles(k,utils.isString(c)?{"text-align":c}:c);var l=i.extractContents();k.appendChild(l),i.insertNode(k),h=k}h=domUtils.getNextDomNode(h,!1,e)}return b.moveToBookmark(g).moveToBookmark(d)};UE.commands.justify={execCommand:function(a,b){var d,e=this.selection.getRange();return e.collapsed&&(d=this.document.createTextNode("p"),e.insertNode(d)),c(e,b),d&&(e.setStartBefore(d).collapse(!0),domUtils.remove(d)),e.select(),!0},queryCommandValue:function(){var a=this.selection.getStart(),c=domUtils.getComputedStyle(a,"text-align");return b[c]?c:"left"},queryCommandState:function(){var a=this.selection.getStart(),b=a&&domUtils.findParentByTagName(a,["td","th","caption"],!0);return b?-1:0}}},UE.plugins.font=function(){function a(a){for(var b;(b=a.parentNode)&&"SPAN"==b.tagName&&1==domUtils.getChildCount(b,function(a){return!domUtils.isBookmarkNode(a)&&!domUtils.isBr(a)});)b.style.cssText+=a.style.cssText,domUtils.remove(a,!0),a=b}function b(a,b,c){if(g[b]&&(a.adjustmentBoundary(),!a.collapsed&&1==a.startContainer.nodeType)){var d=a.startContainer.childNodes[a.startOffset];if(d&&domUtils.isTagNode(d,"span")){var e=a.createBookmark();utils.each(domUtils.getElementsByTagName(d,"span"),function(a){a.parentNode&&!domUtils.isBookmarkNode(a)&&("backcolor"==b&&domUtils.getComputedStyle(a,"background-color").toLowerCase()===c||(domUtils.removeStyle(a,g[b]),0==a.style.cssText.replace(/^\s+$/,"").length&&domUtils.remove(a,!0)))}),a.moveToBookmark(e)}}}function c(c,d,e){var f,g=c.collapsed,h=c.createBookmark();if(g)for(f=h.start.parentNode;dtd.$inline[f.tagName];)f=f.parentNode;else f=domUtils.getCommonAncestor(h.start,h.end);utils.each(domUtils.getElementsByTagName(f,"span"),function(b){if(b.parentNode&&!domUtils.isBookmarkNode(b)){if(/\s*border\s*:\s*none;?\s*/i.test(b.style.cssText))return void(/^\s*border\s*:\s*none;?\s*$/.test(b.style.cssText)?domUtils.remove(b,!0):domUtils.removeStyle(b,"border"));if(/border/i.test(b.style.cssText)&&"SPAN"==b.parentNode.tagName&&/border/i.test(b.parentNode.style.cssText)&&(b.style.cssText=b.style.cssText.replace(/border[^:]*:[^;]+;?/gi,"")),"fontborder"!=d||"none"!=e)for(var c=b.nextSibling;c&&1==c.nodeType&&"SPAN"==c.tagName;)if(domUtils.isBookmarkNode(c)&&"fontborder"==d)b.appendChild(c),c=b.nextSibling;else{if(c.style.cssText==b.style.cssText&&(domUtils.moveChild(c,b),domUtils.remove(c)),b.nextSibling===c)break;c=b.nextSibling}if(a(b),browser.ie&&browser.version>8){var f=domUtils.findParent(b,function(a){return"SPAN"==a.tagName&&/background-color/.test(a.style.cssText)});f&&!/background-color/.test(b.style.cssText)&&(b.style.backgroundColor=f.style.backgroundColor)}}}),c.moveToBookmark(h),b(c,d,e)}var d=this,e={forecolor:"color",backcolor:"background-color",fontsize:"font-size",fontfamily:"font-family",underline:"text-decoration",strikethrough:"text-decoration",fontborder:"border"},f={underline:1,strikethrough:1,fontborder:1},g={forecolor:"color",backcolor:"background-color",fontsize:"font-size",fontfamily:"font-family"};d.setOpt({fontfamily:[{name:"songti",val:"宋体,SimSun"},{name:"yahei",val:"微软雅黑,Microsoft YaHei"},{name:"kaiti",val:"楷体,楷体_GB2312, SimKai"},{name:"heiti",val:"黑体, SimHei"},{name:"lishu",val:"隶书, SimLi"},{name:"andaleMono",val:"andale mono"},{name:"arial",val:"arial, helvetica,sans-serif"},{name:"arialBlack",val:"arial black,avant garde"},{name:"comicSansMs",val:"comic sans ms"},{name:"impact",val:"impact,chicago"},{name:"timesNewRoman",val:"times new roman"}],fontsize:[10,11,12,14,16,18,20,24,36]}),d.addInputRule(function(a){utils.each(a.getNodesByTagName("u s del font strike"),function(a){if("font"==a.tagName){var b=[];for(var c in a.attrs)switch(c){case"size":b.push("font-size:"+({1:"10",2:"12",3:"16",4:"18",5:"24",6:"32",7:"48"}[a.attrs[c]]||a.attrs[c])+"px");break;case"color":b.push("color:"+a.attrs[c]);break;case"face":b.push("font-family:"+a.attrs[c]);break;case"style":b.push(a.attrs[c])}a.attrs={style:b.join(";")}}else{var d="u"==a.tagName?"underline":"line-through";a.attrs={style:(a.getAttr("style")||"")+"text-decoration:"+d+";"}}a.tagName="span"})});for(var h in e)!function(a,b){UE.commands[a]={execCommand:function(d,e){e=e||(this.queryCommandState(d)?"none":"underline"==d?"underline":"fontborder"==d?"1px solid #000":"line-through");var g,h=this,i=this.selection.getRange();if("default"==e)i.collapsed&&(g=h.document.createTextNode("font"),i.insertNode(g).select()),h.execCommand("removeFormat","span,a",b),g&&(i.setStartBefore(g).collapse(!0),domUtils.remove(g)),c(i,d,e),i.select();else if(i.collapsed){var j=domUtils.findParentByTagName(i.startContainer,"span",!0);if(g=h.document.createTextNode("font"),!j||j.children.length||j[browser.ie?"innerText":"textContent"].replace(fillCharReg,"").length){if(i.insertNode(g),i.selectNode(g).select(),j=i.document.createElement("span"),f[a]){if(domUtils.findParentByTagName(g,"a",!0))return i.setStartBefore(g).setCursor(),void domUtils.remove(g);h.execCommand("removeFormat","span,a",b)}if(j.style.cssText=b+":"+e,g.parentNode.insertBefore(j,g),!browser.ie||browser.ie&&9==browser.version)for(var k=j.parentNode;!domUtils.isBlockElm(k);)"SPAN"==k.tagName&&(j.style.cssText=k.style.cssText+";"+j.style.cssText),k=k.parentNode;opera?setTimeout(function(){i.setStart(j,0).collapse(!0),c(i,d,e),i.select()}):(i.setStart(j,0).collapse(!0),c(i,d,e),i.select())}else i.insertNode(g),f[a]&&(i.selectNode(g).select(),h.execCommand("removeFormat","span,a",b,null),j=domUtils.findParentByTagName(g,"span",!0),i.setStartBefore(g)),j&&(j.style.cssText+=";"+b+":"+e),i.collapse(!0).select();domUtils.remove(g)}else f[a]&&h.queryCommandValue(a)&&h.execCommand("removeFormat","span,a",b),i=h.selection.getRange(),i.applyInlineStyle("span",{style:b+":"+e}),c(i,d,e),i.select();return!0},queryCommandValue:function(a){var c=this.selection.getStart();if("underline"==a||"strikethrough"==a){for(var d,e=c;e&&!domUtils.isBlockElm(e)&&!domUtils.isBody(e);){if(1==e.nodeType&&(d=domUtils.getComputedStyle(e,b),"none"!=d))return d;e=e.parentNode}return"none"}if("fontborder"==a){for(var f,g=c;g&&dtd.$inline[g.tagName];){if((f=domUtils.getComputedStyle(g,"border"))&&/1px/.test(f)&&/solid/.test(f))return f;g=g.parentNode}return""}if("FontSize"==a){var h=domUtils.getComputedStyle(c,b),g=/^([\d\.]+)(\w+)$/.exec(h);return g?Math.floor(g[1])+g[2]:h}return domUtils.getComputedStyle(c,b)},queryCommandState:function(a){if(!f[a])return 0;var b=this.queryCommandValue(a);return"fontborder"==a?/1px/.test(b)&&/solid/.test(b):"underline"==a?/underline/.test(b):/line\-through/.test(b)}}}(h,e[h])},UE.plugins.link=function(){function a(a){var b=a.startContainer,c=a.endContainer;(b=domUtils.findParentByTagName(b,"a",!0))&&a.setStartBefore(b),(c=domUtils.findParentByTagName(c,"a",!0))&&a.setEndAfter(c)}function b(b,c,d){var e=b.cloneRange(),f=d.queryCommandValue("link");a(b=b.adjustmentBoundary());var g=b.startContainer;if(1==g.nodeType&&f&&(g=g.childNodes[b.startOffset],g&&1==g.nodeType&&"A"==g.tagName&&/^(?:https?|ftp|file)\s*:\s*\/\//.test(g[browser.ie?"innerText":"textContent"])&&(g[browser.ie?"innerText":"textContent"]=utils.html(c.textValue||c.href))),e.collapsed&&!f||(b.removeInlineStyle("a"),e=b.cloneRange()),e.collapsed){var h=b.document.createElement("a"),i="";c.textValue?(i=utils.html(c.textValue),delete c.textValue):i=utils.html(c.href),domUtils.setAttributes(h,c),g=domUtils.findParentByTagName(e.startContainer,"a",!0),g&&domUtils.isInNodeEndBoundary(e,g)&&b.setStartAfter(g).collapse(!0),h[browser.ie?"innerText":"textContent"]=i,b.insertNode(h).selectNode(h)}else b.applyInlineStyle("a",c)}UE.commands.unlink={execCommand:function(){var b,c=this.selection.getRange();c.collapsed&&!domUtils.findParentByTagName(c.startContainer,"a",!0)||(b=c.createBookmark(),a(c),c.removeInlineStyle("a").moveToBookmark(b).select())},queryCommandState:function(){return!this.highlight&&this.queryCommandValue("link")?0:-1}},UE.commands.link={execCommand:function(a,c){var d;c._href&&(c._href=utils.unhtml(c._href,/[<">]/g)),c.href&&(c.href=utils.unhtml(c.href,/[<">]/g)),c.textValue&&(c.textValue=utils.unhtml(c.textValue,/[<">]/g)),b(d=this.selection.getRange(),c,this),d.collapse().select(!0)},queryCommandValue:function(){var a,b=this.selection.getRange();if(!b.collapsed){b.shrinkBoundary();var c=3!=b.startContainer.nodeType&&b.startContainer.childNodes[b.startOffset]?b.startContainer.childNodes[b.startOffset]:b.startContainer,d=3==b.endContainer.nodeType||0==b.endOffset?b.endContainer:b.endContainer.childNodes[b.endOffset-1],e=b.getCommonAncestor();if(a=domUtils.findParentByTagName(e,"a",!0),!a&&1==e.nodeType)for(var f,g,h,i=e.getElementsByTagName("a"),j=0;h=i[j++];)if(f=domUtils.getPosition(h,c),g=domUtils.getPosition(h,d),(f&domUtils.POSITION_FOLLOWING||f&domUtils.POSITION_CONTAINS)&&(g&domUtils.POSITION_PRECEDING||g&domUtils.POSITION_CONTAINS)){a=h;break}return a}if(a=b.startContainer,a=1==a.nodeType?a:a.parentNode,a&&(a=domUtils.findParentByTagName(a,"a",!0))&&!domUtils.isInNodeEndBoundary(b,a))return a},queryCommandState:function(){var a=this.selection.getRange().getClosedNode(),b=a&&("edui-faked-video"==a.className||a.className.indexOf("edui-upload-video")!=-1);return b?-1:0}}},UE.plugins.insertframe=function(){function a(){b._iframe&&delete b._iframe}var b=this;b.addListener("selectionchange",function(){a()})},UE.commands.scrawl={queryCommandState:function(){return browser.ie&&browser.version<=8?-1:0}},UE.plugins.removeformat=function(){var a=this;a.setOpt({removeFormatTags:"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var",removeFormatAttributes:"class,style,lang,width,height,align,hspace,valign"}),a.commands.removeformat={execCommand:function(a,b,c,d,e){function f(a){if(3==a.nodeType||"span"!=a.tagName.toLowerCase())return 0;if(browser.ie){var b=a.attributes;if(b.length){for(var c=0,d=b.length;c
    "+this.getContent(null,null,!0)+"
    "),b.close()},notNeedUndo:1},UE.plugins.selectall=function(){var a=this;a.commands.selectall={execCommand:function(){var a=this,b=a.body,c=a.selection.getRange();c.selectNodeContents(b),domUtils.isEmptyBlock(b)&&(browser.opera&&b.firstChild&&1==b.firstChild.nodeType&&c.setStartAtFirst(b.firstChild),c.collapse(!0)),c.select(!0)},notNeedUndo:1},a.addshortcutkey({selectAll:"ctrl+65"})},UE.plugins.paragraph=function(){var a=this,b=domUtils.isBlockElm,c=["TD","LI","PRE"],d=function(a,d,e,f){var g,h=a.createBookmark(),i=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase()&&!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)};a.enlarge(!0);for(var j,k=a.createBookmark(),l=domUtils.getNextDomNode(k.start,!1,i),m=a.cloneRange();l&&!(domUtils.getPosition(l,k.end)&domUtils.POSITION_FOLLOWING);)if(3!=l.nodeType&&b(l))l=domUtils.getNextDomNode(l,!0,i);else{for(m.setStartBefore(l);l&&l!==k.end&&!b(l);)j=l,l=domUtils.getNextDomNode(l,!1,null,function(a){return!b(a)});m.setEndAfter(j),g=a.document.createElement(d),e&&(domUtils.setAttributes(g,e),f&&"customstyle"==f&&e.style&&(g.style.cssText=e.style)),g.appendChild(m.extractContents()),domUtils.isEmptyNode(g)&&domUtils.fillChar(a.document,g),m.insertNode(g);var n=g.parentNode;b(n)&&!domUtils.isBody(g.parentNode)&&utils.indexOf(c,n.tagName)==-1&&(f&&"customstyle"==f||(n.getAttribute("dir")&&g.setAttribute("dir",n.getAttribute("dir")),n.style.cssText&&(g.style.cssText=n.style.cssText+";"+g.style.cssText),n.style.textAlign&&!g.style.textAlign&&(g.style.textAlign=n.style.textAlign),n.style.textIndent&&!g.style.textIndent&&(g.style.textIndent=n.style.textIndent),n.style.padding&&!g.style.padding&&(g.style.padding=n.style.padding)),e&&/h\d/i.test(n.tagName)&&!/h\d/i.test(g.tagName)?(domUtils.setAttributes(n,e),f&&"customstyle"==f&&e.style&&(n.style.cssText=e.style),domUtils.remove(g,!0),g=n):domUtils.remove(g.parentNode,!0)),l=utils.indexOf(c,n.tagName)!=-1?n:g,l=domUtils.getNextDomNode(l,!1,i)}return a.moveToBookmark(k).moveToBookmark(h)};a.setOpt("paragraph",{p:"",h1:"",h2:"",h3:"",h4:"",h5:"",h6:""}),a.commands.paragraph={execCommand:function(a,b,c,e){var f=this.selection.getRange();if(f.collapsed){var g=this.document.createTextNode("p");if(f.insertNode(g),browser.ie){var h=g.previousSibling;h&&domUtils.isWhitespace(h)&&domUtils.remove(h),h=g.nextSibling,h&&domUtils.isWhitespace(h)&&domUtils.remove(h)}}if(f=d(f,b,c,e),g&&(f.setStartBefore(g).collapse(!0),pN=g.parentNode,domUtils.remove(g),domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)&&domUtils.fillNode(this.document,pN)),browser.gecko&&f.collapsed&&1==f.startContainer.nodeType){var i=f.startContainer.childNodes[f.startOffset];i&&1==i.nodeType&&i.tagName.toLowerCase()==b&&f.setStart(i,0).collapse(!0)}return f.select(),!0},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),"p h1 h2 h3 h4 h5 h6");return a?a.tagName.toLowerCase():""}}},function(){var a=domUtils.isBlockElm,b=function(a){return domUtils.filterNodeList(a.selection.getStartElementPath(),function(a){return a&&1==a.nodeType&&a.getAttribute("dir")})},c=function(c,d,e){var f,g=function(a){return 1==a.nodeType?!domUtils.isBookmarkNode(a):!domUtils.isWhitespace(a)},h=b(d);if(h&&c.collapsed)return h.setAttribute("dir",e),c;f=c.createBookmark(),c.enlarge(!0);for(var i,j=c.createBookmark(),k=domUtils.getNextDomNode(j.start,!1,g),l=c.cloneRange();k&&!(domUtils.getPosition(k,j.end)&domUtils.POSITION_FOLLOWING);)if(3!=k.nodeType&&a(k))k=domUtils.getNextDomNode(k,!0,g);else{for(l.setStartBefore(k);k&&k!==j.end&&!a(k);)i=k,k=domUtils.getNextDomNode(k,!1,null,function(b){return!a(b)});l.setEndAfter(i);var m=l.getCommonAncestor();if(!domUtils.isBody(m)&&a(m))m.setAttribute("dir",e),k=m;else{var n=c.document.createElement("p");n.setAttribute("dir",e);var o=l.extractContents();n.appendChild(o),l.insertNode(n),k=n}k=domUtils.getNextDomNode(k,!1,g)}return c.moveToBookmark(j).moveToBookmark(f)};UE.commands.directionality={execCommand:function(a,b){var d=this.selection.getRange();if(d.collapsed){var e=this.document.createTextNode("d");d.insertNode(e)}return c(d,this,b),e&&(d.setStartBefore(e).collapse(!0),domUtils.remove(e)),d.select(),!0},queryCommandValue:function(){var a=b(this);return a?a.getAttribute("dir"):"ltr"}}}(),UE.plugins.horizontal=function(){var a=this;a.commands.horizontal={execCommand:function(a){var b=this;if(b.queryCommandState(a)!==-1){b.execCommand("insertHtml","
    ");var c=b.selection.getRange(),d=c.startContainer;if(1==d.nodeType&&!d.childNodes[c.startOffset]){var e;(e=d.childNodes[c.startOffset-1])&&1==e.nodeType&&"HR"==e.tagName&&("p"==b.options.enterTag?(e=b.document.createElement("p"),c.insertNode(e),c.setStart(e,0).setCursor()):(e=b.document.createElement("br"),c.insertNode(e),c.setStartBefore(e).setCursor()))}return!0}},queryCommandState:function(){return domUtils.filterNodeList(this.selection.getStartElementPath(),"table")?-1:0}},a.addListener("delkeydown",function(a,b){var c=this.selection.getRange();if(c.txtToElmBoundary(!0),domUtils.isStartInblock(c)){var d=c.startContainer,e=d.previousSibling;if(e&&domUtils.isTagNode(e,"hr"))return domUtils.remove(e),c.select(),domUtils.preventDefault(b),!0}})},UE.commands.time=UE.commands.date={execCommand:function(a,b){function c(a,b){var c=("0"+a.getHours()).slice(-2),d=("0"+a.getMinutes()).slice(-2),e=("0"+a.getSeconds()).slice(-2);return b=b||"hh:ii:ss",b.replace(/hh/gi,c).replace(/ii/gi,d).replace(/ss/gi,e)}function d(a,b){var c=("000"+a.getFullYear()).slice(-4),d=c.slice(-2),e=("0"+(a.getMonth()+1)).slice(-2),f=("0"+a.getDate()).slice(-2);return b=b||"yyyy-mm-dd",b.replace(/yyyy/gi,c).replace(/yy/gi,d).replace(/mm/gi,e).replace(/dd/gi,f)}var e=new Date;this.execCommand("insertHtml","time"==a?c(e,b):d(e,b))}},UE.plugins.rowspacing=function(){var a=this;a.setOpt({rowspacingtop:["5","10","15","20","25"],rowspacingbottom:["5","10","15","20","25"]}),a.commands.rowspacing={execCommand:function(a,b,c){return this.execCommand("paragraph","p",{style:"margin-"+c+":"+b+"px"}),!0},queryCommandValue:function(a,b){var c,d=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return domUtils.isBlockElm(a)});return d?(c=domUtils.getComputedStyle(d,"margin-"+b).replace(/[^\d]/g,""),c?c:0):0}}},UE.plugins.lineheight=function(){var a=this;a.setOpt({lineheight:["1","1.5","1.75","2","3","4","5"]}),a.commands.lineheight={execCommand:function(a,b){return this.execCommand("paragraph","p",{style:"line-height:"+("1"==b?"normal":b+"em")}),!0},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return domUtils.isBlockElm(a)});if(a){var b=domUtils.getComputedStyle(a,"line-height");return"normal"==b?1:b.replace(/[^\d.]*/gi,"")}}}},UE.plugins.insertcode=function(){var a=this;a.ready(function(){utils.cssRule("pre","pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}",a.document)}),a.setOpt("insertcode",{as3:"ActionScript3",bash:"Bash/Shell",cpp:"C/C++",css:"Css",cf:"CodeFunction","c#":"C#",delphi:"Delphi",diff:"Diff",erlang:"Erlang",groovy:"Groovy",html:"Html",java:"Java",jfx:"JavaFx",js:"Javascript",pl:"Perl",php:"Php",plain:"Plain Text",ps:"PowerShell",python:"Python",ruby:"Ruby",scala:"Scala",sql:"Sql",vb:"Vb",xml:"Xml"}),a.commands.insertcode={execCommand:function(a,b){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,"pre",!0);if(e)e.className="brush:"+b+";toolbar:false;";else{var f="";if(d.collapsed)f=browser.ie&&browser.ie11below?browser.version<=8?" ":"":"
    ";else{var g=d.extractContents(),h=c.document.createElement("div");h.appendChild(g),utils.each(UE.filterNode(UE.htmlparser(h.innerHTML.replace(/[\r\t]/g,"")),c.options.filterTxtRules).children,function(a){if(browser.ie&&browser.ie11below&&browser.version>8)"element"==a.type?"br"==a.tagName?f+="\n":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){"element"==b.type?"br"==b.tagName?f+="\n":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/\n$/.test(f)||(f+="\n")):f+=a.data+"\n",!a.nextSibling()&&/\n$/.test(f)&&(f=f.replace(/\n$/,""));else if(browser.ie&&browser.ie11below)"element"==a.type?"br"==a.tagName?f+="
    ":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){"element"==b.type?"br"==b.tagName?f+="
    ":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/br>$/.test(f)||(f+="
    ")):f+=a.data+"
    ",!a.nextSibling()&&/
    $/.test(f)&&(f=f.replace(/
    $/,""));else if(f+="element"==a.type?dtd.$empty[a.tagName]?"":a.innerText():a.data,!/br\/?\s*>$/.test(f)){if(!a.nextSibling())return;f+="
    "}})}c.execCommand("inserthtml",'
    '+f+"
    ",!0),e=c.document.getElementById("coder"),domUtils.removeAttributes(e,"id");var i=e.previousSibling;i&&(3==i.nodeType&&1==i.nodeValue.length&&browser.ie&&6==browser.version||domUtils.isEmptyBlock(i))&&domUtils.remove(i);var d=c.selection.getRange();domUtils.isEmptyBlock(e)?d.setStart(e,0).setCursor(!1,!0):d.selectNodeContents(e).select()}},queryCommandValue:function(){var a=this.selection.getStartElementPath(),b="";return utils.each(a,function(a){if("PRE"==a.nodeName){var c=a.className.match(/brush:([^;]+)/);return b=c&&c[1]?c[1]:"",!1}}),b}},a.addInputRule(function(a){utils.each(a.getNodesByTagName("pre"),function(a){var b=a.getNodesByTagName("br");if(b.length)return void(browser.ie&&browser.ie11below&&browser.version>8&&utils.each(b,function(a){var b=UE.uNode.createText("\n");a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}));if(!(browser.ie&&browser.ie11below&&browser.version>8)){var c=a.innerText().split(/\n/);a.innerHTML(""),utils.each(c,function(b){b.length&&a.appendChild(UE.uNode.createText(b)),a.appendChild(UE.uNode.createElement("br"))})}})}),a.addOutputRule(function(a){utils.each(a.getNodesByTagName("pre"),function(a){var b="";utils.each(a.children,function(a){b+="text"==a.type?a.data.replace(/[ ]/g," ").replace(/\n$/,""):"br"==a.tagName?"\n":dtd.$empty[a.tagName]?a.innerText():""}),a.innerText(b.replace(/( |\n)+$/,""))})}),a.notNeedCodeQuery={help:1,undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};a.queryCommandState;a.queryCommandState=function(a){var b=this;return!b.notNeedCodeQuery[a.toLowerCase()]&&b.selection&&b.queryCommandValue("insertcode")?-1:UE.Editor.prototype.queryCommandState.apply(this,arguments)},a.addListener("beforeenterkeydown",function(){var b=a.selection.getRange(),c=domUtils.findParentByTagName(b.startContainer,"pre",!0);if(c){if(a.fireEvent("saveScene"),b.collapsed||b.deleteContents(),!browser.ie||browser.ie9above){var c,d=a.document.createElement("br");b.insertNode(d).setStartAfter(d).collapse(!0);var e=d.nextSibling;e||browser.ie&&!(browser.version>10)?b.setStartAfter(d):b.insertNode(d.cloneNode(!1)), +c=d.previousSibling;for(var f;c;)if(f=c,c=c.previousSibling,!c||"BR"==c.nodeName){c=f;break}if(c){for(var g="";c&&"BR"!=c.nodeName&&new RegExp("^[\\s"+domUtils.fillChar+"]*$").test(c.nodeValue);)g+=c.nodeValue,c=c.nextSibling;if("BR"!=c.nodeName){var h=c.nodeValue.match(new RegExp("^([\\s"+domUtils.fillChar+"]+)"));h&&h[1]&&(g+=h[1])}g&&(g=a.document.createTextNode(g),b.insertNode(g).setStartAfter(g))}b.collapse(!0).select(!0)}else if(browser.version>8){var i=a.document.createTextNode("\n"),j=b.startContainer;if(0==b.startOffset){var k=j.previousSibling;if(k){b.insertNode(i);var l=a.document.createTextNode(" ");b.setStartAfter(i).insertNode(l).setStart(l,0).collapse(!0).select(!0)}}else{b.insertNode(i).setStartAfter(i);var l=a.document.createTextNode(" ");j=b.startContainer.childNodes[b.startOffset],j&&!/^\n/.test(j.nodeValue)&&b.setStartBefore(i),b.insertNode(l).setStart(l,0).collapse(!0).select(!0)}}else{var d=a.document.createElement("br");b.insertNode(d),b.insertNode(a.document.createTextNode(domUtils.fillChar)),b.setStartAfter(d),c=d.previousSibling;for(var f;c;)if(f=c,c=c.previousSibling,!c||"BR"==c.nodeName){c=f;break}if(c){for(var g="";c&&"BR"!=c.nodeName&&new RegExp("^[ "+domUtils.fillChar+"]*$").test(c.nodeValue);)g+=c.nodeValue,c=c.nextSibling;if("BR"!=c.nodeName){var h=c.nodeValue.match(new RegExp("^([ "+domUtils.fillChar+"]+)"));h&&h[1]&&(g+=h[1])}g=a.document.createTextNode(g),b.insertNode(g).setStartAfter(g)}b.collapse(!0).select()}return a.fireEvent("saveScene"),!0}}),a.addListener("tabkeydown",function(b,c){var d=a.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,"pre",!0);if(e){if(a.fireEvent("saveScene"),c.shiftKey);else if(d.collapsed){var f=a.document.createTextNode(" ");d.insertNode(f).setStartAfter(f).collapse(!0).select(!0)}else{for(var g=d.createBookmark(),h=g.start.previousSibling;h;){if(e.firstChild===h&&!domUtils.isBr(h)){e.insertBefore(a.document.createTextNode(" "),h);break}if(domUtils.isBr(h)){e.insertBefore(a.document.createTextNode(" "),h.nextSibling);break}h=h.previousSibling}var i=g.end;for(h=g.start.nextSibling,e.firstChild===g.start&&e.insertBefore(a.document.createTextNode(" "),h.nextSibling);h&&h!==i;){if(domUtils.isBr(h)&&h.nextSibling){if(h.nextSibling===i)break;e.insertBefore(a.document.createTextNode(" "),h.nextSibling)}h=h.nextSibling}d.moveToBookmark(g).select()}return a.fireEvent("saveScene"),!0}}),a.addListener("beforeinserthtml",function(a,b){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,"pre",!0);if(e){d.collapsed||d.deleteContents();var f="";if(browser.ie&&browser.version>8){utils.each(UE.filterNode(UE.htmlparser(b),c.options.filterTxtRules).children,function(a){"element"==a.type?"br"==a.tagName?f+="\n":dtd.$empty[a.tagName]||(utils.each(a.children,function(b){"element"==b.type?"br"==b.tagName?f+="\n":dtd.$empty[a.tagName]||(f+=b.innerText()):f+=b.data}),/\n$/.test(f)||(f+="\n")):f+=a.data+"\n",!a.nextSibling()&&/\n$/.test(f)&&(f=f.replace(/\n$/,""))});var g=c.document.createTextNode(utils.html(f.replace(/ /g," ")));d.insertNode(g).selectNode(g).select()}else{var h=c.document.createDocumentFragment();utils.each(UE.filterNode(UE.htmlparser(b),c.options.filterTxtRules).children,function(a){"element"==a.type?"br"==a.tagName?h.appendChild(c.document.createElement("br")):dtd.$empty[a.tagName]||(utils.each(a.children,function(b){"element"==b.type?"br"==b.tagName?h.appendChild(c.document.createElement("br")):dtd.$empty[a.tagName]||h.appendChild(c.document.createTextNode(utils.html(b.innerText().replace(/ /g," ")))):h.appendChild(c.document.createTextNode(utils.html(b.data.replace(/ /g," "))))}),"BR"!=h.lastChild.nodeName&&h.appendChild(c.document.createElement("br"))):h.appendChild(c.document.createTextNode(utils.html(a.data.replace(/ /g," ")))),a.nextSibling()||"BR"!=h.lastChild.nodeName||h.removeChild(h.lastChild)}),d.insertNode(h).select()}return!0}}),a.addListener("keydown",function(a,b){var c=this,d=b.keyCode||b.which;if(40==d){var e,f=c.selection.getRange(),g=f.startContainer;if(f.collapsed&&(e=domUtils.findParentByTagName(f.startContainer,"pre",!0))&&!e.nextSibling){for(var h=e.lastChild;h&&"BR"==h.nodeName;)h=h.previousSibling;(h===g||f.startContainer===e&&f.startOffset==e.childNodes.length)&&(c.execCommand("insertparagraph"),domUtils.preventDefault(b))}}}),a.addListener("delkeydown",function(b,c){var d=this.selection.getRange();d.txtToElmBoundary(!0);var e=d.startContainer;if(domUtils.isTagNode(e,"pre")&&d.collapsed&&domUtils.isStartInblock(d)){var f=a.document.createElement("p");return domUtils.fillNode(a.document,f),e.parentNode.insertBefore(f,e),domUtils.remove(e),d.setStart(f,0).setCursor(!1,!0),domUtils.preventDefault(c),!0}})},UE.commands.cleardoc={execCommand:function(a){var b=this,c=b.options.enterTag,d=b.selection.getRange();"br"==c?(b.body.innerHTML="
    ",d.setStart(b.body,0).setCursor()):(b.body.innerHTML="

    "+(ie?"":"
    ")+"

    ",d.setStart(b.body.firstChild,0).setCursor(!1,!0)),setTimeout(function(){b.fireEvent("clearDoc")},0)}},UE.plugin.register("anchor",function(){return{bindEvents:{ready:function(){utils.cssRule("anchor",".anchorclass{background: url('"+this.options.themePath+this.options.theme+"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}",this.document)}},outputRule:function(a){utils.each(a.getNodesByTagName("img"),function(a){var b;(b=a.getAttr("anchorname"))&&(a.tagName="a",a.setAttr({anchorname:"",name:b,"class":""}))})},inputRule:function(a){utils.each(a.getNodesByTagName("a"),function(a){var b;(b=a.getAttr("name"))&&!a.getAttr("href")&&(a.tagName="img",a.setAttr({anchorname:a.getAttr("name"),"class":"anchorclass"}),a.setAttr("name"))})},commands:{anchor:{execCommand:function(a,b){var c=this.selection.getRange(),d=c.getClosedNode();if(d&&d.getAttribute("anchorname"))b?d.setAttribute("anchorname",b):(c.setStartBefore(d).setCursor(),domUtils.remove(d));else if(b){var e=this.document.createElement("img");c.collapse(!0),domUtils.setAttributes(e,{anchorname:b,"class":"anchorclass"}),c.insertNode(e).setStartAfter(e).setCursor(!1,!0)}}}}}}),UE.plugins.wordcount=function(){var a=this;a.setOpt("wordCount",!0),a.addListener("contentchange",function(){a.fireEvent("wordcount")});var b;a.addListener("ready",function(){var a=this;domUtils.on(a.body,"keyup",function(c){var d=c.keyCode||c.which,e={16:1,18:1,20:1,37:1,38:1,39:1,40:1};d in e||(clearTimeout(b),b=setTimeout(function(){a.fireEvent("wordcount")},200))})})},UE.plugins.pagebreak=function(){function a(a){if(domUtils.isEmptyBlock(a)){for(var b,d=a.firstChild;d&&1==d.nodeType&&domUtils.isEmptyBlock(d);)b=d,d=d.firstChild;!b&&(b=a),domUtils.fillNode(c.document,b)}}function b(a){return a&&1==a.nodeType&&"HR"==a.tagName&&"pagebreak"==a.className}var c=this,d=["td"];c.setOpt("pageBreakTag","_ueditor_page_break_tag_"),c.ready(function(){utils.cssRule("pagebreak",".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}",c.document)}),c.addInputRule(function(a){a.traversal(function(a){if("text"==a.type&&a.data==c.options.pageBreakTag){var b=UE.uNode.createElement('
    ');a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}})}),c.addOutputRule(function(a){utils.each(a.getNodesByTagName("hr"),function(a){if("pagebreak"==a.getAttr("class")){var b=UE.uNode.createText(c.options.pageBreakTag);a.parentNode.insertBefore(b,a),a.parentNode.removeChild(a)}})}),c.commands.pagebreak={execCommand:function(){var e=c.selection.getRange(),f=c.document.createElement("hr");domUtils.setAttributes(f,{"class":"pagebreak",noshade:"noshade",size:"5"}),domUtils.unSelectable(f);var g,h=domUtils.findParentByTagName(e.startContainer,d,!0),i=[];if(h)switch(h.tagName){case"TD":if(g=h.parentNode,g.previousSibling)g.parentNode.insertBefore(f,g),i=domUtils.findParents(f);else{var j=domUtils.findParentByTagName(g,"table");j.parentNode.insertBefore(f,j),i=domUtils.findParents(f,!0)}g=i[1],f!==g&&domUtils.breakParent(f,g),c.fireEvent("afteradjusttable",c.document)}else{if(!e.collapsed){e.deleteContents();for(var k=e.startContainer;!domUtils.isBody(k)&&domUtils.isBlockElm(k)&&domUtils.isEmptyNode(k);)e.setStartBefore(k).collapse(!0),domUtils.remove(k),k=e.startContainer}e.insertNode(f);for(var l,g=f.parentNode;!domUtils.isBody(g);)domUtils.breakParent(f,g),l=f.nextSibling,l&&domUtils.isEmptyBlock(l)&&domUtils.remove(l),g=f.parentNode;l=f.nextSibling;var m=f.previousSibling;if(b(m)?domUtils.remove(m):m&&a(m),l)b(l)?domUtils.remove(l):a(l),e.setEndAfter(f).collapse(!1);else{var n=c.document.createElement("p");f.parentNode.appendChild(n),domUtils.fillNode(c.document,n),e.setStart(n,0).collapse(!0)}e.select(!0)}}}},UE.plugin.register("wordimage",function(){var a=this,b=[];return{commands:{wordimage:{execCommand:function(){for(var b,c=domUtils.getElementsByTagName(a.body,"img"),d=[],e=0;b=c[e++];){var f=b.getAttribute("word_img");f&&d.push(f)}return d},queryCommandState:function(){b=domUtils.getElementsByTagName(a.body,"img");for(var c,d=0;c=b[d++];)if(c.getAttribute("word_img"))return 1;return-1},notNeedUndo:!0}},inputRule:function(b){utils.each(b.getNodesByTagName("img"),function(b){var c=b.attrs,d=parseInt(c.width)<128||parseInt(c.height)<43,e=a.options,f=e.UEDITOR_HOME_URL+"themes/default/images/spacer.gif";c.src&&/^(?:(file:\/+))/.test(c.src)&&b.setAttr({width:c.width,height:c.height,alt:c.alt,word_img:c.src,src:f,style:"background:url("+(d?e.themePath+e.theme+"/images/word.gif":e.langPath+e.lang+"/images/localimage.png")+") no-repeat center center;border:1px solid #ddd"})})}}}),UE.plugins.dragdrop=function(){var a=this;a.ready(function(){domUtils.on(this.body,"dragend",function(){var b=a.selection.getRange(),c=b.getClosedNode()||a.selection.getStart();if(c&&"IMG"==c.tagName){for(var d,e=c.previousSibling;(d=c.nextSibling)&&1==d.nodeType&&"SPAN"==d.tagName&&!d.firstChild;)domUtils.remove(d);(!e||1!=e.nodeType||domUtils.isEmptyBlock(e))&&e||d&&(!d||domUtils.isEmptyBlock(d))||(e&&"P"==e.tagName&&!domUtils.isEmptyBlock(e)?(e.appendChild(c),domUtils.moveChild(d,e),domUtils.remove(d)):d&&"P"==d.tagName&&!domUtils.isEmptyBlock(d)&&d.insertBefore(c,d.firstChild),e&&"P"==e.tagName&&domUtils.isEmptyBlock(e)&&domUtils.remove(e),d&&"P"==d.tagName&&domUtils.isEmptyBlock(d)&&domUtils.remove(d),b.selectNode(c).select(),a.fireEvent("saveScene"))}})}),a.addListener("keyup",function(b,c){var d=c.keyCode||c.which;if(13==d){var e,f=a.selection.getRange();(e=domUtils.findParentByTagName(f.startContainer,"p",!0))&&"center"==domUtils.getComputedStyle(e,"text-align")&&domUtils.removeStyle(e,"text-align")}})},UE.plugins.undo=function(){function a(a,b){if(a.length!=b.length)return 0;for(var c=0,d=a.length;cf&&this.list.shift(),this.index=this.list.length-1,this.clearKey(),this.update())},this.update=function(){this.hasRedo=!!this.list[this.index+1],this.hasUndo=!!this.list[this.index-1]},this.reset=function(){this.list=[],this.index=0,this.hasUndo=!1,this.hasRedo=!1,this.clearKey()},this.clearKey=function(){m=0,k=null}}var d,e=this,f=e.options.maxUndoCount||20,g=e.options.maxInputCount||20,h=new RegExp(domUtils.fillChar+"|","gi"),i={ol:1,ul:1,table:1,tbody:1,tr:1,body:1},j=e.options.autoClearEmptyNode;e.undoManger=new c,e.undoManger.editor=e,e.addListener("saveScene",function(){var a=Array.prototype.splice.call(arguments,1);this.undoManger.save.apply(this.undoManger,a)}),e.addListener("reset",function(a,b){b||this.undoManger.reset()}),e.commands.redo=e.commands.undo={execCommand:function(a){this.undoManger[a]()},queryCommandState:function(a){return this.undoManger["has"+("undo"==a.toLowerCase()?"Undo":"Redo")]?0:-1},notNeedUndo:1};var k,l={16:1,17:1,18:1,37:1,38:1,39:1,40:1},m=0,n=!1;e.addListener("ready",function(){domUtils.on(this.body,"compositionstart",function(){n=!0}),domUtils.on(this.body,"compositionend",function(){n=!1})}),e.addshortcutkey({Undo:"ctrl+90",Redo:"ctrl+89"});var o=!0;e.addListener("keydown",function(a,b){function c(a){a.undoManger.save(!1,!0),a.fireEvent("selectionchange")}var e=this,f=b.keyCode||b.which;if(!(l[f]||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){if(n)return;if(!e.selection.getRange().collapsed)return e.undoManger.save(!1,!0),void(o=!1);0==e.undoManger.list.length&&e.undoManger.save(!0),clearTimeout(d),d=setTimeout(function(){if(n)var a=setInterval(function(){n||(c(e),clearInterval(a))},300);else c(e)},200),k=f,m++,m>=g&&c(e)}}),e.addListener("keyup",function(a,b){var c=b.keyCode||b.which;if(!(l[c]||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){if(n)return;o||(this.undoManger.save(!1,!0),o=!0)}}),e.stopCmdUndo=function(){e.__hasEnterExecCommand=!0},e.startCmdUndo=function(){e.__hasEnterExecCommand=!1}},UE.plugin.register("copy",function(){function a(){ZeroClipboard.config({debug:!1,swfPath:b.options.UEDITOR_HOME_URL+"third-party/zeroclipboard/ZeroClipboard.swf"});var a=b.zeroclipboard=new ZeroClipboard;a.on("copy",function(a){var c=a.client,d=b.selection.getRange(),e=document.createElement("div");e.appendChild(d.cloneContents()),c.setText(e.innerText||e.textContent),c.setHtml(e.innerHTML),d.select()}),a.on("mouseover mouseout",function(a){var b=a.target;"mouseover"==a.type?domUtils.addClass(b,"edui-state-hover"):"mouseout"==a.type&&domUtils.removeClasses(b,"edui-state-hover")}),a.on("wrongflash noflash",function(){ZeroClipboard.destroy()})}var b=this;return{bindEvents:{ready:function(){browser.ie||(window.ZeroClipboard?a():utils.loadFile(document,{src:b.options.UEDITOR_HOME_URL+"third-party/zeroclipboard/ZeroClipboard.js",tag:"script",type:"text/javascript",defer:"defer"},function(){a()}))}},commands:{copy:{execCommand:function(a){b.document.execCommand("copy")||alert(b.getLang("copymsg"))}}}}}),UE.plugins.paste=function(){function a(a){var b=this.document;if(!b.getElementById("baidu_pastebin")){var c=this.selection.getRange(),d=c.createBookmark(),e=b.createElement("div");e.id="baidu_pastebin",browser.webkit&&e.appendChild(b.createTextNode(domUtils.fillChar+domUtils.fillChar)),b.body.appendChild(e),d.start.style.display="",e.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:"+domUtils.getXY(d.start).y+"px",c.selectNodeContents(e).select(!0),setTimeout(function(){if(browser.webkit)for(var f,g=0,h=b.querySelectorAll("#baidu_pastebin");f=h[g++];){if(!domUtils.isEmptyNode(f)){e=f;break}domUtils.remove(f)}try{e.parentNode.removeChild(e)}catch(i){}c.moveToBookmark(d).select(!0),a(e)},0)}}function b(a){return a.replace(/<(\/?)([\w\-]+)([^>]*)>/gi,function(a,b,c,d){return c=c.toLowerCase(),{img:1}[c]?a:(d=d.replace(/([\w\-]*?)\s*=\s*(("([^"]*)")|('([^']*)')|([^\s>]+))/gi,function(a,b,c){return{src:1,href:1,name:1}[b.toLowerCase()]?b+"="+c+" ":""}),{span:1,div:1}[c]?"":"<"+b+c+" "+utils.trim(d)+">")})}function c(a){var c;if(a.firstChild){for(var h,i=domUtils.getElementsByTagName(a,"span"),j=0;h=i[j++];)"_baidu_cut_start"!=h.id&&"_baidu_cut_end"!=h.id||domUtils.remove(h);if(browser.webkit){for(var k,l=a.querySelectorAll("div br"),j=0;k=l[j++];){var m=k.parentNode;"DIV"==m.tagName&&1==m.childNodes.length&&(m.innerHTML="


    ",domUtils.remove(m))}for(var n,o=a.querySelectorAll("#baidu_pastebin"),j=0;n=o[j++];){var p=d.document.createElement("p");for(n.parentNode.insertBefore(p,n);n.firstChild;)p.appendChild(n.firstChild);domUtils.remove(n)}for(var q,r=a.querySelectorAll("meta"),j=0;q=r[j++];)domUtils.remove(q);var l=a.querySelectorAll("br");for(j=0;q=l[j++];)/^apple-/i.test(q.className)&&domUtils.remove(q)}if(browser.gecko){var s=a.querySelectorAll("[_moz_dirty]");for(j=0;q=s[j++];)q.removeAttribute("_moz_dirty")}if(!browser.ie)for(var q,t=a.querySelectorAll("span.Apple-style-span"),j=0;q=t[j++];)domUtils.remove(q,!0);c=a.innerHTML,c=UE.filterWord(c);var u=UE.htmlparser(c);if(d.options.filterRules&&UE.filterNode(u,d.options.filterRules),d.filterInputRule(u),browser.webkit){var v=u.lastChild();v&&"element"==v.type&&"br"==v.tagName&&u.removeChild(v),utils.each(d.body.querySelectorAll("div"),function(a){domUtils.isEmptyBlock(a)&&domUtils.remove(a,!0)})}if(c={html:u.toHtml()},d.fireEvent("beforepaste",c,u),!c.html)return;u=UE.htmlparser(c.html,!0),1===d.queryCommandState("pasteplain")?d.execCommand("insertHtml",UE.filterNode(u,d.options.filterTxtRules).toHtml(),!0):(UE.filterNode(u,d.options.filterTxtRules),e=u.toHtml(),f=c.html,g=d.selection.getRange().createAddress(!0),d.execCommand("insertHtml",d.getOpt("retainOnlyLabelPasted")===!0?b(f):f,!0)),d.fireEvent("afterpaste",c)}}var d=this;d.setOpt({retainOnlyLabelPasted:!1});var e,f,g;d.addListener("pasteTransfer",function(a,c){if(g&&e&&f&&e!=f){var h=d.selection.getRange();if(h.moveToAddress(g,!0),!h.collapsed){for(;!domUtils.isBody(h.startContainer);){var i=h.startContainer;if(1==i.nodeType){if(i=i.childNodes[h.startOffset],!i){h.setStartBefore(h.startContainer);continue}var j=i.previousSibling;j&&3==j.nodeType&&new RegExp("^[\n\r\t "+domUtils.fillChar+"]*$").test(j.nodeValue)&&h.setStartBefore(j)}if(0!=h.startOffset)break;h.setStartBefore(h.startContainer)}for(;!domUtils.isBody(h.endContainer);){var k=h.endContainer;if(1==k.nodeType){if(k=k.childNodes[h.endOffset],!k){h.setEndAfter(h.endContainer);continue}var l=k.nextSibling;l&&3==l.nodeType&&new RegExp("^[\n\r\t"+domUtils.fillChar+"]*$").test(l.nodeValue)&&h.setEndAfter(l)}if(h.endOffset!=h.endContainer[3==h.endContainer.nodeType?"nodeValue":"childNodes"].length)break;h.setEndAfter(h.endContainer)}}h.deleteContents(),h.select(!0),d.__hasEnterExecCommand=!0;var m=f;2===c?m=b(m):c&&(m=e),d.execCommand("inserthtml",m,!0),d.__hasEnterExecCommand=!1;for(var n=d.selection.getRange();!domUtils.isBody(n.startContainer)&&!n.startOffset&&n.startContainer[3==n.startContainer.nodeType?"nodeValue":"childNodes"].length;)n.setStartBefore(n.startContainer);var o=n.createAddress(!0);g.endAddress=o.startAddress}}),d.addListener("ready",function(){domUtils.on(d.body,"cut",function(){var a=d.selection.getRange();!a.collapsed&&d.undoManger&&d.undoManger.save()}),domUtils.on(d.body,browser.ie||browser.opera?"keydown":"paste",function(b){(!browser.ie&&!browser.opera||(b.ctrlKey||b.metaKey)&&"86"==b.keyCode)&&a.call(d,function(a){c(a)})})}),d.commands.paste={execCommand:function(b){browser.ie?(a.call(d,function(a){c(a)}),d.document.execCommand("paste")):alert(d.getLang("pastemsg"))}}},UE.plugins.pasteplain=function(){var a=this;a.setOpt({pasteplain:!1,filterTxtRules:function(){function a(a){a.tagName="p",a.setStyle()}function b(a){a.parentNode.removeChild(a,!0)}return{"-":"script style object iframe embed input select",p:{$:{}},br:{$:{}},div:function(a){for(var b,c=UE.uNode.createElement("p");b=a.firstChild();)"text"!=b.type&&UE.dom.dtd.$block[b.tagName]?c.firstChild()?(a.parentNode.insertBefore(c,a),c=UE.uNode.createElement("p")):a.parentNode.insertBefore(b,a):c.appendChild(b);c.firstChild()&&a.parentNode.insertBefore(c,a),a.parentNode.removeChild(a)},ol:b,ul:b,dl:b,dt:b,dd:b,li:b,caption:a,th:a,tr:a,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,td:function(a){var b=!!a.innerText();b&&a.parentNode.insertAfter(UE.uNode.createText("    "),a),a.parentNode.removeChild(a,a.innerText())}}}()});var b=a.options.pasteplain;a.commands.pasteplain={queryCommandState:function(){return b?1:0},execCommand:function(){b=0|!b},notNeedUndo:1}},UE.plugins.list=function(){function a(a){var b=[];for(var c in a)b.push(c);return b}function b(a){var b=a.className;return domUtils.hasClass(a,/custom_/)?b.match(/custom_(\w+)/)[1]:domUtils.getStyle(a,"list-style-type")}function c(a,c){utils.each(domUtils.getElementsByTagName(a,"ol ul"),function(f){if(domUtils.inDoc(f,a)){var g=f.parentNode;if(g.tagName==f.tagName){var h=b(f)||("OL"==f.tagName?"decimal":"disc"),i=b(g)||("OL"==g.tagName?"decimal":"disc");if(h==i){var l=utils.indexOf(k[f.tagName],h);l=l+1==k[f.tagName].length?0:l+1,e(f,k[f.tagName][l])}}var m=0,n=2;domUtils.hasClass(f,/custom_/)?/[ou]l/i.test(g.tagName)&&domUtils.hasClass(g,/custom_/)||(n=1):/[ou]l/i.test(g.tagName)&&domUtils.hasClass(g,/custom_/)&&(n=3);var o=domUtils.getStyle(f,"list-style-type");o&&(f.style.cssText="list-style-type:"+o),f.className=utils.trim(f.className.replace(/list-paddingleft-\w+/,""))+" list-paddingleft-"+n,utils.each(domUtils.getElementsByTagName(f,"li"),function(a){if(a.style.cssText&&(a.style.cssText=""),!a.firstChild)return void domUtils.remove(a);if(a.parentNode===f){if(m++,domUtils.hasClass(f,/custom_/)){var c=1,d=b(f);if("OL"==f.tagName){if(d)switch(d){case"cn":case"cn1":case"cn2":m>10&&(m%10==0||m>10&&m<20)?c=2:m>20&&(c=3);break;case"num2":m>9&&(c=2)}a.className="list-"+j[d]+m+" list-"+d+"-paddingleft-"+c}else a.className="list-"+j[d]+" list-"+d+"-paddingleft"}else a.className=a.className.replace(/list-[\w\-]+/gi,"");var e=a.getAttribute("class");null===e||e.replace(/\s/g,"")||domUtils.removeAttributes(a,"class")}}),!c&&d(f,f.tagName.toLowerCase(),b(f)||domUtils.getStyle(f,"list-style-type"),!0)}})}function d(a,d,e,f){var g=a.nextSibling;g&&1==g.nodeType&&g.tagName.toLowerCase()==d&&(b(g)||domUtils.getStyle(g,"list-style-type")||("ol"==d?"decimal":"disc"))==e&&(domUtils.moveChild(g,a),0==g.childNodes.length&&domUtils.remove(g)),g&&domUtils.isFillChar(g)&&domUtils.remove(g);var h=a.previousSibling;h&&1==h.nodeType&&h.tagName.toLowerCase()==d&&(b(h)||domUtils.getStyle(h,"list-style-type")||("ol"==d?"decimal":"disc"))==e&&domUtils.moveChild(a,h),h&&domUtils.isFillChar(h)&&domUtils.remove(h),!f&&domUtils.isEmptyBlock(a)&&domUtils.remove(a),b(a)&&c(a.ownerDocument,!0)}function e(a,b){j[b]&&(a.className="custom_"+b);try{domUtils.setStyle(a,"list-style-type",b)}catch(c){}}function f(a){var b=a.previousSibling;b&&domUtils.isEmptyBlock(b)&&domUtils.remove(b),b=a.nextSibling,b&&domUtils.isEmptyBlock(b)&&domUtils.remove(b)}function g(a){for(;a&&!domUtils.isBody(a);){if("TABLE"==a.nodeName)return null;if("LI"==a.nodeName)return a;a=a.parentNode}}var h=this,i={TD:1,PRE:1,BLOCKQUOTE:1},j={cn:"cn-1-",cn1:"cn-2-",cn2:"cn-3-",num:"num-1-",num1:"num-2-",num2:"num-3-",dash:"dash",dot:"dot"};h.setOpt({autoTransWordToList:!1,insertorderedlist:{num:"",num1:"",num2:"",cn:"",cn1:"",cn2:"",decimal:"","lower-alpha":"","lower-roman":"","upper-alpha":"","upper-roman":""},insertunorderedlist:{circle:"",disc:"",square:"",dash:"",dot:""},listDefaultPaddingLeft:"30",listiconpath:"http://bs.baidu.com/listicon/",maxListLevel:-1,disablePInList:!1});var k={OL:a(h.options.insertorderedlist),UL:a(h.options.insertunorderedlist)},l=h.options.listiconpath;for(var m in j)h.options.insertorderedlist.hasOwnProperty(m)||h.options.insertunorderedlist.hasOwnProperty(m)||delete j[m];h.ready(function(){var a=[];for(var b in j){if("dash"==b||"dot"==b)a.push("li.list-"+j[b]+"{background-image:url("+l+j[b]+".gif)}"),a.push("ul.custom_"+b+"{list-style:none;}ul.custom_"+b+" li{background-position:0 3px;background-repeat:no-repeat}");else{for(var c=0;c<99;c++)a.push("li.list-"+j[b]+c+"{background-image:url("+l+"list-"+j[b]+c+".gif)}");a.push("ol.custom_"+b+"{list-style:none;}ol.custom_"+b+" li{background-position:0 3px;background-repeat:no-repeat}")}switch(b){case"cn":a.push("li.list-"+b+"-paddingleft-1{padding-left:25px}"),a.push("li.list-"+b+"-paddingleft-2{padding-left:40px}"),a.push("li.list-"+b+"-paddingleft-3{padding-left:55px}");break;case"cn1":a.push("li.list-"+b+"-paddingleft-1{padding-left:30px}"),a.push("li.list-"+b+"-paddingleft-2{padding-left:40px}"),a.push("li.list-"+b+"-paddingleft-3{padding-left:55px}");break;case"cn2":a.push("li.list-"+b+"-paddingleft-1{padding-left:40px}"),a.push("li.list-"+b+"-paddingleft-2{padding-left:55px}"),a.push("li.list-"+b+"-paddingleft-3{padding-left:68px}");break;case"num":case"num1":a.push("li.list-"+b+"-paddingleft-1{padding-left:25px}");break;case"num2":a.push("li.list-"+b+"-paddingleft-1{padding-left:35px}"),a.push("li.list-"+b+"-paddingleft-2{padding-left:40px}");break;case"dash":a.push("li.list-"+b+"-paddingleft{padding-left:35px}");break;case"dot":a.push("li.list-"+b+"-paddingleft{padding-left:20px}")}}a.push(".list-paddingleft-1{padding-left:0}"),a.push(".list-paddingleft-2{padding-left:"+h.options.listDefaultPaddingLeft+"px}"),a.push(".list-paddingleft-3{padding-left:"+2*h.options.listDefaultPaddingLeft+"px}"),utils.cssRule("list","ol,ul{margin:0;pading:0;"+(browser.ie?"":"width:95%")+"}li{clear:both;}"+a.join("\n"),h.document)}),h.ready(function(){domUtils.on(h.body,"cut",function(){setTimeout(function(){var a,b=h.selection.getRange();if(!b.collapsed&&(a=domUtils.findParentByTagName(b.startContainer,"li",!0))&&!a.nextSibling&&domUtils.isEmptyBlock(a)){var c,d=a.parentNode;if(c=d.previousSibling)domUtils.remove(d),b.setStartAtLast(c).collapse(!0),b.select(!0);else if(c=d.nextSibling)domUtils.remove(d),b.setStartAtFirst(c).collapse(!0),b.select(!0);else{var e=h.document.createElement("p");domUtils.fillNode(h.document,e),d.parentNode.insertBefore(e,d),domUtils.remove(d),b.setStart(e,0).collapse(!0),b.select(!0)}}})})}),h.addListener("beforepaste",function(a,c){var d,e=this,f=e.selection.getRange(),g=UE.htmlparser(c.html,!0);if(d=domUtils.findParentByTagName(f.startContainer,"li",!0)){var h=d.parentNode,i="OL"==h.tagName?"ul":"ol";utils.each(g.getNodesByTagName(i),function(c){if(c.tagName=h.tagName,c.setAttr(),c.parentNode===g)a=b(h)||("OL"==h.tagName?"decimal":"disc");else{var d=c.parentNode.getAttr("class");a=d&&/custom_/.test(d)?d.match(/custom_(\w+)/)[1]:c.parentNode.getStyle("list-style-type"),a||(a="OL"==h.tagName?"decimal":"disc")}var e=utils.indexOf(k[h.tagName],a);c.parentNode!==g&&(e=e+1==k[h.tagName].length?0:e+1);var f=k[h.tagName][e];j[f]?c.setAttr("class","custom_"+f):c.setStyle("list-style-type",f)})}c.html=g.toHtml()}),h.getOpt("disablePInList")===!0&&h.addOutputRule(function(a){utils.each(a.getNodesByTagName("li"),function(a){var b=[],c=0;utils.each(a.children,function(d){if("p"==d.tagName){for(var e;e=d.children.pop();)b.splice(c,0,e),e.parentNode=a,lastNode=e;if(e=b[b.length-1],!e||"element"!=e.type||"br"!=e.tagName){var f=UE.uNode.createElement("br");f.parentNode=a,b.push(f)}c=b.length}}),b.length&&(a.children=b)})}),h.addInputRule(function(a){function b(a,b){var e=b.firstChild();if(e&&"element"==e.type&&"span"==e.tagName&&/Wingdings|Symbol/.test(e.getStyle("font-family"))){for(var f in d)if(d[f]==e.data)return f;return"disc"}for(var f in c)if(c[f].test(a))return f}if(utils.each(a.getNodesByTagName("li"),function(a){for(var b,c=UE.uNode.createElement("p"),d=0;b=a.children[d];)"text"==b.type||dtd.p[b.tagName]?c.appendChild(b):c.firstChild()?(a.insertBefore(c,b),c=UE.uNode.createElement("p"),d+=2):d++;(c.firstChild()&&!c.parentNode||!a.firstChild())&&a.appendChild(c),c.firstChild()||c.innerHTML(browser.ie?" ":"
    ");var e=a.firstChild(),f=e.lastChild();f&&"text"==f.type&&/^\s*$/.test(f.data)&&e.removeChild(f)}),h.options.autoTransWordToList){var c={num1:/^\d+\)/,decimal:/^\d+\./,"lower-alpha":/^[a-z]+\)/,"upper-alpha":/^[A-Z]+\./,cn:/^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/,cn2:/^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/},d={square:"n"};utils.each(a.getNodesByTagName("p"),function(a){function d(a,b,d){if("ol"==a.tagName)if(browser.ie){var e=b.firstChild();"element"==e.type&&"span"==e.tagName&&c[d].test(e.innerText())&&b.removeChild(e)}else b.innerHTML(b.innerHTML().replace(c[d],""));else b.removeChild(b.firstChild());var f=UE.uNode.createElement("li");f.appendChild(b),a.appendChild(f)}if("MsoListParagraph"==a.getAttr("class")){a.setStyle("margin",""),a.setStyle("margin-left",""),a.setAttr("class","");var e,f=a,g=a;if("li"!=a.parentNode.tagName&&(e=b(a.innerText(),a))){var i=UE.uNode.createElement(h.options.insertorderedlist.hasOwnProperty(e)?"ol":"ul");for(j[e]?i.setAttr("class","custom_"+e):i.setStyle("list-style-type",e);a&&"li"!=a.parentNode.tagName&&b(a.innerText(),a);)f=a.nextSibling(),f||a.parentNode.insertBefore(i,a),d(i,a,e),a=f;!i.parentNode&&a&&a.parentNode&&a.parentNode.insertBefore(i,a)}var k=g.firstChild();k&&"element"==k.type&&"span"==k.tagName&&/^\s*( )+\s*$/.test(k.innerText())&&k.parentNode.removeChild(k)}})}}),h.addListener("contentchange",function(){c(h.document)}),h.addListener("keydown",function(a,b){function c(){b.preventDefault?b.preventDefault():b.returnValue=!1,h.fireEvent("contentchange"),h.undoManger&&h.undoManger.save()}function d(a,b){for(;a&&!domUtils.isBody(a);){if(b(a))return null;if(1==a.nodeType&&/[ou]l/i.test(a.tagName))return a;a=a.parentNode}return null}var e=b.keyCode||b.which;if(13==e&&!b.shiftKey){var g=h.selection.getRange(),i=domUtils.findParent(g.startContainer,function(a){return domUtils.isBlockElm(a)},!0),j=domUtils.findParentByTagName(g.startContainer,"li",!0);if(i&&"PRE"!=i.tagName&&!j){var k=i.innerHTML.replace(new RegExp(domUtils.fillChar,"g"),"");/^\s*1\s*\.[^\d]/.test(k)&&(i.innerHTML=k.replace(/^\s*1\s*\./,""),g.setStartAtLast(i).collapse(!0).select(),h.__hasEnterExecCommand=!0,h.execCommand("insertorderedlist"),h.__hasEnterExecCommand=!1)}var l=h.selection.getRange(),m=d(l.startContainer,function(a){return"TABLE"==a.tagName}),n=l.collapsed?m:d(l.endContainer,function(a){return"TABLE"==a.tagName});if(m&&n&&m===n){if(!l.collapsed){if(m=domUtils.findParentByTagName(l.startContainer,"li",!0),n=domUtils.findParentByTagName(l.endContainer,"li",!0),!m||!n||m!==n){var o=l.cloneRange(),p=o.collapse(!1).createBookmark();l.deleteContents(),o.moveToBookmark(p);var j=domUtils.findParentByTagName(o.startContainer,"li",!0);return f(j),o.select(),void c()}if(l.deleteContents(),j=domUtils.findParentByTagName(l.startContainer,"li",!0),j&&domUtils.isEmptyBlock(j))return v=j.previousSibling,next=j.nextSibling,s=h.document.createElement("p"),domUtils.fillNode(h.document,s),q=j.parentNode,v&&next?(l.setStart(next,0).collapse(!0).select(!0),domUtils.remove(j)):((v||next)&&v?j.parentNode.parentNode.insertBefore(s,q.nextSibling):q.parentNode.insertBefore(s,q),domUtils.remove(j),q.firstChild||domUtils.remove(q),l.setStart(s,0).setCursor()),void c()}if(j=domUtils.findParentByTagName(l.startContainer,"li",!0)){ +if(domUtils.isEmptyBlock(j)){p=l.createBookmark();var q=j.parentNode;if(j!==q.lastChild?(domUtils.breakParent(j,q),f(j)):(q.parentNode.insertBefore(j,q.nextSibling),domUtils.isEmptyNode(q)&&domUtils.remove(q)),!dtd.$list[j.parentNode.tagName])if(domUtils.isBlockElm(j.firstChild))domUtils.remove(j,!0);else{for(s=h.document.createElement("p"),j.parentNode.insertBefore(s,j);j.firstChild;)s.appendChild(j.firstChild);domUtils.remove(j)}l.moveToBookmark(p).select()}else{var r=j.firstChild;if(!r||!domUtils.isBlockElm(r)){var s=h.document.createElement("p");for(!j.firstChild&&domUtils.fillNode(h.document,s);j.firstChild;)s.appendChild(j.firstChild);j.appendChild(s),r=s}var t=h.document.createElement("span");l.insertNode(t),domUtils.breakParent(t,j);var u=t.nextSibling;r=u.firstChild,r||(s=h.document.createElement("p"),domUtils.fillNode(h.document,s),u.appendChild(s),r=s),domUtils.isEmptyNode(r)&&(r.innerHTML="",domUtils.fillNode(h.document,r)),l.setStart(r,0).collapse(!0).shrinkBoundary().select(),domUtils.remove(t);var v=u.previousSibling;v&&domUtils.isEmptyBlock(v)&&(v.innerHTML="

    ",domUtils.fillNode(h.document,v.firstChild))}c()}}}if(8==e&&(l=h.selection.getRange(),l.collapsed&&domUtils.isStartInblock(l)&&(o=l.cloneRange().trimBoundary(),j=domUtils.findParentByTagName(l.startContainer,"li",!0),j&&domUtils.isStartInblock(o)))){if(m=domUtils.findParentByTagName(l.startContainer,"p",!0),m&&m!==j.firstChild){var q=domUtils.findParentByTagName(m,["ol","ul"]);return domUtils.breakParent(m,q),f(m),h.fireEvent("contentchange"),l.setStart(m,0).setCursor(!1,!0),h.fireEvent("saveScene"),void domUtils.preventDefault(b)}if(j&&(v=j.previousSibling)){if(46==e&&j.childNodes.length)return;if(dtd.$list[v.tagName]&&(v=v.lastChild),h.undoManger&&h.undoManger.save(),r=j.firstChild,domUtils.isBlockElm(r))if(domUtils.isEmptyNode(r))for(v.appendChild(r),l.setStart(r,0).setCursor(!1,!0);j.firstChild;)v.appendChild(j.firstChild);else t=h.document.createElement("span"),l.insertNode(t),domUtils.isEmptyBlock(v)&&(v.innerHTML=""),domUtils.moveChild(j,v),l.setStartBefore(t).collapse(!0).select(!0),domUtils.remove(t);else if(domUtils.isEmptyNode(j)){var s=h.document.createElement("p");v.appendChild(s),l.setStart(s,0).setCursor()}else for(l.setEnd(v,v.childNodes.length).collapse().select(!0);j.firstChild;)v.appendChild(j.firstChild);return domUtils.remove(j),h.fireEvent("contentchange"),h.fireEvent("saveScene"),void domUtils.preventDefault(b)}if(j&&!j.previousSibling){var q=j.parentNode,p=l.createBookmark();if(domUtils.isTagNode(q.parentNode,"ol ul"))q.parentNode.insertBefore(j,q),domUtils.isEmptyNode(q)&&domUtils.remove(q);else{for(;j.firstChild;)q.parentNode.insertBefore(j.firstChild,q);domUtils.remove(j),domUtils.isEmptyNode(q)&&domUtils.remove(q)}return l.moveToBookmark(p).setCursor(!1,!0),h.fireEvent("contentchange"),h.fireEvent("saveScene"),void domUtils.preventDefault(b)}}}),h.addListener("keyup",function(a,c){var e=c.keyCode||c.which;if(8==e){var f,g=h.selection.getRange();(f=domUtils.findParentByTagName(g.startContainer,["ol","ul"],!0))&&d(f,f.tagName.toLowerCase(),b(f)||domUtils.getComputedStyle(f,"list-style-type"),!0)}}),h.addListener("tabkeydown",function(){function a(a){if(h.options.maxListLevel!=-1){for(var b=a.parentNode,c=0;/[ou]l/i.test(b.tagName);)c++,b=b.parentNode;if(c>=h.options.maxListLevel)return!0}}var c=h.selection.getRange(),f=domUtils.findParentByTagName(c.startContainer,"li",!0);if(f){var g;if(!c.collapsed){h.fireEvent("saveScene"),g=c.createBookmark();for(var i,j,l=0,m=domUtils.findParents(f);j=m[l++];)if(domUtils.isTagNode(j,"ol ul")){i=j;break}var n=f;if(g.end)for(;n&&!(domUtils.getPosition(n,g.end)&domUtils.POSITION_FOLLOWING);)if(a(n))n=domUtils.getNextDomNode(n,!1,null,function(a){return a!==i});else{var o=n.parentNode,p=h.document.createElement(o.tagName),q=utils.indexOf(k[p.tagName],b(o)||domUtils.getComputedStyle(o,"list-style-type")),r=q+1==k[p.tagName].length?0:q+1,s=k[p.tagName][r];for(e(p,s),o.insertBefore(p,n);n&&!(domUtils.getPosition(n,g.end)&domUtils.POSITION_FOLLOWING);){if(f=n.nextSibling,p.appendChild(n),!f||domUtils.isTagNode(f,"ol ul")){if(f)for(;(f=f.firstChild)&&"LI"!=f.tagName;);else f=domUtils.getNextDomNode(n,!1,null,function(a){return a!==i});break}n=f}d(p,p.tagName.toLowerCase(),s),n=f}return h.fireEvent("contentchange"),c.moveToBookmark(g).select(),!0}if(a(f))return!0;var o=f.parentNode,p=h.document.createElement(o.tagName),q=utils.indexOf(k[p.tagName],b(o)||domUtils.getComputedStyle(o,"list-style-type"));q=q+1==k[p.tagName].length?0:q+1;var s=k[p.tagName][q];if(e(p,s),domUtils.isStartInblock(c))return h.fireEvent("saveScene"),g=c.createBookmark(),o.insertBefore(p,f),p.appendChild(f),d(p,p.tagName.toLowerCase(),s),h.fireEvent("contentchange"),c.moveToBookmark(g).select(!0),!0}}),h.commands.insertorderedlist=h.commands.insertunorderedlist={execCommand:function(a,c){c||(c="insertorderedlist"==a.toLowerCase()?"decimal":"disc");var f=this,h=this.selection.getRange(),j=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase():!domUtils.isWhitespace(a)},k="insertorderedlist"==a.toLowerCase()?"ol":"ul",l=f.document.createDocumentFragment();h.adjustmentBoundary().shrinkBoundary();var m,n,o,p,q=h.createBookmark(!0),r=g(f.document.getElementById(q.start)),s=0,t=g(f.document.getElementById(q.end)),u=0;if(r||t){if(r&&(m=r.parentNode),q.end||(t=r),t&&(n=t.parentNode),m===n){for(;r!==t;){if(p=r,r=r.nextSibling,!domUtils.isBlockElm(p.firstChild)){for(var v=f.document.createElement("p");p.firstChild;)v.appendChild(p.firstChild);p.appendChild(v)}l.appendChild(p)}if(p=f.document.createElement("span"),m.insertBefore(p,t),!domUtils.isBlockElm(t.firstChild)){for(v=f.document.createElement("p");t.firstChild;)v.appendChild(t.firstChild);t.appendChild(v)}l.appendChild(t),domUtils.breakParent(p,m),domUtils.isEmptyNode(p.previousSibling)&&domUtils.remove(p.previousSibling),domUtils.isEmptyNode(p.nextSibling)&&domUtils.remove(p.nextSibling);var w=b(m)||domUtils.getComputedStyle(m,"list-style-type")||("insertorderedlist"==a.toLowerCase()?"decimal":"disc");if(m.tagName.toLowerCase()==k&&w==c){for(var x,y=0,z=f.document.createDocumentFragment();x=l.firstChild;)if(domUtils.isTagNode(x,"ol ul"))z.appendChild(x);else for(;x.firstChild;)z.appendChild(x.firstChild),domUtils.remove(x);p.parentNode.insertBefore(z,p)}else o=f.document.createElement(k),e(o,c),o.appendChild(l),p.parentNode.insertBefore(o,p);return domUtils.remove(p),o&&d(o,k,c),void h.moveToBookmark(q).select()}if(r){for(;r;){if(p=r.nextSibling,domUtils.isTagNode(r,"ol ul"))l.appendChild(r);else{for(var A=f.document.createDocumentFragment(),B=0;r.firstChild;)domUtils.isBlockElm(r.firstChild)&&(B=1),A.appendChild(r.firstChild);if(B)l.appendChild(A);else{var C=f.document.createElement("p");C.appendChild(A),l.appendChild(C)}domUtils.remove(r)}r=p}m.parentNode.insertBefore(l,m.nextSibling),domUtils.isEmptyNode(m)?(h.setStartBefore(m),domUtils.remove(m)):h.setStartAfter(m),s=1}if(t&&domUtils.inDoc(n,f.document)){for(r=n.firstChild;r&&r!==t;){if(p=r.nextSibling,domUtils.isTagNode(r,"ol ul"))l.appendChild(r);else{for(A=f.document.createDocumentFragment(),B=0;r.firstChild;)domUtils.isBlockElm(r.firstChild)&&(B=1),A.appendChild(r.firstChild);B?l.appendChild(A):(C=f.document.createElement("p"),C.appendChild(A),l.appendChild(C)),domUtils.remove(r)}r=p}var D=domUtils.createElement(f.document,"div",{tmpDiv:1});domUtils.moveChild(t,D),l.appendChild(D),domUtils.remove(t),n.parentNode.insertBefore(l,n),h.setEndBefore(n),domUtils.isEmptyNode(n)&&domUtils.remove(n),u=1}}s||h.setStartBefore(f.document.getElementById(q.start)),q.end&&!u&&h.setEndAfter(f.document.getElementById(q.end)),h.enlarge(!0,function(a){return i[a.tagName]}),l=f.document.createDocumentFragment();for(var E,F=h.createBookmark(),G=domUtils.getNextDomNode(F.start,!1,j),H=h.cloneRange(),I=domUtils.isBlockElm;G&&G!==F.end&&domUtils.getPosition(G,F.end)&domUtils.POSITION_PRECEDING;)if(3==G.nodeType||dtd.li[G.tagName]){if(1==G.nodeType&&dtd.$list[G.tagName]){for(;G.firstChild;)l.appendChild(G.firstChild);E=domUtils.getNextDomNode(G,!1,j),domUtils.remove(G),G=E;continue}for(E=G,H.setStartBefore(G);G&&G!==F.end&&(!I(G)||domUtils.isBookmarkNode(G));)E=G,G=domUtils.getNextDomNode(G,!1,null,function(a){return!i[a.tagName]});G&&I(G)&&(p=domUtils.getNextDomNode(E,!1,j),p&&domUtils.isBookmarkNode(p)&&(G=domUtils.getNextDomNode(p,!1,j),E=p)),H.setEndAfter(E),G=domUtils.getNextDomNode(E,!1,j);var J=h.document.createElement("li");if(J.appendChild(H.extractContents()),domUtils.isEmptyNode(J)){for(var E=h.document.createElement("p");J.firstChild;)E.appendChild(J.firstChild);J.appendChild(E)}l.appendChild(J)}else G=domUtils.getNextDomNode(G,!0,j);h.moveToBookmark(F).collapse(!0),o=f.document.createElement(k),e(o,c),o.appendChild(l),h.insertNode(o),d(o,k,c);for(var x,y=0,K=domUtils.getElementsByTagName(o,"div");x=K[y++];)x.getAttribute("tmpDiv")&&domUtils.remove(x,!0);h.moveToBookmark(q).select()},queryCommandState:function(a){for(var b,c="insertorderedlist"==a.toLowerCase()?"ol":"ul",d=this.selection.getStartElementPath(),e=0;b=d[e++];){if("TABLE"==b.nodeName)return 0;if(c==b.nodeName.toLowerCase())return 1}return 0},queryCommandValue:function(a){for(var c,d,e="insertorderedlist"==a.toLowerCase()?"ol":"ul",f=this.selection.getStartElementPath(),g=0;d=f[g++];){if("TABLE"==d.nodeName){c=null;break}if(e==d.nodeName.toLowerCase()){c=d;break}}return c?b(c)||domUtils.getComputedStyle(c,"list-style-type"):null}}},function(){var a={textarea:function(a,b){var c=b.ownerDocument.createElement("textarea");return c.style.cssText="position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;",browser.ie&&browser.version<8&&(c.style.width=b.offsetWidth+"px",c.style.height=b.offsetHeight+"px",b.onresize=function(){c.style.width=b.offsetWidth+"px",c.style.height=b.offsetHeight+"px"}),b.appendChild(c),{setContent:function(a){c.value=a},getContent:function(){return c.value},select:function(){var a;browser.ie?(a=c.createTextRange(),a.collapse(!0),a.select()):(c.setSelectionRange(0,0),c.focus())},dispose:function(){b.removeChild(c),b.onresize=null,c=null,b=null}}},codemirror:function(a,b){var c=window.CodeMirror(b,{mode:"text/html",tabMode:"indent",lineNumbers:!0,lineWrapping:!0}),d=c.getWrapperElement();return d.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,"Courier new",monospace;font-size:13px;',c.getScrollerElement().style.cssText="position:absolute;left:0;top:0;width:100%;height:100%;",c.refresh(),{getCodeMirror:function(){return c},setContent:function(a){c.setValue(a)},getContent:function(){return c.getValue()},select:function(){c.focus()},dispose:function(){b.removeChild(d),d=null,c=null}}}};UE.plugins.source=function(){function b(b){return a["codemirror"==f.sourceEditor&&window.CodeMirror?"codemirror":"textarea"](e,b)}var c,d,e=this,f=this.options,g=!1;f.sourceEditor=browser.ie?"textarea":f.sourceEditor||"codemirror",e.setOpt({sourceEditorFirst:!1});var h,i,j;e.commands.source={execCommand:function(){if(g=!g){j=e.selection.getRange().createAddress(!1,!0),e.undoManger&&e.undoManger.save(!0),browser.gecko&&(e.body.contentEditable=!1),h=e.iframe.style.cssText,e.iframe.style.cssText+="position:absolute;left:-32768px;top:-32768px;",e.fireEvent("beforegetcontent");var a=UE.htmlparser(e.body.innerHTML);e.filterOutputRule(a),a.traversal(function(a){if("element"==a.type)switch(a.tagName){case"td":case"th":case"caption":a.children&&1==a.children.length&&"br"==a.firstChild().tagName&&a.removeChild(a.firstChild());break;case"pre":a.innerText(a.innerText().replace(/ /g," "))}}),e.fireEvent("aftergetcontent");var f=a.toHtml(!0);c=b(e.iframe.parentNode),c.setContent(f),d=e.setContent,e.setContent=function(a){var b=UE.htmlparser(a);e.filterInputRule(b),a=b.toHtml(),c.setContent(a)},setTimeout(function(){c.select(),e.addListener("fullscreenchanged",function(){try{c.getCodeMirror().refresh()}catch(a){}})}),i=e.getContent,e.getContent=function(){return c.getContent()||"

    "+(browser.ie?"":"
    ")+"

    "}}else{e.iframe.style.cssText=h;var k=c.getContent()||"

    "+(browser.ie?"":"
    ")+"

    ";k=k.replace(new RegExp("[\\r\\t\\n ]*]*)>","g"),function(a,b){return b&&!dtd.$inlineWithA[b.toLowerCase()]?a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g,""):a.replace(/(^[\n\r\t]*)|([\n\r\t]*$)/g,"")}),e.setContent=d,e.setContent(k),c.dispose(),c=null,e.getContent=i;var l=e.body.firstChild;if(l||(e.body.innerHTML="

    "+(browser.ie?"":"
    ")+"

    ",l=e.body.firstChild),e.undoManger&&e.undoManger.save(!0),browser.gecko){var m=document.createElement("input");m.style.cssText="position:absolute;left:0;top:-32768px",document.body.appendChild(m),e.body.contentEditable=!1,setTimeout(function(){domUtils.setViewportOffset(m,{left:-32768,top:0}),m.focus(),setTimeout(function(){e.body.contentEditable=!0,e.selection.getRange().moveToAddress(j).select(!0),domUtils.remove(m)})})}else try{e.selection.getRange().moveToAddress(j).select(!0)}catch(n){}}this.fireEvent("sourcemodechanged",g)},queryCommandState:function(){return 0|g},notNeedUndo:1};var k=e.queryCommandState;e.queryCommandState=function(a){return a=a.toLowerCase(),g?a in{source:1,fullscreen:1}?1:-1:k.apply(this,arguments)},"codemirror"==f.sourceEditor&&e.addListener("ready",function(){utils.loadFile(document,{src:f.codeMirrorJsUrl||f.UEDITOR_HOME_URL+"third-party/codemirror/codemirror.js",tag:"script",type:"text/javascript",defer:"defer"},function(){f.sourceEditorFirst&&setTimeout(function(){e.execCommand("source")},0)}),utils.loadFile(document,{tag:"link",rel:"stylesheet",type:"text/css",href:f.codeMirrorCssUrl||f.UEDITOR_HOME_URL+"third-party/codemirror/codemirror.css"})})}}(),UE.plugins.enterkey=function(){var a,b=this,c=b.options.enterTag;b.addListener("keyup",function(c,d){var e=d.keyCode||d.which;if(13==e){var f,g=b.selection.getRange(),h=g.startContainer;if(browser.ie)b.fireEvent("saveScene",!0,!0);else{if(/h\d/i.test(a)){if(browser.gecko){var i=domUtils.findParentByTagName(h,["h1","h2","h3","h4","h5","h6","blockquote","caption","table"],!0);i||(b.document.execCommand("formatBlock",!1,"

    "),f=1)}else if(1==h.nodeType){var j,k=b.document.createTextNode("");if(g.insertNode(k),j=domUtils.findParentByTagName(k,"div",!0)){for(var l=b.document.createElement("p");j.firstChild;)l.appendChild(j.firstChild);j.parentNode.insertBefore(l,j),domUtils.remove(j),g.setStartBefore(k).setCursor(),f=1}domUtils.remove(k)}b.undoManger&&f&&b.undoManger.save()}browser.opera&&g.select()}}}),b.addListener("keydown",function(d,e){var f=e.keyCode||e.which;if(13==f){if(b.fireEvent("beforeenterkeydown"))return void domUtils.preventDefault(e);b.fireEvent("saveScene",!0,!0),a="";var g=b.selection.getRange();if(!g.collapsed){var h=g.startContainer,i=g.endContainer,j=domUtils.findParentByTagName(h,"td",!0),k=domUtils.findParentByTagName(i,"td",!0);if(j&&k&&j!==k||!j&&k||j&&!k)return void(e.preventDefault?e.preventDefault():e.returnValue=!1)}if("p"==c)browser.ie||(h=domUtils.findParentByTagName(g.startContainer,["ol","ul","p","h1","h2","h3","h4","h5","h6","blockquote","caption"],!0),h||browser.opera?(a=h.tagName,"p"==h.tagName.toLowerCase()&&browser.gecko&&domUtils.removeDirtyAttr(h)):(b.document.execCommand("formatBlock",!1,"

    "),browser.gecko&&(g=b.selection.getRange(),h=domUtils.findParentByTagName(g.startContainer,"p",!0),h&&domUtils.removeDirtyAttr(h))));else if(e.preventDefault?e.preventDefault():e.returnValue=!1,g.collapsed){m=g.document.createElement("br"),g.insertNode(m);var l=m.parentNode;l.lastChild===m?(m.parentNode.insertBefore(m.cloneNode(!0),m),g.setStartBefore(m)):g.setStartAfter(m),g.setCursor()}else if(g.deleteContents(),h=g.startContainer,1==h.nodeType&&(h=h.childNodes[g.startOffset])){for(;1==h.nodeType;){if(dtd.$empty[h.tagName])return g.setStartBefore(h).setCursor(),b.undoManger&&b.undoManger.save(),!1;if(!h.firstChild){var m=g.document.createElement("br");return h.appendChild(m),g.setStart(h,0).setCursor(),b.undoManger&&b.undoManger.save(),!1}h=h.firstChild}h===g.startContainer.childNodes[g.startOffset]?(m=g.document.createElement("br"),g.insertNode(m).setCursor()):g.setStart(h,0).setCursor()}else m=g.document.createElement("br"),g.insertNode(m).setStartAfter(m).setCursor()}})},UE.plugins.keystrokes=function(){var a=this,b=!0;a.addListener("keydown",function(c,d){var e=d.keyCode||d.which,f=a.selection.getRange();if(!f.collapsed&&!(d.ctrlKey||d.shiftKey||d.altKey||d.metaKey)&&(e>=65&&e<=90||e>=48&&e<=57||e>=96&&e<=111||{13:1,8:1,46:1}[e])){var g=f.startContainer;if(domUtils.isFillChar(g)&&f.setStartBefore(g),g=f.endContainer,domUtils.isFillChar(g)&&f.setEndAfter(g),f.txtToElmBoundary(),f.endContainer&&1==f.endContainer.nodeType&&(g=f.endContainer.childNodes[f.endOffset],g&&domUtils.isBr(g)&&f.setEndAfter(g)),0==f.startOffset&&(g=f.startContainer,domUtils.isBoundaryNode(g,"firstChild")&&(g=f.endContainer,f.endOffset==(3==g.nodeType?g.nodeValue.length:g.childNodes.length)&&domUtils.isBoundaryNode(g,"lastChild"))))return a.fireEvent("saveScene"),a.body.innerHTML="

    "+(browser.ie?"":"
    ")+"

    ",f.setStart(a.body.firstChild,0).setCursor(!1,!0),void a._selectionChange()}if(e==keymap.Backspace){if(f=a.selection.getRange(),b=f.collapsed,a.fireEvent("delkeydown",d))return;var h,i;if(f.collapsed&&f.inFillChar()&&(h=f.startContainer,domUtils.isFillChar(h)?(f.setStartBefore(h).shrinkBoundary(!0).collapse(!0),domUtils.remove(h)):(h.nodeValue=h.nodeValue.replace(new RegExp("^"+domUtils.fillChar),""),f.startOffset--,f.collapse(!0).select(!0))),h=f.getClosedNode())return a.fireEvent("saveScene"),f.setStartBefore(h),domUtils.remove(h),f.setCursor(),a.fireEvent("saveScene"),void domUtils.preventDefault(d);if(!browser.ie&&(h=domUtils.findParentByTagName(f.startContainer,"table",!0),i=domUtils.findParentByTagName(f.endContainer,"table",!0),h&&!i||!h&&i||h!==i))return void d.preventDefault()}if(e==keymap.Tab){var j={ol:1,ul:1,table:1};if(a.fireEvent("tabkeydown",d))return void domUtils.preventDefault(d);var k=a.selection.getRange();a.fireEvent("saveScene");for(var l=0,m="",n=a.options.tabSize||4,o=a.options.tabNode||" ";l"});d.insertNode(g).setStart(g,0).setCursor(!1,!0)}}if(!b&&(3==d.startContainer.nodeType||1==d.startContainer.nodeType&&domUtils.isEmptyBlock(d.startContainer)))if(browser.ie){var k=d.document.createElement("span");d.insertNode(k).setStartBefore(k).collapse(!0),d.select(),domUtils.remove(k)}else d.select()}})},UE.plugins.fiximgclick=function(){function a(){this.editor=null,this.resizer=null,this.cover=null,this.doc=document,this.prePos={x:0,y:0},this.startPos={x:0,y:0}}var b=!1;return function(){var c=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];a.prototype={init:function(a){var b=this;b.editor=a,b.startPos=this.prePos={x:0,y:0},b.dragId=-1;var c=[],d=b.cover=document.createElement("div"),e=b.resizer=document.createElement("div");for(d.id=b.editor.ui.id+"_imagescale_cover",d.style.cssText="position:absolute;display:none;z-index:"+b.editor.options.zIndex+";filter:alpha(opacity=0); opacity:0;background:#CCC;",domUtils.on(d,"mousedown click",function(){b.hide()}),i=0;i<8;i++)c.push('');e.id=b.editor.ui.id+"_imagescale",e.className="edui-editor-imagescale",e.innerHTML=c.join(""),e.style.cssText+=";display:none;border:1px solid #3b77ff;z-index:"+b.editor.options.zIndex+";",b.editor.ui.getDom().appendChild(d),b.editor.ui.getDom().appendChild(e),b.initStyle(),b.initEvents()},initStyle:function(){utils.cssRule("imagescale",".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}")},initEvents:function(){var a=this;a.startPos.x=a.startPos.y=0,a.isDraging=!1},_eventHandler:function(a){var c=this;switch(a.type){case"mousedown":var d,d=a.target||a.srcElement;d.className.indexOf("edui-editor-imagescale-hand")!=-1&&c.dragId==-1&&(c.dragId=d.className.slice(-1),c.startPos.x=c.prePos.x=a.clientX,c.startPos.y=c.prePos.y=a.clientY,domUtils.on(c.doc,"mousemove",c.proxy(c._eventHandler,c)));break;case"mousemove":c.dragId!=-1&&(c.updateContainerStyle(c.dragId,{x:a.clientX-c.prePos.x,y:a.clientY-c.prePos.y}),c.prePos.x=a.clientX,c.prePos.y=a.clientY,b=!0,c.updateTargetElement());break;case"mouseup":c.dragId!=-1&&(c.updateContainerStyle(c.dragId,{x:a.clientX-c.prePos.x,y:a.clientY-c.prePos.y}),c.updateTargetElement(),c.target.parentNode&&c.attachTo(c.target),c.dragId=-1),domUtils.un(c.doc,"mousemove",c.proxy(c._eventHandler,c)),b&&(b=!1,c.editor.fireEvent("contentchange"))}},updateTargetElement:function(){var a=this;domUtils.setStyles(a.target,{width:a.resizer.style.width,height:a.resizer.style.height}),a.target.width=parseInt(a.resizer.style.width),a.target.height=parseInt(a.resizer.style.height),a.attachTo(a.target)},updateContainerStyle:function(a,b){var d,e=this,f=e.resizer;0!=c[a][0]&&(d=parseInt(f.style.left)+b.x,f.style.left=e._validScaledProp("left",d)+"px"),0!=c[a][1]&&(d=parseInt(f.style.top)+b.y,f.style.top=e._validScaledProp("top",d)+"px"),0!=c[a][2]&&(d=f.clientWidth+c[a][2]*b.x,f.style.width=e._validScaledProp("width",d)+"px"),0!=c[a][3]&&(d=f.clientHeight+c[a][3]*b.y,f.style.height=e._validScaledProp("height",d)+"px")},_validScaledProp:function(a,b){var c=this.resizer,d=document;switch(b=isNaN(b)?0:b,a){case"left":return b<0?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case"top":return b<0?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case"width":return b<=0?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case"height":return b<=0?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}},hideCover:function(){this.cover.style.display="none"},showCover:function(){var a=this,b=domUtils.getXY(a.editor.ui.getDom()),c=domUtils.getXY(a.editor.iframe);domUtils.setStyles(a.cover,{width:a.editor.iframe.offsetWidth+"px",height:a.editor.iframe.offsetHeight+"px",top:c.y-b.y+"px",left:c.x-b.x+"px",position:"absolute",display:""})},show:function(a){var b=this;b.resizer.style.display="block",a&&b.attachTo(a),domUtils.on(this.resizer,"mousedown",b.proxy(b._eventHandler,b)),domUtils.on(b.doc,"mouseup",b.proxy(b._eventHandler,b)),b.showCover(),b.editor.fireEvent("afterscaleshow",b),b.editor.fireEvent("saveScene")},hide:function(){var a=this;a.hideCover(),a.resizer.style.display="none",domUtils.un(a.resizer,"mousedown",a.proxy(a._eventHandler,a)),domUtils.un(a.doc,"mouseup",a.proxy(a._eventHandler,a)),a.editor.fireEvent("afterscalehide",a)},proxy:function(a,b){return function(c){return a.apply(b||this,arguments)}},attachTo:function(a){var b=this,c=b.target=a,d=this.resizer,e=domUtils.getXY(c),f=domUtils.getXY(b.editor.iframe),g=domUtils.getXY(d.parentNode);domUtils.setStyles(d,{width:c.width+"px",height:c.height+"px",left:f.x+e.x-b.editor.document.body.scrollLeft-g.x-parseInt(d.style.borderLeftWidth)+"px",top:f.y+e.y-b.editor.document.body.scrollTop-g.y-parseInt(d.style.borderTopWidth)+"px"})}}}(),function(){var b,c=this;c.setOpt("imageScaleEnabled",!0),!browser.ie&&c.options.imageScaleEnabled&&c.addListener("click",function(d,e){var f=c.selection.getRange(),g=f.getClosedNode();if(g&&"IMG"==g.tagName&&"false"!=c.body.contentEditable){if(g.className.indexOf("edui-faked-music")!=-1||g.getAttribute("anchorname")||domUtils.hasClass(g,"loadingclass")||domUtils.hasClass(g,"loaderrorclass"))return;if(!b){b=new a,b.init(c),c.ui.getDom().appendChild(b.resizer);var h,i=function(a){b.hide(),b.target&&c.selection.getRange().selectNode(b.target).select()},j=function(a){var b=a.target||a.srcElement;!b||void 0!==b.className&&b.className.indexOf("edui-editor-imagescale")!=-1||i(a)};c.addListener("afterscaleshow",function(a){c.addListener("beforekeydown",i),c.addListener("beforemousedown",j),domUtils.on(document,"keydown",i),domUtils.on(document,"mousedown",j),c.selection.getNative().removeAllRanges()}),c.addListener("afterscalehide",function(a){c.removeListener("beforekeydown",i),c.removeListener("beforemousedown",j),domUtils.un(document,"keydown",i),domUtils.un(document,"mousedown",j);var d=b.target;d.parentNode&&c.selection.getRange().selectNode(d).select()}),domUtils.on(b.resizer,"mousedown",function(a){c.selection.getNative().removeAllRanges();var d=a.target||a.srcElement;d&&d.className.indexOf("edui-editor-imagescale-hand")==-1&&(h=setTimeout(function(){b.hide(),b.target&&c.selection.getRange().selectNode(d).select()},200))}),domUtils.on(b.resizer,"mouseup",function(a){var b=a.target||a.srcElement;b&&b.className.indexOf("edui-editor-imagescale-hand")==-1&&clearTimeout(h)})}b.show(g)}else b&&"none"!=b.resizer.style.display&&b.hide()}),browser.webkit&&c.addListener("click",function(a,b){if("IMG"==b.target.tagName&&"false"!=c.body.contentEditable){var d=new dom.Range(c.document);d.selectNode(b.target).select()}})}}(),UE.plugin.register("autolink",function(){var a=0;return browser.ie?{}:{bindEvents:{reset:function(){a=0},keydown:function(a,b){var c=this,d=b.keyCode||b.which;if(32==d||13==d){for(var e,f,g=c.selection.getNative(),h=g.getRangeAt(0).cloneRange(),i=h.startContainer;1==i.nodeType&&h.startOffset>0&&(i=h.startContainer.childNodes[h.startOffset-1]);)h.setStart(i,1==i.nodeType?i.childNodes.length:i.nodeValue.length),h.collapse(!0),i=h.startContainer;do{if(0==h.startOffset){for(i=h.startContainer.previousSibling;i&&1==i.nodeType;)i=i.lastChild;if(!i||domUtils.isFillChar(i))break;e=i.nodeValue.length}else i=h.startContainer,e=h.startOffset;h.setStart(i,e-1),f=h.toString().charCodeAt(0)}while(160!=f&&32!=f);if(h.toString().replace(new RegExp(domUtils.fillChar,"g"),"").match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)){for(;h.toString().length&&!/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(h.toString());)try{h.setStart(h.startContainer,h.startOffset+1)}catch(j){for(var i=h.startContainer;!(next=i.nextSibling);){if(domUtils.isBody(i))return;i=i.parentNode}h.setStart(next,0)}if(domUtils.findParentByTagName(h.startContainer,"a",!0))return;var k,l=c.document.createElement("a"),m=c.document.createTextNode(" ");c.undoManger&&c.undoManger.save(),l.appendChild(h.extractContents()),l.href=l.innerHTML=l.innerHTML.replace(/<[^>]+>/g,""),k=l.getAttribute("href").replace(new RegExp(domUtils.fillChar,"g"),""),k=/^(?:https?:\/\/)/gi.test(k)?k:"http://"+k,l.setAttribute("_src",utils.html(k)),l.href=utils.html(k),h.insertNode(l),l.parentNode.insertBefore(m,l.nextSibling),h.setStart(m,0),h.collapse(!0),g.removeAllRanges(),g.addRange(h),c.undoManger&&c.undoManger.save()}}}}}},function(){function a(a){if(3==a.nodeType)return null;if("A"==a.nodeName)return a;for(var b=a.lastChild;b;){if("A"==b.nodeName)return b;if(3==b.nodeType){if(domUtils.isWhitespace(b)){b=b.previousSibling;continue}return null}b=b.lastChild}}var b={37:1,38:1,39:1,40:1,13:1,32:1};browser.ie&&this.addListener("keyup",function(c,d){var e=this,f=d.keyCode;if(b[f]){var g=e.selection.getRange(),h=g.startContainer;if(13==f){for(;h&&!domUtils.isBody(h)&&!domUtils.isBlockElm(h);)h=h.parentNode;if(h&&!domUtils.isBody(h)&&"P"==h.nodeName){var i=h.previousSibling;if(i&&1==i.nodeType){var i=a(i);i&&!i.getAttribute("_href")&&domUtils.remove(i,!0)}}}else if(32==f)3==h.nodeType&&/^\s$/.test(h.nodeValue)&&(h=h.previousSibling,h&&"A"==h.nodeName&&!h.getAttribute("_href")&&domUtils.remove(h,!0));else if(h=domUtils.findParentByTagName(h,"a",!0),h&&!h.getAttribute("_href")){var j=g.createBookmark();domUtils.remove(h,!0),g.moveToBookmark(j).select(!0)}}})}),UE.plugins.autoheight=function(){function a(){var a=this;clearTimeout(e),f||(!a.queryCommandState||a.queryCommandState&&1!=a.queryCommandState("source"))&&(e=setTimeout(function(){for(var b=a.body.lastChild;b&&1!=b.nodeType;)b=b.previousSibling;b&&1==b.nodeType&&(b.style.clear="both",d=Math.max(domUtils.getXY(b).y+b.offsetHeight+25,Math.max(h.minFrameHeight,h.initialFrameHeight)),d!=g&&(d!==parseInt(a.iframe.parentNode.style.height)&&(a.iframe.parentNode.style.height=d+"px"),a.body.style.height=d+"px",g=d),domUtils.removeStyle(b,"clear"))},50))}var b=this;if(b.autoHeightEnabled=b.options.autoHeightEnabled!==!1,b.autoHeightEnabled){var c,d,e,f,g=0,h=b.options;b.addListener("fullscreenchanged",function(a,b){f=b}),b.addListener("destroy",function(){b.removeListener("contentchange afterinserthtml keyup mouseup",a)}),b.enableAutoHeight=function(){var b=this;if(b.autoHeightEnabled){var d=b.document;b.autoHeightEnabled=!0,c=d.body.style.overflowY,d.body.style.overflowY="hidden",b.addListener("contentchange afterinserthtml keyup mouseup",a),setTimeout(function(){a.call(b)},browser.gecko?100:0),b.fireEvent("autoheightchanged",b.autoHeightEnabled)}},b.disableAutoHeight=function(){b.body.style.overflowY=c||"",b.removeListener("contentchange",a),b.removeListener("keyup",a),b.removeListener("mouseup",a),b.autoHeightEnabled=!1,b.fireEvent("autoheightchanged",b.autoHeightEnabled)},b.on("setHeight",function(){b.disableAutoHeight()}),b.addListener("ready",function(){b.enableAutoHeight();var c;domUtils.on(browser.ie?b.body:b.document,browser.webkit?"dragover":"drop",function(){clearTimeout(c),c=setTimeout(function(){a.call(b)},100)});var d;window.onscroll=function(){ +null===d?d=this.scrollY:0==this.scrollY&&0!=d&&(b.window.scrollTo(0,0),d=null)}})}},UE.plugins.autofloat=function(){function a(){return UE.ui?1:(alert(g.autofloatMsg),0)}function b(){var a=document.body.style;a.backgroundImage='url("about:blank")',a.backgroundAttachment="fixed"}function c(){var a=domUtils.getXY(k),b=domUtils.getComputedStyle(k,"position"),c=domUtils.getComputedStyle(k,"left");k.style.width=k.offsetWidth+"px",k.style.zIndex=1*f.options.zIndex+1,k.parentNode.insertBefore(q,k),o||p&&browser.ie?("absolute"!=k.style.position&&(k.style.position="absolute"),k.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-l+i+"px"):(browser.ie7Compat&&r&&(r=!1,k.style.left=domUtils.getXY(k).x-document.documentElement.getBoundingClientRect().left+2+"px"),"fixed"!=k.style.position&&(k.style.position="fixed",k.style.top=i+"px",("absolute"==b||"relative"==b)&&parseFloat(c)&&(k.style.left=a.x+"px")))}function d(){r=!0,q.parentNode&&q.parentNode.removeChild(q),k.style.cssText=j}function e(){var a=m(f.container),b=f.options.toolbarTopOffset||0;a.top<0&&a.bottom-k.offsetHeight>b?c():d()}var f=this,g=f.getLang();f.setOpt({topOffset:0});var h=f.options.autoFloatEnabled!==!1,i=f.options.topOffset;if(h){var j,k,l,m,n=UE.ui.uiUtils,o=browser.ie&&browser.version<=6,p=browser.quirks,q=document.createElement("div"),r=!0,s=utils.defer(function(){e()},browser.ie?200:100,!0);f.addListener("destroy",function(){domUtils.un(window,["scroll","resize"],e),f.removeListener("keydown",s)}),f.addListener("ready",function(){if(a(f)){if(!f.ui)return;m=n.getClientRect,k=f.ui.getDom("toolbarbox"),l=m(k).top,j=k.style.cssText,q.style.height=k.offsetHeight+"px",o&&b(),domUtils.on(window,["scroll","resize"],e),f.addListener("keydown",s),f.addListener("beforefullscreenchange",function(a,b){b&&d()}),f.addListener("fullscreenchanged",function(a,b){b||e()}),f.addListener("sourcemodechanged",function(a,b){setTimeout(function(){e()},0)}),f.addListener("clearDoc",function(){setTimeout(function(){e()},0)})}})}},UE.plugins.video=function(){function a(a,b,d,e,f,g,h){a=utils.unhtmlForUrl(a),f=utils.unhtml(f),g=utils.unhtml(g),b=parseInt(b,10)||0,d=parseInt(d,10)||0;var i;switch(h){case"image":i="';break;case"embed":i='';break;case"video":var j=a.substr(a.lastIndexOf(".")+1);"ogv"==j&&(j="ogg"),i="'}return i}function b(b,c){utils.each(b.getNodesByTagName(c?"img":"embed video"),function(b){var d=b.getAttr("class");if(d&&d.indexOf("edui-faked-video")!=-1){var e=a(c?b.getAttr("_url"):b.getAttr("src"),b.getAttr("width"),b.getAttr("height"),null,b.getStyle("float")||"",d,c?"embed":"image");b.parentNode.replaceChild(UE.uNode.createElement(e),b)}if(d&&d.indexOf("edui-upload-video")!=-1){var e=a(c?b.getAttr("_url"):b.getAttr("src"),b.getAttr("width"),b.getAttr("height"),null,b.getStyle("float")||"",d,c?"video":"image");b.parentNode.replaceChild(UE.uNode.createElement(e),b)}})}var c=this;c.addOutputRule(function(a){b(a,!0)}),c.addInputRule(function(a){b(a)}),c.commands.insertvideo={execCommand:function(b,d,e){d=utils.isArray(d)?d:[d];for(var f,g,h=[],i="tmpVedio",j=0,k=d.length;j0)return 0;for(var c in dtd.$isNotEmpty)if(dtd.$isNotEmpty.hasOwnProperty(c)&&a.getElementsByTagName(c).length)return 0;return 1},b.getWidth=function(a){return a?parseInt(domUtils.getComputedStyle(a,"width"),10):0},b.getTableCellAlignState=function(a){!utils.isArray(a)&&(a=[a]);var b={},c=["align","valign"],d=null,e=!0;return utils.each(a,function(a){return utils.each(c,function(c){if(d=a.getAttribute(c),!b[c]&&d)b[c]=d;else if(!b[c]||d!==b[c])return e=!1,!1}),e}),e?b:null},b.getTableItemsByRange=function(a){var b=a.selection.getStart();b&&b.id&&0===b.id.indexOf("_baidu_bookmark_start_")&&b.nextSibling&&(b=b.nextSibling);var c=b&&domUtils.findParentByTagName(b,["td","th"],!0),d=c&&c.parentNode,e=b&&domUtils.findParentByTagName(b,"caption",!0),f=e?e.parentNode:d&&d.parentNode.parentNode;return{cell:c,tr:d,table:f,caption:e}},b.getUETableBySelected=function(a){var c=b.getTableItemsByRange(a).table;return c&&c.ueTable&&c.ueTable.selectedTds.length?c.ueTable:null},b.getDefaultValue=function(a,b){var c,d,e,f,g={thin:"0px",medium:"1px",thick:"2px"};if(b)return h=b.getElementsByTagName("td")[0],f=domUtils.getComputedStyle(b,"border-left-width"),c=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,"padding-left"),d=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,"border-left-width"),e=parseInt(g[f]||f,10),{tableBorder:c,tdPadding:d,tdBorder:e};b=a.document.createElement("table"),b.insertRow(0).insertCell(0).innerHTML="xxx",a.body.appendChild(b);var h=b.getElementsByTagName("td")[0];return f=domUtils.getComputedStyle(b,"border-left-width"),c=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,"padding-left"),d=parseInt(g[f]||f,10),f=domUtils.getComputedStyle(h,"border-left-width"),e=parseInt(g[f]||f,10),domUtils.remove(b),{tableBorder:c,tdPadding:d,tdBorder:e}},b.getUETable=function(a){var c=a.tagName.toLowerCase();return a="td"==c||"th"==c||"caption"==c?domUtils.findParentByTagName(a,"table",!0):a,a.ueTable||(a.ueTable=new b(a)),a.ueTable},b.cloneCell=function(a,b,c){if(!a||utils.isString(a))return this.table.ownerDocument.createElement(a||"td");var d=domUtils.hasClass(a,"selectTdClass");d&&domUtils.removeClasses(a,"selectTdClass");var e=a.cloneNode(!0);return b&&(e.rowSpan=e.colSpan=1),!c&&domUtils.removeAttributes(e,"width height"),!c&&domUtils.removeAttributes(e,"style"),e.style.borderLeftStyle="",e.style.borderTopStyle="",e.style.borderLeftColor=a.style.borderRightColor,e.style.borderLeftWidth=a.style.borderRightWidth,e.style.borderTopColor=a.style.borderBottomColor,e.style.borderTopWidth=a.style.borderBottomWidth,d&&domUtils.addClass(a,"selectTdClass"),e},b.prototype={getMaxRows:function(){for(var a,b=this.table.rows,c=1,d=0;a=b[d];d++){for(var e,f=1,g=0;e=a.cells[g++];)f=Math.max(e.rowSpan||1,f);c=Math.max(f+d,c)}return c},getMaxCols:function(){for(var a,b=this.table.rows,c=0,d={},e=0;a=b[e];e++){for(var f,g=0,h=0;f=a.cells[h++];)if(g+=f.colSpan||1,f.rowSpan&&f.rowSpan>1)for(var i=1;ithis.rowsNum-1)?null:(e=c?h?i.endRowIndex+1:g.rowIndex+g.rowSpan:h?i.beginRowIndex-1:g.rowIndex-1,f=h?i.beginColIndex:g.colIndex,this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex))}catch(j){a(j)}},getSameEndPosCells:function(b,c){try{for(var d="x"===c.toLowerCase(),e=domUtils.getXY(b)[d?"x":"y"]+b["offset"+(d?"Width":"Height")],f=this.table.rows,g=null,h=[],i=0;ie&&d)break;if((b==j||e==l)&&(1==j[d?"colSpan":"rowSpan"]&&h.push(j),d))break}}return h}catch(m){a(m)}},setCellContent:function(a,b){a.innerHTML=b||(browser.ie?domUtils.fillChar:"
    ")},cloneCell:b.cloneCell,getSameStartPosXCells:function(b){try{for(var c,d=domUtils.getXY(b).x+b.offsetWidth,e=this.table.rows,f=[],g=0;gd)break;if(j==d&&1==h.colSpan){f.push(h);break}}}return f}catch(k){a(k)}},update:function(a){this.table=a||this.table,this.selectedTds=[],this.cellsRange={},this.indexTable=[];for(var b=this.table.rows,c=this.getMaxRows(),d=c-b.length,e=this.getMaxCols();d--;)this.table.insertRow(b.length);this.rowsNum=c,this.colsNum=e;for(var f=0,g=b.length;fc&&(j.rowSpan=c);for(var m=k,n=j.rowSpan||1,o=j.colSpan||1;this.indexTable[i][m];)m++;for(var p=0;p0)for(h=b;hf&&(m=Math.max(h,m));if(ee&&(l=Math.max(i,l));if(b>0)for(i=a;ig||d+b.colSpan-1>h)return null;j.push(this.getCell(c,b.cellIndex))}}return j},clearSelected:function(){b.removeSelectedClass(this.selectedTds),this.selectedTds=[],this.cellsRange={}},setSelected:function(a){var c=this.getCells(a);b.addSelectedClass(c),this.selectedTds=c,this.cellsRange=a},isFullRow:function(){var a=this.cellsRange;return a.endColIndex-a.beginColIndex+1==this.colsNum},isFullCol:function(){var a=this.cellsRange,b=this.table,c=b.getElementsByTagName("th"),d=a.endRowIndex-a.beginRowIndex+1;return c.length?d==this.rowsNum||d==this.rowsNum-1:d==this.rowsNum},getNextCell:function(b,c,d){try{var e,f,g=this.getCellInfo(b),h=this.selectedTds.length&&!d,i=this.cellsRange;return!c&&0==g.rowIndex||c&&(h?i.endRowIndex==this.rowsNum-1:g.rowIndex+g.rowSpan>this.rowsNum-1)?null:(e=c?h?i.endRowIndex+1:g.rowIndex+g.rowSpan:h?i.beginRowIndex-1:g.rowIndex-1,f=h?i.beginColIndex:g.colIndex,this.getCell(this.indexTable[e][f].rowIndex,this.indexTable[e][f].cellIndex))}catch(j){a(j)}},getPreviewCell:function(b,c){try{var d,e,f=this.getCellInfo(b),g=this.selectedTds.length,h=this.cellsRange;return!c&&(g?!h.beginColIndex:!f.colIndex)||c&&(g?h.endColIndex==this.colsNum-1:f.rowIndex>this.colsNum-1)?null:(d=c?g?h.beginRowIndex:f.rowIndex<1?0:f.rowIndex-1:g?h.beginRowIndex:f.rowIndex,e=c?g?h.endColIndex+1:f.colIndex:g?h.beginColIndex-1:f.colIndex<1?0:f.colIndex-1,this.getCell(this.indexTable[d][e].rowIndex,this.indexTable[d][e].cellIndex))}catch(i){a(i)}},moveContent:function(a,c){if(!b.isEmptyBlock(c)){if(b.isEmptyBlock(a))return void(a.innerHTML=c.innerHTML);var d=a.lastChild;for(3!=d.nodeType&&dtd.$block[d.tagName]||a.appendChild(a.ownerDocument.createElement("br"));d=c.firstChild;)a.appendChild(d)}},mergeRight:function(a){var b=this.getCellInfo(a),c=b.colIndex+b.colSpan,d=this.indexTable[b.rowIndex][c],e=this.getCell(d.rowIndex,d.cellIndex);a.colSpan=b.colSpan+d.colSpan,a.removeAttribute("width"),this.moveContent(a,e),this.deleteCell(e,d.rowIndex),this.update()},mergeDown:function(a){var b=this.getCellInfo(a),c=b.rowIndex+b.rowSpan,d=this.indexTable[c][b.colIndex],e=this.getCell(d.rowIndex,d.cellIndex);a.rowSpan=b.rowSpan+d.rowSpan,a.removeAttribute("height"),this.moveContent(a,e),this.deleteCell(e,d.rowIndex),this.update()},mergeRange:function(){var a=this.cellsRange,b=this.getCell(a.beginRowIndex,this.indexTable[a.beginRowIndex][a.beginColIndex].cellIndex);if("TH"==b.tagName&&a.endRowIndex!==a.beginRowIndex){var c=this.indexTable,d=this.getCellInfo(b);b=this.getCell(1,c[1][d.colIndex].cellIndex),a=this.getCellsRange(b,this.getCell(c[this.rowsNum-1][d.colIndex].rowIndex,c[this.rowsNum-1][d.colIndex].cellIndex))}for(var e,f=this.getCells(a),g=0;e=f[g++];)e!==b&&(this.moveContent(b,e),this.deleteCell(e));if(b.rowSpan=a.endRowIndex-a.beginRowIndex+1,b.rowSpan>1&&b.removeAttribute("height"),b.colSpan=a.endColIndex-a.beginColIndex+1,b.colSpan>1&&b.removeAttribute("width"),b.rowSpan==this.rowsNum&&1!=b.colSpan&&(b.colSpan=1),b.colSpan==this.colsNum&&1!=b.rowSpan){var h=b.parentNode.rowIndex;if(this.table.deleteRow)for(var g=h+1,i=h+1,j=b.rowSpan;g1&&g.rowIndex==a){var i=h.cloneNode(!0);i.rowSpan=h.rowSpan-1,i.innerHTML="",h.rowSpan=1;var j,k=a+1,l=this.table.rows[k],m=this.getPreviewMergedCellsNum(k,f)-e;m1?l.colSpan--:c[h].deleteCell(j.cellIndex),h+=j.rowSpan||1}}this.table.setAttribute("width",d-e),this.update()},splitToCells:function(a){var b=this,c=this.splitToRows(a);utils.each(c,function(a){b.splitToCols(a)})},splitToRows:function(a){var b=this.getCellInfo(a),c=b.rowIndex,d=b.colIndex,e=[];a.rowSpan=1,e.push(a);for(var f=c,g=c+b.rowSpan;f");for(var g=0;g'+(browser.ie&&browser.version<11?domUtils.fillChar:"
    ")+"");c.push("")}return"
    "+c.join("")+"
    "}b||(b=utils.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign}));var d=this,e=this.selection.getRange(),f=e.startContainer,h=domUtils.findParent(f,function(a){return domUtils.isBlockElm(a)},!0)||d.body,i=g(d),j=h.offsetWidth,k=Math.floor(j/b.numCols-2*i.tdPadding-i.tdBorder);!b.tdvalign&&(b.tdvalign=d.options.tdvalign),d.execCommand("inserthtml",c(b,k))}},UE.commands.insertparagraphbeforetable={queryCommandState:function(){return e(this).cell?0:-1},execCommand:function(){var a=e(this).table;if(a){var b=this.document.createElement("p");b.innerHTML=browser.ie?" ":"
    ",a.parentNode.insertBefore(b,a),this.selection.getRange().setStart(b,0).setCursor()}}},UE.commands.deletetable={queryCommandState:function(){var a=this.selection.getRange();return domUtils.findParentByTagName(a.startContainer,"table",!0)?0:-1},execCommand:function(a,b){var c=this.selection.getRange();if(b=b||domUtils.findParentByTagName(c.startContainer,"table",!0)){var d=b.nextSibling;d||(d=domUtils.createElement(this.document,"p",{innerHTML:browser.ie?domUtils.fillChar:"
    "}),b.parentNode.insertBefore(d,b)),domUtils.remove(b),c=this.selection.getRange(),3==d.nodeType?c.setStartBefore(d):c.setStart(d,0),c.setCursor(!1,!0),this.fireEvent("tablehasdeleted")}}},UE.commands.cellalign={queryCommandState:function(){return c(this).length?0:-1},execCommand:function(a,b){var d=c(this);if(d.length)for(var e,f=0;e=d[f++];)e.setAttribute("align",b)}},UE.commands.cellvalign={queryCommandState:function(){return c(this).length?0:-1},execCommand:function(a,b){var d=c(this);if(d.length)for(var e,f=0;e=d[f++];)e.setAttribute("vAlign",b)}},UE.commands.insertcaption={queryCommandState:function(){var a=e(this).table;return a&&0==a.getElementsByTagName("caption").length?1:-1},execCommand:function(){var a=e(this).table;if(a){var b=this.document.createElement("caption");b.innerHTML=browser.ie?domUtils.fillChar:"
    ",a.insertBefore(b,a.firstChild);var c=this.selection.getRange();c.setStart(b,0).setCursor()}}},UE.commands.deletecaption={queryCommandState:function(){var a=this.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,"table");return b?0==b.getElementsByTagName("caption").length?-1:1:-1},execCommand:function(){var a=this.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,"table");if(b){domUtils.remove(b.getElementsByTagName("caption")[0]);var c=this.selection.getRange();c.setStart(b.rows[0].cells[0],0).setCursor()}}},UE.commands.inserttitle={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[0];return"th"!=b.cells[b.cells.length-1].tagName.toLowerCase()?0:-1}return-1},execCommand:function(){var a=e(this).table;a&&h(a).insertRow(0,"th");var b=a.getElementsByTagName("th")[0];this.selection.getRange().setStart(b,0).setCursor(!1,!0)}},UE.commands.deletetitle={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[0];return"th"==b.cells[b.cells.length-1].tagName.toLowerCase()?0:-1}return-1},execCommand:function(){var a=e(this).table;a&&domUtils.remove(a.rows[0]);var b=a.getElementsByTagName("td")[0];this.selection.getRange().setStart(b,0).setCursor(!1,!0)}},UE.commands.inserttitlecol={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[a.rows.length-1];return b.getElementsByTagName("th").length?-1:0}return-1},execCommand:function(b){var c=e(this).table;c&&h(c).insertCol(0,"th"),a(c,this);var d=c.getElementsByTagName("th")[0];this.selection.getRange().setStart(d,0).setCursor(!1,!0)}},UE.commands.deletetitlecol={queryCommandState:function(){var a=e(this).table;if(a){var b=a.rows[a.rows.length-1];return b.getElementsByTagName("th").length?0:-1}return-1},execCommand:function(){var b=e(this).table;if(b)for(var c=0;c=f.colsNum)return-1;var j=f.indexTable[g.rowIndex][i],k=c.rows[j.rowIndex].cells[j.cellIndex];return k&&d.tagName==k.tagName&&j.rowIndex==g.rowIndex&&j.rowSpan==g.rowSpan?0:-1},execCommand:function(a){var b=this.selection.getRange(),c=b.createBookmark(!0),d=e(this).cell,f=h(d);f.mergeRight(d),b.moveToBookmark(c).select()}},UE.commands.mergedown={queryCommandState:function(a){var b=e(this),c=b.table,d=b.cell;if(!c||!d)return-1;var f=h(c);if(f.selectedTds.length)return-1;var g=f.getCellInfo(d),i=g.rowIndex+g.rowSpan;if(i>=f.rowsNum)return-1;var j=f.indexTable[i][g.colIndex],k=c.rows[j.rowIndex].cells[j.cellIndex];return k&&d.tagName==k.tagName&&j.colIndex==g.colIndex&&j.colSpan==g.colSpan?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.mergeDown(c),a.moveToBookmark(b).select()}},UE.commands.mergecells={queryCommandState:function(){return f(this)?0:-1},execCommand:function(){var a=f(this);if(a&&a.selectedTds.length){var b=a.selectedTds[0];a.mergeRange();var c=this.selection.getRange();domUtils.isEmptyBlock(b)?c.setStart(b,0).collapse(!0):c.selectNodeContents(b),c.select()}}},UE.commands.insertrow={queryCommandState:function(){var a=e(this),b=a.cell;return b&&("TD"==b.tagName||"TH"==b.tagName&&a.tr!==a.table.rows[0])&&h(a.table).rowsNum0?-1:b&&(b.colSpan>1||b.rowSpan>1)?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToCells(c),a.moveToBookmark(b).select()}},UE.commands.splittorows={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&b.rowSpan>1?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToRows(c),a.moveToBookmark(b).select()}},UE.commands.splittocols={queryCommandState:function(){var a=e(this),b=a.cell;if(!b)return-1;var c=h(a.table);return c.selectedTds.length>0?-1:b&&b.colSpan>1?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),c=e(this).cell,d=h(c);d.splitToCols(c),a.moveToBookmark(b).select()}},UE.commands.adaptbytext=UE.commands.adaptbywindow={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(b){var c=e(this),d=c.table;if(d)if("adaptbywindow"==b)a(d,this);else{var f=domUtils.getElementsByTagName(d,"td th");utils.each(f,function(a){a.removeAttribute("width")}),d.removeAttribute("width")}}},UE.commands.averagedistributecol={queryCommandState:function(){var a=f(this);return a&&(a.isFullRow()||a.isFullCol())?0:-1},execCommand:function(a){function b(){var a,b=e.table,c=0,f=0,h=g(d,b);if(e.isFullRow())c=b.offsetWidth,f=e.colsNum;else for(var i,j=e.cellsRange.beginColIndex,k=e.cellsRange.endColIndex,l=j;l<=k;)i=e.selectedTds[l],c+=i.offsetWidth,l+=i.colSpan,f+=1;return a=Math.ceil(c/f)-2*h.tdBorder-2*h.tdPadding}function c(a){utils.each(domUtils.getElementsByTagName(e.table,"th"),function(a){a.setAttribute("width","")});var b=e.isFullRow()?domUtils.getElementsByTagName(e.table,"td"):e.selectedTds;utils.each(b,function(b){1==b.colSpan&&b.setAttribute("width",a)})}var d=this,e=f(d);e&&e.selectedTds.length&&c(b())}},UE.commands.averagedistributerow={queryCommandState:function(){var a=f(this);return a?a.selectedTds&&/th/gi.test(a.selectedTds[0].tagName)?-1:a.isFullRow()||a.isFullCol()?0:-1:-1},execCommand:function(a){function b(){var a,b,c=0,f=e.table,h=g(d,f),i=parseInt(domUtils.getComputedStyle(f.getElementsByTagName("td")[0],"padding-top"));if(e.isFullCol()){var j,k,l=domUtils.getElementsByTagName(f,"caption"),m=domUtils.getElementsByTagName(f,"th");l.length>0&&(j=l[0].offsetHeight),m.length>0&&(k=m[0].offsetHeight),c=f.offsetHeight-(j||0)-(k||0),b=0==m.length?e.rowsNum:e.rowsNum-1}else{for(var n=e.cellsRange.beginRowIndex,o=e.cellsRange.endRowIndex,p=0,q=domUtils.getElementsByTagName(f,"tr"),r=n;r<=o;r++)c+=q[r].offsetHeight,p+=1;b=p}return a=browser.ie&&browser.version<9?Math.ceil(c/b):Math.ceil(c/b)-2*h.tdBorder-2*i}function c(a){var b=e.isFullCol()?domUtils.getElementsByTagName(e.table,"td"):e.selectedTds;utils.each(b,function(b){1==b.rowSpan&&b.setAttribute("height",a)})}var d=this,e=f(d);e&&e.selectedTds.length&&c(b())}},UE.commands.cellalignment={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this,d=f(c);if(d)utils.each(d.selectedTds,function(a){domUtils.setAttributes(a,b)});else{var e=c.selection.getStart(),g=e&&domUtils.findParentByTagName(e,["td","th","caption"],!0);/caption/gi.test(g.tagName)?(g.style.textAlign=b.align,g.style.verticalAlign=b.vAlign):domUtils.setAttributes(g,b),c.selection.getRange().setCursor(!0)}},queryCommandValue:function(a){var b=e(this).cell;if(b||(b=c(this)[0]),b){var d=UE.UETable.getUETable(b).selectedTds;return!d.length&&(d=b),UE.UETable.getTableCellAlignState(d)}return null}},UE.commands.tablealignment={queryCommandState:function(){return browser.ie&&browser.version<8?-1:e(this).table?0:-1},execCommand:function(a,b){var c=this,d=c.selection.getStart(),e=d&&domUtils.findParentByTagName(d,["table"],!0);e&&e.setAttribute("align",b)}},UE.commands.edittable={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this.selection.getRange(),d=domUtils.findParentByTagName(c.startContainer,"table");if(d){var e=domUtils.getElementsByTagName(d,"td").concat(domUtils.getElementsByTagName(d,"th"),domUtils.getElementsByTagName(d,"caption"));utils.each(e,function(a){a.style.borderColor=b})}}},UE.commands.edittd={queryCommandState:function(){return e(this).table?0:-1},execCommand:function(a,b){var c=this,d=f(c);if(d)utils.each(d.selectedTds,function(a){a.style.backgroundColor=b});else{var e=c.selection.getStart(),g=e&&domUtils.findParentByTagName(e,["td","th","caption"],!0);g&&(g.style.backgroundColor=b)}}},UE.commands.settablebackground={queryCommandState:function(){return c(this).length>1?0:-1},execCommand:function(a,b){var d,e;d=c(this),e=h(d[0]),e.setBackground(d,b)}},UE.commands.cleartablebackground={queryCommandState:function(){var a=c(this);if(!a.length)return-1;for(var b,d=0;b=a[d++];)if(""!==b.style.backgroundColor)return 0;return-1},execCommand:function(){var a=c(this),b=h(a[0]);b.removeBackground(a)}},UE.commands.interlacetable=UE.commands.uninterlacetable={queryCommandState:function(a){var b=e(this).table;if(!b)return-1;var c=b.getAttribute("interlaced");return"interlacetable"==a?"enabled"===c?-1:0:c&&"disabled"!==c?0:-1},execCommand:function(a,b){var c=e(this).table;"interlacetable"==a?(c.setAttribute("interlaced","enabled"),this.fireEvent("interlacetable",c,b)):(c.setAttribute("interlaced","disabled"),this.fireEvent("uninterlacetable",c))}},UE.commands.setbordervisible={queryCommandState:function(a){var b=e(this).table;return b?0:-1},execCommand:function(){var a=e(this).table;utils.each(domUtils.getElementsByTagName(a,"td"),function(a){a.style.borderWidth="1px",a.style.borderStyle="solid"})}}}(),UE.plugins.table=function(){function a(a){}function b(a,b){c(a,"width",!0),c(a,"height",!0)}function c(a,b,c){a.style[b]&&(c&&a.setAttribute(b,parseInt(a.style[b],10)),a.style[b]="")}function d(a){if("TD"==a.tagName||"TH"==a.tagName)return a;var b;return(b=domUtils.findParentByTagName(a,"td",!0)||domUtils.findParentByTagName(a,"th",!0))?b:null}function e(a){var b=new RegExp(domUtils.fillChar,"g");if(a[browser.ie?"innerText":"textContent"].replace(/^\s*$/,"").replace(b,"").length>0)return 0;for(var c in dtd.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1}function f(a){return a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+N.document.body.scrollLeft-N.document.body.clientLeft,y:a.clientY+N.document.body.scrollTop-N.document.body.clientTop}}function g(b){if(!A())try{var c,e=d(b.target||b.srcElement);if(R&&(N.body.style.webkitUserSelect="none",(Math.abs(V.x-b.clientX)>T||Math.abs(V.y-b.clientY)>T)&&(t(),R=!1,U=0,v(b))),ca&&ha)return U=0,N.body.style.webkitUserSelect="none",N.selection.getNative()[browser.ie9below?"empty":"removeAllRanges"](),c=f(b),m(N,!0,ca,c,e),void("h"==ca?ga.style.left=k(ha,b)+"px":"v"==ca&&(ga.style.top=l(ha,b)+"px"));if(e){if(N.fireEvent("excludetable",e)===!0)return;c=f(b);var g=n(e,c),i=domUtils.findParentByTagName(e,"table",!0);if(j(i,e,b,!0)){if(N.fireEvent("excludetable",i)===!0)return;N.body.style.cursor="url("+N.options.cursorpath+"h.png),pointer"}else if(j(i,e,b)){if(N.fireEvent("excludetable",i)===!0)return;N.body.style.cursor="url("+N.options.cursorpath+"v.png),pointer"}else{N.body.style.cursor="text";/\d/.test(g)&&(g=g.replace(/\d/,""),e=Y(e).getPreviewCell(e,"v"==g)),m(N,!!e&&!!g,e?g:"",c,e)}}else h(!1,i,N)}catch(o){a(o)}}function h(a,b,c){if(a)i(b,c);else{if(fa)return;la=setTimeout(function(){!fa&&ea&&ea.parentNode&&ea.parentNode.removeChild(ea)},2e3)}}function i(a,b){function c(c,d){clearTimeout(g),g=setTimeout(function(){b.fireEvent("tableClicked",a,d)},300)}function d(c){clearTimeout(g);var d=Y(a),e=a.rows[0].cells[0],f=d.getLastCell(),h=d.getCellsRange(e,f);b.selection.getRange().setStart(e,0).setCursor(!1,!0),d.setSelected(h)}var e=domUtils.getXY(a),f=a.ownerDocument;if(ea&&ea.parentNode)return ea;ea=f.createElement("div"),ea.contentEditable=!1,ea.innerHTML="",ea.style.cssText="width:15px;height:15px;background-image:url("+b.options.UEDITOR_HOME_URL+"dialogs/table/dragicon.png);position: absolute;cursor:move;top:"+(e.y-15)+"px;left:"+e.x+"px;",domUtils.unSelectable(ea),ea.onmouseover=function(a){fa=!0},ea.onmouseout=function(a){fa=!1},domUtils.on(ea,"click",function(a,b){c(b,this)}),domUtils.on(ea,"dblclick",function(a,b){d(b)}),domUtils.on(ea,"dragstart",function(a,b){domUtils.preventDefault(b)});var g;f.body.appendChild(ea)}function j(a,b,c,d){var e=f(c),g=n(b,e);if(d){var h=a.getElementsByTagName("caption")[0],i=h?h.offsetHeight:0;return"v1"==g&&e.y-domUtils.getXY(a).y-i<8}return"h1"==g&&e.x-domUtils.getXY(a).x<8}function k(a,b){var c=Y(a);if(c){var d=c.getSameEndPosCells(a,"x")[0],e=c.getSameStartPosXCells(a)[0],g=f(b).x,h=(d?domUtils.getXY(d).x:domUtils.getXY(c.table).x)+20,i=e?domUtils.getXY(e).x+e.offsetWidth-20:N.body.offsetWidth+5||parseInt(domUtils.getComputedStyle(N.body,"width"),10);return h+=Q,i-=Q,gi?i:g}}function l(b,c){try{var d=domUtils.getXY(b).y,e=f(c).y;return ek[c]?(a=!1,!1):void l.push(d)});var b=a?l:k;utils.each(i,function(a,c){a.width=b[c]-G()})},0)}}}}function q(a){if(_(domUtils.getElementsByTagName(N.body,"td th")),utils.each(N.document.getElementsByTagName("table"),function(a){a.ueTable=null}),aa=M(N,a)){var b=domUtils.findParentByTagName(aa,"table",!0);ut=Y(b),ut&&ut.clearSelected(),da?r(a):(N.document.body.style.webkitUserSelect="",ia=!0,N.addListener("mouseover",x))}}function r(a){browser.ie&&(a=u(a)),t(),R=!0,O=setTimeout(function(){v(a)},W)}function s(a,b){for(var c=[],d=null,e=0,f=a.length;e0&&U--},W),2===U))return U=0,void p(b);if(2!=b.button){var c=this,d=c.selection.getRange(),e=domUtils.findParentByTagName(d.startContainer,"table",!0),f=domUtils.findParentByTagName(d.endContainer,"table",!0);if((e||f)&&(e===f?(e=domUtils.findParentByTagName(d.startContainer,["td","th","caption"],!0),f=domUtils.findParentByTagName(d.endContainer,["td","th","caption"],!0),e!==f&&c.selection.clearRange()):c.selection.clearRange()),ia=!1,c.document.body.style.webkitUserSelect="",ca&&ha&&(c.selection.getNative()[browser.ie9below?"empty":"removeAllRanges"](),U=0,ga=c.document.getElementById("ue_tableDragLine"))){var g=domUtils.getXY(ha),h=domUtils.getXY(ga);switch(ca){case"h":z(ha,h.x-g.x);break;case"v":B(ha,h.y-g.y-ha.offsetHeight)}return ca="",ha=null,I(c),void c.fireEvent("saveScene")}if(aa){var i=Y(aa),j=i?i.selectedTds[0]:null;if(j)d=new dom.Range(c.document),domUtils.isEmptyBlock(j)?d.setStart(j,0).setCursor(!1,!0):d.selectNodeContents(j).shrinkBoundary().setCursor(!1,!0);else if(d=c.selection.getRange().shrinkBoundary(),!d.collapsed){var e=domUtils.findParentByTagName(d.startContainer,["td","th"],!0),f=domUtils.findParentByTagName(d.endContainer,["td","th"],!0);(e&&!f||!e&&f||e&&f&&e!==f)&&d.setCursor(!1,!0)}aa=null,c.removeListener("mouseover",x)}else{var k=domUtils.findParentByTagName(b.target||b.srcElement,"td",!0);if(k||(k=domUtils.findParentByTagName(b.target||b.srcElement,"th",!0)),k&&("TD"==k.tagName||"TH"==k.tagName)){if(c.fireEvent("excludetable",k)===!0)return;d=new dom.Range(c.document),d.setStart(k,0).setCursor(!1,!0)}}c._selectionChange(250,b)}}}function x(a,b){if(!A()){var c=this,d=b.target||b.srcElement;if(ba=domUtils.findParentByTagName(d,"td",!0)||domUtils.findParentByTagName(d,"th",!0),aa&&ba&&("TD"==aa.tagName&&"TD"==ba.tagName||"TH"==aa.tagName&&"TH"==ba.tagName)&&domUtils.findParentByTagName(aa,"table")==domUtils.findParentByTagName(ba,"table")){var e=Y(ba);if(aa!=ba){c.document.body.style.webkitUserSelect="none",c.selection.getNative()[browser.ie9below?"empty":"removeAllRanges"]();var f=e.getCellsRange(aa,ba);e.setSelected(f)}else c.document.body.style.webkitUserSelect="",e.clearSelected()}b.preventDefault?b.preventDefault():b.returnValue=!1}}function y(a,b,c){var d=parseInt(domUtils.getComputedStyle(a,"line-height"),10),e=c+b;b=ef?(c&&g.push({left:a}),!1):void 0})}),g}function D(a,b,c){if(a-=G(),a<0)return 0;a-=E(b);var d=a<0?"left":"right";return a=Math.abs(a),utils.each(c,function(b){var c=b[d];c&&(a=Math.min(a,E(c)-Q))}),a=a<0?0:a,"left"===d?-a:a}function E(a){var b=0,b=a.offsetWidth-G();a.nextSibling||(b-=F(a)),b=b<0?0:b;try{a.width=b}catch(c){}return b}function F(a){if(tab=domUtils.findParentByTagName(a,"table",!1),void 0===tab.offsetVal){var b=a.previousSibling;b?tab.offsetVal=a.offsetWidth-b.offsetWidth===X.borderWidth?X.borderWidth:0:tab.offsetVal=0}return tab.offsetVal}function G(){if(void 0===X.tabcellSpace){var a=N.document.createElement("table"),b=N.document.createElement("tbody"),c=N.document.createElement("tr"),d=N.document.createElement("td"),e=null;d.style.cssText="border: 0;",d.width=1,c.appendChild(d),c.appendChild(e=d.cloneNode(!1)),b.appendChild(c),a.appendChild(b),a.style.cssText="visibility: hidden;",N.body.appendChild(a),X.paddingSpace=d.offsetWidth-1;var f=a.offsetWidth;d.style.cssText="",e.style.cssText="",X.borderWidth=(a.offsetWidth-f)/3,X.tabcellSpace=X.paddingSpace+X.borderWidth,N.body.removeChild(a)}return G=function(){return X.tabcellSpace},X.tabcellSpace}function H(a,b){ia||(ga=a.document.createElement("div"),domUtils.setAttributes(ga,{id:"ue_tableDragLine",unselectable:"on",contenteditable:!1,onresizestart:"return false",ondragstart:"return false",onselectstart:"return false",style:"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)"}),a.body.appendChild(ga))}function I(a){if(!ia)for(var b;b=a.document.getElementById("ue_tableDragLine");)domUtils.remove(b)}function J(a,b){if(b){var c,d=domUtils.findParentByTagName(b,"table"),e=d.getElementsByTagName("caption"),f=d.offsetWidth,g=d.offsetHeight-(e.length>0?e[0].offsetHeight:0),h=domUtils.getXY(d),i=domUtils.getXY(b);switch(a){case"h":c="height:"+g+"px;top:"+(h.y+(e.length>0?e[0].offsetHeight:0))+"px;left:"+(i.x+b.offsetWidth),ga.style.cssText=c+"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)";break;case"v":c="width:"+f+"px;left:"+h.x+"px;top:"+(i.y+b.offsetHeight),ga.style.cssText=c+"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)"}}}function K(a,b){for(var c,d,e=domUtils.getElementsByTagName(a.body,"table"),f=0;d=e[f++];){var g=domUtils.getElementsByTagName(d,"td");g[0]&&(b?(c=g[0].style.borderColor.replace(/\s/g,""),/(#ffffff)|(rgb\(255,255,255\))/gi.test(c)&&domUtils.addClass(d,"noBorderTable")):domUtils.removeClasses(d,"noBorderTable"))}}function L(a,b,c){var d=a.body;return d.offsetWidth-(b?2*parseInt(domUtils.getComputedStyle(d,"margin-left"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function M(a,b){var c=domUtils.findParentByTagName(b.target||b.srcElement,["td","th"],!0),d=null;if(!c)return null;if(d=n(c,f(b)),!c)return null;if("h1"===d&&c.previousSibling){var e=domUtils.getXY(c),g=c.offsetWidth;Math.abs(e.x+g-b.clientX)>g/3&&(c=c.previousSibling)}else if("v1"===d&&c.parentNode.previousSibling){var e=domUtils.getXY(c),h=c.offsetHeight;Math.abs(e.y+h-b.clientY)>h/3&&(c=c.parentNode.previousSibling.firstChild)}return c&&a.fireEvent("excludetable",c)!==!0?c:null}var N=this,O=null,P=null,Q=5,R=!1,S=5,T=10,U=0,V=null,W=360,X=UE.UETable,Y=function(a){return X.getUETable(a)},Z=function(a){return X.getUETableBySelected(a)},$=function(a,b){return X.getDefaultValue(a,b)},_=function(a){return X.removeSelectedClass(a)};N.ready(function(){var a=this,b=a.selection.getText;a.selection.getText=function(){var c=Z(a);if(c){var d="";return utils.each(c.selectedTds,function(a){d+=a[browser.ie?"innerText":"textContent"]}),d}return b.call(a.selection)}});var aa=null,ba=null,ca="",da=!1,ea=null,fa=!1,ga=null,ha=null,ia=!1,ja=!0;N.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:"top",cursorpath:N.options.UEDITOR_HOME_URL+"themes/default/images/cursor_",tableDragable:!1,classList:["ue-table-interlace-color-single","ue-table-interlace-color-double"]}),N.getUETable=Y;var ka={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};N.ready(function(){utils.cssRule("table",".selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}",N.document);var a,c,f;N.addListener("keydown",function(b,d){var g=this,h=d.keyCode||d.which;if(8==h){var i=Z(g);i&&i.selectedTds.length&&(i.isFullCol()?g.execCommand("deletecol"):i.isFullRow()?g.execCommand("deleterow"):g.fireEvent("delcells"),domUtils.preventDefault(d));var j=domUtils.findParentByTagName(g.selection.getStart(),"caption",!0),k=g.selection.getRange();if(k.collapsed&&j&&e(j)){g.fireEvent("saveScene");var l=j.parentNode;domUtils.remove(j),l&&k.setStart(l.rows[0].cells[0],0).setCursor(!1,!0),g.fireEvent("saveScene")}}if(46==h&&(i=Z(g))){g.fireEvent("saveScene");for(var m,n=0;m=i.selectedTds[n++];)domUtils.fillNode(g.document,m);g.fireEvent("saveScene"),domUtils.preventDefault(d)}if(13==h){var o=g.selection.getRange(),j=domUtils.findParentByTagName(o.startContainer,"caption",!0);if(j){var l=domUtils.findParentByTagName(j,"table");return o.collapsed?j&&o.setStart(l.rows[0].cells[0],0).setCursor(!1,!0):(o.deleteContents(),g.fireEvent("saveScene")),void domUtils.preventDefault(d)}if(o.collapsed){var l=domUtils.findParentByTagName(o.startContainer,"table");if(l){var p=l.rows[0].cells[0],q=domUtils.findParentByTagName(g.selection.getStart(),["td","th"],!0),r=l.previousSibling;if(p===q&&(!r||1==r.nodeType&&"TABLE"==r.tagName)&&domUtils.isStartInblock(o)){var s=domUtils.findParent(g.selection.getStart(),function(a){return domUtils.isBlockElm(a)},!0);s&&(/t(h|d)/i.test(s.tagName)||s===q.firstChild)&&(g.execCommand("insertparagraphbeforetable"),domUtils.preventDefault(d))}}}}if((d.ctrlKey||d.metaKey)&&"67"==d.keyCode){a=null;var i=Z(g);if(i){var t=i.selectedTds;c=i.isFullCol(),f=i.isFullRow(),a=[[i.cloneCell(t[0],null,!0)]];for(var m,n=1;m=t[n];n++)m.parentNode!==t[n-1].parentNode?a.push([i.cloneCell(m,null,!0)]):a[a.length-1].push(i.cloneCell(m,null,!0))}}}),N.addListener("tablehasdeleted",function(){m(this,!1,"",null),ea&&domUtils.remove(ea)}),N.addListener("beforepaste",function(d,g){var h=this,i=h.selection.getRange();if(domUtils.findParentByTagName(i.startContainer,"caption",!0)){var j=h.document.createElement("div");return j.innerHTML=g.html,void(g.html=j[browser.ie9below?"innerText":"textContent"])}var k=Z(h);if(a){h.fireEvent("saveScene");var l,m,i=h.selection.getRange(),n=domUtils.findParentByTagName(i.startContainer,["td","th"],!0);if(n){var o=Y(n);if(f){var p=o.getCellInfo(n).rowIndex;"TH"==n.tagName&&p++;for(var q,r=0;q=a[r++];){for(var s,t=o.insertRow(p++,"td"),u=0;s=q[u];u++){var v=t.cells[u];v||(v=t.insertCell(u)),v.innerHTML=s.innerHTML,s.getAttribute("width")&&v.setAttribute("width",s.getAttribute("width")),s.getAttribute("vAlign")&&v.setAttribute("vAlign",s.getAttribute("vAlign")),s.getAttribute("align")&&v.setAttribute("align",s.getAttribute("align")),s.style.cssText&&(v.style.cssText=s.style.cssText)}for(var s,u=0;(s=t.cells[u])&&q[u];u++)s.innerHTML=q[u].innerHTML,q[u].getAttribute("width")&&s.setAttribute("width",q[u].getAttribute("width")),q[u].getAttribute("vAlign")&&s.setAttribute("vAlign",q[u].getAttribute("vAlign")),q[u].getAttribute("align")&&s.setAttribute("align",q[u].getAttribute("align")),q[u].style.cssText&&(s.style.cssText=q[u].style.cssText)}}else{if(c){y=o.getCellInfo(n);for(var s,w=0,u=0,q=a[0];s=q[u++];)w+=s.colSpan||1;for(h.__hasEnterExecCommand=!0,r=0;r1&&(x.rowSpan=1)}var z=$(h),A=h.body.offsetWidth-(ja?2*parseInt(domUtils.getComputedStyle(h.body,"margin-left"),10):0)-2*z.tableBorder-(h.options.offsetWidth||0);h.execCommand("insertHTML",""+k.innerHTML.replace(/>\s*<").replace(/\bth\b/gi,"td")+"
    ")}return h.fireEvent("contentchange"),h.fireEvent("saveScene"),g.html="",!0}var B,j=h.document.createElement("div");j.innerHTML=g.html,B=j.getElementsByTagName("table"),domUtils.findParentByTagName(h.selection.getStart(),"table")?(utils.each(B,function(a){domUtils.remove(a)}),domUtils.findParentByTagName(h.selection.getStart(),"caption",!0)&&(j.innerHTML=j[browser.ie?"innerText":"textContent"])):utils.each(B,function(a){b(a,!0),domUtils.removeAttributes(a,["style","border"]),utils.each(domUtils.getElementsByTagName(a,"td"),function(a){e(a)&&domUtils.fillNode(h.document,a),b(a,!0)})}),g.html=j.innerHTML}),N.addListener("afterpaste",function(){utils.each(domUtils.getElementsByTagName(N.body,"table"),function(a){if(a.offsetWidth>N.body.offsetWidth){var b=$(N,a);a.style.width=N.body.offsetWidth-(ja?2*parseInt(domUtils.getComputedStyle(N.body,"margin-left"),10):0)-2*b.tableBorder-(N.options.offsetWidth||0)+"px"}})}),N.addListener("blur",function(){a=null});var i;N.addListener("keydown",function(){clearTimeout(i),i=setTimeout(function(){var a=N.selection.getRange(),b=domUtils.findParentByTagName(a.startContainer,["th","td"],!0);if(b){var c=b.parentNode.parentNode.parentNode;c.offsetWidth>c.getAttribute("width")&&(b.style.wordBreak="break-all")}},100)}),N.addListener("selectionchange",function(){m(N,!1,"",null)}),N.addListener("contentchange",function(){var a=this;if(I(a),!Z(a)){var b=a.selection.getRange(),c=b.startContainer;c=domUtils.findParentByTagName(c,["td","th"],!0),utils.each(domUtils.getElementsByTagName(a.document,"table"),function(b){a.fireEvent("excludetable",b)!==!0&&(b.ueTable=new X(b),b.onmouseover=function(){a.fireEvent("tablemouseover",b)},b.onmousemove=function(){a.fireEvent("tablemousemove",b),a.options.tableDragable&&h(!0,this,a),utils.defer(function(){a.fireEvent("contentchange",50)},!0)},b.onmouseout=function(){a.fireEvent("tablemouseout",b),m(a,!1,"",null),I(a)},b.onclick=function(b){b=a.window.event||b;var c=d(b.target||b.srcElement);if(c){var e,f=Y(c),g=f.table,h=f.getCellInfo(c),i=a.selection.getRange();if(j(g,c,b,!0)){var k=f.getCell(f.indexTable[f.rowsNum-1][h.colIndex].rowIndex,f.indexTable[f.rowsNum-1][h.colIndex].cellIndex);return void(b.shiftKey&&f.selectedTds.length?f.selectedTds[0]!==k?(e=f.getCellsRange(f.selectedTds[0],k),f.setSelected(e)):i&&i.selectNodeContents(k).select():c!==k?(e=f.getCellsRange(c,k),f.setSelected(e)):i&&i.selectNodeContents(k).select())}if(j(g,c,b)){var l=f.getCell(f.indexTable[h.rowIndex][f.colsNum-1].rowIndex,f.indexTable[h.rowIndex][f.colsNum-1].cellIndex);b.shiftKey&&f.selectedTds.length?f.selectedTds[0]!==l?(e=f.getCellsRange(f.selectedTds[0],l),f.setSelected(e)):i&&i.selectNodeContents(l).select():c!==l?(e=f.getCellsRange(c,l),f.setSelected(e)):i&&i.selectNodeContents(l).select()}}})}),K(a,!0)}}),domUtils.on(N.document,"mousemove",g),domUtils.on(N.document,"mouseout",function(a){var b=a.target||a.srcElement;"TABLE"==b.tagName&&m(N,!1,"",null)}),N.addListener("interlacetable",function(a,b,c){if(b)for(var d=this,e=b.rows,f=e.length,g=function(a,b,c){return a[b]?a[b]:c?a[b%a.length]:""},h=0;h1?k:f.getCellInfo(d).rowIndex;var g=f.getTabNextCell(d,k);g?e(g)?a.setStart(g,0).setCursor(!1,!0):a.selectNodeContents(g).select():(N.fireEvent("saveScene"),N.__hasEnterExecCommand=!0,this.execCommand("insertrownext"),N.__hasEnterExecCommand=!1,a=this.selection.getRange(),a.setStart(c.rows[c.rows.length-1].cells[0],0).setCursor(),N.fireEvent("saveScene"))}return!0}}),browser.ie&&N.addListener("selectionchange",function(){m(this,!1,"",null)}),N.addListener("keydown",function(a,b){var c=this,d=b.keyCode||b.which;if(8!=d&&46!=d){var e=!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey);e&&_(domUtils.getElementsByTagName(c.body,"td"));var f=Z(c);f&&e&&f.clearSelected()}}),N.addListener("beforegetcontent",function(){K(this,!1),browser.ie&&utils.each(this.document.getElementsByTagName("caption"),function(a){domUtils.isEmptyNode(a)&&(a.innerHTML=" ")})}),N.addListener("aftergetcontent",function(){K(this,!0)}),N.addListener("getAllHtml",function(){_(N.document.getElementsByTagName("td"))}),N.addListener("fullscreenchanged",function(a,b){if(!b){var c=this.body.offsetWidth/document.body.offsetWidth,d=domUtils.getElementsByTagName(this.body,"table");utils.each(d,function(a){if(a.offsetWidth1||c[e].getAttribute("rowspan")>1)return-1;return b?"enablesort"==a^"sortEnabled"!=b.getAttribute("data-sort")?-1:0:-1},execCommand:function(a){var b=d(this).table;b.setAttribute("data-sort","enablesort"==a?"sortEnabled":"sortDisabled"),"enablesort"==a?domUtils.addClass(b,"sortEnabled"):domUtils.removeClasses(b,"sortEnabled")}}},UE.plugins.contextmenu=function(){var a=this;if(a.setOpt("enableContextMenu",!0),a.getOpt("enableContextMenu")!==!1){var b,c=a.getLang("contextMenu"),d=a.options.contextMenu||[{label:c.selectall,cmdName:"selectall"},{label:c.cleardoc,cmdName:"cleardoc",exec:function(){confirm(c.confirmclear)&&this.execCommand("cleardoc")}},"-",{label:c.unlink,cmdName:"unlink"},"-",{group:c.paragraph,icon:"justifyjustify",subMenu:[{label:c.justifyleft,cmdName:"justify",value:"left"},{label:c.justifyright,cmdName:"justify",value:"right"},{label:c.justifycenter,cmdName:"justify",value:"center"},{label:c.justifyjustify,cmdName:"justify",value:"justify"}]},"-",{group:c.table,icon:"table",subMenu:[{label:c.inserttable,cmdName:"inserttable"},{label:c.deletetable,cmdName:"deletetable"},"-",{label:c.deleterow,cmdName:"deleterow"},{label:c.deletecol,cmdName:"deletecol"},{label:c.insertcol,cmdName:"insertcol"},{label:c.insertcolnext,cmdName:"insertcolnext"},{label:c.insertrow,cmdName:"insertrow"},{label:c.insertrownext,cmdName:"insertrownext"},"-",{label:c.insertcaption,cmdName:"insertcaption"},{label:c.deletecaption,cmdName:"deletecaption"},{label:c.inserttitle,cmdName:"inserttitle"},{label:c.deletetitle,cmdName:"deletetitle"},{label:c.inserttitlecol,cmdName:"inserttitlecol"},{label:c.deletetitlecol,cmdName:"deletetitlecol"},"-",{label:c.mergecells,cmdName:"mergecells"},{label:c.mergeright,cmdName:"mergeright"},{label:c.mergedown,cmdName:"mergedown"},"-",{label:c.splittorows,cmdName:"splittorows"},{label:c.splittocols,cmdName:"splittocols"},{label:c.splittocells,cmdName:"splittocells"},"-",{label:c.averageDiseRow,cmdName:"averagedistributerow"},{label:c.averageDisCol,cmdName:"averagedistributecol"},"-",{label:c.edittd,cmdName:"edittd",exec:function(){UE.ui.edittd&&new UE.ui.edittd(this),this.getDialog("edittd").open()}},{label:c.edittable,cmdName:"edittable",exec:function(){UE.ui.edittable&&new UE.ui.edittable(this),this.getDialog("edittable").open()}},{label:c.setbordervisible,cmdName:"setbordervisible"}]},{group:c.tablesort,icon:"tablesort",subMenu:[{label:c.enablesort,cmdName:"enablesort"},{label:c.disablesort,cmdName:"disablesort"},"-",{label:c.reversecurrent,cmdName:"sorttable",value:"reversecurrent"},{label:c.orderbyasc,cmdName:"sorttable",value:"orderbyasc"},{label:c.reversebyasc,cmdName:"sorttable",value:"reversebyasc"},{label:c.orderbynum,cmdName:"sorttable",value:"orderbynum"},{label:c.reversebynum,cmdName:"sorttable",value:"reversebynum"}]},{group:c.borderbk,icon:"borderBack",subMenu:[{label:c.setcolor,cmdName:"interlacetable",exec:function(){this.execCommand("interlacetable")}},{label:c.unsetcolor,cmdName:"uninterlacetable",exec:function(){this.execCommand("uninterlacetable")}},{label:c.setbackground,cmdName:"settablebackground",exec:function(){this.execCommand("settablebackground",{repeat:!0,colorList:["#bbb","#ccc"]})}},{label:c.unsetbackground,cmdName:"cleartablebackground",exec:function(){this.execCommand("cleartablebackground")}},{label:c.redandblue,cmdName:"settablebackground",exec:function(){this.execCommand("settablebackground",{repeat:!0,colorList:["red","blue"]})}},{label:c.threecolorgradient,cmdName:"settablebackground",exec:function(){this.execCommand("settablebackground",{repeat:!0,colorList:["#aaa","#bbb","#ccc"]})}}]},{group:c.aligntd,icon:"aligntd",subMenu:[{cmdName:"cellalignment",value:{align:"left",vAlign:"top"}},{cmdName:"cellalignment",value:{align:"center",vAlign:"top"}},{cmdName:"cellalignment",value:{align:"right",vAlign:"top"}},{cmdName:"cellalignment",value:{align:"left",vAlign:"middle"}},{cmdName:"cellalignment",value:{align:"center",vAlign:"middle"}},{cmdName:"cellalignment",value:{align:"right",vAlign:"middle"}},{cmdName:"cellalignment",value:{align:"left",vAlign:"bottom"}},{cmdName:"cellalignment",value:{align:"center",vAlign:"bottom"}},{cmdName:"cellalignment",value:{align:"right",vAlign:"bottom"}}]},{group:c.aligntable,icon:"aligntable",subMenu:[{cmdName:"tablealignment",className:"left",label:c.tableleft,value:"left"},{cmdName:"tablealignment",className:"center",label:c.tablecenter,value:"center"},{cmdName:"tablealignment",className:"right",label:c.tableright,value:"right"}]},"-",{label:c.insertparagraphbefore,cmdName:"insertparagraph",value:!0},{label:c.insertparagraphafter,cmdName:"insertparagraph"},{label:c.copy,cmdName:"copy"},{label:c.paste,cmdName:"paste"}];if(d.length){var e=UE.ui.uiUtils;a.addListener("contextmenu",function(f,g){var h=e.getViewportOffsetByEvent(g);a.fireEvent("beforeselectionchange"),b&&b.destroy();for(var i,j=0,k=[];i=d[j];j++){var l;!function(b){function d(){switch(b.icon){case"table":return a.getLang("contextMenu.table");case"justifyjustify":return a.getLang("contextMenu.paragraph");case"aligntd":return a.getLang("contextMenu.aligntd");case"aligntable":return a.getLang("contextMenu.aligntable");case"tablesort":return c.tablesort;case"borderBack":return c.borderbk;default:return""}}if("-"==b)(l=k[k.length-1])&&"-"!==l&&k.push("-");else if(b.hasOwnProperty("group")){for(var e,f=0,g=[];e=b.subMenu[f];f++)!function(b){"-"==b?(l=g[g.length-1])&&"-"!==l?g.push("-"):g.splice(g.length-1):(a.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&(b.query?b.query():a.queryCommandState(b.cmdName))>-1&&g.push({label:b.label||a.getLang("contextMenu."+b.cmdName+(b.value||""))||"",className:"edui-for-"+b.cmdName+(b.className?" edui-for-"+b.cmdName+"-"+b.className:""),onclick:b.exec?function(){b.exec.call(a)}:function(){a.execCommand(b.cmdName,b.value)}})}(e);g.length&&k.push({label:d(),className:"edui-for-"+b.icon,subMenu:{items:g,editor:a}})}else(a.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&(b.query?b.query.call(a):a.queryCommandState(b.cmdName))>-1&&k.push({label:b.label||a.getLang("contextMenu."+b.cmdName),className:"edui-for-"+(b.icon?b.icon:b.cmdName+(b.value||"")),onclick:b.exec?function(){b.exec.call(a)}:function(){a.execCommand(b.cmdName,b.value)}})}(i)}if("-"==k[k.length-1]&&k.pop(),b=new UE.ui.Menu({items:k,className:"edui-contextmenu",editor:a}),b.render(),b.showAt(h),a.fireEvent("aftershowcontextmenu",b),domUtils.preventDefault(g),browser.ie){var m;try{m=a.selection.getNative().createRange()}catch(n){return}if(m.item){var o=new dom.Range(a.document);o.selectNode(m.item(0)).select(!0,!0)}}}),a.addListener("aftershowcontextmenu",function(b,c){if(a.zeroclipboard){var d=c.items;for(var e in d)"edui-for-copy"==d[e].className&&a.zeroclipboard.clip(d[e].getDom())}})}}},UE.plugins.shortcutmenu=function(){var a,b=this,c=b.options.shortcutMenu||[];c.length&&(b.addListener("contextmenu mouseup",function(b,d){var e=this,f={type:b,target:d.target||d.srcElement,screenX:d.screenX,screenY:d.screenY,clientX:d.clientX,clientY:d.clientY};if(setTimeout(function(){var d=e.selection.getRange();d.collapsed!==!1&&"contextmenu"!=b||(a||(a=new baidu.editor.ui.ShortCutMenu({editor:e,items:c,theme:e.options.theme,className:"edui-shortcutmenu"}),a.render(),e.fireEvent("afterrendershortcutmenu",a)),a.show(f,!!UE.plugins.contextmenu))}),"contextmenu"==b&&(domUtils.preventDefault(d),browser.ie9below)){var g;try{g=e.selection.getNative().createRange()}catch(d){return}if(g.item){var h=new dom.Range(e.document);h.selectNode(g.item(0)).select(!0,!0)}}}),b.addListener("keydown",function(b){"keydown"==b&&a&&!a.isHidden&&a.hide()}))},UE.plugins.basestyle=function(){var a={bold:["strong","b"],italic:["em","i"],subscript:["sub"],superscript:["sup"]},b=function(a,b){return domUtils.filterNodeList(a.selection.getStartElementPath(),b)},c=this;c.addshortcutkey({Bold:"ctrl+66",Italic:"ctrl+73",Underline:"ctrl+85"}),c.addInputRule(function(a){utils.each(a.getNodesByTagName("b i"),function(a){switch(a.tagName){case"b":a.tagName="strong";break;case"i":a.tagName="em"}})});for(var d in a)!function(a,d){c.commands[a]={execCommand:function(a){var e=c.selection.getRange(),f=b(this,d);if(e.collapsed){if(f){var g=c.document.createTextNode("");e.insertNode(g).removeInlineStyle(d),e.setStartBefore(g),domUtils.remove(g)}else{var h=e.document.createElement(d[0]);"superscript"!=a&&"subscript"!=a||(g=c.document.createTextNode(""),e.insertNode(g).removeInlineStyle(["sub","sup"]).setStartBefore(g).collapse(!0)),e.insertNode(h).setStart(h,0)}e.collapse(!0)}else"superscript"!=a&&"subscript"!=a||f&&f.tagName.toLowerCase()==a||e.removeInlineStyle(["sub","sup"]),f?e.removeInlineStyle(d):e.applyInlineStyle(d[0]);e.select()},queryCommandState:function(){return b(this,d)?1:0}}}(d,a[d])},UE.plugins.elementpath=function(){var a,b,c=this;c.setOpt("elementPathEnabled",!0),c.options.elementPathEnabled&&(c.commands.elementpath={execCommand:function(d,e){var f=b[e],g=c.selection.getRange();a=1*e,g.selectNode(f).select()},queryCommandValue:function(){var c=[].concat(this.selection.getStartElementPath()).reverse(),d=[];b=c;for(var e,f=0;e=c[f];f++)if(3!=e.nodeType){var g=e.tagName.toLowerCase();if("img"==g&&e.getAttribute("anchorname")&&(g="anchor"),d[f]=g,a==f){a=-1;break}}return d}})},UE.plugins.formatmatch=function(){function a(f,g){function h(a){return m&&a.selectNode(m),a.applyInlineStyle(d[d.length-1].tagName,null,d)}if(browser.webkit)var i="IMG"==g.target.tagName?g.target:null;c.undoManger&&c.undoManger.save();var j=c.selection.getRange(),k=i||j.getClosedNode();if(b&&k&&"IMG"==k.tagName)k.style.cssText+=";float:"+(b.style.cssFloat||b.style.styleFloat||"none")+";display:"+(b.style.display||"inline"),b=null;else if(!b){var l=j.collapsed;if(l){var m=c.document.createTextNode("match");j.insertNode(m).select()}c.__hasEnterExecCommand=!0;var n=c.options.removeFormatAttributes;c.options.removeFormatAttributes="",c.execCommand("removeformat"),c.options.removeFormatAttributes=n,c.__hasEnterExecCommand=!1,j=c.selection.getRange(),d.length&&h(j),m&&j.setStartBefore(m).collapse(!0),j.select(),m&&domUtils.remove(m)}c.undoManger&&c.undoManger.save(),c.removeListener("mouseup",a),e=0}var b,c=this,d=[],e=0;c.addListener("reset",function(){d=[],e=0}),c.commands.formatmatch={execCommand:function(f){if(e)return e=0,d=[],void c.removeListener("mouseup",a);var g=c.selection.getRange();if(b=g.getClosedNode(),!b||"IMG"!=b.tagName){g.collapse(!0).shrinkBoundary();var h=g.startContainer;d=domUtils.findParents(h,!0,function(a){return!domUtils.isBlockElm(a)&&1==a.nodeType});for(var i,j=0;i=d[j];j++)if("A"==i.tagName){d.splice(j,1);break}}c.addListener("mouseup",a),e=1},queryCommandState:function(){return e},notNeedUndo:1}},UE.plugin.register("searchreplace",function(){function a(a,b,c){var d=b.searchStr;b.dir==-1&&(a=a.split("").reverse().join(""),d=d.split("").reverse().join(""),c=a.length-c);for(var e,f=new RegExp(d,"g"+(b.casesensitive?"":"i"));e=f.exec(a);)if(e.index>=c)return b.dir==-1?a.length-e.index-b.searchStr.length:e.index;return-1}function b(b,c,d){var e,f,h=d.all||1==d.dir?"getNextDomNode":"getPreDomNode";domUtils.isBody(b)&&(b=b.firstChild);for(var i=1;b;){if(e=3==b.nodeType?b.nodeValue:b[browser.ie?"innerText":"textContent"],f=a(e,d,c),i=0,f!=-1)return{node:b,index:f};for(b=domUtils[h](b);b&&g[b.nodeName.toLowerCase()];)b=domUtils[h](b,!0);b&&(c=d.dir==-1?(3==b.nodeType?b.nodeValue:b[browser.ie?"innerText":"textContent"]).length:0)}}function c(a,b,d){for(var e,f=0,g=a.firstChild,h=0;g;){if(3==g.nodeType){if(h=g.nodeValue.replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,"").length,f+=h,f>=b)return{node:g,index:h-(f-b)}}else if(!dtd.$empty[g.tagName]&&(h=g[browser.ie?"innerText":"textContent"].replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,"").length,f+=h,f>=b&&(e=c(g,h-(f-b),d))))return e;g=domUtils.getNextDomNode(g)}}function d(a,d){var f,g=a.selection.getRange(),h=d.searchStr,i=a.document.createElement("span");if(i.innerHTML="$$ueditor_searchreplace_key$$",g.shrinkBoundary(!0),!g.collapsed){g.select();var j=a.selection.getText();if(new RegExp("^"+d.searchStr+"$",d.casesensitive?"":"i").test(j)){if(void 0!=d.replaceStr)return e(g,d.replaceStr),g.select(),!0;g.collapse(d.dir==-1)}}g.insertNode(i),g.enlargeToBlockElm(!0),f=g.startContainer;var k=f[browser.ie?"innerText":"textContent"].indexOf("$$ueditor_searchreplace_key$$");g.setStartBefore(i),domUtils.remove(i);var l=b(f,k,d);if(l){var m=c(l.node,l.index,h),n=c(l.node,l.index+h.length,h);return g.setStart(m.node,m.index).setEnd(n.node,n.index),void 0!==d.replaceStr&&e(g,d.replaceStr),g.select(),!0}g.setCursor()}function e(a,b){b=f.document.createTextNode(b),a.deleteContents().insertNode(b)}var f=this,g={table:1,tbody:1,tr:1,ol:1,ul:1};return{commands:{searchreplace:{execCommand:function(a,b){utils.extend(b,{all:!1,casesensitive:!1,dir:1},!0);var c=0;if(b.all){var e=f.selection.getRange(),g=f.body.firstChild;for(g&&1==g.nodeType?(e.setStart(g,0),e.shrinkBoundary(!0)):3==g.nodeType&&e.setStartBefore(g),e.collapse(!0).select(!0),void 0!==b.replaceStr&&f.fireEvent("saveScene");d(this,b);)c++;c&&f.fireEvent("saveScene")}else void 0!==b.replaceStr&&f.fireEvent("saveScene"),d(this,b)&&c++,c&&f.fireEvent("saveScene");return c},notNeedUndo:1}}}}),UE.plugins.customstyle=function(){var a=this;a.setOpt({customstyle:[{tag:"h1",name:"tc",style:"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;"},{tag:"h1",name:"tl",style:"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;"},{tag:"span",name:"im",style:"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;"},{tag:"span",name:"hi",style:"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;"}]}),a.commands.customstyle={execCommand:function(a,b){var c,d,e=this,f=b.tag,g=domUtils.findParent(e.selection.getStart(),function(a){return a.getAttribute("label")},!0),h={};for(var i in b)void 0!==b[i]&&(h[i]=b[i]);if(delete h.tag,g&&g.getAttribute("label")==b.label){if(c=this.selection.getRange(),d=c.createBookmark(),c.collapsed)if(dtd.$block[g.tagName]){var j=e.document.createElement("p");domUtils.moveChild(g,j),g.parentNode.insertBefore(j,g),domUtils.remove(g)}else domUtils.remove(g,!0);else{var k=domUtils.getCommonAncestor(d.start,d.end),l=domUtils.getElementsByTagName(k,f);new RegExp(f,"i").test(k.tagName)&&l.push(k);for(var m,n=0;m=l[n++];)if(m.getAttribute("label")==b.label){var o=domUtils.getPosition(m,d.start),p=domUtils.getPosition(m,d.end);if((o&domUtils.POSITION_FOLLOWING||o&domUtils.POSITION_CONTAINS)&&(p&domUtils.POSITION_PRECEDING||p&domUtils.POSITION_CONTAINS)&&dtd.$block[f]){var j=e.document.createElement("p");domUtils.moveChild(m,j),m.parentNode.insertBefore(j,m)}domUtils.remove(m,!0)}g=domUtils.findParent(k,function(a){return a.getAttribute("label")==b.label},!0),g&&domUtils.remove(g,!0)}c.moveToBookmark(d).select()}else if(dtd.$block[f]){if(this.execCommand("paragraph",f,h,"customstyle"),c=e.selection.getRange(),!c.collapsed){c.collapse(),g=domUtils.findParent(e.selection.getStart(),function(a){return a.getAttribute("label")==b.label},!0);var q=e.document.createElement("p");domUtils.insertAfter(g,q),domUtils.fillNode(e.document,q),c.setStart(q,0).setCursor()}}else{if(c=e.selection.getRange(),c.collapsed)return g=e.document.createElement(f),domUtils.setAttributes(g,h),void c.insertNode(g).setStart(g,0).setCursor();d=c.createBookmark(),c.applyInlineStyle(f,h).moveToBookmark(d).select()}},queryCommandValue:function(){var a=domUtils.filterNodeList(this.selection.getStartElementPath(),function(a){return a.getAttribute("label")});return a?a.getAttribute("label"):""}},a.addListener("keyup",function(b,c){var d=c.keyCode||c.which;if(32==d||13==d){var e=a.selection.getRange();if(e.collapsed){var f=domUtils.findParent(a.selection.getStart(),function(a){return a.getAttribute("label")},!0);if(f&&dtd.$block[f.tagName]&&domUtils.isEmptyNode(f)){var g=a.document.createElement("p");domUtils.insertAfter(f,g),domUtils.fillNode(a.document,g),domUtils.remove(f),e.setStart(g,0).setCursor()}}}})},UE.plugins.catchremoteimage=function(){var me=this,ajax=UE.ajax;me.options.catchRemoteImageEnable!==!1&&(me.setOpt({catchRemoteImageEnable:!1}),me.addListener("afterpaste",function(){me.fireEvent("catchRemoteImage")}),me.addListener("catchRemoteImage",function(){function catchremoteimage(a,b){var c=utils.serializeParam(me.queryCommandValue("serverparam"))||"",d=utils.formatUrl(catcherActionUrl+(catcherActionUrl.indexOf("?")==-1?"?":"&")+c),e=utils.isCrossDomainUrl(d),f={method:"POST",dataType:e?"jsonp":"",timeout:6e4,onsuccess:b.success,onerror:b.error};f[catcherFieldName]=a,ajax.request(d,f)}for(var catcherLocalDomain=me.getOpt("catcherLocalDomain"),catcherActionUrl=me.getActionUrl(me.getOpt("catcherActionName")),catcherUrlPrefix=me.getOpt("catcherUrlPrefix"),catcherFieldName=me.getOpt("catcherFieldName"),remoteImages=[],imgs=domUtils.getElementsByTagName(me.document,"img"),test=function(a,b){if(a.indexOf(location.host)!=-1||/(^\.)|(^\/)/.test(a))return!0;if(b)for(var c,d=0;c=b[d++];)if(a.indexOf(c)!==-1)return!0;return!1},i=0,ci;ci=imgs[i++];)if(!ci.getAttribute("word_img")){var src=ci.getAttribute("_src")||ci.src||"";/^(https?|ftp):/i.test(src)&&!test(src,catcherLocalDomain)&&remoteImages.push(src)}remoteImages.length&&catchremoteimage(remoteImages,{success:function(r){try{var info=void 0!==r.state?r:eval("("+r.responseText+")")}catch(e){return}var i,j,ci,cj,oldSrc,newSrc,list=info.list;for(i=0;ci=imgs[i++];)for(oldSrc=ci.getAttribute("_src")||ci.src||"",j=0;cj=list[j++];)if(oldSrc==cj.source&&"SUCCESS"==cj.state){newSrc=catcherUrlPrefix+cj.url,domUtils.setAttributes(ci,{src:newSrc,_src:newSrc});break}me.fireEvent("catchremotesuccess")},error:function(){me.fireEvent("catchremoteerror")}})}))},UE.plugin.register("snapscreen",function(){function getLocation(a){var b,c=document.createElement("a"),d=utils.serializeParam(me.queryCommandValue("serverparam"))||"";return c.href=a,browser.ie&&(c.href=c.href),b=c.search,d&&(b=b+(b.indexOf("?")==-1?"?":"&")+d,b=b.replace(/[&]+/gi,"&")),{port:c.port,hostname:c.hostname,path:c.pathname+b||+c.hash}}var me=this,snapplugin;return{commands:{snapscreen:{execCommand:function(cmd){function onSuccess(rs){try{if(rs=eval("("+rs+")"),"SUCCESS"==rs.state){var opt=me.options;me.execCommand("insertimage",{src:opt.snapscreenUrlPrefix+rs.url,_src:opt.snapscreenUrlPrefix+rs.url,alt:rs.title||"",floatStyle:opt.snapscreenImgAlign})}else alert(rs.state)}catch(e){alert(lang.callBackErrorMsg)}}var url,local,res,lang=me.getLang("snapScreen_plugin");if(!snapplugin){var container=me.container,doc=me.container.ownerDocument||me.container.document;snapplugin=doc.createElement("object");try{snapplugin.type="application/x-pluginbaidusnap"}catch(e){return}snapplugin.style.cssText="position:absolute;left:-9999px;width:0;height:0;",snapplugin.setAttribute("width","0"),snapplugin.setAttribute("height","0"),container.appendChild(snapplugin)}url=me.getActionUrl(me.getOpt("snapscreenActionName")),local=getLocation(url),setTimeout(function(){try{res=snapplugin.saveSnapshot(local.hostname,local.path,local.port)}catch(a){return void me.ui._dialogs.snapscreenDialog.open()}onSuccess(res)},50)},queryCommandState:function(){return navigator.userAgent.indexOf("Windows",0)!=-1?0:-1}}}}}),UE.commands.insertparagraph={execCommand:function(a,b){for(var c,d=this,e=d.selection.getRange(),f=e.startContainer;f&&!domUtils.isBody(f);)c=f,f=f.parentNode;if(c){var g=d.document.createElement("p");b?c.parentNode.insertBefore(g,c):c.parentNode.insertBefore(g,c.nextSibling),domUtils.fillNode(d.document,g),e.setStart(g,0).setCursor(!1,!0)}}},UE.plugin.register("webapp",function(){function a(a,c){return c?'':'"}var b=this;return{outputRule:function(b){utils.each(b.getNodesByTagName("img"),function(b){var c;if("edui-faked-webapp"==b.getAttr("class")){c=a({title:b.getAttr("title"),width:b.getAttr("width"),height:b.getAttr("height"),align:b.getAttr("align"),cssfloat:b.getStyle("float"),url:b.getAttr("_url"),logo:b.getAttr("_logo_url")},!0);var d=UE.uNode.createElement(c);b.parentNode.replaceChild(d,b)}})},inputRule:function(b){utils.each(b.getNodesByTagName("iframe"),function(b){if("edui-faked-webapp"==b.getAttr("class")){var c=UE.uNode.createElement(a({title:b.getAttr("title"),width:b.getAttr("width"),height:b.getAttr("height"),align:b.getAttr("align"),cssfloat:b.getStyle("float"),url:b.getAttr("src"),logo:b.getAttr("logo_url")}));b.parentNode.replaceChild(c,b)}})},commands:{webapp:{execCommand:function(b,c){var d=this,e=a(utils.extend(c,{align:"none"}),!1);d.execCommand("inserthtml",e)},queryCommandState:function(){var a=this,b=a.selection.getRange().getClosedNode(),c=b&&"edui-faked-webapp"==b.className;return c?1:0}}}}}),UE.plugins.template=function(){UE.commands.template={execCommand:function(a,b){b.html&&this.execCommand("inserthtml",b.html)}},this.addListener("click",function(a,b){var c=b.target||b.srcElement,d=this.selection.getRange(),e=domUtils.findParent(c,function(a){if(a.className&&domUtils.hasClass(a,"ue_t"))return a},!0);e&&d.selectNode(e).shrinkBoundary().select()}),this.addListener("keydown",function(a,b){var c=this.selection.getRange();if(!c.collapsed&&!(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)){var d=domUtils.findParent(c.startContainer,function(a){if(a.className&&domUtils.hasClass(a,"ue_t"))return a},!0);d&&domUtils.removeClasses(d,["ue_t"])}})},UE.plugin.register("music",function(){function a(a,c,d,e,f,g){return g?'':"'}var b=this;return{outputRule:function(b){utils.each(b.getNodesByTagName("img"),function(b){var c;if("edui-faked-music"==b.getAttr("class")){var d=b.getStyle("float"),e=b.getAttr("align");c=a(b.getAttr("_url"),b.getAttr("width"),b.getAttr("height"),e,d,!0);var f=UE.uNode.createElement(c);b.parentNode.replaceChild(f,b)}})},inputRule:function(b){utils.each(b.getNodesByTagName("embed"),function(b){if("edui-faked-music"==b.getAttr("class")){var c=b.getStyle("float"),d=b.getAttr("align");html=a(b.getAttr("src"),b.getAttr("width"),b.getAttr("height"),d,c,!1);var e=UE.uNode.createElement(html);b.parentNode.replaceChild(e,b)}})},commands:{music:{execCommand:function(b,c){var d=this,e=a(c.url,c.width||400,c.height||95,"none",!1);d.execCommand("inserthtml",e)},queryCommandState:function(){var a=this,b=a.selection.getRange().getClosedNode(),c=b&&"edui-faked-music"==b.className;return c?1:0}}}}}),UE.plugin.register("autoupload",function(){function a(a,b){var c,d,e,f,g,h,i,j,k=b,l=/image\/\w+/i.test(a.type)?"image":"file",m="loading_"+(+new Date).toString(36);if(c=k.getOpt(l+"FieldName"),d=k.getOpt(l+"UrlPrefix"),e=k.getOpt(l+"MaxSize"),f=k.getOpt(l+"AllowFiles"),g=k.getActionUrl(k.getOpt(l+"ActionName")),i=function(a){var b=k.document.getElementById(m);b&&domUtils.remove(b),k.fireEvent("showmessage",{id:m,content:a,type:"error",timeout:4e3})},"image"==l?(h='',j=function(a){var b=d+a.url,c=k.document.getElementById(m);c&&(c.setAttribute("src",b),c.setAttribute("_src",b),c.setAttribute("title",a.title||""),c.setAttribute("alt",a.original||""),c.removeAttribute("id"),domUtils.removeClasses(c,"loadingclass"))}):(h='

    ',j=function(a){var b=d+a.url,c=k.document.getElementById(m),e=k.selection.getRange(),f=e.createBookmark();e.selectNode(c).select(),k.execCommand("insertfile",{url:b}),e.moveToBookmark(f).select()}),k.execCommand("inserthtml",h),!k.getOpt(l+"ActionName"))return void i(k.getLang("autoupload.errorLoadConfig"));if(a.size>e)return void i(k.getLang("autoupload.exceedSizeError"));var n=a.name?a.name.substr(a.name.lastIndexOf(".")):"";if(n&&"image"!=l||f&&(f.join("")+".").indexOf(n.toLowerCase()+".")==-1)return void i(k.getLang("autoupload.exceedTypeError"));var o=new XMLHttpRequest,p=new FormData,q=utils.serializeParam(k.queryCommandValue("serverparam"))||"",r=utils.formatUrl(g+(g.indexOf("?")==-1?"?":"&")+q);p.append(c,a,a.name||"blob."+a.type.substr("image/".length)),p.append("type","ajax"),o.open("post",r,!0),o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.addEventListener("load",function(a){try{var b=new Function("return "+utils.trim(a.target.response))();"SUCCESS"==b.state&&b.url?j(b):i(b.state)}catch(c){i(k.getLang("autoupload.loadError"))}}),o.send(p)}function b(a){return a.clipboardData&&a.clipboardData.items&&1==a.clipboardData.items.length&&/^image\//.test(a.clipboardData.items[0].type)?a.clipboardData.items:null}function c(a){return a.dataTransfer&&a.dataTransfer.files?a.dataTransfer.files:null}return{outputRule:function(a){utils.each(a.getNodesByTagName("img"),function(a){/\b(loaderrorclass)|(bloaderrorclass)\b/.test(a.getAttr("class"))&&a.parentNode.removeChild(a)}),utils.each(a.getNodesByTagName("p"),function(a){/\bloadpara\b/.test(a.getAttr("class"))&&a.parentNode.removeChild(a)})},bindEvents:{ready:function(d){var e=this;window.FormData&&window.FileReader&&(domUtils.on(e.body,"paste drop",function(d){var f,g=!1;if(f="paste"==d.type?b(d):c(d)){for(var h,i=f.length;i--;)h=f[i],h.getAsFile&&(h=h.getAsFile()),h&&h.size>0&&(a(h,e),g=!0);g&&d.preventDefault()}}),domUtils.on(e.body,"dragover",function(a){"Files"==a.dataTransfer.types[0]&&a.preventDefault()}),utils.cssRule("loading",".loadingclass{display:inline-block;cursor:default;background: url('"+this.options.themePath+this.options.theme+"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\n.loaderrorclass{display:inline-block;cursor:default;background: url('"+this.options.themePath+this.options.theme+"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}",this.document))}}}}),UE.plugin.register("autosave",function(){function a(a){var f;if(!(new Date-c0?b._saveFlag=window.setTimeout(function(){a(b)},b.options.saveInterval):a(b))}},commands:{clearlocaldata:{execCommand:function(a,c){e&&b.getPreferences(e)&&b.removePreferences(e)},notNeedUndo:!0,ignoreContentChange:!0},getlocaldata:{execCommand:function(a,c){return e?b.getPreferences(e)||"":""},notNeedUndo:!0,ignoreContentChange:!0},drafts:{execCommand:function(a,c){e&&(b.body.innerHTML=b.getPreferences(e)||"

    "+domUtils.fillHtml+"

    ",b.focus(!0))},queryCommandState:function(){return e?null===b.getPreferences(e)?-1:0:-1},notNeedUndo:!0,ignoreContentChange:!0}}}}),UE.plugin.register("charts",function(){function a(a){var b=null,c=0;if(a.rows.length<2)return!1;if(a.rows[0].cells.length<2)return!1;b=a.rows[0].cells,c=b.length;for(var d,e=0;d=b[e];e++)if("th"!==d.tagName.toLowerCase())return!1;for(var f,e=1;f=a.rows[e];e++){if(f.cells.length!=c)return!1;if("th"!==f.cells[0].tagName.toLowerCase())return!1;for(var d,g=1;d=f.cells[g];g++){var h=utils.trim(d.innerText||d.textContent||"");if(h=h.replace(new RegExp(UE.dom.domUtils.fillChar,"g"),"").replace(/^\s+|\s+$/g,""),!/^\d*\.?\d+$/.test(h))return!1}}return!0}var b=this;return{bindEvents:{chartserror:function(){}},commands:{charts:{execCommand:function(c,d){var e=domUtils.findParentByTagName(this.selection.getRange().startContainer,"table",!0),f=[],g={};if(!e)return!1;if(!a(e))return b.fireEvent("chartserror"),!1;g.title=d.title||"",g.subTitle=d.subTitle||"",g.xTitle=d.xTitle||"",g.yTitle=d.yTitle||"",g.suffix=d.suffix||"",g.tip=d.tip||"",g.dataFormat=d.tableDataFormat||"",g.chartType=d.chartType||0;for(var h in g)g.hasOwnProperty(h)&&f.push(h+":"+g[h]);e.setAttribute("data-chart",f.join(";")),domUtils.addClass(e,"edui-charts-table")},queryCommandState:function(b,c){ +var d=domUtils.findParentByTagName(this.selection.getRange().startContainer,"table",!0);return d&&a(d)?0:-1}}},inputRule:function(a){utils.each(a.getNodesByTagName("table"),function(a){void 0!==a.getAttr("data-chart")&&a.setAttr("style")})},outputRule:function(a){utils.each(a.getNodesByTagName("table"),function(a){void 0!==a.getAttr("data-chart")&&a.setAttr("style","display: none;")})}}}),UE.plugin.register("section",function(){function a(a){this.tag="",this.level=-1,this.dom=null,this.nextSection=null,this.previousSection=null,this.parentSection=null,this.startAddress=[],this.endAddress=[],this.children=[]}function b(b){var c=new a;return utils.extend(c,b)}function c(a,b){for(var c=b,d=0;d=0){var o=h.selection.getRange().selectNode(i).createAddress(!0).startAddress,p=b({tag:i.tagName,title:i.innerText||i.textContent||"",level:f,dom:i,startAddress:utils.clone(o,[]),endAddress:utils.clone(o,[]),children:[]});for(j.nextSection=p,p.previousSection=j,g=j;f<=g.level;)g=g.parentSection;p.parentSection=g,g.children.push(p),k=j=p}else 1===i.nodeType&&e(i,c),k&&k.endAddress[k.endAddress.length-1]++}for(var f=c||["h1","h2","h3","h4","h5","h6"],g=0;g=c.length);f++){if(c[f]>a[f]){d=!0;break}if(c[f]=c.length);f++){if(c[f]a[f])break}return d&&e}var g,h,i=this;if(b&&d&&d.level!=-1&&(g=e?d.endAddress:d.startAddress,h=c(g,i.body),g&&h&&!f(b.startAddress,b.endAddress,g))){var j,k,l=c(b.startAddress,i.body),m=c(b.endAddress,i.body);if(e)for(j=m;j&&!(domUtils.getPosition(l,j)&domUtils.POSITION_FOLLOWING)&&(k=j.previousSibling,domUtils.insertAfter(h,j),j!=l);)j=k;else for(j=l;j&&!(domUtils.getPosition(j,m)&domUtils.POSITION_FOLLOWING)&&(k=j.nextSibling,h.parentNode.insertBefore(j,h),j!=m);)j=k;i.fireEvent("updateSections")}}},deletesection:{execCommand:function(a,b,c){function d(a){for(var b=e.body,c=0;c',b.className="edui-"+c.options.theme,b.id=c.ui.id+"_iframeupload",i.style.cssText=g,i.style.width=a+"px",i.style.height=e+"px",i.appendChild(b),i.parentNode&&(i.parentNode.style.width=a+"px",i.parentNode.style.height=a+"px");var k=h.getElementById("edui_form_"+j),l=h.getElementById("edui_input_"+j),m=h.getElementById("edui_iframe_"+j);domUtils.on(l,"change",function(){function a(){try{var e,f,g,h=(m.contentDocument||m.contentWindow.document).body,i=h.innerText||h.textContent||"";f=new Function("return "+i)(),e=c.options.imageUrlPrefix+f.url,"SUCCESS"==f.state&&f.url?(g=c.document.getElementById(d),g.setAttribute("src",e),g.setAttribute("_src",e),g.setAttribute("title",f.title||""),g.setAttribute("alt",f.original||""),g.removeAttribute("id"),domUtils.removeClasses(g,"loadingclass")):b&&b(f.state)}catch(j){b&&b(c.getLang("simpleupload.loadError"))}k.reset(),domUtils.un(m,"load",a)}function b(a){if(d){var b=c.document.getElementById(d);b&&domUtils.remove(b),c.fireEvent("showmessage",{id:d,content:a,type:"error",timeout:4e3})}}if(l.value){var d="loading_"+(+new Date).toString(36),e=utils.serializeParam(c.queryCommandValue("serverparam"))||"",f=c.getActionUrl(c.getOpt("imageActionName")),g=c.getOpt("imageAllowFiles");if(c.focus(),c.execCommand("inserthtml",''),!c.getOpt("imageActionName"))return void errorHandler(c.getLang("autoupload.errorLoadConfig"));var h=l.value,i=h?h.substr(h.lastIndexOf(".")):"";if(!i||g&&(g.join("")+".").indexOf(i.toLowerCase()+".")==-1)return void b(c.getLang("simpleupload.exceedTypeError"));domUtils.on(m,"load",a),k.action=utils.formatUrl(f+(f.indexOf("?")==-1?"?":"&")+e),k.submit()}});var n;c.addListener("selectionchange",function(){clearTimeout(n),n=setTimeout(function(){var a=c.queryCommandState("simpleupload");a==-1?l.disabled="disabled":l.disabled=!1},400)}),d=!0}),f.style.cssText=g,b.appendChild(f)}var b,c=this,d=!1;return{bindEvents:{ready:function(){utils.cssRule("loading",".loadingclass{display:inline-block;cursor:default;background: url('"+this.options.themePath+this.options.theme+"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n.loaderrorclass{display:inline-block;cursor:default;background: url('"+this.options.themePath+this.options.theme+"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}",this.document)},simpleuploadbtnready:function(d,e){b=e,c.afterConfigReady(a)}},outputRule:function(a){utils.each(a.getNodesByTagName("img"),function(a){/\b(loaderrorclass)|(bloaderrorclass)\b/.test(a.getAttr("class"))&&a.parentNode.removeChild(a)})},commands:{simpleupload:{queryCommandState:function(){return d?0:-1}}}}}),UE.plugin.register("serverparam",function(){var a={};return{commands:{serverparam:{execCommand:function(b,c,d){void 0===c||null===c?a={}:utils.isString(c)?void 0===d||null===d?delete a[c]:a[c]=d:utils.isObject(c)?utils.extend(a,c,!0):utils.isFunction(c)&&utils.extend(a,c(),!0)},queryCommandValue:function(){return a||{}}}}}}),UE.plugin.register("insertfile",function(){function a(a){var b=a.substr(a.lastIndexOf(".")+1).toLowerCase(),c={rar:"icon_rar.gif",zip:"icon_rar.gif",tar:"icon_rar.gif",gz:"icon_rar.gif",bz2:"icon_rar.gif",doc:"icon_doc.gif",docx:"icon_doc.gif",pdf:"icon_pdf.gif",mp3:"icon_mp3.gif",xls:"icon_xls.gif",chm:"icon_chm.gif",ppt:"icon_ppt.gif",pptx:"icon_ppt.gif",avi:"icon_mv.gif",rmvb:"icon_mv.gif",wmv:"icon_mv.gif",flv:"icon_mv.gif",swf:"icon_mv.gif",rm:"icon_mv.gif",exe:"icon_exe.gif",psd:"icon_psd.gif",txt:"icon_txt.gif",jpg:"icon_jpg.gif",png:"icon_jpg.gif",jpeg:"icon_jpg.gif",gif:"icon_jpg.gif",ico:"icon_jpg.gif",bmp:"icon_jpg.gif"};return c[b]?c[b]:c.txt}var b=this;return{commands:{insertfile:{execCommand:function(c,d){d=utils.isArray(d)?d:[d];var e,f,g,h,i="",j=b.getOpt("UEDITOR_HOME_URL"),k=j+("/"==j.substr(j.length-1)?"":"/")+"dialogs/attachment/fileTypeImages/";for(e=0;e'+h+"

    ";b.execCommand("insertHtml",i)}}}}}),UE.plugins.xssFilter=function(){function a(a){var b=a.tagName,d=a.attrs;return c.hasOwnProperty(b)?void UE.utils.each(d,function(d,e){c[b].indexOf(e)===-1&&a.setAttr(e)}):(a.parentNode.removeChild(a),!1)}var b=UEDITOR_CONFIG,c=b.whitList;c&&b.xssFilterRules&&(this.options.filterRules=function(){var b={};return UE.utils.each(c,function(c,d){b[d]=function(b){return a(b)}}),b}());var d=[];UE.utils.each(c,function(a,b){d.push(b)}),c&&b.inputXssFilter&&this.addInputRule(function(b){b.traversal(function(b){return"element"===b.type&&void a(b)})}),c&&b.outputXssFilter&&this.addOutputRule(function(b){b.traversal(function(b){return"element"===b.type&&void a(b)})})};var baidu=baidu||{};baidu.editor=baidu.editor||{},UE.ui=baidu.editor.ui={},function(){function a(){var a=document.getElementById("edui_fixedlayer");i.setViewportOffset(a,{left:0,top:0})}function b(b){d.on(window,"scroll",a),d.on(window,"resize",baidu.editor.utils.defer(a,0,!0))}var c=baidu.editor.browser,d=baidu.editor.dom.domUtils,e="$EDITORUI",f=window[e]={},g="ID"+e,h=0,i=baidu.editor.ui.uiUtils={uid:function(a){return a?a[g]||(a[g]=++h):++h},hook:function(a,b){var c;return a&&a._callbacks?c=a:(c=function(){var b;a&&(b=a.apply(this,arguments));for(var d=c._callbacks,e=d.length;e--;){var f=d[e].apply(this,arguments);void 0===b&&(b=f)}return b},c._callbacks=[]),c._callbacks.push(b),c},createElementByHtml:function(a){var b=document.createElement("div");return b.innerHTML=a,b=b.firstChild,b.parentNode.removeChild(b),b},getViewportElement:function(){return c.ie&&c.quirks?document.body:document.documentElement},getClientRect:function(a){var b;try{b=a.getBoundingClientRect()}catch(c){b={left:0,top:0,height:0,width:0}}for(var e,f={left:Math.round(b.left),top:Math.round(b.top),height:Math.round(b.bottom-b.top),width:Math.round(b.right-b.left)};(e=a.ownerDocument)!==document&&(a=d.getWindow(e).frameElement);)b=a.getBoundingClientRect(),f.left+=b.left,f.top+=b.top;return f.bottom=f.top+f.height,f.right=f.left+f.width,f},getViewportRect:function(){var a=i.getViewportElement(),b=0|(window.innerWidth||a.clientWidth),c=0|(window.innerHeight||a.clientHeight);return{left:0,top:0,height:c,width:b,bottom:c,right:b}},setViewportOffset:function(a,b){var c=i.getFixedLayer();a.parentNode===c?(a.style.left=b.left+"px",a.style.top=b.top+"px"):d.setViewportOffset(a,b)},getEventOffset:function(a){var b=a.target||a.srcElement,c=i.getClientRect(b),d=i.getViewportOffsetByEvent(a);return{left:d.left-c.left,top:d.top-c.top}},getViewportOffsetByEvent:function(a){var b=a.target||a.srcElement,c=d.getWindow(b).frameElement,e={left:a.clientX,top:a.clientY};if(c&&b.ownerDocument!==document){var f=i.getClientRect(c);e.left+=f.left,e.top+=f.top}return e},setGlobal:function(a,b){return f[a]=b,e+'["'+a+'"]'},unsetGlobal:function(a){delete f[a]},copyAttributes:function(a,b){for(var e=b.attributes,f=e.length;f--;){var g=e[f];"style"==g.nodeName||"class"==g.nodeName||c.ie&&!g.specified||a.setAttribute(g.nodeName,g.nodeValue)}b.className&&d.addClass(a,b.className),b.style.cssText&&(a.style.cssText+=";"+b.style.cssText)},removeStyle:function(a,b){if(a.style.removeProperty)a.style.removeProperty(b);else{if(!a.style.removeAttribute)throw"";a.style.removeAttribute(b)}},contains:function(a,b){return a&&b&&a!==b&&(a.contains?a.contains(b):16&a.compareDocumentPosition(b))},startDrag:function(a,b,c){function d(a){var c=a.clientX-g,d=a.clientY-h;b.ondragmove(c,d,a),a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function e(a){c.removeEventListener("mousemove",d,!0),c.removeEventListener("mouseup",e,!0),window.removeEventListener("mouseup",e,!0),b.ondragstop()}function f(){i.releaseCapture(),i.detachEvent("onmousemove",d),i.detachEvent("onmouseup",f),i.detachEvent("onlosecaptrue",f),b.ondragstop()}var c=c||document,g=a.clientX,h=a.clientY;if(c.addEventListener)c.addEventListener("mousemove",d,!0),c.addEventListener("mouseup",e,!0),window.addEventListener("mouseup",e,!0),a.preventDefault();else{var i=a.srcElement;i.setCapture(),i.attachEvent("onmousemove",d),i.attachEvent("onmouseup",f),i.attachEvent("onlosecaptrue",f),a.returnValue=!1}b.ondragstart()},getFixedLayer:function(){var d=document.getElementById("edui_fixedlayer");return null==d&&(d=document.createElement("div"),d.id="edui_fixedlayer",document.body.appendChild(d),c.ie&&c.version<=8?(d.style.position="absolute",b(),setTimeout(a)):d.style.position="fixed",d.style.left="0",d.style.top="0",d.style.width="0",d.style.height="0"),d},makeUnselectable:function(a){if(c.opera||c.ie&&c.version<9){if(a.unselectable="on",a.hasChildNodes())for(var b=0;b'}},a.inherits(c,b)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.uiUtils,e=baidu.editor.ui.Mask=function(a){this.initOptions(a),this.initUIBase()};e.prototype={getHtmlTpl:function(){return'
    '},postRender:function(){var a=this;b.on(window,"resize",function(){setTimeout(function(){a.isHidden()||a._fill()})})},show:function(a){this._fill(),this.getDom().style.display="",this.getDom().style.zIndex=a},hide:function(){this.getDom().style.display="none",this.getDom().style.zIndex=""},isHidden:function(){return"none"==this.getDom().style.display},_onMouseDown:function(){return!1},_onClick:function(a,b){this.fireEvent("click",a,b)},_fill:function(){var a=this.getDom(),b=d.getViewportRect();a.style.width=b.width+"px",a.style.height=b.height+"px"}},a.inherits(e,c)}(),function(){function a(a,b){for(var c=0;c
    '+this.getContentHtmlTpl()+"
    "},getContentHtmlTpl:function(){return this.content?"string"==typeof this.content?this.content:this.content.renderHtml():""},_UIBase_postRender:e.prototype.postRender,postRender:function(){if(this.content instanceof e&&this.content.postRender(),this.captureWheel&&!this.captured){this.captured=!0;var a=(document.documentElement.clientHeight||document.body.clientHeight)-80,b=this.getDom().offsetHeight,f=c.getClientRect(this.combox.getDom()).top,g=this.getDom("content"),h=this.getDom("body").getElementsByTagName("iframe"),i=this;for(h.length&&(h=h[0]);f+b>a;)b-=30;g.style.height=b+"px",h&&(h.style.height=b+"px"),window.XMLHttpRequest?d.on(g,"onmousewheel"in document.body?"mousewheel":"DOMMouseScroll",function(a){a.preventDefault?a.preventDefault():a.returnValue=!1,a.wheelDelta?g.scrollTop-=a.wheelDelta/120*60:g.scrollTop-=a.detail/-3*60}):d.on(this.getDom(),"mousewheel",function(a){a.returnValue=!1,i.getDom("content").scrollTop-=a.wheelDelta/120*60})}this.fireEvent("postRenderAfter"),this.hide(!0),this._UIBase_postRender()},_doAutoRender:function(){!this.getDom()&&this.autoRender&&this.render()},mesureSize:function(){var a=this.getDom("content");return c.getClientRect(a)},fitSize:function(){if(this.captureWheel&&this.sized)return this.__size;this.sized=!0;var a=this.getDom("body");a.style.width="",a.style.height="";var b=this.mesureSize();if(this.captureWheel){a.style.width=-(-20-b.width)+"px";var c=parseInt(this.getDom("content").style.height,10);!window.isNaN(c)&&(b.height=c)}else a.style.width=b.width+"px";return a.style.height=b.height+"px",this.__size=b,this.captureWheel&&(this.getDom("content").style.overflow="auto"),b},showAnchor:function(a,b){this.showAnchorRect(c.getClientRect(a),b)},showAnchorRect:function(a,b,e){this._doAutoRender();var f=c.getViewportRect();this.getDom().style.visibility="hidden",this._show();var g,i,j,k,l=this.fitSize();b?(g=this.canSideLeft&&a.right+l.width>f.right&&a.left>l.width,i=this.canSideUp&&a.top+l.height>f.bottom&&a.bottom>l.height,j=g?a.left-l.width:a.right,k=i?a.bottom-l.height:a.top):(g=this.canSideLeft&&a.right+l.width>f.right&&a.left>l.width,i=this.canSideUp&&a.top+l.height>f.bottom&&a.bottom>l.height,j=g?a.right-l.width:a.left,k=i?a.top-l.height:a.bottom);var m=this.getDom();c.setViewportOffset(m,{left:j,top:k}),d.removeClasses(m,h),m.className+=" "+h[2*(i?1:0)+(g?1:0)],this.editor&&(m.style.zIndex=1*this.editor.container.style.zIndex+10,baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=m.style.zIndex-1),this.getDom().style.visibility="visible"},showAt:function(a){var b=a.left,c=a.top,d={left:b,top:c,right:b,bottom:c,height:0,width:0};this.showAnchorRect(d,!1,!0)},_show:function(){if(this._hidden){var a=this.getDom();a.style.display="",this._hidden=!1,this.fireEvent("show")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender(),this._show()},hide:function(a){!this._hidden&&this.getDom()&&(this.getDom().style.display="none",this._hidden=!0,a||this.fireEvent("hide"))},queryAutoHide:function(a){return!a||!c.contains(this.getDom(),a)}},b.inherits(f,e),d.on(document,"mousedown",function(b){var c=b.target||b.srcElement;a(b,c)}),d.on(window,"scroll",function(b,c){a(b,c)})}(),function(){function a(a,b){for(var c='
    '+a+'
    ',d=0;d"+(60==d?'":"")+""),c+=d<70?'':"";return c+="
    '+b.getLang("themeColor")+'
    '+b.getLang("standardColor")+"
    =60?"border-width:1px;":d>=10&&d<20?"border-width:1px 1px 0 1px;":"border-width:0 1px 0 1px;")+'">
    "}var b=baidu.editor.utils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.ColorPicker=function(a){this.initOptions(a),this.noColorText=this.noColorText||this.editor.getLang("clearColor"),this.initUIBase()};d.prototype={getHtmlTpl:function(){return a(this.noColorText,this.editor)},_onTableClick:function(a){var b=a.target||a.srcElement,c=b.getAttribute("data-color");c&&this.fireEvent("pickcolor",c)},_onTableOver:function(a){var b=a.target||a.srcElement,c=b.getAttribute("data-color");c&&(this.getDom("preview").style.backgroundColor=c)},_onTableOut:function(){this.getDom("preview").style.backgroundColor=""},_onPickNoColor:function(){this.fireEvent("picknocolor")}},b.inherits(d,c);var e="ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,".split(",")}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.TablePicker=function(a){this.initOptions(a),this.initTablePicker()};d.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){return'
    '},_UIBase_render:c.prototype.render,render:function(a){this._UIBase_render(a),this.getDom("label").innerHTML="0"+this.editor.getLang("t_row")+" x 0"+this.editor.getLang("t_col")},_track:function(a,b){var c=this.getDom("overlay").style,d=this.lengthOfCellSide;c.width=a*d+"px",c.height=b*d+"px";var e=this.getDom("label");e.innerHTML=a+this.editor.getLang("t_col")+" x "+b+this.editor.getLang("t_row"),this.numCols=a,this.numRows=b},_onMouseOver:function(a,c){var d=a.relatedTarget||a.fromElement;b.contains(c,d)||c===d||(this.getDom("label").innerHTML="0"+this.editor.getLang("t_col")+" x 0"+this.editor.getLang("t_row"),this.getDom("overlay").style.visibility="")},_onMouseOut:function(a,c){var d=a.relatedTarget||a.toElement;b.contains(c,d)||c===d||(this.getDom("label").innerHTML="0"+this.editor.getLang("t_col")+" x 0"+this.editor.getLang("t_row"),this.getDom("overlay").style.visibility="hidden")},_onMouseMove:function(a,c){var d=(this.getDom("overlay").style,b.getEventOffset(a)),e=this.lengthOfCellSide,f=Math.ceil(d.left/e),g=Math.ceil(d.top/e);this._track(f,g)},_onClick:function(){this.fireEvent("picktable",this.numCols,this.numRows)}},a.inherits(d,c)}(),function(){var a=baidu.editor.browser,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.uiUtils,d='onmousedown="$$.Stateful_onMouseDown(event, this);" onmouseup="$$.Stateful_onMouseUp(event, this);"'+(a.ie?' onmouseenter="$$.Stateful_onMouseEnter(event, this);" onmouseleave="$$.Stateful_onMouseLeave(event, this);"':' onmouseover="$$.Stateful_onMouseOver(event, this);" onmouseout="$$.Stateful_onMouseOut(event, this);"');baidu.editor.ui.Stateful={alwalysHoverable:!1,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl,this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var a=this._Stateful_dGetHtmlTpl();return a.replace(/stateful/g,function(){return d})},Stateful_onMouseEnter:function(a,b){this.target=b,this.isDisabled()&&!this.alwalysHoverable||(this.addState("hover"),this.fireEvent("over"))},Stateful_onMouseLeave:function(a,b){this.isDisabled()&&!this.alwalysHoverable||(this.removeState("hover"),this.removeState("active"),this.fireEvent("out"))},Stateful_onMouseOver:function(a,b){var d=a.relatedTarget;c.contains(b,d)||b===d||this.Stateful_onMouseEnter(a,b)},Stateful_onMouseOut:function(a,b){var d=a.relatedTarget;c.contains(b,d)||b===d||this.Stateful_onMouseLeave(a,b)},Stateful_onMouseDown:function(a,b){this.isDisabled()||this.addState("active")},Stateful_onMouseUp:function(a,b){this.isDisabled()||this.removeState("active")},Stateful_postRender:function(){this.disabled&&!this.hasState("disabled")&&this.addState("disabled")},hasState:function(a){return b.hasClass(this.getStateDom(),"edui-state-"+a)},addState:function(a){this.hasState(a)||(this.getStateDom().className+=" edui-state-"+a)},removeState:function(a){this.hasState(a)&&b.removeClasses(this.getStateDom(),["edui-state-"+a])},getStateDom:function(){return this.getDom("state")},isChecked:function(){return this.hasState("checked")},setChecked:function(a){!this.isDisabled()&&a?this.addState("checked"):this.removeState("checked")},isDisabled:function(){return this.hasState("disabled")},setDisabled:function(a){a?(this.removeState("hover"),this.removeState("checked"),this.removeState("active"),this.addState("disabled")):this.removeState("disabled")}}}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Stateful,d=baidu.editor.ui.Button=function(a){if(a.name){var b=a.name,c=a.cssRules;a.className||(a.className="edui-for-"+b),a.cssRules=".edui-default .edui-for-"+b+" .edui-icon {"+c+"}"}this.initOptions(a),this.initButton()};d.prototype={uiName:"button",label:"",title:"",showIcon:!0,showText:!0,cssRules:"",initButton:function(){this.initUIBase(),this.Stateful_init(),this.cssRules&&a.cssRule("edui-customize-"+this.name+"-style",this.cssRules)},getHtmlTpl:function(){return'
    '+(this.showIcon?'
    ':"")+(this.showText?'
    '+this.label+"
    ":"")+"
    "},postRender:function(){this.Stateful_postRender(),this.setDisabled(this.disabled)},_onMouseDown:function(a){var b=a.target||a.srcElement,c=b&&b.tagName&&b.tagName.toLowerCase();if("input"==c||"object"==c||"object"==c)return!1},_onClick:function(){this.isDisabled()||this.fireEvent("click")},setTitle:function(a){var b=this.getDom("label");b.innerHTML=a}},a.inherits(d,b),a.extend(d.prototype,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=(baidu.editor.dom.domUtils,baidu.editor.ui.UIBase),d=baidu.editor.ui.Stateful,e=baidu.editor.ui.SplitButton=function(a){this.initOptions(a),this.initSplitButton()};e.prototype={popup:null,uiName:"splitbutton",title:"",initSplitButton:function(){this.initUIBase(),this.Stateful_init();if(null!=this.popup){var a=this.popup;this.popup=null,this.setPopup(a)}},_UIBase_postRender:c.prototype.postRender,postRender:function(){this.Stateful_postRender(),this._UIBase_postRender()},setPopup:function(c){this.popup!==c&&(null!=this.popup&&this.popup.dispose(),c.addListener("show",a.bind(this._onPopupShow,this)),c.addListener("hide",a.bind(this._onPopupHide,this)),c.addListener("postrender",a.bind(function(){c.getDom("body").appendChild(b.createElementByHtml('
    ')),c.getDom().className+=" "+this.className},this)),this.popup=c)},_onPopupShow:function(){this.addState("opened")},_onPopupHide:function(){this.removeState("opened")},getHtmlTpl:function(){return'
    '},showPopup:function(){var a=b.getClientRect(this.getDom());a.top-=this.popup.SHADOW_RADIUS,a.height+=this.popup.SHADOW_RADIUS,this.popup.showAnchorRect(a)},_onArrowClick:function(a,b){this.isDisabled()||this.showPopup()},_onButtonClick:function(){this.isDisabled()||this.fireEvent("buttonclick")}},a.inherits(e,c),a.extend(e.prototype,d,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.ColorPicker,d=baidu.editor.ui.Popup,e=baidu.editor.ui.SplitButton,f=baidu.editor.ui.ColorButton=function(a){this.initOptions(a),this.initColorButton()};f.prototype={initColorButton:function(){var a=this;this.popup=new d({content:new c({noColorText:a.editor.getLang("clearColor"),editor:a.editor,onpickcolor:function(b,c){a._onPickColor(c)},onpicknocolor:function(b,c){a._onPickNoColor(c)}}),editor:a.editor}),this.initSplitButton()},_SplitButton_postRender:e.prototype.postRender,postRender:function(){this._SplitButton_postRender(),this.getDom("button_body").appendChild(b.createElementByHtml('
    ')),this.getDom().className+=" edui-colorbutton"; +},setColor:function(a){this.getDom("colorlump").style.backgroundColor=a,this.color=a},_onPickColor:function(a){this.fireEvent("pickcolor",a)!==!1&&(this.setColor(a),this.popup.hide())},_onPickNoColor:function(a){this.fireEvent("picknocolor")!==!1&&this.popup.hide()}},a.inherits(f,e)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Popup,c=baidu.editor.ui.TablePicker,d=baidu.editor.ui.SplitButton,e=baidu.editor.ui.TableButton=function(a){this.initOptions(a),this.initTableButton()};e.prototype={initTableButton:function(){var a=this;this.popup=new b({content:new c({editor:a.editor,onpicktable:function(b,c,d){a._onPickTable(c,d)}}),editor:a.editor}),this.initSplitButton()},_onPickTable:function(a,b){this.fireEvent("picktable",a,b)!==!1&&this.popup.hide()}},a.inherits(e,d)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.AutoTypeSetPicker=function(a){this.initOptions(a),this.initAutoTypeSetPicker()};c.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var a=this.editor,b=a.options.autotypeset,c=a.getLang("autoTypeSet"),d="textAlignValue"+a.uid,e="imageBlockLineValue"+a.uid,f="symbolConverValue"+a.uid;return'
    "+c.mergeLine+'"+c.delLine+'
    "+c.removeFormat+'"+c.indent+'
    "+c.alignment+'"+a.getLang("justifyleft")+'"+a.getLang("justifycenter")+'"+a.getLang("justifyright")+'
    "+c.imageFloat+'"+a.getLang("default")+'"+a.getLang("justifyleft")+'"+a.getLang("justifycenter")+'"+a.getLang("justifyright")+'
    "+c.removeFontsize+'"+c.removeFontFamily+'
    "+c.removeHtml+'
    "+c.pasteFilter+'
    "+c.symbol+'"+c.bdc2sb+'"+c.tobdc+'
    "},_UIBase_render:b.prototype.render},a.inherits(c,b)}(),function(){function a(a){for(var c,d={},e=a.getDom(),f=a.editor.uid,g=null,h=null,i=domUtils.getElementsByTagName(e,"input"),j=i.length-1;c=i[j--];)if(g=c.getAttribute("type"),"checkbox"==g)if(h=c.getAttribute("name"),d[h]&&delete d[h],c.checked){var k=document.getElementById(h+"Value"+f);if(k){if(/input/gi.test(k.tagName))d[h]=k.value;else for(var l,m=k.getElementsByTagName("input"),n=m.length-1;l=m[n--];)if(l.checked){d[h]=l.value;break}}else d[h]=!0}else d[h]=!1;else d[c.getAttribute("value")]=c.checked;for(var o,p=domUtils.getElementsByTagName(e,"select"),j=0;o=p[j++];){var q=o.getAttribute("name");d[q]=d[q]?o.value:""}b.extend(a.editor.options.autotypeset,d),a.editor.setPreferences("autotypeset",d)}var b=baidu.editor.utils,c=baidu.editor.ui.Popup,d=baidu.editor.ui.AutoTypeSetPicker,e=baidu.editor.ui.SplitButton,f=baidu.editor.ui.AutoTypeSetButton=function(a){this.initOptions(a),this.initAutoTypeSetButton()};f.prototype={initAutoTypeSetButton:function(){var b=this;this.popup=new c({content:new d({editor:b.editor}),editor:b.editor,hide:function(){!this._hidden&&this.getDom()&&(a(this),this.getDom().style.display="none",this._hidden=!0,this.fireEvent("hide"))}});var e=0;this.popup.addListener("postRenderAfter",function(){var c=this;if(!e){var d=this.getDom(),f=d.getElementsByTagName("button")[0];f.onclick=function(){a(c),b.editor.execCommand("autotypeset"),c.hide()},domUtils.on(d,"click",function(d){var e=d.target||d.srcElement,f=b.editor.uid;if(e&&"INPUT"==e.tagName){if("imageBlockLine"==e.name||"textAlign"==e.name||"symbolConver"==e.name)for(var g=e.checked,h=document.getElementById(e.name+"Value"+f),i=h.getElementsByTagName("input"),j={imageBlockLine:"none",textAlign:"left",symbolConver:"tobdc"},k=0;k"),e.push('
    '),2===d&&e.push("");return'
    '+e.join("")+"
    "},getStateDom:function(){return this.target},_onClick:function(a){var c=a.target||a.srcElement;/icon/.test(c.className)&&(this.items[c.parentNode.getAttribute("index")].onclick(),b.postHide(a))},_UIBase_render:d.prototype.render},a.inherits(e,d),a.extend(e.prototype,c,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.Stateful,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.ui.PastePicker=function(a){this.initOptions(a),this.initPastePicker()};e.prototype={initPastePicker:function(){this.initUIBase(),this.Stateful_init()},getHtmlTpl:function(){return'
    '+this.editor.getLang("pasteOpt")+'
    '},getStateDom:function(){return this.target},format:function(a){this.editor.ui._isTransfer=!0,this.editor.fireEvent("pasteTransfer",a)},_onClick:function(a){var b=domUtils.getNextDomNode(a),d=c.getViewportRect().height,e=c.getClientRect(b);e.top+e.height>d?b.style.top=-e.height-a.offsetHeight+"px":b.style.top="",/hidden/gi.test(domUtils.getComputedStyle(b,"visibility"))?(b.style.visibility="visible",domUtils.addClass(a,"edui-state-opened")):(b.style.visibility="hidden",domUtils.removeClasses(a,"edui-state-opened"))},_UIBase_render:d.prototype.render},a.inherits(e,d),a.extend(e.prototype,b,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.Toolbar=function(a){this.initOptions(a),this.initToolbar()};d.prototype={items:null,initToolbar:function(){this.items=this.items||[],this.initUIBase()},add:function(a,b){void 0===b?this.items.push(a):this.items.splice(b,0,a)},getHtmlTpl:function(){for(var a=[],b=0;b'+a.join("")+""},postRender:function(){for(var a=this.getDom(),c=0;c
    '},postRender:function(){},queryAutoHide:function(){return!0}};h.prototype={items:null,uiName:"menu",initMenu:function(){this.items=this.items||[],this.initPopup(),this.initItems()},initItems:function(){for(var a=0;a'+a.join("")+""},_Popup_postRender:e.prototype.postRender,postRender:function(){for(var a=this,d=0;d
    '+this.renderLabelHtml()+"
    "},postRender:function(){var a=this;this.addListener("over",function(){a.ownerMenu.fireEvent("submenuover",a),a.subMenu&&a.delayShowSubMenu()}),this.subMenu&&(this.getDom().className+=" edui-hassubmenu",this.subMenu.render(),this.addListener("out",function(){a.delayHideSubMenu()}),this.subMenu.addListener("over",function(){clearTimeout(a._closingTimer),a._closingTimer=null,a.addState("opened")}),this.ownerMenu.addListener("hide",function(){a.hideSubMenu()}),this.ownerMenu.addListener("submenuover",function(b,c){c!==a&&a.delayHideSubMenu()}),this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide,this.subMenu.queryAutoHide=function(b){return(!b||!c.contains(a.getDom(),b))&&this._bakQueryAutoHide(b)}),this.getDom().style.tabIndex="-1",c.makeUnselectable(this.getDom()),this.Stateful_postRender()},delayShowSubMenu:function(){var a=this;a.isDisabled()||(a.addState("opened"),clearTimeout(a._showingTimer),clearTimeout(a._closingTimer),a._closingTimer=null,a._showingTimer=setTimeout(function(){a.showSubMenu()},250))},delayHideSubMenu:function(){var a=this;a.isDisabled()||(a.removeState("opened"),clearTimeout(a._showingTimer),a._closingTimer||(a._closingTimer=setTimeout(function(){a.hasState("opened")||a.hideSubMenu(),a._closingTimer=null},400)))},renderLabelHtml:function(){return'
    '+(this.label||"")+"
    "},getStateDom:function(){return this.getDom()},queryAutoHide:function(a){if(this.subMenu&&this.hasState("opened"))return this.subMenu.queryAutoHide(a)},_onClick:function(a,b){this.hasState("disabled")||this.fireEvent("click",a,b)!==!1&&(this.subMenu?this.showSubMenu():e.postHide(a))},showSubMenu:function(){var a=c.getClientRect(this.getDom());a.right-=5,a.left+=2,a.width-=7,a.top-=4,a.bottom+=4,a.height+=8,this.subMenu.showAnchorRect(a,!0,!0)},hideSubMenu:function(){this.subMenu.hide()}},a.inherits(j,d),a.extend(j.prototype,f,!0)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.uiUtils,c=baidu.editor.ui.Menu,d=baidu.editor.ui.SplitButton,e=baidu.editor.ui.Combox=function(a){this.initOptions(a),this.initCombox()};e.prototype={uiName:"combox",onbuttonclick:function(){this.showPopup()},initCombox:function(){var a=this;this.items=this.items||[];for(var b=0;bd.right&&(g=d.right-e.width);var h=a.top;h+e.height>d.bottom&&(h=d.bottom-e.height),c.style.left=Math.max(g,0)+"px",c.style.top=Math.max(h,0)+"px"},showAtCenter:function(){var a=f.getViewportRect();if(this.fullscreen){var b=this.getDom(),c=this.getDom("content");b.style.display="block";var d=UE.ui.uiUtils.getClientRect(b),g=UE.ui.uiUtils.getClientRect(c);b.style.left="-100000px",c.style.width=a.width-d.width+g.width+"px",c.style.height=a.height-d.height+g.height+"px",b.style.width=a.width+"px",b.style.height=a.height+"px",b.style.left=0,this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}},document.documentElement.style.overflowX="hidden",document.documentElement.style.overflowY="hidden",document.body.style.overflowX="hidden",document.body.style.overflowY="hidden"}else{this.getDom().style.display="";var h=this.fitSize(),i=0|this.getDom("titlebar").offsetHeight,j=a.width/2-h.width/2,k=a.height/2-(h.height-i)/2-i,l=this.getDom();this.safeSetOffset({left:Math.max(0|j,0),top:Math.max(0|k,0)}),e.hasClass(l,"edui-state-centered")||(l.className+=" edui-state-centered")}this._show()},getContentHtml:function(){var a="";return"string"==typeof this.content?a=this.content:this.iframeUrl&&(a=''),a},getHtmlTpl:function(){var a="";if(this.buttons){for(var b=[],c=0;c
    '+b.join("")+"
    "}return'
    '+(this.title||"")+"
    "+this.closeButton.renderHtml()+'
    '+(this.autoReset?"":this.getContentHtml())+"
    "+a+"
    "},postRender:function(){this.modalMask.getDom()||(this.modalMask.render(),this.modalMask.hide()),this.dragMask.getDom()||(this.dragMask.render(),this.dragMask.hide());var a=this;if(this.addListener("show",function(){a.modalMask.show(this.getDom().style.zIndex-2)}),this.addListener("hide",function(){a.modalMask.hide()}),this.buttons)for(var b=0;b',a.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*a.editor.container.style.zIndex+1))}}),this.onbuttonclick=function(){this.showPopup()},this.initSplitButton()}},a.inherits(d,c)}(),function(){function a(a){var b=a.target||a.srcElement,c=g.findParent(b,function(a){return g.hasClass(a,"edui-shortcutmenu")||g.hasClass(a,"edui-popup")},!0);if(!c)for(var d,e=0;d=h[e++];)d.hide()}var b,c=baidu.editor.ui,d=c.UIBase,e=c.uiUtils,f=baidu.editor.utils,g=baidu.editor.dom.domUtils,h=[],i=!1,j=c.ShortCutMenu=function(a){this.initOptions(a),this.initShortCutMenu()};j.postHide=a,j.prototype={isHidden:!0,SPACE:5,initShortCutMenu:function(){this.items=this.items||[],this.initUIBase(),this.initItems(),this.initEvent(),h.push(this)},initEvent:function(){var a=this,c=a.editor.document;g.on(c,"mousemove",function(c){if(a.isHidden===!1){if(a.getSubMenuMark()||"contextmenu"==a.eventType)return;var d=!0,e=a.getDom(),f=e.offsetWidth,g=e.offsetHeight,h=f/2+a.SPACE,i=g/2,j=Math.abs(c.screenX-a.left),k=Math.abs(c.screenY-a.top);clearTimeout(b),b=setTimeout(function(){k>0&&ki&&ki+70&&k0&&jh&&jh+70&&j'+a+""}},f.inherits(j,d),g.on(document,"mousedown",function(b){a(b)}),g.on(window,"scroll",function(b){a(b)})}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui.UIBase,c=baidu.editor.ui.Breakline=function(a){this.initOptions(a),this.initSeparator()};c.prototype={uiName:"Breakline",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return"
    "}},a.inherits(c,b)}(),function(){var a=baidu.editor.utils,b=baidu.editor.dom.domUtils,c=baidu.editor.ui.UIBase,d=baidu.editor.ui.Message=function(a){this.initOptions(a),this.initMessage()};d.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'
    ×
    '},reset:function(a){var b=this;a.keepshow||(clearTimeout(this.timer),b.timer=setTimeout(function(){b.hide()},a.timeout||4e3)),void 0!==a.content&&b.setContent(a.content),void 0!==a.type&&b.setType(a.type),b.show()},postRender:function(){var a=this,c=this.getDom("closer");c&&b.on(c,"click",function(){a.hide()})},setContent:function(a){this.getDom("content").innerHTML=a},setType:function(a){a=a||"info";var b=this.getDom("body");b.className=b.className.replace(/edui-message-type-[\w-]+/,"edui-message-type-"+a)},getContent:function(){return this.getDom("content").innerHTML},getType:function(){var a=this.getDom("body").match(/edui-message-type-([\w-]+)/);return a?a[1]:""},show:function(){this.getDom().style.display="block"},hide:function(){var a=this.getDom();a&&(a.style.display="none",a.parentNode&&a.parentNode.removeChild(a))}},a.inherits(d,c)}(),function(){var a=baidu.editor.utils,b=baidu.editor.ui,c=b.Dialog;b.buttons={},b.Dialog=function(a){var b=new c(a);return b.addListener("hide",function(){if(b.editor){var a=b.editor;try{if(browser.gecko){var c=a.window.scrollY,d=a.window.scrollX;a.body.focus(),a.window.scrollTo(d,c)}else a.focus()}catch(e){}}}),b};for(var d,e={anchor:"~/dialogs/anchor/anchor.html",insertimage:"~/dialogs/image/image.html",link:"~/dialogs/link/link.html",spechars:"~/dialogs/spechars/spechars.html",searchreplace:"~/dialogs/searchreplace/searchreplace.html",map:"~/dialogs/map/map.html",gmap:"~/dialogs/gmap/gmap.html",insertvideo:"~/dialogs/video/video.html",help:"~/dialogs/help/help.html",preview:"~/dialogs/preview/preview.html",emotion:"~/dialogs/emotion/emotion.html",wordimage:"~/dialogs/wordimage/wordimage.html",attachment:"~/dialogs/attachment/attachment.html",insertframe:"~/dialogs/insertframe/insertframe.html",edittip:"~/dialogs/table/edittip.html",edittable:"~/dialogs/table/edittable.html",edittd:"~/dialogs/table/edittd.html",webapp:"~/dialogs/webapp/webapp.html",snapscreen:"~/dialogs/snapscreen/snapscreen.html",scrawl:"~/dialogs/scrawl/scrawl.html",music:"~/dialogs/music/music.html",template:"~/dialogs/template/template.html",background:"~/dialogs/background/background.html",charts:"~/dialogs/charts/charts.html"},f=["undo","redo","formatmatch","bold","italic","underline","fontborder","touppercase","tolowercase","strikethrough","subscript","superscript","source","indent","outdent","blockquote","pasteplain","pagebreak","selectall","print","horizontal","removeformat","time","date","unlink","insertparagraphbeforetable","insertrow","insertcol","mergeright","mergedown","deleterow","deletecol","splittorows","splittocols","splittocells","mergecells","deletetable","drafts"],g=0;d=f[g++];)d=d.toLowerCase(),b[d]=function(a){return function(c){var d=new b.Button({className:"edui-for-"+a,title:c.options.labelMap[a]||c.getLang("labelMap."+a)||"",onclick:function(){c.execCommand(a)},theme:c.options.theme,showText:!1});return b.buttons[a]=d,c.addListener("selectionchange",function(b,e,f){var g=c.queryCommandState(a);g==-1?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(g))}),d}}(d);b.cleardoc=function(a){var c=new b.Button({className:"edui-for-cleardoc",title:a.options.labelMap.cleardoc||a.getLang("labelMap.cleardoc")||"",theme:a.options.theme,onclick:function(){confirm(a.getLang("confirmClear"))&&a.execCommand("cleardoc")}});return b.buttons.cleardoc=c,a.addListener("selectionchange",function(){c.setDisabled(a.queryCommandState("cleardoc")==-1)}),c};var h={justify:["left","right","center","justify"],imagefloat:["none","left","center","right"],directionality:["ltr","rtl"]};for(var i in h)!function(a,c){for(var d,e=0;d=c[e++];)!function(c){b[a.replace("float","")+c]=function(d){var e=new b.Button({ +className:"edui-for-"+a.replace("float","")+c,title:d.options.labelMap[a.replace("float","")+c]||d.getLang("labelMap."+a.replace("float","")+c)||"",theme:d.options.theme,onclick:function(){d.execCommand(a,c)}});return b.buttons[a]=e,d.addListener("selectionchange",function(b,f,g){e.setDisabled(d.queryCommandState(a)==-1),e.setChecked(d.queryCommandValue(a)==c&&!g)}),e}}(d)}(i,h[i]);for(var d,g=0;d=["backcolor","forecolor"][g++];)b[d]=function(a){return function(c){var d=new b.ColorButton({className:"edui-for-"+a,color:"default",title:c.options.labelMap[a]||c.getLang("labelMap."+a)||"",editor:c,onpickcolor:function(b,d){c.execCommand(a,d)},onpicknocolor:function(){c.execCommand(a,"default"),this.setColor("transparent"),this.color="default"},onbuttonclick:function(){c.execCommand(a,this.color)}});return b.buttons[a]=d,c.addListener("selectionchange",function(){d.setDisabled(c.queryCommandState(a)==-1)}),d}}(d);var j={noOk:["searchreplace","help","spechars","webapp","preview"],ok:["attachment","anchor","link","insertimage","map","gmap","insertframe","wordimage","insertvideo","insertframe","edittip","edittable","edittd","scrawl","template","music","background","charts"]};for(var i in j)!function(c,d){for(var f,g=0;f=d[g++];)browser.opera&&"searchreplace"===f||!function(d){b[d]=function(f,g,h){g=g||(f.options.iframeUrlMap||{})[d]||e[d],h=f.options.labelMap[d]||f.getLang("labelMap."+d)||"";var i;g&&(i=new b.Dialog(a.extend({iframeUrl:f.ui.mapUrl(g),editor:f,className:"edui-for-"+d,title:h,holdScroll:"insertimage"===d,fullscreen:/charts|preview/.test(d),closeDialog:f.getLang("closeDialog")},"ok"==c?{buttons:[{className:"edui-okbutton",label:f.getLang("ok"),editor:f,onclick:function(){i.close(!0)}},{className:"edui-cancelbutton",label:f.getLang("cancel"),editor:f,onclick:function(){i.close(!1)}}]}:{})),f.ui._dialogs[d+"Dialog"]=i);var j=new b.Button({className:"edui-for-"+d,title:h,onclick:function(){if(i)switch(d){case"wordimage":var a=f.execCommand("wordimage");a&&a.length&&(i.render(),i.open());break;case"scrawl":f.queryCommandState("scrawl")!=-1&&(i.render(),i.open());break;default:i.render(),i.open()}},theme:f.options.theme,disabled:"scrawl"==d&&f.queryCommandState("scrawl")==-1||"charts"==d});return b.buttons[d]=j,f.addListener("selectionchange",function(){var a={edittable:1};if(!(d in a)){var b=f.queryCommandState(d);j.getDom()&&(j.setDisabled(b==-1),j.setChecked(b))}}),j}}(f.toLowerCase())}(i,j[i]);b.snapscreen=function(a,c,d){d=a.options.labelMap.snapscreen||a.getLang("labelMap.snapscreen")||"";var f=new b.Button({className:"edui-for-snapscreen",title:d,onclick:function(){a.execCommand("snapscreen")},theme:a.options.theme});if(b.buttons.snapscreen=f,c=c||(a.options.iframeUrlMap||{}).snapscreen||e.snapscreen){var g=new b.Dialog({iframeUrl:a.ui.mapUrl(c),editor:a,className:"edui-for-snapscreen",title:d,buttons:[{className:"edui-okbutton",label:a.getLang("ok"),editor:a,onclick:function(){g.close(!0)}},{className:"edui-cancelbutton",label:a.getLang("cancel"),editor:a,onclick:function(){g.close(!1)}}]});g.render(),a.ui._dialogs.snapscreenDialog=g}return a.addListener("selectionchange",function(){f.setDisabled(a.queryCommandState("snapscreen")==-1)}),f},b.insertcode=function(c,d,e){d=c.options.insertcode||[],e=c.options.labelMap.insertcode||c.getLang("labelMap.insertcode")||"";var f=[];a.each(d,function(a,b){f.push({label:a,value:b,theme:c.options.theme,renderLabelHtml:function(){return'
    '+(this.label||"")+"
    "}})});var g=new b.Combox({editor:c,items:f,onselect:function(a,b){c.execCommand("insertcode",this.items[b].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:"edui-for-insertcode",indexByValue:function(a){if(a)for(var b,c=0;b=this.items[c];c++)if(b.value.indexOf(a)!=-1)return c;return-1}});return b.buttons.insertcode=g,c.addListener("selectionchange",function(a,b,d){if(!d){var f=c.queryCommandState("insertcode");if(f==-1)g.setDisabled(!0);else{g.setDisabled(!1);var h=c.queryCommandValue("insertcode");if(!h)return void g.setValue(e);h&&(h=h.replace(/['"]/g,"").split(",")[0]),g.setValue(h)}}}),g},b.fontfamily=function(c,d,e){if(d=c.options.fontfamily||[],e=c.options.labelMap.fontfamily||c.getLang("labelMap.fontfamily")||"",d.length){for(var f,g=0,h=[];f=d[g];g++){var i=c.getLang("fontfamily")[f.name]||"";!function(b,d){h.push({label:b,value:d,theme:c.options.theme,renderLabelHtml:function(){return'
    '+(this.label||"")+"
    "}})}(f.label||i,f.val)}var j=new b.Combox({editor:c,items:h,onselect:function(a,b){c.execCommand("FontFamily",this.items[b].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:"edui-for-fontfamily",indexByValue:function(a){if(a)for(var b,c=0;b=this.items[c];c++)if(b.value.indexOf(a)!=-1)return c;return-1}});return b.buttons.fontfamily=j,c.addListener("selectionchange",function(a,b,d){if(!d){var e=c.queryCommandState("FontFamily");if(e==-1)j.setDisabled(!0);else{j.setDisabled(!1);var f=c.queryCommandValue("FontFamily");f&&(f=f.replace(/['"]/g,"").split(",")[0]),j.setValue(f)}}}),j}},b.fontsize=function(a,c,d){if(d=a.options.labelMap.fontsize||a.getLang("labelMap.fontsize")||"",c=c||a.options.fontsize||[],c.length){for(var e=[],f=0;f'+(this.label||"")+""}})}var h=new b.Combox({editor:a,items:e,title:d,initValue:d,onselect:function(b,c){a.execCommand("FontSize",this.items[c].value)},onbuttonclick:function(){this.showPopup()},className:"edui-for-fontsize"});return b.buttons.fontsize=h,a.addListener("selectionchange",function(b,c,d){if(!d){var e=a.queryCommandState("FontSize");e==-1?h.setDisabled(!0):(h.setDisabled(!1),h.setValue(a.queryCommandValue("FontSize")))}}),h}},b.paragraph=function(c,d,e){if(e=c.options.labelMap.paragraph||c.getLang("labelMap.paragraph")||"",d=c.options.paragraph||[],!a.isEmptyObject(d)){var f=[];for(var g in d)f.push({value:g,label:d[g]||c.getLang("paragraph")[g],theme:c.options.theme,renderLabelHtml:function(){return'
    '+(this.label||"")+"
    "}});var h=new b.Combox({editor:c,items:f,title:e,initValue:e,className:"edui-for-paragraph",onselect:function(a,b){c.execCommand("Paragraph",this.items[b].value)},onbuttonclick:function(){this.showPopup()}});return b.buttons.paragraph=h,c.addListener("selectionchange",function(a,b,d){if(!d){var e=c.queryCommandState("Paragraph");if(e==-1)h.setDisabled(!0);else{h.setDisabled(!1);var f=c.queryCommandValue("Paragraph"),g=h.indexByValue(f);g!=-1?h.setValue(f):h.setValue(h.initValue)}}}),h}},b.customstyle=function(a){var c=a.options.customstyle||[],d=a.options.labelMap.customstyle||a.getLang("labelMap.customstyle")||"";if(c.length){for(var e,f=a.getLang("customstyle"),g=0,h=[];e=c[g++];)!function(b){var c={};c.label=b.label?b.label:f[b.name],c.style=b.style,c.className=b.className,c.tag=b.tag,h.push({label:c.label,value:c,theme:a.options.theme,renderLabelHtml:function(){return'
    <'+c.tag+" "+(c.className?' class="'+c.className+'"':"")+(c.style?' style="'+c.style+'"':"")+">"+c.label+"
    "}})}(e);var i=new b.Combox({editor:a,items:h,title:d,initValue:d,className:"edui-for-customstyle",onselect:function(b,c){a.execCommand("customstyle",this.items[c].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(a){for(var b,c=0;b=this.items[c++];)if(b.label==a)return c-1;return-1}});return b.buttons.customstyle=i,a.addListener("selectionchange",function(b,c,d){if(!d){var e=a.queryCommandState("customstyle");if(e==-1)i.setDisabled(!0);else{i.setDisabled(!1);var f=a.queryCommandValue("customstyle"),g=i.indexByValue(f);g!=-1?i.setValue(f):i.setValue(i.initValue)}}}),i}},b.inserttable=function(a,c,d){d=a.options.labelMap.inserttable||a.getLang("labelMap.inserttable")||"";var e=new b.TableButton({editor:a,title:d,className:"edui-for-inserttable",onpicktable:function(b,c,d){a.execCommand("InsertTable",{numRows:d,numCols:c,border:1})},onbuttonclick:function(){this.showPopup()}});return b.buttons.inserttable=e,a.addListener("selectionchange",function(){e.setDisabled(a.queryCommandState("inserttable")==-1)}),e},b.lineheight=function(a){var c=a.options.lineheight||[];if(c.length){for(var d,e=0,f=[];d=c[e++];)f.push({label:d,value:d,theme:a.options.theme,onclick:function(){a.execCommand("lineheight",this.value)}});var g=new b.MenuButton({editor:a,className:"edui-for-lineheight",title:a.options.labelMap.lineheight||a.getLang("labelMap.lineheight")||"",items:f,onbuttonclick:function(){var b=a.queryCommandValue("LineHeight")||this.value;a.execCommand("LineHeight",b)}});return b.buttons.lineheight=g,a.addListener("selectionchange",function(){var b=a.queryCommandState("LineHeight");if(b==-1)g.setDisabled(!0);else{g.setDisabled(!1);var c=a.queryCommandValue("LineHeight");c&&g.setValue((c+"").replace(/cm/,"")),g.setChecked(b)}}),g}};for(var k,l=["top","bottom"],m=0;k=l[m++];)!function(a){b["rowspacing"+a]=function(c){var d=c.options["rowspacing"+a]||[];if(!d.length)return null;for(var e,f=0,g=[];e=d[f++];)g.push({label:e,value:e,theme:c.options.theme,onclick:function(){c.execCommand("rowspacing",this.value,a)}});var h=new b.MenuButton({editor:c,className:"edui-for-rowspacing"+a,title:c.options.labelMap["rowspacing"+a]||c.getLang("labelMap.rowspacing"+a)||"",items:g,onbuttonclick:function(){var b=c.queryCommandValue("rowspacing",a)||this.value;c.execCommand("rowspacing",b,a)}});return b.buttons[a]=h,c.addListener("selectionchange",function(){var b=c.queryCommandState("rowspacing",a);if(b==-1)h.setDisabled(!0);else{h.setDisabled(!1);var d=c.queryCommandValue("rowspacing",a);d&&h.setValue((d+"").replace(/%/,"")),h.setChecked(b)}}),h}}(k);for(var n,o=["insertorderedlist","insertunorderedlist"],p=0;n=o[p++];)!function(a){b[a]=function(c){var d=c.options[a],e=function(){c.execCommand(a,this.value)},f=[];for(var g in d)f.push({label:d[g]||c.getLang()[a][g]||"",value:g,theme:c.options.theme,onclick:e});var h=new b.MenuButton({editor:c,className:"edui-for-"+a,title:c.getLang("labelMap."+a)||"",items:f,onbuttonclick:function(){var b=c.queryCommandValue(a)||this.value;c.execCommand(a,b)}});return b.buttons[a]=h,c.addListener("selectionchange",function(){var b=c.queryCommandState(a);if(b==-1)h.setDisabled(!0);else{h.setDisabled(!1);var d=c.queryCommandValue(a);h.setValue(d),h.setChecked(b)}}),h}}(n);b.fullscreen=function(a,c){c=a.options.labelMap.fullscreen||a.getLang("labelMap.fullscreen")||"";var d=new b.Button({className:"edui-for-fullscreen",title:c,theme:a.options.theme,onclick:function(){a.ui&&a.ui.setFullScreen(!a.ui.isFullScreen()),this.setChecked(a.ui.isFullScreen())}});return b.buttons.fullscreen=d,a.addListener("selectionchange",function(){var b=a.queryCommandState("fullscreen");d.setDisabled(b==-1),d.setChecked(a.ui.isFullScreen())}),d},b.emotion=function(a,c){var d="emotion",f=new b.MultiMenuPop({title:a.options.labelMap[d]||a.getLang("labelMap."+d)||"",editor:a,className:"edui-for-"+d,iframeUrl:a.ui.mapUrl(c||(a.options.iframeUrlMap||{})[d]||e[d])});return b.buttons[d]=f,a.addListener("selectionchange",function(){f.setDisabled(a.queryCommandState(d)==-1)}),f},b.autotypeset=function(a){var c=new b.AutoTypeSetButton({editor:a,title:a.options.labelMap.autotypeset||a.getLang("labelMap.autotypeset")||"",className:"edui-for-autotypeset",onbuttonclick:function(){a.execCommand("autotypeset")}});return b.buttons.autotypeset=c,a.addListener("selectionchange",function(){c.setDisabled(a.queryCommandState("autotypeset")==-1)}),c},b.simpleupload=function(a){var c="simpleupload",d=new b.Button({className:"edui-for-"+c,title:a.options.labelMap[c]||a.getLang("labelMap."+c)||"",onclick:function(){},theme:a.options.theme,showText:!1});return b.buttons[c]=d,a.addListener("ready",function(){var b=d.getDom("body"),c=b.children[0];a.fireEvent("simpleuploadbtnready",c)}),a.addListener("selectionchange",function(b,e,f){var g=a.queryCommandState(c);g==-1?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(g))}),d}}(),function(){function a(a){this.initOptions(a),this.initEditorUI()}var b=baidu.editor.utils,c=baidu.editor.ui.uiUtils,d=baidu.editor.ui.UIBase,e=baidu.editor.dom.domUtils,f=[];a.prototype={uiName:"editor",initEditorUI:function(){function a(a,b){a.setOpt({wordCount:!0,maximumWords:1e4,wordCountMsg:a.options.wordCountMsg||a.getLang("wordCountMsg"),wordOverFlowMsg:a.options.wordOverFlowMsg||a.getLang("wordOverFlowMsg")});var c=a.options,d=c.maximumWords,e=c.wordCountMsg,f=c.wordOverFlowMsg,g=b.getDom("wordcount");if(c.wordCount){var h=a.getContentLength(!0);h>d?(g.innerHTML=f,a.fireEvent("wordcountoverflow")):g.innerHTML=e.replace("{#leave}",d-h).replace("{#count}",h)}}this.editor.ui=this,this._dialogs={},this.initUIBase(),this._initToolbars();var b=this.editor,c=this;b.addListener("ready",function(){function d(){a(b,c),e.un(b.document,"click",arguments.callee)}b.getDialog=function(a){return b.ui._dialogs[a+"Dialog"]},e.on(b.window,"scroll",function(a){baidu.editor.ui.Popup.postHide(a)}),b.ui._actualFrameWidth=b.options.initialFrameWidth,UE.browser.ie&&6===UE.browser.version&&b.container.ownerDocument.execCommand("BackgroundImageCache",!1,!0),b.options.elementPathEnabled&&(b.ui.getDom("elementpath").innerHTML='
    '+b.getLang("elementPathTip")+":
    "),b.options.wordCount&&(e.on(b.document,"click",d),b.ui.getDom("wordcount").innerHTML=b.getLang("wordCountTip")),b.ui._scale(),b.options.scaleEnabled?(b.autoHeightEnabled&&b.disableAutoHeight(),c.enableScale()):c.disableScale(),b.options.elementPathEnabled||b.options.wordCount||b.options.scaleEnabled||(b.ui.getDom("elementpath").style.display="none",b.ui.getDom("wordcount").style.display="none",b.ui.getDom("scale").style.display="none"),b.selection.isFocus()&&b.fireEvent("selectionchange",!1,!0)}),b.addListener("mousedown",function(a,b){var c=b.target||b.srcElement;baidu.editor.ui.Popup.postHide(b,c),baidu.editor.ui.ShortCutMenu.postHide(b)}),b.addListener("delcells",function(){UE.ui.edittip&&new UE.ui.edittip(b),b.getDialog("edittip").open()});var d,f,g=!1;b.addListener("afterpaste",function(){b.queryCommandState("pasteplain")||(baidu.editor.ui.PastePicker&&(d=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:b}),editor:b,className:"edui-wordpastepop"}),d.render()),g=!0)}),b.addListener("afterinserthtml",function(){clearTimeout(f),f=setTimeout(function(){if(d&&(g||b.ui._isTransfer)){if(d.isHidden()){var a=e.createElement(b.document,"span",{style:"line-height:0px;",innerHTML:"\ufeff"}),c=b.selection.getRange();c.insertNode(a);var f=getDomNode(a,"firstChild","previousSibling");f&&d.showAnchor(3==f.nodeType?f.parentNode:f),e.remove(a)}else d.show();delete b.ui._isTransfer,g=!1}},200)}),b.addListener("contextmenu",function(a,b){baidu.editor.ui.Popup.postHide(b)}),b.addListener("keydown",function(a,b){d&&d.dispose(b);var c=b.keyCode||b.which;b.altKey&&90==c&&UE.ui.buttons.fullscreen.onclick()}),b.addListener("wordcount",function(b){a(this,c)}),b.addListener("selectionchange",function(){b.options.elementPathEnabled&&c[(b.queryCommandState("elementpath")==-1?"dis":"en")+"ableElementPath"](),b.options.scaleEnabled&&c[(b.queryCommandState("scale")==-1?"dis":"en")+"ableScale"]()});var h=new baidu.editor.ui.Popup({editor:b,content:"",className:"edui-bubble",_onEditButtonClick:function(){this.hide(),b.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(a){this.hide(),b.ui._dialogs[a]&&b.ui._dialogs[a].open()},_onImgSetFloat:function(a){this.hide(),b.execCommand("imagefloat",a)},_setIframeAlign:function(a){var b=h.anchorEl,c=b.cloneNode(!0);switch(a){case-2:c.setAttribute("align","");break;case-1:c.setAttribute("align","left");break;case 1:c.setAttribute("align","right")}b.parentNode.insertBefore(c,b),e.remove(b),h.anchorEl=c,h.showAnchor(h.anchorEl)},_updateIframe:function(){var a=b._iframe=h.anchorEl;e.hasClass(a,"ueditor_baidumap")?(b.selection.getRange().selectNode(a).select(),b.ui._dialogs.mapDialog.open(),h.hide()):(b.ui._dialogs.insertframeDialog.open(),h.hide())},_onRemoveButtonClick:function(a){b.execCommand(a),this.hide()},queryAutoHide:function(a){return a&&a.ownerDocument==b.document&&("img"==a.tagName.toLowerCase()||e.findParentByTagName(a,"a",!0))?a!==h.anchorEl:baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,a)}});h.render(),b.options.imagePopup&&(b.addListener("mouseover",function(a,c){c=c||window.event;var d=c.target||c.srcElement;if(b.ui._dialogs.insertframeDialog&&/iframe/gi.test(d.tagName)){var e=h.formatHtml(""+b.getLang("property")+': '+b.getLang("default")+'  '+b.getLang("justifyleft")+'  '+b.getLang("justifyright")+'   '+b.getLang("modify")+"");e?(h.getDom("content").innerHTML=e,h.anchorEl=d,h.showAnchor(h.anchorEl)):h.hide()}}),b.addListener("selectionchange",function(a,c){if(c){var d="",f="",g=b.selection.getRange().getClosedNode(),i=b.ui._dialogs;if(g&&"IMG"==g.tagName){var j="insertimageDialog";if(g.className.indexOf("edui-faked-video")==-1&&g.className.indexOf("edui-upload-video")==-1||(j="insertvideoDialog"),g.className.indexOf("edui-faked-webapp")!=-1&&(j="webappDialog"),g.src.indexOf("http://api.map.baidu.com")!=-1&&(j="mapDialog"),g.className.indexOf("edui-faked-music")!=-1&&(j="musicDialog"),g.src.indexOf("http://maps.google.com/maps/api/staticmap")!=-1&&(j="gmapDialog"),g.getAttribute("anchorname")&&(j="anchorDialog",d=h.formatHtml(""+b.getLang("property")+': '+b.getLang("modify")+"  "+b.getLang("delete")+"")),g.getAttribute("word_img")&&(b.word_img=[g.getAttribute("word_img")],j="wordimageDialog"),(e.hasClass(g,"loadingclass")||e.hasClass(g,"loaderrorclass"))&&(j=""),!i[j])return;f=""+b.getLang("property")+': '+b.getLang("default")+'  '+b.getLang("justifyleft")+'  '+b.getLang("justifyright")+'  '+b.getLang("justifycenter")+"  '+b.getLang("modify")+"",!d&&(d=h.formatHtml(f))}if(b.ui._dialogs.linkDialog){var k,l=b.queryCommandValue("link");if(l&&(k=l.getAttribute("_href")||l.getAttribute("href",2))){var m=k;k.length>30&&(m=k.substring(0,20)+"..."),d&&(d+='
    '),d+=h.formatHtml(""+b.getLang("anthorMsg")+': '+m+' '+b.getLang("modify")+' '+b.getLang("clear")+""),h.showAnchor(l)}}d?(h.getDom("content").innerHTML=d,h.anchorEl=g||l,h.showAnchor(h.anchorEl)):h.hide()}}))},_initToolbars:function(){for(var a=this.editor,c=this.toolbars||[],d=[],e=0;e
    '+(this.toolbars.length?'
    '+this.renderToolbarBoxHtml()+"
    ":"")+'
    '},showWordImageDialog:function(){this._dialogs.wordimageDialog.open()},renderToolbarBoxHtml:function(){for(var a=[],b=0;b'+c+"");b.innerHTML='
    '+this.editor.getLang("elementPathTip")+": "+d.join(" > ")+"
    "}else b.style.display="none"},disableElementPath:function(){var a=this.getDom("elementpath");a.innerHTML="",a.style.display="none",this.elementPathEnabled=!1},enableElementPath:function(){var a=this.getDom("elementpath");a.style.display="",this.elementPathEnabled=!0,this._updateElementPath()},_scale:function(){function a(){o=e.getXY(h),p||(p=g.options.minFrameHeight+j.offsetHeight+k.offsetHeight),m.style.cssText="position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:"+h.offsetWidth+"px;height:"+h.offsetHeight+"px;z-index:"+(g.options.zIndex+1),e.on(f,"mousemove",b),e.on(i,"mouseup",c),e.on(f,"mouseup",c)}function b(a){d();var b=a||window.event;r=b.pageX||f.documentElement.scrollLeft+b.clientX,s=b.pageY||f.documentElement.scrollTop+b.clientY,t=r-o.x,u=s-o.y,t>=q&&(n=!0,m.style.width=t+"px"),u>=p&&(n=!0,m.style.height=u+"px")}function c(){n&&(n=!1,g.ui._actualFrameWidth=m.offsetWidth-2,h.style.width=g.ui._actualFrameWidth+"px",g.setHeight(m.offsetHeight-k.offsetHeight-j.offsetHeight-2,!0)),m&&(m.style.display="none"),d(),e.un(f,"mousemove",b),e.un(i,"mouseup",c),e.un(f,"mouseup",c)}function d(){browser.ie?f.selection.clear():window.getSelection().removeAllRanges()}var f=document,g=this.editor,h=g.container,i=g.document,j=this.getDom("toolbarbox"),k=this.getDom("bottombar"),l=this.getDom("scale"),m=this.getDom("scalelayer"),n=!1,o=null,p=0,q=g.options.minFrameWidth,r=0,s=0,t=0,u=0,v=this;this.editor.addListener("fullscreenchanged",function(a,b){if(b)v.disableScale();else if(v.editor.options.scaleEnabled){v.enableScale();var c=v.editor.document.createElement("span");v.editor.body.appendChild(c),v.editor.body.style.height=Math.max(e.getXY(c).y,v.editor.iframe.offsetHeight-20)+"px",e.remove(c)}}),this.enableScale=function(){1!=g.queryCommandState("source")&&(l.style.display="",this.scaleEnabled=!0,e.on(l,"mousedown",a))},this.disableScale=function(){l.style.display="none",this.scaleEnabled=!1,e.un(l,"mousedown",a)}},isFullScreen:function(){return this._fullscreen},postRender:function(){d.prototype.postRender.call(this);for(var a=0;a[\n\r\t]+([ ]{4})+/g,">").replace(/[\n\r\t]+([ ]{4})+[\n\r\t]+<"),c.className&&(b.className=c.className),c.style.cssText&&(b.style.cssText=c.style.cssText),/textarea/i.test(c.tagName)?(d.textarea=c,d.textarea.style.display="none"):c.parentNode.removeChild(c),c.id&&(b.id=c.id,e.removeAttributes(c,"id")),c=b,c.innerHTML=""}e.addClass(c,"edui-"+d.options.theme),d.ui.render(c);var h=d.options;d.container=d.ui.getDom();for(var i,j=e.findParents(c,!0),k=[],l=0;i=j[l];l++)k[l]=i.style.display,i.style.display="block";if(h.initialFrameWidth)h.minFrameWidth=h.initialFrameWidth;else{h.minFrameWidth=h.initialFrameWidth=c.offsetWidth;var m=c.style.width;/%$/.test(m)&&(h.initialFrameWidth=m)}h.initialFrameHeight?h.minFrameHeight=h.initialFrameHeight:h.initialFrameHeight=h.minFrameHeight=c.offsetHeight;for(var i,l=0;i=j[l];l++)i.style.display=k[l];c.style.height&&(c.style.height=""),d.container.style.width=h.initialFrameWidth+(/%$/.test(h.initialFrameWidth)?"":"px"),d.container.style.zIndex=h.zIndex,f.call(d,d.ui.getDom("iframeholder")),d.fireEvent("afteruiready")}d.langIsReady?b():d.addListener("langReady",b)})},d},UE.getEditor=function(a,b){var c=g[a];return c||(c=g[a]=new UE.ui.Editor(b),c.render(a)),c},UE.delEditor=function(a){var b;(b=g[a])&&(b.key&&b.destroy(),delete g[a])},UE.registerUI=function(a,c,d,e){b.each(a.split(/\s+/),function(a){UE._customizeUI[a]={id:e,execFn:c,index:d}})}}(),UE.registerUI("message",function(a){function b(){var a=g.ui.getDom("toolbarbox");a&&(c.style.top=a.offsetHeight+3+"px"),c.style.zIndex=Math.max(g.options.zIndex,g.iframe.style.zIndex)+1}var c,d=baidu.editor.ui,e=d.Message,f=[],g=a;g.addListener("ready",function(){c=document.getElementById(g.ui.id+"_message_holder"),b(),setTimeout(function(){b()},500)}),g.addListener("showmessage",function(a,d){d=utils.isString(d)?{content:d}:d;var h=new e({timeout:d.timeout,type:d.type,content:d.content,keepshow:d.keepshow,editor:g}),i=d.id||"msg_"+(+new Date).toString(36);return h.render(c),f[i]=h,h.reset(d),b(),i}),g.addListener("updatemessage",function(a,b,d){d=utils.isString(d)?{content:d}:d;var e=f[b];e.render(c),e&&e.reset(d)}),g.addListener("hidemessage",function(a,b){var c=f[b];c&&c.hide()})}),UE.registerUI("autosave",function(a){var b=null,c=null;a.on("afterautosave",function(){clearTimeout(b),b=setTimeout(function(){c&&a.trigger("hidemessage",c),c=a.trigger("showmessage",{content:a.getLang("autosave.success"),timeout:2e3})},2e3)})})}(); \ No newline at end of file diff --git a/express/Campari-vue/www/public/ueditor/ueditor.config.js b/express/Campari-vue/www/public/ueditor/ueditor.config.js new file mode 100644 index 0000000..7003544 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/ueditor.config.js @@ -0,0 +1,497 @@ +/** + * ueditor完整配置项 + * 可以在这里配置整个编辑器的特性 + */ +/**************************提示******************************** + * 所有被注释的配置项均为UEditor默认值。 + * 修改默认配置请首先确保已经完全明确该参数的真实用途。 + * 主要有两种修改方案,一种是取消此处注释,然后修改成对应参数;另一种是在实例化编辑器时传入对应参数。 + * 当升级编辑器时,可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。 + **************************提示********************************/ + +(function () { + + /** + * 编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。 + * 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。 + * "相对于网站根目录的相对路径"也就是以斜杠开头的形如"/myProject/ueditor/"这样的路径。 + * 如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,此处的URL可能不适用于每个页面的编辑器。 + * 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。 + * window.UEDITOR_HOME_URL = "/xxxx/xxxx/"; + */ + var URL = window.UEDITOR_HOME_URL || getUEBasePath(); + + /** + * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。 + */ + window.UEDITOR_CONFIG = { + + //为编辑器实例添加一个路径,这个不能被注释 + UEDITOR_HOME_URL: URL + + // 服务器统一请求接口路径 + , serverUrl: URL + "ue" + + //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义 + , toolbars: [[ + 'fullscreen', 'source', '|', 'undo', 'redo', '|', + 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', + 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', + 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', + 'directionalityltr', 'directionalityrtl', 'indent', '|', + 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|', + 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', + 'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|', + 'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|', + 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|', + 'print', 'preview', 'searchreplace', 'drafts', 'help' + ]] + //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准 + //,labelMap:{ + // 'anchor':'', 'undo':'' + //} + + //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换,当然,前提条件是lang文件夹下存在对应的语言文件: + //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase() + //,lang:"zh-cn" + //,langPath:URL +"lang/" + + //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换,当然,前提条件是themes文件夹下存在对应的主题文件: + //现有如下皮肤:default + //,theme:'default' + //,themePath:URL +"themes/" + + //,zIndex : 900 //编辑器层级的基数,默认是900 + + //针对getAllHtml方法,会在对应的head标签中增加该编码设置。 + //,charset:"utf-8" + + //若实例化编辑器的页面手动修改的domain,此处需要设置为true + //,customDomain:false + + //常用配置项目 + //,isShow : true //默认显示编辑器 + + //,textarea:'editorValue' // 提交表单时,服务器获取编辑器提交内容的所用的参数,多实例时可以给容器name属性,会将name给定的值最为每个实例的键值,不用每次实例化的时候都设置这个值 + + //,initialContent:'欢迎使用ueditor!' //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子 + + //,autoClearinitialContent:true //是否自动清除编辑器初始内容,注意:如果focus属性设置为true,这个也为真,那么编辑器一上来就会触发导致初始化的内容看不到了 + + //,focus:false //初始化时,是否让编辑器获得焦点true或false + + //如果自定义,最好给p标签如下的行高,要不输入中文时,会有跳动感 + //,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等 + + //,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件 + + //indentValue + //首行缩进距离,默认是2em + //,indentValue:'2em' + + //,initialFrameWidth:1000 //初始化编辑器宽度,默认1000 + //,initialFrameHeight:320 //初始化编辑器高度,默认320 + + //,readonly : false //编辑器初始化结束后,编辑区域是否是只读的,默认是false + + //,autoClearEmptyNode : true //getContent时,是否删除空的inlineElement节点(包括嵌套的情况) + + //启用自动保存 + //,enableAutoSave: true + //自动保存间隔时间, 单位ms + //,saveInterval: 500 + + //,fullscreen : false //是否开启初始化时即全屏,默认关闭 + + //,imagePopup:true //图片操作的浮层开关,默认打开 + + //,autoSyncData:true //自动同步编辑器要提交的数据 + //,emotionLocalization:false //是否开启表情本地化,默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹 + + //粘贴只保留标签,去除标签所有属性 + //,retainOnlyLabelPasted: false + + //,pasteplain:false //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴 + //纯文本粘贴模式下的过滤规则 + //'filterTxtRules' : function(){ + // function transP(node){ + // node.tagName = 'p'; + // node.setStyle(); + // } + // return { + // //直接删除及其字节点内容 + // '-' : 'script style object iframe embed input select', + // 'p': {$:{}}, + // 'br':{$:{}}, + // 'div':{'$':{}}, + // 'li':{'$':{}}, + // 'caption':transP, + // 'th':transP, + // 'tr':transP, + // 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP, + // 'td':function(node){ + // //没有内容的td直接删掉 + // var txt = !!node.innerText(); + // if(txt){ + // node.parentNode.insertAfter(UE.uNode.createText('    '),node); + // } + // node.parentNode.removeChild(node,node.innerText()) + // } + // } + //}() + + //,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串 + + //insertorderedlist + //有序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准 + //,'insertorderedlist':{ + // //自定的样式 + // 'num':'1,2,3...', + // 'num1':'1),2),3)...', + // 'num2':'(1),(2),(3)...', + // 'cn':'一,二,三....', + // 'cn1':'一),二),三)....', + // 'cn2':'(一),(二),(三)....', + // //系统自带 + // 'decimal' : '' , //'1,2,3...' + // 'lower-alpha' : '' , // 'a,b,c...' + // 'lower-roman' : '' , //'i,ii,iii...' + // 'upper-alpha' : '' , lang //'A,B,C' + // 'upper-roman' : '' //'I,II,III...' + //} + + //insertunorderedlist + //无序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准 + //,insertunorderedlist : { //自定的样式 + // 'dash' :'— 破折号', //-破折号 + // 'dot':' 。 小圆圈', //系统自带 + // 'circle' : '', // '○ 小圆圈' + // 'disc' : '', // '● 小圆点' + // 'square' : '' //'■ 小方块' + //} + //,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍 + //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径 + //,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制 + + //,autoTransWordToList:false //禁止word中粘贴进来的列表自动变成列表标签 + + //fontfamily + //字体设置 label留空支持多语言自动切换,若配置,则以配置值为准 + //,'fontfamily':[ + // { label:'',name:'songti',val:'宋体,SimSun'}, + // { label:'',name:'kaiti',val:'楷体,楷体_GB2312, SimKai'}, + // { label:'',name:'yahei',val:'微软雅黑,Microsoft YaHei'}, + // { label:'',name:'heiti',val:'黑体, SimHei'}, + // { label:'',name:'lishu',val:'隶书, SimLi'}, + // { label:'',name:'andaleMono',val:'andale mono'}, + // { label:'',name:'arial',val:'arial, helvetica,sans-serif'}, + // { label:'',name:'arialBlack',val:'arial black,avant garde'}, + // { label:'',name:'comicSansMs',val:'comic sans ms'}, + // { label:'',name:'impact',val:'impact,chicago'}, + // { label:'',name:'timesNewRoman',val:'times new roman'} + //] + + //fontsize + //字号 + //,'fontsize':[10, 11, 12, 14, 16, 18, 20, 24, 36] + + //paragraph + //段落格式 值留空时支持多语言自动识别,若配置,则以配置值为准 + //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''} + + //rowspacingtop + //段间距 值和显示的名字相同 + //,'rowspacingtop':['5', '10', '15', '20', '25'] + + //rowspacingBottom + //段间距 值和显示的名字相同 + //,'rowspacingbottom':['5', '10', '15', '20', '25'] + + //lineheight + //行内间距 值和显示的名字相同 + //,'lineheight':['1', '1.5','1.75','2', '3', '4', '5'] + + //customstyle + //自定义样式,不支持国际化,此处配置值即可最后显示值 + //block的元素是依据设置段落的逻辑设置的,inline的元素依据BIU的逻辑设置 + //尽量使用一些常用的标签 + //参数说明 + //tag 使用的标签名字 + //label 显示的名字也是用来标识不同类型的标识符,注意这个值每个要不同, + //style 添加的样式 + //每一个对象就是一个自定义的样式 + //,'customstyle':[ + // {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'}, + // {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'}, + // {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'}, + // {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'} + //] + + //打开右键菜单功能 + //,enableContextMenu: true + //右键菜单的内容,可以参考plugins/contextmenu.js里边的默认菜单的例子,label留空支持国际化,否则以此配置为准 + //,contextMenu:[ + // { + // label:'', //显示的名称 + // cmdName:'selectall',//执行的command命令,当点击这个右键菜单时 + // //exec可选,有了exec就会在点击时执行这个function,优先级高于cmdName + // exec:function () { + // //this是当前编辑器的实例 + // //this.ui._dialogs['inserttableDialog'].open(); + // } + // } + //] + + //快捷菜单 + //,shortcutMenu:["fontfamily", "fontsize", "bold", "italic", "underline", "forecolor", "backcolor", "insertorderedlist", "insertunorderedlist"] + + //elementPathEnabled + //是否启用元素路径,默认是显示 + //,elementPathEnabled : true + + //wordCount + //,wordCount:true //是否开启字数统计 + //,maximumWords:10000 //允许的最大字符数 + //字数统计提示,{#count}代表当前字数,{#leave}代表还可以输入多少字符数,留空支持多语言自动切换,否则按此配置显示 + //,wordCountMsg:'' //当前已输入 {#count} 个字符,您还可以输入{#leave} 个字符 + //超出字数限制提示 留空支持多语言自动切换,否则按此配置显示 + //,wordOverFlowMsg:'' //你输入的字符个数已经超出最大允许值,服务器可能会拒绝保存! + + //tab + //点击tab键时移动的距离,tabSize倍数,tabNode什么字符做为单位 + //,tabSize:4 + //,tabNode:' ' + + //removeFormat + //清除格式时可以删除的标签和属性 + //removeForamtTags标签 + //,removeFormatTags:'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var' + //removeFormatAttributes属性 + //,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign' + + //undo + //可以最多回退的次数,默认20 + //,maxUndoCount:20 + //当输入的字符数超过该值时,保存一次现场 + //,maxInputCount:1 + + //autoHeightEnabled + // 是否自动长高,默认true + //,autoHeightEnabled:true + + //scaleEnabled + //是否可以拉伸长高,默认true(当开启时,自动长高失效) + //,scaleEnabled:false + //,minFrameWidth:800 //编辑器拖动时最小宽度,默认800 + //,minFrameHeight:220 //编辑器拖动时最小高度,默认220 + + //autoFloatEnabled + //是否保持toolbar的位置不动,默认true + //,autoFloatEnabled:true + //浮动时工具栏距离浏览器顶部的高度,用于某些具有固定头部的页面 + //,topOffset:30 + //编辑器底部距离工具栏高度(如果参数大于等于编辑器高度,则设置无效) + //,toolbarTopOffset:400 + + //设置远程图片是否抓取到本地保存 + //,catchRemoteImageEnable: true //设置是否抓取远程图片 + + //pageBreakTag + //分页标识符,默认是_ueditor_page_break_tag_ + //,pageBreakTag:'_ueditor_page_break_tag_' + + //autotypeset + //自动排版参数 + //,autotypeset: { + // mergeEmptyline: true, //合并空行 + // removeClass: true, //去掉冗余的class + // removeEmptyline: false, //去掉空行 + // textAlign:"left", //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版 + // imageBlockLine: 'center', //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版 + // pasteFilter: false, //根据规则过滤没事粘贴进来的内容 + // clearFontSize: false, //去掉所有的内嵌字号,使用编辑器默认的字号 + // clearFontFamily: false, //去掉所有的内嵌字体,使用编辑器默认的字体 + // removeEmptyNode: false, // 去掉空节点 + // //可以去掉的标签 + // removeTagNames: {标签名字:1}, + // indent: false, // 行首缩进 + // indentValue : '2em', //行首缩进的大小 + // bdc2sb: false, + // tobdc: false + //} + + //tableDragable + //表格是否可以拖拽 + //,tableDragable: true + + + + //sourceEditor + //源码的查看方式,codemirror 是代码高亮,textarea是文本框,默认是codemirror + //注意默认codemirror只能在ie8+和非ie中使用 + //,sourceEditor:"codemirror" + //如果sourceEditor是codemirror,还用配置一下两个参数 + //codeMirrorJsUrl js加载的路径,默认是 URL + "third-party/codemirror/codemirror.js" + //,codeMirrorJsUrl:URL + "third-party/codemirror/codemirror.js" + //codeMirrorCssUrl css加载的路径,默认是 URL + "third-party/codemirror/codemirror.css" + //,codeMirrorCssUrl:URL + "third-party/codemirror/codemirror.css" + //编辑器初始化完成后是否进入源码模式,默认为否。 + //,sourceEditorFirst:false + + //iframeUrlMap + //dialog内容的路径 ~会被替换成URL,垓属性一旦打开,将覆盖所有的dialog的默认路径 + //,iframeUrlMap:{ + // 'anchor':'~/dialogs/anchor/anchor.html', + //} + + //allowLinkProtocol 允许的链接地址,有这些前缀的链接地址不会自动添加http + //, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:'] + + //webAppKey 百度应用的APIkey,每个站长必须首先去百度官网注册一个key后方能正常使用app功能,注册介绍,http://app.baidu.com/static/cms/getapikey.html + //, webAppKey: "" + + //默认过滤规则相关配置项目 + //,disabledTableInTable:true //禁止表格嵌套 + //,allowDivTransToP:true //允许进入编辑器的div标签自动变成p标签 + //,rgb2Hex:true //默认产出的数据中的color自动从rgb格式变成16进制格式 + + // xss 过滤是否开启,inserthtml等操作 + ,xssFilterRules: true + //input xss过滤 + ,inputXssFilter: true + //output xss过滤 + ,outputXssFilter: true + // xss过滤白名单 名单来源: https://raw.githubusercontent.com/leizongmin/js-xss/master/lib/default.js + ,whitList: { + a: ['target', 'href', 'title', 'class', 'style'], + abbr: ['title', 'class', 'style'], + address: ['class', 'style'], + area: ['shape', 'coords', 'href', 'alt'], + article: [], + aside: [], + audio: ['autoplay', 'controls', 'loop', 'preload', 'src', 'class', 'style'], + b: ['class', 'style'], + bdi: ['dir'], + bdo: ['dir'], + big: [], + blockquote: ['cite', 'class', 'style'], + br: [], + caption: ['class', 'style'], + center: [], + cite: [], + code: ['class', 'style'], + col: ['align', 'valign', 'span', 'width', 'class', 'style'], + colgroup: ['align', 'valign', 'span', 'width', 'class', 'style'], + dd: ['class', 'style'], + del: ['datetime'], + details: ['open'], + div: ['class', 'style'], + dl: ['class', 'style'], + dt: ['class', 'style'], + em: ['class', 'style'], + font: ['color', 'size', 'face'], + footer: [], + h1: ['class', 'style'], + h2: ['class', 'style'], + h3: ['class', 'style'], + h4: ['class', 'style'], + h5: ['class', 'style'], + h6: ['class', 'style'], + header: [], + hr: [], + i: ['class', 'style'], + img: ['src', 'alt', 'title', 'width', 'height', 'id', '_src', 'loadingclass', 'class', 'data-latex'], + ins: ['datetime'], + li: ['class', 'style'], + mark: [], + nav: [], + ol: ['class', 'style'], + p: ['class', 'style'], + pre: ['class', 'style'], + s: [], + section:[], + small: [], + span: ['class', 'style'], + sub: ['class', 'style'], + sup: ['class', 'style'], + strong: ['class', 'style'], + table: ['width', 'border', 'align', 'valign', 'class', 'style'], + tbody: ['align', 'valign', 'class', 'style'], + td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'], + tfoot: ['align', 'valign', 'class', 'style'], + th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'], + thead: ['align', 'valign', 'class', 'style'], + tr: ['rowspan', 'align', 'valign', 'class', 'style'], + tt: [], + u: [], + ul: ['class', 'style'], + video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width', 'class', 'style'] + } + }; + + function getUEBasePath(docUrl, confUrl) { + + return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath()); + + } + + function getConfigFilePath() { + + var configPath = document.getElementsByTagName('script'); + + return configPath[ configPath.length - 1 ].src; + + } + + function getBasePath(docUrl, confUrl) { + + var basePath = confUrl; + + + if (/^(\/|\\\\)/.test(confUrl)) { + + basePath = /^.+?\w(\/|\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\/|\\\\)/, ''); + + } else if (!/^[a-z]+:/i.test(confUrl)) { + + docUrl = docUrl.split("#")[0].split("?")[0].replace(/[^\\\/]+$/, ''); + + basePath = docUrl + "" + confUrl; + + } + + return optimizationPath(basePath); + + } + + function optimizationPath(path) { + + var protocol = /^[a-z]+:\/\//.exec(path)[ 0 ], + tmp = null, + res = []; + + path = path.replace(protocol, "").split("?")[0].split("#")[0]; + + path = path.replace(/\\/g, '/').split(/\//); + + path[ path.length - 1 ] = ""; + + while (path.length) { + + if (( tmp = path.shift() ) === "..") { + res.pop(); + } else if (tmp !== ".") { + res.push(tmp); + } + + } + + return protocol + res.join("/"); + + } + + window.UE = { + getUEBasePath: getUEBasePath + }; + +})(); diff --git a/express/Campari-vue/www/public/ueditor/ueditor.parse.js b/express/Campari-vue/www/public/ueditor/ueditor.parse.js new file mode 100644 index 0000000..84421f2 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/ueditor.parse.js @@ -0,0 +1,1022 @@ +/*! + * UEditor + * version: ueditor + * build: Wed Aug 10 2016 11:06:16 GMT+0800 (CST) + */ + +(function(){ + +(function(){ + UE = window.UE || {}; + var isIE = !!window.ActiveXObject; + //定义utils工具 + var utils = { + removeLastbs : function(url){ + return url.replace(/\/$/,'') + }, + extend : function(t,s){ + var a = arguments, + notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false, + len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length; + for (var i = 1; i < len; i++) { + var x = a[i]; + for (var k in x) { + if (!notCover || !t.hasOwnProperty(k)) { + t[k] = x[k]; + } + } + } + return t; + }, + isIE : isIE, + cssRule : isIE ? function(key,style,doc){ + var indexList,index; + doc = doc || document; + if(doc.indexList){ + indexList = doc.indexList; + }else{ + indexList = doc.indexList = {}; + } + var sheetStyle; + if(!indexList[key]){ + if(style === undefined){ + return '' + } + sheetStyle = doc.createStyleSheet('',index = doc.styleSheets.length); + indexList[key] = index; + }else{ + sheetStyle = doc.styleSheets[indexList[key]]; + } + if(style === undefined){ + return sheetStyle.cssText + } + sheetStyle.cssText = sheetStyle.cssText + '\n' + (style || '') + } : function(key,style,doc){ + doc = doc || document; + var head = doc.getElementsByTagName('head')[0],node; + if(!(node = doc.getElementById(key))){ + if(style === undefined){ + return '' + } + node = doc.createElement('style'); + node.id = key; + head.appendChild(node) + } + if(style === undefined){ + return node.innerHTML + } + if(style !== ''){ + node.innerHTML = node.innerHTML + '\n' + style; + }else{ + head.removeChild(node) + } + }, + domReady : function (onready) { + var doc = window.document; + if (doc.readyState === "complete") { + onready(); + }else{ + if (isIE) { + (function () { + if (doc.isReady) return; + try { + doc.documentElement.doScroll("left"); + } catch (error) { + setTimeout(arguments.callee, 0); + return; + } + onready(); + })(); + window.attachEvent('onload', function(){ + onready() + }); + } else { + doc.addEventListener("DOMContentLoaded", function () { + doc.removeEventListener("DOMContentLoaded", arguments.callee, false); + onready(); + }, false); + window.addEventListener('load', function(){onready()}, false); + } + } + + }, + each : function(obj, iterator, context) { + if (obj == null) return; + if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + if(iterator.call(context, obj[i], i, obj) === false) + return false; + } + } else { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + if(iterator.call(context, obj[key], key, obj) === false) + return false; + } + } + } + }, + inArray : function(arr,item){ + var index = -1; + this.each(arr,function(v,i){ + if(v === item){ + index = i; + return false; + } + }); + return index; + }, + pushItem : function(arr,item){ + if(this.inArray(arr,item)==-1){ + arr.push(item) + } + }, + trim: function (str) { + return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, ''); + }, + indexOf: function (array, item, start) { + var index = -1; + start = this.isNumber(start) ? start : 0; + this.each(array, function (v, i) { + if (i >= start && v === item) { + index = i; + return false; + } + }); + return index; + }, + hasClass: function (element, className) { + className = className.replace(/(^[ ]+)|([ ]+$)/g, '').replace(/[ ]{2,}/g, ' ').split(' '); + for (var i = 0, ci, cls = element.className; ci = className[i++];) { + if (!new RegExp('\\b' + ci + '\\b', 'i').test(cls)) { + return false; + } + } + return i - 1 == className.length; + }, + addClass:function (elm, classNames) { + if(!elm)return; + classNames = this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' '); + for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){ + if(!new RegExp('\\b' + ci + '\\b').test(cls)){ + cls += ' ' + ci; + } + } + elm.className = utils.trim(cls); + }, + removeClass:function (elm, classNames) { + classNames = this.isArray(classNames) ? classNames : + this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' '); + for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){ + cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'') + } + cls = this.trim(cls).replace(/[ ]{2,}/g,' '); + elm.className = cls; + !cls && elm.removeAttribute('className'); + }, + on: function (element, type, handler) { + var types = this.isArray(type) ? type : type.split(/\s+/), + k = types.length; + if (k) while (k--) { + type = types[k]; + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + if (!handler._d) { + handler._d = { + els : [] + }; + } + var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element); + if (!handler._d[key] || index == -1) { + if(index == -1){ + handler._d.els.push(element); + } + if(!handler._d[key]){ + handler._d[key] = function (evt) { + return handler.call(evt.srcElement, evt || window.event); + }; + } + + + element.attachEvent('on' + type, handler._d[key]); + } + } + } + element = null; + }, + off: function (element, type, handler) { + var types = this.isArray(type) ? type : type.split(/\s+/), + k = types.length; + if (k) while (k--) { + type = types[k]; + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + var key = type + handler.toString(); + try{ + element.detachEvent('on' + type, handler._d ? handler._d[key] : handler); + }catch(e){} + if (handler._d && handler._d[key]) { + var index = utils.indexOf(handler._d.els,element); + if(index!=-1){ + handler._d.els.splice(index,1); + } + handler._d.els.length == 0 && delete handler._d[key]; + } + } + } + }, + loadFile : function () { + var tmpList = []; + function getItem(doc,obj){ + try{ + for(var i= 0,ci;ci=tmpList[i++];){ + if(ci.doc === doc && ci.url == (obj.src || obj.href)){ + return ci; + } + } + }catch(e){ + return null; + } + + } + return function (doc, obj, fn) { + var item = getItem(doc,obj); + if (item) { + if(item.ready){ + fn && fn(); + }else{ + item.funs.push(fn) + } + return; + } + tmpList.push({ + doc:doc, + url:obj.src||obj.href, + funs:[fn] + }); + if (!doc.body) { + var html = []; + for(var p in obj){ + if(p == 'tag')continue; + html.push(p + '="' + obj[p] + '"') + } + doc.write('<' + obj.tag + ' ' + html.join(' ') + ' >'); + return; + } + if (obj.id && doc.getElementById(obj.id)) { + return; + } + var element = doc.createElement(obj.tag); + delete obj.tag; + for (var p in obj) { + element.setAttribute(p, obj[p]); + } + element.onload = element.onreadystatechange = function () { + if (!this.readyState || /loaded|complete/.test(this.readyState)) { + item = getItem(doc,obj); + if (item.funs.length > 0) { + item.ready = 1; + for (var fi; fi = item.funs.pop();) { + fi(); + } + } + element.onload = element.onreadystatechange = null; + } + }; + element.onerror = function(){ + throw Error('The load '+(obj.href||obj.src)+' fails,check the url') + }; + doc.getElementsByTagName("head")[0].appendChild(element); + } + }() + }; + utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object','Boolean'], function (v) { + utils['is' + v] = function (obj) { + return Object.prototype.toString.apply(obj) == '[object ' + v + ']'; + } + }); + var parselist = {}; + UE.parse = { + register : function(parseName,fn){ + parselist[parseName] = fn; + }, + load : function(opt){ + utils.each(parselist,function(v){ + v.call(opt,utils); + }) + } + }; + uParse = function(selector,opt){ + utils.domReady(function(){ + var contents; + if(document.querySelectorAll){ + contents = document.querySelectorAll(selector) + }else{ + if(/^#/.test(selector)){ + contents = [document.getElementById(selector.replace(/^#/,''))] + }else if(/^\./.test(selector)){ + var contents = []; + utils.each(document.getElementsByTagName('*'),function(node){ + if(node.className && new RegExp('\\b' + selector.replace(/^\./,'') + '\\b','i').test(node.className)){ + contents.push(node) + } + }) + }else{ + contents = document.getElementsByTagName(selector) + } + } + utils.each(contents,function(v){ + UE.parse.load(utils.extend({root:v,selector:selector},opt)) + }) + }) + } +})(); + +UE.parse.register('insertcode',function(utils){ + var pres = this.root.getElementsByTagName('pre'); + if(pres.length){ + if(typeof XRegExp == "undefined"){ + var jsurl,cssurl; + if(this.rootPath !== undefined){ + jsurl = utils.removeLastbs(this.rootPath) + '/third-party/SyntaxHighlighter/shCore.js'; + cssurl = utils.removeLastbs(this.rootPath) + '/third-party/SyntaxHighlighter/shCoreDefault.css'; + }else{ + jsurl = this.highlightJsUrl; + cssurl = this.highlightCssUrl; + } + utils.loadFile(document,{ + id : "syntaxhighlighter_css", + tag : "link", + rel : "stylesheet", + type : "text/css", + href : cssurl + }); + utils.loadFile(document,{ + id : "syntaxhighlighter_js", + src : jsurl, + tag : "script", + type : "text/javascript", + defer : "defer" + },function(){ + utils.each(pres,function(pi){ + if(pi && /brush/i.test(pi.className)){ + SyntaxHighlighter.highlight(pi); + } + }); + }); + }else{ + utils.each(pres,function(pi){ + if(pi && /brush/i.test(pi.className)){ + SyntaxHighlighter.highlight(pi); + } + }); + } + } + +}); +UE.parse.register('table', function (utils) { + var me = this, + root = this.root, + tables = root.getElementsByTagName('table'); + if (tables.length) { + var selector = this.selector; + //追加默认的表格样式 + utils.cssRule('table', + selector + ' table.noBorderTable td,' + + selector + ' table.noBorderTable th,' + + selector + ' table.noBorderTable caption{border:1px dashed #ddd !important}' + + selector + ' table.sortEnabled tr.firstRow th,' + selector + ' table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;' + + 'background-position: center right; background-image:url(' + this.rootPath + 'themes/default/images/sortable.png);}' + + selector + ' table.sortEnabled tr.firstRow th:hover,' + selector + ' table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}' + + selector + ' table{margin-bottom:10px;border-collapse:collapse;display:table;}' + + selector + ' td,' + selector + ' th{ background:white; padding: 5px 10px;border: 1px solid #DDD;}' + + selector + ' caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' + + selector + ' th{border-top:1px solid #BBB;background:#F7F7F7;}' + + selector + ' table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}' + + selector + ' tr.ue-table-interlace-color-single td{ background: #fcfcfc; }' + + selector + ' tr.ue-table-interlace-color-double td{ background: #f7faff; }' + + selector + ' td p{margin:0;padding:0;}', + document); + //填充空的单元格 + + utils.each('td th caption'.split(' '), function (tag) { + var cells = root.getElementsByTagName(tag); + cells.length && utils.each(cells, function (node) { + if (!node.firstChild) { + node.innerHTML = ' '; + + } + }) + }); + + //表格可排序 + var tables = root.getElementsByTagName('table'); + utils.each(tables, function (table) { + if (/\bsortEnabled\b/.test(table.className)) { + utils.on(table, 'click', function(e){ + var target = e.target || e.srcElement, + cell = findParentByTagName(target, ['td', 'th']); + var table = findParentByTagName(target, 'table'), + colIndex = utils.indexOf(table.rows[0].cells, cell), + sortType = table.getAttribute('data-sort-type'); + if(colIndex != -1) { + sortTable(table, colIndex, me.tableSortCompareFn || sortType); + updateTable(table); + } + }); + } + }); + + //按照标签名查找父节点 + function findParentByTagName(target, tagNames) { + var i, current = target; + tagNames = utils.isArray(tagNames) ? tagNames:[tagNames]; + while(current){ + for(i = 0;i < tagNames.length; i++) { + if(current.tagName == tagNames[i].toUpperCase()) return current; + } + current = current.parentNode; + } + return null; + } + //表格排序 + function sortTable(table, sortByCellIndex, compareFn) { + var rows = table.rows, + trArray = [], + flag = rows[0].cells[0].tagName === "TH", + lastRowIndex = 0; + + for (var i = 0,len = rows.length; i < len; i++) { + trArray[i] = rows[i]; + } + + var Fn = { + 'reversecurrent': function(td1,td2){ + return 1; + }, + 'orderbyasc': function(td1,td2){ + var value1 = td1.innerText||td1.textContent, + value2 = td2.innerText||td2.textContent; + return value1.localeCompare(value2); + }, + 'reversebyasc': function(td1,td2){ + var value1 = td1.innerHTML, + value2 = td2.innerHTML; + return value2.localeCompare(value1); + }, + 'orderbynum': function(td1,td2){ + var value1 = td1[utils.isIE ? 'innerText':'textContent'].match(/\d+/), + value2 = td2[utils.isIE ? 'innerText':'textContent'].match(/\d+/); + if(value1) value1 = +value1[0]; + if(value2) value2 = +value2[0]; + return (value1||0) - (value2||0); + }, + 'reversebynum': function(td1,td2){ + var value1 = td1[utils.isIE ? 'innerText':'textContent'].match(/\d+/), + value2 = td2[utils.isIE ? 'innerText':'textContent'].match(/\d+/); + if(value1) value1 = +value1[0]; + if(value2) value2 = +value2[0]; + return (value2||0) - (value1||0); + } + }; + + //对表格设置排序的标记data-sort-type + table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn:''); + + //th不参与排序 + flag && trArray.splice(0, 1); + trArray = sort(trArray,function (tr1, tr2) { + var result; + if (compareFn && typeof compareFn === "function") { + result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } else if (compareFn && typeof compareFn === "number") { + result = 1; + } else if (compareFn && typeof compareFn === "string" && Fn[compareFn]) { + result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } else { + result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); + } + return result; + }); + var fragment = table.ownerDocument.createDocumentFragment(); + for (var j = 0, len = trArray.length; j < len; j++) { + fragment.appendChild(trArray[j]); + } + var tbody = table.getElementsByTagName("tbody")[0]; + if(!lastRowIndex){ + tbody.appendChild(fragment); + }else{ + tbody.insertBefore(fragment,rows[lastRowIndex- range.endRowIndex + range.beginRowIndex - 1]) + } + } + //冒泡排序 + function sort(array, compareFn){ + compareFn = compareFn || function(item1, item2){ return item1.localeCompare(item2);}; + for(var i= 0,len = array.length; i 0){ + var t = array[i]; + array[i] = array[j]; + array[j] = t; + } + } + } + return array; + } + //更新表格 + function updateTable(table) { + //给第一行设置firstRow的样式名称,在排序图标的样式上使用到 + if(!utils.hasClass(table.rows[0], "firstRow")) { + for(var i = 1; i< table.rows.length; i++) { + utils.removeClass(table.rows[i], "firstRow"); + } + utils.addClass(table.rows[0], "firstRow"); + } + } + } +}); +UE.parse.register('charts',function( utils ){ + + utils.cssRule('chartsContainerHeight','.edui-chart-container { height:'+(this.chartContainerHeight||300)+'px}'); + var resourceRoot = this.rootPath, + containers = this.root, + sources = null; + + //不存在指定的根路径, 则直接退出 + if ( !resourceRoot ) { + return; + } + + if ( sources = parseSources() ) { + + loadResources(); + + } + + + function parseSources () { + + if ( !containers ) { + return null; + } + + return extractChartData( containers ); + + } + + /** + * 提取数据 + */ + function extractChartData ( rootNode ) { + + var data = [], + tables = rootNode.getElementsByTagName( "table" ); + + for ( var i = 0, tableNode; tableNode = tables[ i ]; i++ ) { + + if ( tableNode.getAttribute( "data-chart" ) !== null ) { + + data.push( formatData( tableNode ) ); + + } + + } + + return data.length ? data : null; + + } + + function formatData ( tableNode ) { + + var meta = tableNode.getAttribute( "data-chart" ), + metaConfig = {}, + data = []; + + //提取table数据 + for ( var i = 0, row; row = tableNode.rows[ i ]; i++ ) { + + var rowData = []; + + for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) { + + var value = ( cell.innerText || cell.textContent || '' ); + rowData.push( cell.tagName == 'TH' ? value:(value | 0) ); + + } + + data.push( rowData ); + + } + + //解析元信息 + meta = meta.split( ";" ); + for ( var i = 0, metaData; metaData = meta[ i ]; i++ ) { + + metaData = metaData.split( ":" ); + metaConfig[ metaData[ 0 ] ] = metaData[ 1 ]; + + } + + + return { + table: tableNode, + meta: metaConfig, + data: data + }; + + } + + //加载资源 + function loadResources () { + + loadJQuery(); + + } + + function loadJQuery () { + + //不存在jquery, 则加载jquery + if ( !window.jQuery ) { + + utils.loadFile(document,{ + src : resourceRoot + "/third-party/jquery-1.10.2.min.js", + tag : "script", + type : "text/javascript", + defer : "defer" + },function(){ + + loadHighcharts(); + + }); + + } else { + + loadHighcharts(); + + } + + } + + function loadHighcharts () { + + //不存在Highcharts, 则加载Highcharts + if ( !window.Highcharts ) { + + utils.loadFile(document,{ + src : resourceRoot + "/third-party/highcharts/highcharts.js", + tag : "script", + type : "text/javascript", + defer : "defer" + },function(){ + + loadTypeConfig(); + + }); + + } else { + + loadTypeConfig(); + + } + + } + + //加载图表差异化配置文件 + function loadTypeConfig () { + + utils.loadFile(document,{ + src : resourceRoot + "/dialogs/charts/chart.config.js", + tag : "script", + type : "text/javascript", + defer : "defer" + },function(){ + + render(); + + }); + + } + + //渲染图表 + function render () { + + var config = null, + chartConfig = null, + container = null; + + for ( var i = 0, len = sources.length; i < len; i++ ) { + + config = sources[ i ]; + + chartConfig = analysisConfig( config ); + + container = createContainer( config.table ); + + renderChart( container, typeConfig[ config.meta.chartType ], chartConfig ); + + } + + + } + + /** + * 渲染图表 + * @param container 图表容器节点对象 + * @param typeConfig 图表类型配置 + * @param config 图表通用配置 + * */ + function renderChart ( container, typeConfig, config ) { + + + $( container ).highcharts( $.extend( {}, typeConfig, { + + credits: { + enabled: false + }, + exporting: { + enabled: false + }, + title: { + text: config.title, + x: -20 //center + }, + subtitle: { + text: config.subTitle, + x: -20 + }, + xAxis: { + title: { + text: config.xTitle + }, + categories: config.categories + }, + yAxis: { + title: { + text: config.yTitle + }, + plotLines: [{ + value: 0, + width: 1, + color: '#808080' + }] + }, + tooltip: { + enabled: true, + valueSuffix: config.suffix + }, + legend: { + layout: 'vertical', + align: 'right', + verticalAlign: 'middle', + borderWidth: 1 + }, + series: config.series + + } )); + + } + + /** + * 创建图表的容器 + * 新创建的容器会替换掉对应的table对象 + * */ + function createContainer ( tableNode ) { + + var container = document.createElement( "div" ); + container.className = "edui-chart-container"; + + tableNode.parentNode.replaceChild( container, tableNode ); + + return container; + + } + + //根据config解析出正确的类别和图表数据信息 + function analysisConfig ( config ) { + + var series = [], + //数据类别 + categories = [], + result = [], + data = config.data, + meta = config.meta; + + //数据对齐方式为相反的方式, 需要反转数据 + if ( meta.dataFormat != "1" ) { + + for ( var i = 0, len = data.length; i < len ; i++ ) { + + for ( var j = 0, jlen = data[ i ].length; j < jlen; j++ ) { + + if ( !result[ j ] ) { + result[ j ] = []; + } + + result[ j ][ i ] = data[ i ][ j ]; + + } + + } + + data = result; + + } + + result = {}; + + //普通图表 + if ( meta.chartType != typeConfig.length - 1 ) { + + categories = data[ 0 ].slice( 1 ); + + for ( var i = 1, curData; curData = data[ i ]; i++ ) { + series.push( { + name: curData[ 0 ], + data: curData.slice( 1 ) + } ); + } + + result.series = series; + result.categories = categories; + result.title = meta.title; + result.subTitle = meta.subTitle; + result.xTitle = meta.xTitle; + result.yTitle = meta.yTitle; + result.suffix = meta.suffix; + + } else { + + var curData = []; + + for ( var i = 1, len = data[ 0 ].length; i < len; i++ ) { + + curData.push( [ data[ 0 ][ i ], data[ 1 ][ i ] | 0 ] ); + + } + + //饼图 + series[ 0 ] = { + type: 'pie', + name: meta.tip, + data: curData + }; + + result.series = series; + result.title = meta.title; + result.suffix = meta.suffix; + + } + + return result; + + } + +}); +UE.parse.register('background', function (utils) { + var me = this, + root = me.root, + p = root.getElementsByTagName('p'), + styles; + + for (var i = 0,ci; ci = p[i++];) { + styles = ci.getAttribute('data-background'); + if (styles){ + ci.parentNode.removeChild(ci); + } + } + + //追加默认的表格样式 + styles && utils.cssRule('ueditor_background', me.selector + '{' + styles + '}', document); +}); +UE.parse.register('list',function(utils){ + var customCss = [], + customStyle = { + 'cn' : 'cn-1-', + 'cn1' : 'cn-2-', + 'cn2' : 'cn-3-', + 'num' : 'num-1-', + 'num1' : 'num-2-', + 'num2' : 'num-3-', + 'dash' : 'dash', + 'dot' : 'dot' + }; + + + utils.extend(this,{ + liiconpath : 'http://bs.baidu.com/listicon/', + listDefaultPaddingLeft : '20' + }); + + var root = this.root, + ols = root.getElementsByTagName('ol'), + uls = root.getElementsByTagName('ul'), + selector = this.selector; + + if(ols.length){ + applyStyle.call(this,ols); + } + + if(uls.length){ + applyStyle.call(this,uls); + } + + if(ols.length || uls.length){ + customCss.push(selector +' .list-paddingleft-1{padding-left:0}'); + customCss.push(selector +' .list-paddingleft-2{padding-left:'+ this.listDefaultPaddingLeft+'px}'); + customCss.push(selector +' .list-paddingleft-3{padding-left:'+ this.listDefaultPaddingLeft*2+'px}'); + + utils.cssRule('list', selector +' ol,'+selector +' ul{margin:0;padding:0;}li{clear:both;}'+customCss.join('\n'), document); + } + function applyStyle(nodes){ + var T = this; + utils.each(nodes,function(list){ + if(list.className && /custom_/i.test(list.className)){ + var listStyle = list.className.match(/custom_(\w+)/)[1]; + if(listStyle == 'dash' || listStyle == 'dot'){ + utils.pushItem(customCss,selector +' li.list-' + customStyle[listStyle] + '{background-image:url(' + T.liiconpath +customStyle[listStyle]+'.gif)}'); + utils.pushItem(customCss,selector +' ul.custom_'+listStyle+'{list-style:none;} '+ selector +' ul.custom_'+listStyle+' li{background-position:0 3px;background-repeat:no-repeat}'); + + }else{ + var index = 1; + utils.each(list.childNodes,function(li){ + if(li.tagName == 'LI'){ + utils.pushItem(customCss,selector + ' li.list-' + customStyle[listStyle] + index + '{background-image:url(' + T.liiconpath + 'list-'+customStyle[listStyle] +index + '.gif)}'); + index++; + } + }); + utils.pushItem(customCss,selector + ' ol.custom_'+listStyle+'{list-style:none;}'+selector+' ol.custom_'+listStyle+' li{background-position:0 3px;background-repeat:no-repeat}'); + } + switch(listStyle){ + case 'cn': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:25px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:55px}'); + break; + case 'cn1': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:30px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:55px}'); + break; + case 'cn2': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:40px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:55px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:68px}'); + break; + case 'num': + case 'num1': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:25px}'); + break; + case 'num2': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:35px}'); + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}'); + break; + case 'dash': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft{padding-left:35px}'); + break; + case 'dot': + utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft{padding-left:20px}'); + } + } + }); + } + + +}); +UE.parse.register('vedio',function(utils){ + var video = this.root.getElementsByTagName('video'), + audio = this.root.getElementsByTagName('audio'); + + document.createElement('video');document.createElement('audio'); + if(video.length || audio.length){ + var sourcePath = utils.removeLastbs(this.rootPath), + jsurl = sourcePath + '/third-party/video-js/video.js', + cssurl = sourcePath + '/third-party/video-js/video-js.min.css', + swfUrl = sourcePath + '/third-party/video-js/video-js.swf'; + + if(window.videojs) { + videojs.autoSetup(); + } else { + utils.loadFile(document,{ + id : "video_css", + tag : "link", + rel : "stylesheet", + type : "text/css", + href : cssurl + }); + utils.loadFile(document,{ + id : "video_js", + src : jsurl, + tag : "script", + type : "text/javascript" + },function(){ + videojs.options.flash.swf = swfUrl; + videojs.autoSetup(); + }); + } + + } +}); + +})(); diff --git a/express/Campari-vue/www/public/ueditor/ueditor.parse.min.js b/express/Campari-vue/www/public/ueditor/ueditor.parse.min.js new file mode 100644 index 0000000..9fe9a08 --- /dev/null +++ b/express/Campari-vue/www/public/ueditor/ueditor.parse.min.js @@ -0,0 +1,7 @@ +/*! + * UEditor + * version: ueditor + * build: Wed Aug 10 2016 11:06:19 GMT+0800 (CST) + */ + +!function(){!function(){UE=window.UE||{};var a=!!window.ActiveXObject,b={removeLastbs:function(a){return a.replace(/\/$/,"")},extend:function(a,b){for(var c=arguments,d=!!this.isBoolean(c[c.length-1])&&c[c.length-1],e=this.isBoolean(c[c.length-1])?c.length-1:c.length,f=1;f=c&&a===b)return d=e,!1}),d},hasClass:function(a,b){b=b.replace(/(^[ ]+)|([ ]+$)/g,"").replace(/[ ]{2,}/g," ").split(" ");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp("\\b"+c+"\\b","i").test(e))return!1;return d-1==b.length},addClass:function(a,c){if(a){c=this.trim(c).replace(/[ ]{2,}/g," ").split(" ");for(var d,e=0,f=a.className;d=c[e++];)new RegExp("\\b"+d+"\\b").test(f)||(f+=" "+d);a.className=b.trim(f)}},removeClass:function(a,b){b=this.isArray(b)?b:this.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp("\\b"+c+"\\b"),"");e=this.trim(e).replace(/[ ]{2,}/g," "),a.className=e,!e&&a.removeAttribute("className")},on:function(a,c,d){var e=this.isArray(c)?c:c.split(/\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.addEventListener)a.addEventListener(c,d,!1);else{d._d||(d._d={els:[]});var g=c+d.toString(),h=b.indexOf(d._d.els,a);d._d[g]&&h!=-1||(h==-1&&d._d.els.push(a),d._d[g]||(d._d[g]=function(a){return d.call(a.srcElement,a||window.event)}),a.attachEvent("on"+c,d._d[g]))}a=null},off:function(a,c,d){var e=this.isArray(c)?c:c.split(/\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.removeEventListener)a.removeEventListener(c,d,!1);else{var g=c+d.toString();try{a.detachEvent("on"+c,d._d?d._d[g]:d)}catch(h){}if(d._d&&d._d[g]){var i=b.indexOf(d._d.els,a);i!=-1&&d._d.els.splice(i,1),0==d._d.els.length&&delete d._d[g]}}},loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)"tag"!=h&&g.push(h+'="'+d[h]+'"');return void c.write("<"+d.tag+" "+g.join(" ")+" >")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error("The load "+(d.href||d.src)+" fails,check the url")},c.getElementsByTagName("head")[0].appendChild(i)}}}()};b.each(["String","Function","Array","Number","RegExp","Object","Boolean"],function(a){b["is"+a]=function(b){return Object.prototype.toString.apply(b)=="[object "+a+"]"}});var c={};UE.parse={register:function(a,b){c[a]=b},load:function(a){b.each(c,function(c){c.call(a,b)})}},uParse=function(a,c){b.domReady(function(){var d;if(document.querySelectorAll)d=document.querySelectorAll(a);else if(/^#/.test(a))d=[document.getElementById(a.replace(/^#/,""))];else if(/^\./.test(a)){var d=[];b.each(document.getElementsByTagName("*"),function(b){b.className&&new RegExp("\\b"+a.replace(/^\./,"")+"\\b","i").test(b.className)&&d.push(b)})}else d=document.getElementsByTagName(a);b.each(d,function(d){UE.parse.load(b.extend({root:d,selector:a},c))})})}}(),UE.parse.register("insertcode",function(a){var b=this.root.getElementsByTagName("pre");if(b.length)if("undefined"==typeof XRegExp){var c,d;void 0!==this.rootPath?(c=a.removeLastbs(this.rootPath)+"/third-party/SyntaxHighlighter/shCore.js",d=a.removeLastbs(this.rootPath)+"/third-party/SyntaxHighlighter/shCoreDefault.css"):(c=this.highlightJsUrl,d=this.highlightCssUrl),a.loadFile(document,{id:"syntaxhighlighter_css",tag:"link",rel:"stylesheet",type:"text/css",href:d}),a.loadFile(document,{id:"syntaxhighlighter_js",src:c,tag:"script",type:"text/javascript",defer:"defer"},function(){a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})})}else a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})}),UE.parse.register("table",function(a){function b(b,c){var d,e=b;for(c=a.isArray(c)?c:[c];e;){for(d=0;d0){var g=a[c];a[c]=a[e],a[e]=g}return a}function e(b){if(!a.hasClass(b.rows[0],"firstRow")){for(var c=1;c { + res.render('welcome') +}) +sys.get('/login', (req, res, next) => { + res.render('login', {title: '管理系统'}) +}) +sys.post('/login', (req, res, next) => { + res.redirect(303, '/sys') +}) +sys.get('/user-list', (req, res, next) => { + const list = [ + { + no: 1, + nick: 'Jack', + phone: '13045454563', + date: Date.now(), + }, + { + no: 2, + nick: 'Tome', + phone: '1395444463', + date: Date.now(), + }, + { + no: 3, + nick: 'Kitty', + phone: '1356424563', + date: Date.now(), + }, + { + no: 4, + nick: 'Sim', + phone: '1743554563', + date: Date.now(), + } + ] + res.render('user-list', {list: list}) +}) + +sys.get('/product-list', (req, res, next) => { + + let start = req.query.page || 1 + let itemsPerPage = 4 + + console.log(req.query) + + let conditions = {} + if (req.query.category && req.query.key) { + conditions = {[req.query.category]: new RegExp(req.query.key, 'i')} + } + res.locals.category = req.query.category || '' + res.locals.key = req.query.key || '' + + Product.count(conditions, (err, count) => { + res.locals.count = count + res.locals.current = start + let _temp = count / itemsPerPage + if (_temp === parseInt(_temp, 10)) { + res.locals.totalPage = _temp + } else { + res.locals.totalPage = _temp + 1 + } + }) + + Product.find(conditions) + .sort('-date') + .skip((start - 1) * itemsPerPage) + .limit(itemsPerPage) + .select('-_id -__v') + .exec((err, docs) => { + if (!err) { + res.render('product-list', {list: docs}) + } + }) +}) +sys.post('/product-list/del', (req, res, next) => { + console.log(req.query) + Product.findOneAndRemove({sku: req.query.sku}, (err) => { + console.log(err) + }) + res.json({code: 1}) +}) + +sys.get('/add-product', (req, res, next) => { + if (req.query.sku) { + Product.findOne({sku: req.query.sku}) + .select('-_id -__v') + .lean() + .exec((err, doc) => { + if (!err) { + res.locals.pro = doc + res.render('add-product', {scrollAble: true}) + } + }) + } else { + res.locals.pro = {} + res.render('add-product', {scrollAble: true}) + } +}) +// 添加商品 +sys.post('/add-product', + upload.pro.array('pics', {maxCount: 5}), + (req, res, next) => { + let pics = [] + _.forEach(req.files, file => { + pics.push(file.filename) + }) + console.log(req.body) + console.log(pics) + + new Product(_.assign({ + date: +Date.now() + }, req.body, {pics: pics, introduce: req.body.editorValue})) + .computed() + .save(err => { + if (err) { + + } else { + // res.redirect(303, '/sys/add-product') + res.json({code: 1}) + } + }) +}) +// 更新商品 +sys.post('/update-product', upload.pro.array('pics', {maxCount: 5}), (req, res, next) => { + +}) + + +module.exports = sys \ No newline at end of file diff --git a/express/Campari-vue/www/sys/ueditor.js b/express/Campari-vue/www/sys/ueditor.js new file mode 100644 index 0000000..ed96b72 --- /dev/null +++ b/express/Campari-vue/www/sys/ueditor.js @@ -0,0 +1,25 @@ +/** + * Created by 斌 on 2017/4/24. + */ +const sys = require('express').Router() +const ueditor = require('ueditor') +const path = require('path') + +sys.use('/ue', + ueditor(path.resolve(__dirname, '../public/'), (req, res, next) => { + if (req.query.action === 'uploadimage') { + let imgUrl = '/images/detail/' + res.ue_up(imgUrl) + res.setHeader('Content-Type', 'text/html') + } + else if (req.query.action === 'listimage') { + let dirUrl = '/images/detail' + res.ue_list(dirUrl) + } + else { + res.setHeader('Content-Type', 'application/json') + res.redirect('/ueditor/jsp/config.json') + } + })) + +module.exports = sys; \ No newline at end of file diff --git a/express/Campari-vue/www/views/add-product.jade b/express/Campari-vue/www/views/add-product.jade new file mode 100644 index 0000000..ee1b181 --- /dev/null +++ b/express/Campari-vue/www/views/add-product.jade @@ -0,0 +1,81 @@ +// + Created by 斌 on 2017/4/24. + +extends layout2 +block content2 + script(src='/ueditor/ueditor.config.js') + script(src='/ueditor/ueditor.all.min.js') + script(src='/ueditor/lang/zh-cn/zh-cn.js') + script(src='/javascripts/fine-uploader.min.js') + include component/fine-tpl + div.table-box.add-box + form(role='form', action=!pro.sku ? '/sys/add-product' : '/sys/update-product', method='post', enctype='multipart/form-data').form-horizontal.post-form + div.form-group + label.control-label.col-sm-2 sku + div.col-sm-8 + input.form-control(type='text', required, name='sku', value=!pro.sku ? '' : '#{pro.sku}', readonly=!!pro.sku) + div.form-group + label.control-label.col-sm-2 商品中文名称 + div.col-sm-8 + input.form-control(type='text', required, name='CNName', value=!pro.CNName ? '' : '#{pro.CNName}') + div.form-group + label.control-label.col-sm-2 商品英文名称 + div.col-sm-8 + input.form-control(type='text', required, name='ENName', value=!pro.ENName ? '' : '#{pro.CNName}') + div.form-group + label.control-label.col-sm-2 商品酒精度 + div.col-sm-8 + input.form-control(type='number', required, name='alcoholic', value=!pro.alcoholic ? '' : '#{pro.alcoholic}') + div.form-group + label.control-label.col-sm-2 商品产地 + div.col-sm-8 + input.form-control(type='text', required, name='origin', value=!pro.origin ? '' : '#{pro.origin}') + div.form-group + label.control-label.col-sm-2 商品净含量 + div.col-sm-8 + input.form-control(type='number', required, name='content', value=!pro.content ? '' : '#{pro.content}') + div.form-group + label.control-label.col-sm-2 商品价格 + div.col-sm-8 + input.form-control(type='number', required, name='price', value=!pro.price ? '' : '#{pro.price}') + div.form-group + label.control-label.col-sm-2 商品折扣价 + div.col-sm-8 + input.form-control(type='number', required, name='discounted', value=!pro.discounted ? '' : '#{pro.discounted}') + div.form-group + label.control-label.col-sm-2 商品描述 + div.col-sm-8 + script(type='text/plain', style='width=700px', id='editor', value=!pro.introduce ? '' : '#{pro.introduce}') + div.form-group + label.control-label.col-sm-2 商品类别 + div.col-sm-8 + select.form-control(name='_type') + option(value='1') 开胃酒&利口酒 + option(value='2') 伏特加 + option(value='3') 威士忌 + option(value='4') 白兰地 + option(value='5') 朗姆酒 + option(value='6') 起泡葡萄酒 + option(value='7') 葡萄酒 + div.form-group + label.control-label.col-sm-2 商品重量 + div.col-sm-8 + input.form-control(type='text', required, name='weight', value=!pro.weight ? '' : '#{pro.weight}') + div.form-group + label.control-label.col-sm-2 商品库存 + div.col-sm-8 + input.form-control(type='number', required, name='stock', value=!pro.stock ? '' : '#{pro.stock}') + div.form-group + label.control-label.col-sm-2 商品图片 + div.col-sm-8 + //div#fine-uploader-manual-trigger + a.btn.btn-default(style='position: relative') 选择图片 + input.a-file(type='file', accept='image/*', multiple, style='position:absolute;width:100%;height:100%;left:0;top:0;opacity:0;') + div.row.ero-thumb-imgs-box + + div.form-group(style="text-align: center;") + button(type='submit').btn.btn-primary.add-btn 保存 + button(type='reset').btn.btn-default 重置 + a.btn.btn-default.cancel-add 取消 + div#introduct-content(style='display: none')!=pro.introduce + script(src='/javascripts/page/add.js') diff --git a/express/Campari-vue/www/views/component/fine-tpl.jade b/express/Campari-vue/www/views/component/fine-tpl.jade new file mode 100644 index 0000000..c3448b3 --- /dev/null +++ b/express/Campari-vue/www/views/component/fine-tpl.jade @@ -0,0 +1,65 @@ +// + Created by 斌 on 2017/4/26. + +script#qq-template-manual-trigger(type='text/template'). +
    +
    +
    +
    +
    + +
    +
    +
    +
    Select files
    +
    + +
    + + Processing dropped files... + + +
      +
    • +
      +
      +
      + + + + + + + + + + +
    • +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/express/Campari-vue/views/error.jade b/express/Campari-vue/www/views/error.jade similarity index 100% rename from express/Campari-vue/views/error.jade rename to express/Campari-vue/www/views/error.jade diff --git a/express/Campari-vue/www/views/layout.jade b/express/Campari-vue/www/views/layout.jade new file mode 100644 index 0000000..c7ba1f8 --- /dev/null +++ b/express/Campari-vue/www/views/layout.jade @@ -0,0 +1,13 @@ +doctype html +html + head + title= title + meta(name='viewport', content='width=device-width, initial-scale=1') + link(rel='stylesheet', href='/stylesheets/bootstrap.min.css') + link(rel='stylesheet', href='/stylesheets/bootstrap-theme.min.css') + link(rel='stylesheet', href='/stylesheets/style.css') + link(rel='stylesheet', href='/stylesheets/ero-upload.css') + script(src='/javascripts/jquery.min.js') + script(src='/javascripts/bootstrap.min.js') + body + block content diff --git a/express/Campari-vue/www/views/layout2.jade b/express/Campari-vue/www/views/layout2.jade new file mode 100644 index 0000000..0365606 --- /dev/null +++ b/express/Campari-vue/www/views/layout2.jade @@ -0,0 +1,29 @@ +// + Created by 斌 on 2017/4/23. +extends layout +block content + nav.navbar.navbar-default.navbar-fixed-top.navbar-inverse + div.container-fluid + div.navbar-header + a.navbar-brand(href='#') Campari + div.main-body + div.left-bar + ul + li + span.glyphicon.glyphicon-folder-open + ='会员列表' + a.st(href='/sys/user-list') 会员列表 + li + span.glyphicon.glyphicon-folder-open + ='商品管理' + a.st(href='/sys/product-list') 商品管理 + a(href='/sys/add-product') 添加商品 + li + span.glyphicon.glyphicon-folder-open + ='订单管理' + a.st(href='#') 订单列表 + a(href='#') 未发货订单 + a(href='#') 支付流水 + div.main-box.row(class= scrollAble ? 'scroll-able' : '') + block content2 + diff --git a/express/Campari-vue/www/views/login.jade b/express/Campari-vue/www/views/login.jade new file mode 100644 index 0000000..c814e7a --- /dev/null +++ b/express/Campari-vue/www/views/login.jade @@ -0,0 +1,12 @@ +extends layout + +block content + div.container + form(role='form', action='/sys/login', method='post').col-sm-4.col-sm-offset-4.login-form + h3 管理系统 + div.form-group + input(type='text', placeholder='用户名', name='username').form-control.input-lg + div.form-group + input(type='password', placeholder='密码', name='password').form-control.input-lg + div.form-group + button(type='submit').btn.btn-lg.btn-default.col-sm-4.col-sm-offset-4 登录 diff --git a/express/Campari-vue/www/views/order-list.jade b/express/Campari-vue/www/views/order-list.jade new file mode 100644 index 0000000..ea3c0dd --- /dev/null +++ b/express/Campari-vue/www/views/order-list.jade @@ -0,0 +1,25 @@ +// + Created by 斌 on 2017/4/24. + +extends layout2 +block content2 + div.table-box + form.form-group + select.form-control + option 订单号 + option 手机号码 + div.form-group + input(type='select').form-control + button(type='submit').btn.btn-default 查询 + table.table.table-hover.table-striped + caption #共xx条数据 + thead + tr + th 订单号 + th 用户昵称 + th 地址 + th 手机号码 + th 下单时间 + th 支付状态 + th 发货状态 + th 操作 \ No newline at end of file diff --git a/express/Campari-vue/www/views/product-list.jade b/express/Campari-vue/www/views/product-list.jade new file mode 100644 index 0000000..c10aec3 --- /dev/null +++ b/express/Campari-vue/www/views/product-list.jade @@ -0,0 +1,84 @@ +// + Created by 斌 on 2017/4/24. + +extends layout2 +block content2 + script(src='/javascripts/jqPaginator.min.js') + div.table-box + form.form-inline(role='form', action='?') + div.form-group + select.form-control(name='category') + option(value='', selected=('' === '#{category}')) -- + option(value='sku', selected=('sku' === '#{category}')) SKU + option(value='CNName', selected=('CNName' === '#{category}')) 中文名 + option(value='ENName', selected=('ENName' === '#{category}')) 英文名 + div.form-group + input(type='search', name='key', value='#{key}').form-control + button(type='submit').btn.btn-default 查询 + button(type='reset').btn.btn-default 重置 + table.table.table-hover.table-striped + caption 共#{count}条数据 + thead + tr + td 序列号 + td SKU + td 名称(cn/en) + td 价格 + td 库存 + td 类别 + td 销量 + td 生成时间 + td 操作 + tbody + each item, i in list + tr + td!=i + 1 + td!=item.sku + td + |#{item.CNName}
    + |#{item.ENName} + td!=item.price + td!=item.stock + td!=item._type + td!=item.sales + td!=item.date.toLocaleString() + td + a.btn.btn-default(href='/sys/add-product?sku=' + "#{item.sku}") 编辑 + button.btn.btn-warning(onclick='_delete("#{item.sku}")') 删除 + div#pagination.pagination + script. + function _delete (item) { + var con = window.confirm('确定要删除' + item + '么') + if (!con) return + $.ajax({ + type:'POST', + url:'/sys/product-list/del?sku=' + item, + complete: function () { + location.reload() + } + }) + } + $(function () { + $('#pagination').jqPaginator({ + totalPages: #{totalPage} || 1, + visiblePages: 6, + currentPage: #{current} || 1, + onPageChange: function (num, type) { + if (type === 'init') return + var s = location.search; + if (s.length <= 1) { + location.href = '?page=' + num + } else if (s.indexOf('page') === -1) { + location.href += '&page=' + num + } else { + var href = location.href.replace(/page=\d*/i, 'page=' + num) + location.href = href + } + } + }); + $('button[type="reset"]').click(function (e) { + e.preventDefault() + $('select[name="category"]').val('') + $('input[name="key"]').val('') + }) + }) diff --git a/express/Campari-vue/www/views/user-list.jade b/express/Campari-vue/www/views/user-list.jade new file mode 100644 index 0000000..9066307 --- /dev/null +++ b/express/Campari-vue/www/views/user-list.jade @@ -0,0 +1,42 @@ +// + Created by 斌 on 2017/4/23. + +extends layout2 +block content2 + div.table-box + form.form-inline(role='form') + div.form-group + select.form-control + option 昵称 + option 手机号码 + div.form-group + input(type='text').form-control + button(type='submit').btn.btn-default 查询 + table.table.table-hover.table-striped + caption 共#{list.length}条数据 + thead + tr + th 序列号 + th 会员昵称 + th 手机号码 + th 注册时间 + th 操作 + tbody + each item in list + tr + td #{item.no} + td #{item.nick} + td #{item.phone} + td #{item.date} + td + button.btn.btn-default 详情 + button.btn.btn-warning 删除 + ul.pagination + li + a(href='#') « + li.active + a(href='#') 1 + li + a(href='#') 2 + li + a(href='#') » \ No newline at end of file diff --git a/express/Campari-vue/www/views/welcome.jade b/express/Campari-vue/www/views/welcome.jade new file mode 100644 index 0000000..2548aef --- /dev/null +++ b/express/Campari-vue/www/views/welcome.jade @@ -0,0 +1,26 @@ +// + Created by 斌 on 2017/4/23. + +extends layout2 +block content2 + div.cover + div.hello + h1 + h3 + script. + var a = $('.hello h1'), + b = $('.hello h3'); + f() + function f () { + var n = new Date(), + h = n.getHours(); + a.text(h + ':' + n.getMinutes()) + if (h < 12) { + b.text('Good morning') + } else if (h < 19) { + b.text('Good afternoon') + } else { + b.text('Good evening') + } + setTimeout(f, 1000) + } \ No newline at end of file diff --git a/express/Nuxt/nuxt/.eslintrc.js b/express/Nuxt/nuxt/.eslintrc.js new file mode 100644 index 0000000..9a11039 --- /dev/null +++ b/express/Nuxt/nuxt/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + root: true, + parser: 'babel-eslint', + env: { + browser: true, + node: true + }, + extends: 'standard', + // required to lint *.vue files + plugins: [ + 'html' + ], + // add your custom rules here + rules: { + // allow paren-less arrow functions + 'arrow-parens': 0, + // allow async-await + 'generator-star-spacing': 0, + // allow debugger during development + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + // do not allow console.logs etc... + 'no-console': 2 + }, + globals: {} +} diff --git a/express/Nuxt/nuxt/.gitignore b/express/Nuxt/nuxt/.gitignore new file mode 100644 index 0000000..7ee6115 --- /dev/null +++ b/express/Nuxt/nuxt/.gitignore @@ -0,0 +1,11 @@ +# dependencies +node_modules + +# logs +npm-debug.log + +# Nuxt build +.nuxt + +# Nuxt generate +dist diff --git a/express/Nuxt/nuxt/README.md b/express/Nuxt/nuxt/README.md new file mode 100644 index 0000000..e88fb7c --- /dev/null +++ b/express/Nuxt/nuxt/README.md @@ -0,0 +1,17 @@ +# nuxt-express + +> Nuxt.js project + +## Build Setup + +``` bash +# install dependencies +$ npm install # Or yarn install + +# serve with hot reload at localhost:3000 +$ npm run dev + +# build for production and launch server +$ npm start + +For detailed explanation on how things work, checkout the [Nuxt.js docs](https://github.com/nuxt/nuxt.js). diff --git a/express/Nuxt/nuxt/api/index.js b/express/Nuxt/nuxt/api/index.js new file mode 100644 index 0000000..a1b390f --- /dev/null +++ b/express/Nuxt/nuxt/api/index.js @@ -0,0 +1,6 @@ +var router = require('express').Router() + +// Add USERS Routes +router.use(require('./users')) + +module.exports = router diff --git a/express/Nuxt/nuxt/api/users.js b/express/Nuxt/nuxt/api/users.js new file mode 100644 index 0000000..3f1dc10 --- /dev/null +++ b/express/Nuxt/nuxt/api/users.js @@ -0,0 +1,23 @@ +var router = require('express').Router() + +const users = [ + { name: 'Alexandre' }, + { name: 'Sébastien' } +] + +/* GET users listing. */ +router.get('/users', function (req, res, next) { + res.json(users) +}) + +/* GET user by ID. */ +router.get('/users/:id', function (req, res, next) { + var id = parseInt(req.params.id) + if (id >= 0 && id < users.length) { + res.json(users[id]) + } else { + res.sendStatus(404) + } +}) + +module.exports = router diff --git a/express/Nuxt/nuxt/assets/css/main.css b/express/Nuxt/nuxt/assets/css/main.css new file mode 100644 index 0000000..e3f28fe --- /dev/null +++ b/express/Nuxt/nuxt/assets/css/main.css @@ -0,0 +1,28 @@ +html, body +{ + background-color: #fff; + color: #000; + letter-spacing: 0.5px; + font-family: "Source Sans Pro", Arial, sans-serif; + height: 100vh; + margin: 0; +} + +footer +{ + padding: 20px; + text-align: center; + border-top: 1px solid #ddd; +} + +a, a:hover, a:focus, a:visited +{ + color: #000; +} + +.logo { + width: 100%; + height: auto; + max-width: 400px; + max-height: 289px; +} diff --git a/express/Nuxt/nuxt/assets/img/logo.png b/express/Nuxt/nuxt/assets/img/logo.png new file mode 100644 index 0000000..f8a35ef Binary files /dev/null and b/express/Nuxt/nuxt/assets/img/logo.png differ diff --git a/express/Nuxt/nuxt/components/Footer.vue b/express/Nuxt/nuxt/components/Footer.vue new file mode 100644 index 0000000..7aaf2c2 --- /dev/null +++ b/express/Nuxt/nuxt/components/Footer.vue @@ -0,0 +1,5 @@ + diff --git a/express/Nuxt/nuxt/layouts/default.vue b/express/Nuxt/nuxt/layouts/default.vue new file mode 100644 index 0000000..fa5e8d6 --- /dev/null +++ b/express/Nuxt/nuxt/layouts/default.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/express/Nuxt/nuxt/layouts/error.vue b/express/Nuxt/nuxt/layouts/error.vue new file mode 100644 index 0000000..1ffdf18 --- /dev/null +++ b/express/Nuxt/nuxt/layouts/error.vue @@ -0,0 +1,37 @@ + + + + diff --git a/express/Nuxt/nuxt/nuxt.config.js b/express/Nuxt/nuxt/nuxt.config.js new file mode 100644 index 0000000..ee2b4e4 --- /dev/null +++ b/express/Nuxt/nuxt/nuxt.config.js @@ -0,0 +1,26 @@ +module.exports = { + /* + ** Headers of the page + */ + head: { + title: 'starter', + meta: [ + { charset: 'utf-8' }, + { name: 'viewport', content: 'width=device-width, initial-scale=1' }, + { hid: 'description', name: 'description', content: 'Nuxt.js project' } + ], + link: [ + { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } + ] + }, + /* + ** Global CSS + */ + css: ['~assets/css/main.css'], + /* + ** Add axios globally + */ + build: { + vendor: ['axios'] + } +} diff --git a/express/Nuxt/nuxt/package.json b/express/Nuxt/nuxt/package.json new file mode 100644 index 0000000..ada6335 --- /dev/null +++ b/express/Nuxt/nuxt/package.json @@ -0,0 +1,38 @@ +{ + "name": "nuxt-express", + "version": "1.0.0", + "description": "Nuxt.js project", + "author": "imuntil ", + "private": true, + "scripts": { + "dev": "nodemon --exec babel-node -w server.js -w nuxt.config.js -w api/ server.js", + "build": "nuxt build && babel server.js --out-file server.prod.js", + "start": "cross-env NODE_ENV=production node server.prod.js", + "precommit": "npm run lint", + "lint": "eslint --ext .js,.vue --ignore-path .gitignore ." + }, + "babel": { + "presets": [ + "es2015", + "stage-2" + ] + }, + "dependencies": { + "axios": "^0.15.3", + "cross-env": "^3.1.4", + "express": "^4.14.0", + "nuxt": "~0.10.5" + }, + "devDependencies": { + "babel-cli": "^6.22.2", + "babel-eslint": "^7.1.1", + "babel-preset-es2015": "^6.22.0", + "babel-preset-stage-2": "^6.22.0", + "eslint": "^3.13.1", + "eslint-config-standard": "^6.2.1", + "eslint-plugin-html": "^1.7.0", + "eslint-plugin-promise": "^3.4.0", + "eslint-plugin-standard": "^2.0.1", + "nodemon": "^1.11.0" + } +} diff --git a/express/Nuxt/nuxt/pages/_id.vue b/express/Nuxt/nuxt/pages/_id.vue new file mode 100644 index 0000000..3c59515 --- /dev/null +++ b/express/Nuxt/nuxt/pages/_id.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/express/Nuxt/nuxt/pages/about.vue b/express/Nuxt/nuxt/pages/about.vue new file mode 100644 index 0000000..b7b1775 --- /dev/null +++ b/express/Nuxt/nuxt/pages/about.vue @@ -0,0 +1,27 @@ + + + diff --git a/express/Nuxt/nuxt/pages/index.vue b/express/Nuxt/nuxt/pages/index.vue new file mode 100644 index 0000000..54c6a49 --- /dev/null +++ b/express/Nuxt/nuxt/pages/index.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/express/Nuxt/nuxt/plugins/axios.js b/express/Nuxt/nuxt/plugins/axios.js new file mode 100644 index 0000000..e44041d --- /dev/null +++ b/express/Nuxt/nuxt/plugins/axios.js @@ -0,0 +1,9 @@ +import axios from 'axios' + +let options = {} +// The server-side needs a full url to works +if (process.SERVER_BUILD) { + options.baseURL = `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}` +} + +export default axios.create(options) diff --git a/express/Nuxt/nuxt/server.js b/express/Nuxt/nuxt/server.js new file mode 100644 index 0000000..cebadf7 --- /dev/null +++ b/express/Nuxt/nuxt/server.js @@ -0,0 +1,29 @@ +const Nuxt = require('nuxt') +const app = require('express')() +const host = process.env.HOST || '127.0.0.1' +const port = process.env.PORT || 3000 + +app.set('port', port) +// Import API Routes +app.use('/api', require('./api/index')) + +// Import and Set Nuxt.js options +let config = require('./nuxt.config.js') +config.dev = !(process.env.NODE_ENV === 'production') + +// Init Nuxt.js +const nuxt = new Nuxt(config) +app.use(nuxt.render) + +// Build only in dev mode +if (config.dev) { + nuxt.build() + .catch((error) => { + console.error(error) // eslint-disable-line no-console + process.exit(1) + }) +} + +// Listen the server +app.listen(port, host) +console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console diff --git a/express/Nuxt/nuxt/static/favicon.ico b/express/Nuxt/nuxt/static/favicon.ico new file mode 100644 index 0000000..382fecb Binary files /dev/null and b/express/Nuxt/nuxt/static/favicon.ico differ diff --git a/express/Nuxt/nuxt/yarn.lock b/express/Nuxt/nuxt/yarn.lock new file mode 100644 index 0000000..b60be61 --- /dev/null +++ b/express/Nuxt/nuxt/yarn.lock @@ -0,0 +1,5009 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +acorn@^5.0.0, acorn@^5.0.1, acorn@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + +ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0, ajv@^4.9.1: + version "4.11.7" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^2.1.2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +autoprefixer@^6.3.1, autoprefixer@^6.7.7: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" + dependencies: + follow-redirects "1.0.0" + +babel-cli@^6.22.2: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283" + dependencies: + babel-core "^6.24.1" + babel-polyfill "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^7.0.0" + lodash "^4.2.0" + output-file-sync "^1.1.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.6.1" + +babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.24.0, babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-eslint@^7.1.1: + version "7.2.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" + dependencies: + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.17.0" + +babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-vue-jsx-merge-props@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.2.tgz#aceb1c373588279e2755ea1cfd35c22394fd33f8" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" + dependencies: + find-cache-dir "^0.1.1" + loader-utils "^0.2.16" + mkdirp "^0.5.1" + object-assign "^4.0.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" + dependencies: + regenerator-transform "0.9.11" + +babel-plugin-transform-runtime@^6.15.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-vue-jsx@^3.1.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-3.4.2.tgz#906cfe3f1b669b15d3298fffe1006ad31c447d2c" + dependencies: + esutils "^2.0.2" + +babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-preset-env@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.4.0.tgz#c8e02a3bcc7792f23cded68e0355b9d4c28f0f7a" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^1.4.0" + invariant "^2.2.2" + +babel-preset-es2015@^6.22.0, babel-preset-es2015@^6.24.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-stage-2@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-preset-vue-app@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-vue-app/-/babel-preset-vue-app-1.2.0.tgz#5ddfb7920020123a2482b12c6b36bdef9e3fb0ad" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-object-rest-spread "^6.23.0" + babel-plugin-transform-runtime "^6.15.0" + babel-preset-env "^1.2.1" + babel-preset-vue "^0.1.0" + babel-runtime "^6.20.0" + +babel-preset-vue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-vue/-/babel-preset-vue-0.1.0.tgz#adb84ceab3873bd72606fdd3f7047640f032301f" + dependencies: + babel-helper-vue-jsx-merge-props "^2.0.2" + babel-plugin-syntax-jsx "^6.18.0" + babel-plugin-transform-vue-jsx "^3.1.2" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.23.1, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.15.0, babylon@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" + +balanced-match@^0.4.1, balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.4.7: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.0.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserslist@^1.3.6, browserslist@^1.4.0, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000657" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000657.tgz#8192aec745019cc050217ad049c60dad21e3d1bc" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.4.3, chokidar@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +circular-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +clap@^1.0.9: + version "1.1.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" + dependencies: + chalk "^1.1.3" + +clean-css@4.0.x: + version "4.0.12" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.12.tgz#a02e61707f1840bd3338f54dbc9acbda4e772fa3" + dependencies: + source-map "0.5.x" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.3.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@2.9.x, commander@^2.8.1, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +compressible@~2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" + dependencies: + mime-db ">= 1.27.0 < 2" + +compression@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" + dependencies: + accepts "~1.3.3" + bytes "2.3.0" + compressible "~2.0.8" + debug "~2.2.0" + on-headers "~1.0.1" + vary "~1.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@~1.1.5: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-1.4.0.tgz#c35781d0501d268c25c54b8b17f6240e8a4fb021" + dependencies: + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + object-assign "^4.0.1" + os-tmpdir "^1.0.0" + osenv "^0.1.0" + uuid "^2.0.1" + write-file-atomic "^1.1.2" + xdg-basedir "^2.0.0" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +consolidate@^0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" + dependencies: + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +cross-env@^3.1.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.4.tgz#9e0585f277864ed421ce756f81a980ff0d698aba" + dependencies: + cross-spawn "^5.1.0" + is-windows "^1.0.0" + +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.0.tgz#417cfa9789f8cde59a30ccbf3e4da7a806889bad" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.7.0" + cssnano ">=2.6.1 <4" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.7" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + +debug@2.6.4, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3: + version "2.6.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" + dependencies: + ms "0.7.3" + +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@^0.4.0, deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +deepmerge@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.0, depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1, domutils@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer@^0.1.1, duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +duplexify@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" + dependencies: + end-of-stream "1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +editorconfig@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.2.tgz#8e57926d9ee69ab6cb999f027c2171467acceb35" + dependencies: + bluebird "^3.0.5" + commander "^2.9.0" + lru-cache "^3.2.0" + sigmund "^1.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.3.4, ejs@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" + +electron-to-chromium@^1.2.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.7.tgz#9fb75a2417f28114425d364de118d1cfd681432b" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +end-of-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" + dependencies: + once "~1.3.0" + +enhanced-resolve@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.0.tgz#9ce7777b32480e34a34c12a88b3428093fcd14b0" + dependencies: + stackframe "^1.0.2" + +es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.15" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@^3.0.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-standard@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz#d3a68aafc7191639e7ee441e7348739026354292" + +eslint-plugin-html@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-1.7.0.tgz#2a5b03884d8d56adf9ad9864e9c036480fb629c9" + dependencies: + htmlparser2 "^3.8.2" + +eslint-plugin-promise@^3.4.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" + +eslint-plugin-standard@^2.0.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-2.3.1.tgz#6765bd2a6d9ecdc7bdf1b145ae4bb30e2b7b86f8" + +eslint@^3.13.1: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.5.2" + debug "^2.1.1" + doctrine "^2.0.0" + escope "^3.6.0" + espree "^3.4.0" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.2.tgz#38dbdedbedc95b8961a1fbf04734a8f6a9c8c592" + dependencies: + acorn "^5.0.1" + acorn-jsx "^3.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + dependencies: + estraverse "~4.1.0" + object-assign "^4.0.1" + +estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +event-stream@~3.3.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express@^4.14.0, express@^4.15.2: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.1" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.3" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.14" + utils-merge "1.0.0" + vary "~1.1.0" + +extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-loader@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.1.tgz#6b328ee1234a729e4e47d36375dd6d35c0e1db84" + dependencies: + loader-utils "^1.0.2" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +filesize@^3.5.6: + version "3.5.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a" + dependencies: + debug "2.6.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +follow-redirects@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" + dependencies: + debug "^2.2.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +friendly-errors-webpack-plugin@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz#e32781c4722f546a06a9b5d7a7cfa28520375d70" + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-length "^1.0.1" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs-extra@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs-readdir-recursive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +gauge@~2.7.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0, globals@^9.14.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +got@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca" + dependencies: + duplexify "^3.2.0" + infinity-agent "^2.0.0" + is-redirect "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + nested-error-stacks "^1.0.0" + object-assign "^3.0.0" + prepend-http "^1.0.0" + read-all-stream "^3.0.0" + timed-out "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +he@1.1.x, he@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-entities@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" + +html-minifier@^3.2.3, html-minifier@^3.4.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.3.tgz#eb3a7297c804611f470454eeebe0aacc427e424a" + dependencies: + camel-case "3.0.x" + clean-css "4.0.x" + commander "2.9.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "~2.8.22" + +html-webpack-plugin@^2.28.0: + version "2.28.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz#2e7863b57e5fd48fe263303e2ffc934c3064d009" + dependencies: + bluebird "^3.4.7" + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + toposort "^1.0.0" + +htmlparser2@^3.8.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +icss-replace-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +ignore-by-default@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + +ignore@^3.2.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.7.tgz#4810ca5f1d8eca5595213a34b94f2eb4ed926bbd" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +infinity-agent@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-my-json-valid@^2.10.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.0.tgz#c61d61020c3ebe99261b781bd3d1622395f547f8" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-base64@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + +js-beautify@^1.6.3: + version "1.6.12" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.6.12.tgz#78b75933505d376da6e5a28e9b7887e0094db8b5" + dependencies: + config-chain "~1.1.5" + editorconfig "^0.13.2" + mkdirp "~0.5.0" + nopt "~3.0.1" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@^3.4.3, js-yaml@^3.5.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + +latest-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz#72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb" + dependencies: + package-json "^1.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@0.2.x, loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.assign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.defaults@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" + dependencies: + lodash.assign "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +lowercase-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lru-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" + dependencies: + pseudomap "^1.0.1" + +lru-cache@^4.0.1, lru-cache@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +math-expression-evaluator@^1.2.14: + version "1.2.16" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mime@1.3.4, mime@1.3.x, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +ms@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +nan@^2.3.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +ncname@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" + dependencies: + xml-char-classes "^1.0.0" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +nested-error-stacks@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf" + dependencies: + inherits "~2.0.1" + +no-case@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" + dependencies: + lower-case "^1.1.1" + +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.29: + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nodemon@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.11.0.tgz#226c562bd2a7b13d3d7518b49ad4828a3623d06c" + dependencies: + chokidar "^1.4.3" + debug "^2.2.0" + es6-promise "^3.0.2" + ignore-by-default "^1.0.0" + lodash.defaults "^3.1.2" + minimatch "^3.0.0" + ps-tree "^1.0.1" + touch "1.0.0" + undefsafe "0.0.3" + update-notifier "0.5.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +nopt@~3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npmlog@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +nuxt@~0.10.5: + version "0.10.6" + resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-0.10.6.tgz#cdd261e9c234312ebd1dd58384c7c87d5c1bd60a" + dependencies: + ansi-html "^0.0.7" + autoprefixer "^6.7.7" + babel-core "^6.24.0" + babel-loader "^6.4.1" + babel-preset-es2015 "^6.24.0" + babel-preset-vue-app "^1.1.1" + chokidar "^1.6.1" + co "^4.6.0" + compression "^1.6.2" + css-loader "^0.28.0" + debug "^2.6.3" + file-loader "^0.11.1" + friendly-errors-webpack-plugin "^1.6.1" + fs-extra "^2.1.2" + glob "^7.1.1" + hash-sum "^1.0.2" + html-minifier "^3.4.2" + html-webpack-plugin "^2.28.0" + lodash "^4.17.4" + lru-cache "^4.0.2" + memory-fs "^0.4.1" + offline-plugin "^4.6.1" + pify "^2.3.0" + post-compile-webpack-plugin "^0.1.1" + preload-webpack-plugin "^1.2.2" + progress-bar-webpack-plugin "^1.9.3" + script-ext-html-webpack-plugin "^1.7.1" + serialize-javascript "^1.3.0" + serve-static "^1.12.1" + url-loader "^0.5.8" + vue "^2.2.6" + vue-loader "^11.3.4" + vue-meta "^0.5.6" + vue-router "^2.3.1" + vue-server-renderer "^2.2.6" + vue-ssr-html-stream "^2.2.0" + vue-ssr-webpack-plugin "^3.0.0" + vue-template-compiler "^2.2.6" + vuex "^2.2.1" + webpack "^2.3.3" + webpack-bundle-analyzer "^2.3.1" + webpack-dev-middleware "^1.10.1" + webpack-hot-middleware "^2.18.0" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.10, object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.assign@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +offline-plugin@^4.6.1: + version "4.7.0" + resolved "https://registry.yarnpkg.com/offline-plugin/-/offline-plugin-4.7.0.tgz#4c2fca6cd46c6dd7f29fc94ade21e5f82a62c4df" + dependencies: + deep-extend "^0.4.0" + ejs "^2.3.4" + loader-utils "0.2.x" + minimatch "^3.0.3" + slash "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +opener@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.0, osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +package-json@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0" + dependencies: + got "^3.2.0" + registry-url "^3.0.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +post-compile-webpack-plugin@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/post-compile-webpack-plugin/-/post-compile-webpack-plugin-0.1.1.tgz#1b1a0eea890ce748556ca49e066a48c900e0b370" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-load-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" + +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + dependencies: + postcss "^5.0.4" + +postcss-modules-local-by-default@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-scope@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-values@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + dependencies: + icss-replace-symbols "^1.0.2" + postcss "^5.0.14" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +preload-webpack-plugin@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/preload-webpack-plugin/-/preload-webpack-plugin-1.2.2.tgz#d1b6f0eab3c2d0bb4c249d409cf6b7a8b0a415dd" + dependencies: + object-assign "^4.1.1" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-error@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.0.tgz#87f4e9d706a24c87d6cbee9fabec001fcf8c75d8" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +progress-bar-webpack-plugin@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.9.3.tgz#81fb8bd8e38da6edaf9a20beed79bd978dd63c2a" + dependencies: + chalk "^1.1.1" + object.assign "^4.0.1" + progress "^1.1.8" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + +proxy-addr@~1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.3.0" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +ps-tree@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + +qs@6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0, querystring@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +rc@^1.0.1, rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-all-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" + dependencies: + pinkie-promise "^2.0.0" + readable-stream "^2.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: + version "2.2.9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + +regenerator-transform@0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +registry-url@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + dependencies: + is-finite "^1.0.0" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@^1.1.6, resolve@^1.2.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sax@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +script-ext-html-webpack-plugin@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-1.7.1.tgz#ae9c0e26d7767d4aa793c76e3550344ec08b6d10" + dependencies: + debug "^2.3.3" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" + dependencies: + debug "2.6.1" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "0.7.2" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serialize-javascript@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.3.0.tgz#86a4f3752f5c7e47295449b0bbb63d64ba533f05" + +serve-static@1.12.1, serve-static@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sha.js@^2.3.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shelljs@^0.7.5: + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-list-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4" + +source-map-support@^0.4.2: + version "0.4.14" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" + dependencies: + source-map "^0.5.6" + +source-map@0.5.6, source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stackframe@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.2.tgz#162245509c687d328b14f671dab8fdb755b1e1e8" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +stream-http@^2.3.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-length@^1.0.0, string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + +string_decoder@^0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + dependencies: + buffer-shims "~1.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0, supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +tapable@^0.2.5, tapable@~0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@2, through@^2.3.6, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timed-out@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" + +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +toposort@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.3.tgz#f02cd8a74bd8be2fc0e98611c3bacb95a171869c" + +touch@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" + dependencies: + nopt "~1.0.10" + +tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.14: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@^2.8.5, uglify-js@~2.8.22: + version "2.8.22" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +undefsafe@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +update-notifier@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.5.0.tgz#07b5dc2066b3627ab3b4f530130f7eddda07a4cc" + dependencies: + chalk "^1.0.0" + configstore "^1.0.0" + is-npm "^1.0.0" + latest-version "^1.0.0" + repeating "^1.1.2" + semver-diff "^2.0.0" + string-length "^1.0.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +url-loader@^0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5" + dependencies: + loader-utils "^1.0.2" + mime "1.3.x" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +v8flags@^2.0.10: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +vue-hot-reload-api@^2.0.11: + version "2.1.0" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.1.0.tgz#9ca58a6e0df9078554ce1708688b6578754d86de" + +vue-loader@^11.3.4: + version "11.3.4" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-11.3.4.tgz#65e10a44ce092d906e14bbc72981dec99eb090d2" + dependencies: + consolidate "^0.14.0" + hash-sum "^1.0.2" + js-beautify "^1.6.3" + loader-utils "^1.1.0" + lru-cache "^4.0.1" + postcss "^5.0.21" + postcss-load-config "^1.1.0" + postcss-selector-parser "^2.0.0" + source-map "^0.5.6" + vue-hot-reload-api "^2.0.11" + vue-style-loader "^2.0.0" + vue-template-es2015-compiler "^1.2.2" + +vue-meta@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/vue-meta/-/vue-meta-0.5.6.tgz#e4b56838167f0aa40a202f45e1eec6fb91861689" + dependencies: + deepmerge "^1.2.0" + lodash.isplainobject "^4.0.6" + object-assign "^4.1.0" + +vue-router@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.4.0.tgz#56a635e1434a1966ac095f2a485bebdcfc36cec5" + +vue-server-renderer@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.2.6.tgz#0a20535544b6948bca076380d058e19bb1304eef" + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + resolve "^1.2.0" + source-map "0.5.6" + vue-ssr-html-stream "^2.1.0" + +vue-ssr-html-stream@^2.1.0, vue-ssr-html-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vue-ssr-html-stream/-/vue-ssr-html-stream-2.2.0.tgz#56d78b96c9c172b43749a324c156e888aca96d92" + dependencies: + serialize-javascript "^1.3.0" + +vue-ssr-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/vue-ssr-webpack-plugin/-/vue-ssr-webpack-plugin-3.0.0.tgz#db47769ed8e71c8eb53aa9ae7be9ff04baf546fa" + dependencies: + chalk "^1.1.3" + hash-sum "^1.0.2" + +vue-style-loader@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-2.0.5.tgz#f0efac992febe3f12e493e334edb13cd235a3d22" + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-compiler@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.2.6.tgz#2e2928daf0cd0feca9dfc35a9729adeae173ec68" + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +vue-template-es2015-compiler@^1.2.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.5.2.tgz#a0a6c50c941d2a4abda963f2f42c337ac450ee95" + +vue@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.6.tgz#451714b394dd6d4eae7b773c40c2034a59621aed" + +vuex@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-2.3.1.tgz#cde8e997c1f9957719bc7dea154f9aa691d981a6" + +watchpack@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" + dependencies: + async "^2.1.2" + chokidar "^1.4.3" + graceful-fs "^4.1.2" + +webpack-bundle-analyzer@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.4.0.tgz#e406b016e7452bc864793848c79308782accba8e" + dependencies: + acorn "^5.0.3" + chalk "^1.1.3" + commander "^2.9.0" + ejs "^2.5.6" + express "^4.15.2" + filesize "^3.5.6" + gzip-size "^3.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + opener "^1.4.3" + +webpack-dev-middleware@^1.10.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1" + dependencies: + memory-fs "~0.4.1" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-hot-middleware@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.0.tgz#a16bb535b83a6ac94a78ac5ebce4f3059e8274d3" + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-sources@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + +webpack@^2.3.3: + version "2.4.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.4.1.tgz#15a91dbe34966d8a4b99c7d656efd92a2e5a6f6a" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^4.7.0" + ajv-keywords "^1.1.1" + async "^2.1.2" + enhanced-resolve "^3.0.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^0.2.16" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^3.1.0" + tapable "~0.2.5" + uglify-js "^2.8.5" + watchpack "^1.3.1" + webpack-sources "^0.2.3" + yargs "^6.0.0" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.2.9: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^1.1.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.3.tgz#831dd22d491bdc135180bb996a0eb3f8bf587791" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +xdg-basedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" + dependencies: + os-homedir "^1.0.0" + +xml-char-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs@^6.0.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git "a/express/async\346\216\247\345\210\266\345\271\266\345\217\221/app.js" "b/express/async\346\216\247\345\210\266\345\271\266\345\217\221/app.js" index 56ec178..112b099 100644 --- "a/express/async\346\216\247\345\210\266\345\271\266\345\217\221/app.js" +++ "b/express/async\346\216\247\345\210\266\345\271\266\345\217\221/app.js" @@ -1,4 +1,5 @@ const async = require('async'); +const fs = require('fs') let concurrencyCount = 0; let fetchUrl = function (url, callback) { diff --git a/express/meadowlark/site/credentials.js b/express/meadowlark/site/credentials.js new file mode 100644 index 0000000..78c25dc --- /dev/null +++ b/express/meadowlark/site/credentials.js @@ -0,0 +1,15 @@ +/** + * Created by 斌 on 2017/4/4. + */ +module.exports = { + cookieSecret:'m65xPewoq9foN2!we^47', + gmail:{ + user:'imuntil@gmail.com', + password:'13140054yyz' + }, + mongo: { + dev:{ + path:'mongodb://localhost:27017/meadowlark_vacations' + } + } +} \ No newline at end of file diff --git a/express/meadowlark/site/public/data/avatar/undefined.jpg b/express/meadowlark/site/public/data/avatar/undefined.jpg new file mode 100644 index 0000000..c07998a Binary files /dev/null and b/express/meadowlark/site/public/data/avatar/undefined.jpg differ diff --git a/express/meadowlark/site/route/home.js b/express/meadowlark/site/route/home.js index a845554..03f77a9 100644 --- a/express/meadowlark/site/route/home.js +++ b/express/meadowlark/site/route/home.js @@ -1,17 +1,17 @@ /** * Created by 斌 on 2017/4/6. */ -const router = require('express').Router(); +const router = require('express').Router() router.get('/', (req, res) => { - // res.cookie('test', 'xxxx', {signed:true}) - // console.log('signed:', req.signedCookies['test']); - // console.log('cookies:',req.cookies); - res.cookie('xxxxx','xxxxxx', { - domain: 'localhost', - path:'/', - }); - res.render('home'); + // res.cookie('test', 'xxxx', {signed:true}) + // console.log('signed:', req.signedCookies['test']); + // console.log('cookies:',req.cookies); + res.cookie('xxxxx', 'xxxxxx', { + domain: 'localhost', + path: '/' + }) + res.render('home') }) -module.exports = router; \ No newline at end of file +module.exports = router diff --git a/express/react-nuxt-wd/app.js b/express/react-nuxt-wd/app.js new file mode 100644 index 0000000..e421c6d --- /dev/null +++ b/express/react-nuxt-wd/app.js @@ -0,0 +1,46 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var index = require('./routes/index'); +var users = require('./routes/users'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'pug'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', index); +app.use('/users', users); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/express/react-nuxt-wd/bin/www b/express/react-nuxt-wd/bin/www new file mode 100755 index 0000000..00d70f5 --- /dev/null +++ b/express/react-nuxt-wd/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('react-nuxt-wd:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/express/react-nuxt-wd/package.json b/express/react-nuxt-wd/package.json new file mode 100644 index 0000000..db74e0e --- /dev/null +++ b/express/react-nuxt-wd/package.json @@ -0,0 +1,17 @@ +{ + "name": "react-nuxt-wd", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "body-parser": "~1.18.2", + "cookie-parser": "~1.4.3", + "debug": "~2.6.9", + "express": "~4.15.5", + "morgan": "~1.9.0", + "pug": "^2.0.0-rc.4", + "serve-favicon": "~2.4.5" + } +} diff --git a/express/Campari-vue/public/stylesheets/style.css b/express/react-nuxt-wd/public/stylesheets/style.css similarity index 100% rename from express/Campari-vue/public/stylesheets/style.css rename to express/react-nuxt-wd/public/stylesheets/style.css diff --git a/express/Campari-vue/routes/index.js b/express/react-nuxt-wd/routes/index.js similarity index 100% rename from express/Campari-vue/routes/index.js rename to express/react-nuxt-wd/routes/index.js diff --git a/express/Campari-vue/routes/users.js b/express/react-nuxt-wd/routes/users.js similarity index 100% rename from express/Campari-vue/routes/users.js rename to express/react-nuxt-wd/routes/users.js diff --git a/express/react-nuxt-wd/views/error.pug b/express/react-nuxt-wd/views/error.pug new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/express/react-nuxt-wd/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/express/Campari-vue/views/index.jade b/express/react-nuxt-wd/views/index.pug similarity index 100% rename from express/Campari-vue/views/index.jade rename to express/react-nuxt-wd/views/index.pug diff --git a/express/Campari-vue/views/layout.jade b/express/react-nuxt-wd/views/layout.pug similarity index 100% rename from express/Campari-vue/views/layout.jade rename to express/react-nuxt-wd/views/layout.pug diff --git a/express/react-nuxt-wd/yarn.lock b/express/react-nuxt-wd/yarn.lock new file mode 100644 index 0000000..cb3ce8b --- /dev/null +++ b/express/react-nuxt-wd/yarn.lock @@ -0,0 +1,656 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@~1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +acorn-globals@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^3.1.0, acorn@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.4, acorn@~4.0.2: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +basic-auth@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba" + dependencies: + safe-buffer "5.1.1" + +body-parser@~1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +character-parser@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + dependencies: + is-regex "^1.0.3" + +clean-css@^3.3.0: + version "3.4.28" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff" + dependencies: + commander "2.8.x" + source-map "0.4.x" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +commander@2.8.x: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + +constantinople@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.0.tgz#7569caa8aa3f8d5935d62e1fa96f9f702cd81c79" + dependencies: + acorn "^3.1.0" + is-expression "^2.0.1" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.2, content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-parser@~1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.3.tgz#0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5" + dependencies: + cookie "0.3.1" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +debug@2.6.9, debug@~2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +depd@1.1.1, depd@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +etag@~1.8.0, etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +express@~4.15.5: + version "4.15.5" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.5.tgz#670235ca9598890a5ae8170b83db722b842ed927" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.6" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.5" + qs "6.5.0" + range-parser "~1.2.0" + send "0.15.6" + serve-static "1.12.6" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.0" + vary "~1.1.1" + +finalhandler@~1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f" + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +forwarded@~0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +function-bind@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ipaddr.js@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-expression@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-2.1.0.tgz#91be9d47debcfef077977e9722be6dcfb4465ef0" + dependencies: + acorn "~3.3.0" + object-assign "^4.0.1" + +is-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + +is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-regex@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +js-stringify@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@~2.1.15, mime-types@~2.1.16: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +morgan@~1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.1" + on-finished "~2.3.0" + on-headers "~1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +parseurl@~1.3.1, parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.4.0" + +pug-attrs@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.2.tgz#8be2b2225568ffa75d1b866982bff9f4111affcb" + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.3" + +pug-code-gen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.0.tgz#96aea39a9e62f1ec5d2b6a5b42a29d528c70b43d" + dependencies: + constantinople "^3.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.2" + pug-error "^1.3.2" + pug-runtime "^2.0.3" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26" + +pug-filters@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-2.1.5.tgz#66bf6e80d97fbef829bab0aa35eddff33fc964f3" + dependencies: + clean-css "^3.3.0" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.2" + pug-walk "^1.1.5" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-3.1.0.tgz#fd087376d4a675b4f59f8fef422883434e9581a2" + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.2" + +pug-linker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.3.tgz#25f59eb750237f0368e59c3379764229c0189c41" + dependencies: + pug-error "^1.3.2" + pug-walk "^1.1.5" + +pug-load@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.9.tgz#ee217c914cc1d9324d44b86c32d1df241d36de7a" + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.5" + +pug-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-4.0.0.tgz#c9f52322e4eabe4bf5beeba64ed18373bb627801" + dependencies: + pug-error "^1.3.2" + token-stream "0.0.1" + +pug-runtime@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.3.tgz#98162607b0fce9e254d427f33987a5aee7168bda" + +pug-strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.2.tgz#d313afa01bcc374980e1399e23ebf2eb9bdc8513" + dependencies: + pug-error "^1.3.2" + +pug-walk@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.5.tgz#90e943acbcf7021e6454cf1b32245891cba6f851" + +pug@^2.0.0-rc.4: + version "2.0.0-rc.4" + resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.0-rc.4.tgz#b7b08f6599bd5302568042b7436984fb28c80a13" + dependencies: + pug-code-gen "^2.0.0" + pug-filters "^2.1.5" + pug-lexer "^3.1.0" + pug-linker "^3.0.3" + pug-load "^2.0.9" + pug-parser "^4.0.0" + pug-runtime "^2.0.3" + pug-strip-comments "^1.0.2" + +qs@6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" + +qs@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +resolve@^1.1.6: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +safe-buffer@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +send@0.15.6: + version "0.15.6" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.6.tgz#20f23a9c925b762ab82705fe2f9db252ace47e34" + dependencies: + debug "2.6.9" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.3.4" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-favicon@~2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.5.tgz#49d9a46863153a9240691c893d2b0e7d85d6d436" + dependencies: + etag "~1.8.1" + fresh "0.5.2" + ms "2.0.0" + parseurl "~1.3.2" + safe-buffer "5.1.1" + +serve-static@1.12.6: + version "1.12.6" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.6.tgz#b973773f63449934da54e5beba5e31d9f4211577" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.15.6" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +source-map@0.4.x: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +"statuses@>= 1.3.1 < 2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +token-stream@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +uglify-js@^2.6.1: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +vary@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +void-elements@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +with@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git "a/express/\344\275\277\347\224\250eventproxy\346\216\247\345\210\266\345\271\266\345\217\221/3.js" "b/express/\344\275\277\347\224\250eventproxy\346\216\247\345\210\266\345\271\266\345\217\221/3.js" new file mode 100644 index 0000000..4c4a996 --- /dev/null +++ "b/express/\344\275\277\347\224\250eventproxy\346\216\247\345\210\266\345\271\266\345\217\221/3.js" @@ -0,0 +1,36 @@ +/** + * Created by 斌 on 2017/3/13. + */ +const eventproxy = require('eventproxy'); +const superagent = require('superagent'); +const cheerio = require('cheerio'); +const url = require('url'); + +// let cnodeUrl = 'https://takigen.com'; +let cnodeUrl = 'http://api.jtuntech.com/event/2018/Q2/chuo/about3.html'; + +superagent + .get(cnodeUrl) + .end((err, res) => { + if (err) { + return console.error(err) + } + let topicUrls = []; + let $ = cheerio.load(res.text, {decodeEntities: false}); + + const a = [] + const b = [] + $('.col-lg-3.col-md-6 dd').each((idx, element) => { + a.push($(element).text()) + }) + $('.col-lg-9.col-md-6 dd').each((idx, element) => { + b.push($(element).html()) + }) + const vv = a.map((v, i) => { + return `
    +
    ${v}
    +
    ${b[i]}
    +
    ` + }) + console.log(vv) + }); diff --git "a/express/\344\275\277\347\224\250eventproxy\346\216\247\345\210\266\345\271\266\345\217\221/app2.js" "b/express/\344\275\277\347\224\250eventproxy\346\216\247\345\210\266\345\271\266\345\217\221/app2.js" new file mode 100644 index 0000000..ac97971 --- /dev/null +++ "b/express/\344\275\277\347\224\250eventproxy\346\216\247\345\210\266\345\271\266\345\217\221/app2.js" @@ -0,0 +1,86 @@ +/** + * Created by 斌 on 2017/3/13. + */ +const eventproxy = require( 'eventproxy'); +const superagent = require( 'superagent'); +const cheerio = require( 'cheerio'); +const url = require('url'); + +// let cnodeUrl = 'https://takigen.com'; +let cnodeUrl = 'http://imuntil.com'; + +superagent.get(cnodeUrl) + .end((err, res) => { + if (err) { + return console.error(err) + } + console.log(res.text) + // let topicUrls = []; + // let $ = cheerio.load(res.text); + // + // $('.Index__Solution .List__Horizontal a').each((idx, element) => { + // let $element = $(element); + // let href = $element.attr('href').slice(10, -5) + // // let href = url.resolve(cnodeUrl, $element.attr('href')); + // topicUrls.push(href); + // }); + // // topicUrls.splice(2, 38); + // console.log(topicUrls.join(' ')); + // + // let ep = new eventproxy(); + // + // // ep.after('user-points', topicUrls.length, function (users) { + // // users = users.map(user => { + // // let title = user[0].title, + // // href = user[0].href, + // // comment1 = user[0].comment1, + // // $ = cheerio.load(user[1]); + // // + // // let temp = $('#sidebar .user_card'); + // // return ({ + // // title:title, + // // href:href, + // // comment1:comment1, + // // user:temp.find('.user_name .dark').text().trim(), + // // points: temp.find('.floor .big').text().trim() + // // }) + // // }) + // // console.log('_______________________________________'); + // // console.log(users); + // // }) + // // + // ep.after('topic_html', topicUrls.length, function (topics) { + // + // topics = topics.map(topicPair => { + // let topicUrl = topicPair[0], + // topicHtml = topicPair[1], + // $ = cheerio.load(topicHtml); + // + // return ({ + // // title: $('.topic_full_title').text().trim(), + // // href:topicUrl, + // // comment1:$('.reply_content').eq(0).text().trim(), + // // author_link: url.resolve(cnodeUrl, $('.author_content').eq(0).find('.user_avatar').attr('href')), + // bg: $('#Content .HeadGroup .Caption').eq(0).text().trim() + // // bg: url.resolve(cnodeUrl, $('#Content .HeadGroup:first-child').css('backgroundUrl')) + // }) + // }) + // console.log('final'); + // console.log(topics); + // + // // topics.forEach(item => { + // // superagent.get(item.author_link).end((err, res) => { + // // ep.emit('user-points',[item, res.text]) + // // }) + // // }) + // }) + + // topicUrls.forEach(topicUrl => { + // superagent.get(topicUrl).end((err, res) => { + // console.log('fetch ' + topicUrl + ' successful'); + // ep.emit('topic_html', [topicUrl, res.text]) + // }) + // // superagent.get(topicUrl).end(ep.group('topic_html')); + // }) + }); + diff --git a/fs/copy.txt b/fs/copy.txt new file mode 100644 index 0000000..af192e6 --- /dev/null +++ b/fs/copy.txt @@ -0,0 +1,9 @@ +data to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to append \ No newline at end of file diff --git a/fs/input.txt b/fs/input.txt index cc58e13..ed3b73a 100644 Binary files a/fs/input.txt and b/fs/input.txt differ diff --git a/fs/l1.js b/fs/l1.js new file mode 100644 index 0000000..fb9e498 --- /dev/null +++ b/fs/l1.js @@ -0,0 +1,26 @@ +const fs = require('fs') +fs.appendFile('message.txt', 'data to append', err => { + if (err) throw err; + console.log('success'); +}) +try { + console.time('t1') + fs.appendFileSync('message.txt', '\nother data to append') + console.timeEnd('t1') + console.log('scs') +} catch (e) { + console.log(e); + throw e +} + +console.log(fs.constants); + +fs.copyFile('message.txt', 'copy.txt', fs.constants.COPYFILE_EXCL, err => { + if (err) throw err + console.log('copy success'); +}) + +fs.watch('input.txt', (eventType, filename) => { + console.log(eventType); + console.log(filename); +}) \ No newline at end of file diff --git a/fs/l2.js b/fs/l2.js new file mode 100644 index 0000000..ad1e7e9 --- /dev/null +++ b/fs/l2.js @@ -0,0 +1,46 @@ +const buffer = Buffer.alloc(1024) +const fs = require('fs') +const { promisify } = require('util') + +console.time('async') +fs.open('message.txt', 'r+', (err, fd) => { + if (err) throw err + fs.read(fd, buffer, 0, buffer.length, 0, (err, bytesRead, buf) => { + if (err) throw err + console.log(bytesRead) + console.log(buf.toString()); + console.timeEnd('async') + }) +}) + +promisify(fs.open)('input.txt', 'r+') + .then(async fd => { + const { bytesRead, buffer } = await promisify(fs.read)(fd, Buffer.alloc(1024), 0, 1024, 0) + console.log(bytesRead) + console.log(buffer.toString('utf-8')); + // await promisify(fs.appendFile)(fd, buffer) + await promisify(fs.write)(fd, buffer, 0, buffer.length, 0) + // const res = await promisify(fs.access)('new.txt') + // console.log('access:', res); + await promisify(fs.writeFile)('new.txt', 'lalalalala') + await promisify(fs.close) + }) + .catch(e => { + console.log(e) + }) + +promisify(fs.readFile)('message.txt') + .then(data => { + console.log(data.toString()) + }) + .catch(err => { + console.log(err); + }) + +promisify(fs.realpath)('message.txt') + .then(link => { + console.log('link:', link) + }) + .catch(err => { + console.log('err:', err); + }) \ No newline at end of file diff --git a/fs/message.txt b/fs/message.txt new file mode 100644 index 0000000..45d133c --- /dev/null +++ b/fs/message.txt @@ -0,0 +1,9 @@ +data to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append +other data to appenddata to append \ No newline at end of file diff --git a/fs/new.txt b/fs/new.txt new file mode 100644 index 0000000..ca349d3 --- /dev/null +++ b/fs/new.txt @@ -0,0 +1 @@ +lalalalala \ No newline at end of file diff --git a/global/main.js b/global/main.js deleted file mode 100644 index 03a1fb7..0000000 --- a/global/main.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Created by 斌 on 2017/2/18. - */ -process.on('exit', function (code) { - setTimeout(function () { - console.log('改代码不会执行'); - }, 0); - console.log('退出码为:', code); -}); -console.log('程序执行结束'); - - -process.stdout.write('Hello World' + '\n'); -process.argv.forEach(function (val, index, array) { - console.log(index + ':' + val); -}); -console.log('node.exe:' + process.execPath); -console.log('平台系统:' + process.platform); -console.log(process.version); -console.log(process.arch); - -console.log('---------------------------'); - -console.log('当前目录:' + process.cwd()); -console.log(process.memoryUsage()); \ No newline at end of file diff --git a/hello/counter.js b/hello/counter.js deleted file mode 100644 index a6fa4e1..0000000 --- a/hello/counter.js +++ /dev/null @@ -1,6 +0,0 @@ -var i = 0; -function count() { - return ++i; -} - -exports.count = count; \ No newline at end of file diff --git a/hello/hello.js b/hello/hello.js deleted file mode 100644 index 471534f..0000000 --- a/hello/hello.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Created by 斌 on 2017/2/18. - */ -function Hello() { - var name ; - this.setName = function (thyName) { - name = thyName; - }; - this.sayHello = function () { - console.log('Hello ' + name); - }; -} -module.exports = Hello; \ No newline at end of file diff --git a/hello/main.js b/hello/main.js deleted file mode 100644 index 104aee5..0000000 --- a/hello/main.js +++ /dev/null @@ -1,10 +0,0 @@ -var counter1 = require('./counter'); -var counter2 = require('./counter'); -console.log(counter1.count()); -console.log(counter2.count()); -console.log(counter2.count()); - -var Hello = require('./hello'); -hello = new Hello(); -hello.setName('jack'); -hello.sayHello(); \ No newline at end of file diff --git a/json-api/01.js b/json-api/01.js deleted file mode 100644 index 678b7c3..0000000 --- a/json-api/01.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Created by 斌 on 2017/3/8. - */ -var http = require('http'); -http.createServer(function (req, res) { - res.writeHead(200, {'Content-Type':'application/json'}); - res.end('{"name":"jack","age":"11",}'); -}).listen(3000, '127.0.0.1'); \ No newline at end of file diff --git a/koa/HelloKoa2/.babelrc b/koa/HelloKoa2/.babelrc new file mode 100644 index 0000000..69453dd --- /dev/null +++ b/koa/HelloKoa2/.babelrc @@ -0,0 +1,11 @@ +{ + "env": { + "test": { + "presets": ["es2015-node5"], + "plugins": [ + "transform-async-to-generator", + "syntax-async-functions" + ] + } + } +} \ No newline at end of file diff --git a/koa/HelloKoa2/app.js b/koa/HelloKoa2/app.js new file mode 100644 index 0000000..afddd5d --- /dev/null +++ b/koa/HelloKoa2/app.js @@ -0,0 +1,166 @@ +const Koa = require('koa') +const app = new Koa() +const views = require('koa-views') +const json = require('koa-json') +const onerror = require('koa-onerror') +const bodyparser = require('koa-bodyparser') +const logger = require('koa-logger') +const mongoose = require('mongoose') +// const koaBody = require('koa-body') +const session = require('koa-session') +const jwt = require('koa-jwt') +const cors = require('koa2-cors') +const orderCtrl = require('./app/controllers/order-controller') + +const credentials = require('./lib/credentials') + +const https = require('https') +// const http = require('http') +const enforceHttps = require('koa-sslify') +const fs = require('fs') +const os = require('os') + +const responseFormatter = require('./middlewares/response-formatter') +const phoneValidate = require('./middlewares/request-validate') +const jwtMid = require('./middlewares/jwt') +require('./lib/auth') + +const index = require('./routes/index') +const users = require('./routes/users') +const api = require('./routes/api') + +// Force HTTPS on all page +app.use(enforceHttps()) + +// error handler +onerror(app) + +// middlewares +// app.use(koaBody({ multipart: true })) +app.use(bodyparser({ + enableTypes: ['json', 'form', 'text'] +})) +app.keys = ['session-key'] +app.use(session({ + maxAge: 1000 * 60 * 60 +}, app)) +app.use(json()) +app.use(logger()) +app.use(require('koa-static')(__dirname + '/public')) + +app.use(views(__dirname + '/views', { + extension: 'pug' +})) + +app.use(cors({ + origin: function (ctx) { + // return 'http://localhost:8000' + return 'https://localhost:3000' + }, + exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'], + maxAge: 5, + credentials: true, + allowMethods: ['GET', 'POST', 'DELETE', 'PUT'], + allowHeaders: ['Content-Type', 'Authorization', 'Accept'], +})) + +// logger +app.use(async (ctx, next) => { + const start = new Date() + await next() + const ms = new Date() - start + console.log(`${ctx.method} ${ctx.url} - ${ms}ms`) +}) + +// format response +app.use(responseFormatter('^/api')) +app.use(phoneValidate) +app.use(jwtMid) + +// routes +app.use(index.routes(), index.allowedMethods()) +app.use(users.routes(), users.allowedMethods()) +// admin +app.use( + jwt({ + cookie: '_st', + secret: credentials.sysCookieSecret + }) + .unless({ + custom({ + originalUrl: url + }) { + console.log(url) + if (url === '/api/sys/login' || url === '/api/sys/register') return true + if (url.indexOf('/sys') >= 0) return false + return true + } + }) +) +// user +app.use( + jwt({ + cookie: '_token', + secret: credentials.cookieSecret + }) + .unless({ + path: [ + /^\/api\/users\/[code|register|login|is\-exist]/, + /^\/api\/pros/, + /^\/api\/sys\/[login|register]/, + /^\/api\/sys\/coupon/ + ] + }) +) +app.use(api.routes(), api.allowedMethods()) + +// error-handling +app.on('error', (err, ctx) => { + console.error('server error', err, ctx) +}); + + +mongoose.Promise = global.Promise +mongoose.connect('mongodb://zhin:13140054yyz@106.14.8.246:27017/start', { + useMongoClient: true +}) + +// ssl options +const { + key, + cert +} = credentials.ssl[os.type().toLowerCase()] || {} +if (!key) { + throw new Error('未知的操作系统') +} +const options = { + key: fs.readFileSync(key), + cert: fs.readFileSync(cert) +} + +// http.createServer(app.callback()).listen(3003) +const sslServer = https.createServer(options, app.callback()).listen(3002) + +const io = require('socket.io')(sslServer) +const gi = require('./utils/socket') +const nsp = gi.nsp = io.of('/socket') +nsp.on('connection', socket => { + console.log('socket connected....') + nsp.emit('msg', 'socket connected...') + orderCtrl.toBeDelevred() + .then(res => { + nsp.emit('msg', { + count: res + }) + }) + .catch(e => { + nsp.emit('msg', { + count: 0 + }) + }) + // socket.emit('msg', '11') + // socket.broadcast.emit('msg', '22') + // socket.to('test').emit('msg', '33') +}) + +module.exports = app \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/address-controller.js b/koa/HelloKoa2/app/controllers/address-controller.js new file mode 100644 index 0000000..4a96ec3 --- /dev/null +++ b/koa/HelloKoa2/app/controllers/address-controller.js @@ -0,0 +1,159 @@ +const _ = require('lodash') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const User = require('../../models/user') +const Adr = require('../../models/address') +const { iv } = require('../../lib/cc') + +class AddressController { + /** + * GET + * 获取所有地址 + * params = { uid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async getAdrList (ctx, next) { + console.log('获取所有地址') + const { uid } = ctx.params + iv(uid) + const list = await Adr.find({ _owner: uid }) + .sort('-date') + .select('-__v') + .lean() + .exec() + ctx.body = { + data: list + } + } + + /** + * GET + * 获取地址详细信息 + * params = { aid, uid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async getAdr (ctx, next) { + const { aid, uid } = ctx.params + iv(aid, uid) + const adr = await Adr.findById(aid).select('-__v -date').lean().exec() + console.log(adr) + ctx.body = { + data: adr + } + } + + /** + * POST + * 新增地址 + * body = { province, city, detail, name, phone, label(optional), isDefault(optional) } + * params = { uid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async addAdr (ctx, next) { + console.log('新增地址') + const { province, city, detail, name, phone, label = '', isDefault = false } = ctx.request.body + const { uid: _owner } = ctx.params + iv(_owner) + if (!province || !city || !detail || !name || !phone) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const user = await User.findById(_owner).exec() + if (!user) { + throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + } + const date = new Date() + if (isDefault) { + const res = await Adr.where({ _owner, isDefault: true }) + .setOptions({ multi: true, overwrite: true }) + .update({ isDefault: false }) + .exec() + console.log(res) + } + const adr = await Adr.create({ _owner, province, city, detail, name, phone, label, isDefault, date }) + ctx.body = { + data: _.omit(adr.toObject(), '__v') + } + } + + /** + * PUT + * 更新地址 + * body = { province, city, detail, name, phone, label(optional), isDefault(optional) } + * params = { aid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async modifyAdr (ctx, next) { + const { aid, uid } = ctx.params + iv(aid, uid) + const { province, city, detail, name, phone, label = '', isDefault = false } = ctx.request.body + if (!province || !city || !detail || !name || !phone) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const adr = await Adr.findByIdAndUpdate(aid, { + province, city, detail, name, phone, label, isDefault + }).select('-__v -date').lean().exec() + // const adr = await Adr.findById(aid).exec() + if (!adr) { + throw new ApiError(ApiErrorNames.ADDRESS_NOT_EXIST) + } + ctx.body = { + data: { ...adr, province, city, detail, name, phone, label, isDefault } + } + } + + /** + * PUT + * 更新default + * body = { isDefault } + * params = { aid, uid } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async setDefault (ctx, next) { + console.log('更新默认地址') + const { aid, uid } = ctx.params + iv(aid, uid) + const { isDefault } = ctx.request.body + await Adr + .where({ _owner: uid, isDefault: true }).update({ isDefault: false }).exec() + const adr = await Adr + .where({ _id: aid }).update({ isDefault: !isDefault }).exec() + if (!adr) throw new ApiError(ApiErrorNames.ADDRESS_NOT_EXIST) + ctx.body = { + data: 'ok' + } + // Adr.findByIdAndUpdate(aid, { isDefault: !!isDefault }, (err, doc) => { + // console.log(err); + // console.log(doc); + // }) + } + + /** + * DELETE + * 删除地址 + * params = { aid } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async delAdr (ctx, next) { + const { aid, uid } = ctx.params + iv(aid, uid) + const adr = await Adr.findByIdAndRemove(aid).exec() + if (!adr) throw new ApiError(ApiErrorNames.ADDRESS_NOT_EXIST) + ctx.body = { + data: 'ok' + } + } +} + +module.exports = AddressController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/admin-controller.js b/koa/HelloKoa2/app/controllers/admin-controller.js new file mode 100644 index 0000000..3deb15b --- /dev/null +++ b/koa/HelloKoa2/app/controllers/admin-controller.js @@ -0,0 +1,60 @@ +const Admin = require('../../models/admin') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const jwt = require('jsonwebtoken') +const credentials = require('../../lib/credentials') + +function setToken (ctx, account) { + const token = jwt.sign({ account }, credentials.sysCookieSecret, { + expiresIn: '7d' + }) + ctx.cookies.set('_st', token, { + signed: true, + maxAge: 1000 * 60 * 60 * 24 * 7, + httpOnly: true + }) + return token +} +class AdminController { + /** + * POST + * 管理员登录 + * body = { account, password } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async login (ctx, next) { + console.log('sys 登录') + const { account, password } = ctx.request.body + if (!account || !password) throw new ApiError(ApiErrorNames.NEED_ACCOUNT_AND_PASSWORD) + const admin = await Admin.findOne({ account }).exec() + if (!admin || !admin.validPassword(password)) { + throw new ApiError(ApiErrorNames.WRONG_ACCOUNT_OR_PASSWORD) + } + admin.token = setToken(ctx, account) + await admin.save() + ctx.body = { + message: '登录成功' + } + } + static async register (ctx, next) { + const user = await Admin.findOne({ account: 'admin' }).exec() + if (!user) { + const token = setToken(ctx, 'admin') + await Admin.create({ account: 'admin', password: Admin.encryptPassword('k0kEwcW@'), token }) + } + } + static async logout (ctx, next) { + console.log('登出') + ctx.cookies.set('_st', '', { + signed: true, + maxAge: 1000 * 60 * 60 * 24 * 7, + httpOnly: true + }) + ctx.body = { + message: '已退出登录' + } + } +} +module.exports = AdminController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/cart-controller.js b/koa/HelloKoa2/app/controllers/cart-controller.js new file mode 100644 index 0000000..83d0ff1 --- /dev/null +++ b/koa/HelloKoa2/app/controllers/cart-controller.js @@ -0,0 +1,162 @@ +const _ = require('lodash') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const Cart = require('../../models/cart') +const User = require('../../models/user') +const { iv } = require('../../lib/cc') + +class CartController { + /** + * GET + * 获取购物车 + * params = { uid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async getCart (ctx, next) { + console.log('get cart') + const { uid } = ctx.params + iv(uid) + const cart = await Cart + .findOne({ _owner: uid }) + .exec() + // 购物车中的产品详情 + const pros = await cart.getCart() + ctx.body = { + data: { ...cart.toObject(), products: pros } + } + } + + /** + * POST + * 向购物车中添加商品 + * params = { uid } + * body = { sku } + * @param ctx + * @param next + * @return {Promise.} + */ + static async addToCart (ctx, next) { + console.log('add to cart') + const { uid } = ctx.params + const { sku } = ctx.request.body + iv(uid) + if (!sku) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const cart = await Cart.findOne({ _owner: uid }).exec() + if (!cart) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + const pros = [...cart.products] + const date = new Date() + const has = _.find(pros, { sku }) + if (!has) { + pros.push({ sku, count: 1, chosen: true, date }) + } else { + has.count += 1 + } + cart.products = pros + const _new = await cart.save() + ctx.body = { + data: _.omit(_new.toObject(), ['__v', 'date']) + } + } + + /** + * PUT + * 修改购物车中的商品(数量,选中) + * params = { uid, cid } + * body = { count, chosen } + * @param ctx + * @param next + * @return {Promise.} + */ + static async modifyCart (ctx, next) { + console.log('update cart') + const { uid, cid } = ctx.params + iv(uid, cid) + const { count ,chosen } = ctx.request.body + if (count === undefined && chosen === undefined) { + return + } + const cart = await Cart.findOne({ _owner: uid }).exec() + if (!cart) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + if (count !== undefined) { + cart.products.id(cid).count = ~~count + } + if (chosen !== undefined) { + cart.products.id(cid).chosen = !!chosen + } + const _new = await cart.save() + ctx.body = { + data: _.omit(_new.toObject(), ['__v', 'date']) + } + } + + /** + * DELETE + * 删除cart中的商品 + * params = { uid, cid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async deleteFromCart (ctx, next) { + console.log('delete') + const { uid, cid } = ctx.params + iv(uid, cid) + const cart = await Cart.findOne({ _owner: uid }).exec() + if (!cart) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + await cart.products.id(cid).remove() + const _new = await cart.save() + ctx.body = { + data: _.omit(_new.toObject(), ['__v', 'date']) + } + } + + /** + * DELETE + * params = { uid } + * 清空购物车 + * @param ctx + * @param next + * @return {Promise.} + */ + static async clearCart (ctx, next) { + console.log('clear cart') + const { uid } = ctx.params + iv(uid) + const cart = await Cart.findOne({ _owner: uid }).exec() + if (!cart) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + cart.products = [] + const _new = await cart.save() + ctx.body = { + data: _.omit(_new.toObject(), ['__v', 'date']) + } + } + + /** + * PUT + * 全选或者全不选商品 + * params = { uid } + * body = { chosen } + * @param ctx + * @param next + * @return {Promise.} + */ + static async toggleChoose (ctx, next) { + console.log('toggle choose') + const { uid } = ctx.params + iv(uid) + const cart = await Cart.findOne({ _owner: uid }).exec() + if (!cart) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + const chosen = !!ctx.request.body.chosen + cart.products.forEach(p => { + p.chosen = chosen + }) + const _new = await cart.save() + ctx.body = { + data: _.omit(_new.toObject(), ['__v', 'date']) + } + } +} + +module.exports = CartController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/coupon-controller.js b/koa/HelloKoa2/app/controllers/coupon-controller.js new file mode 100644 index 0000000..b4e6c8b --- /dev/null +++ b/koa/HelloKoa2/app/controllers/coupon-controller.js @@ -0,0 +1,101 @@ +const Coupon = require('../../models/coupon') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const _ = require('lodash') +const { iv } = require('../../lib/cc') + +class CouponController { + // sys + /** + * GET: api/sys/coupon + * 获取优惠券列表 + * @param ctx + * @param next + * @return {Promise.} + */ + static async listCoupons (ctx, next) { + console.log('list coupons') + const coupons = await Coupon.find() + .sort('-created') + .select('-__v') + .lean() + .exec() + ctx.body = { + data: coupons + } + } + + /** + * POST + * 新增coupon + * body = { start, end, method, apply, count?, name, detail } + * @param ctx + * @param next + * @return {Promise.} + */ + static async addCoupon (ctx, next) { + console.log('新增coupon') + const { start, end, method, apply, count, name, detail } = ctx.request.body + const coupon = new Coupon({ + start, end, method, apply, count, name, detail, created: Date.now(), kid: `KD-${+Date.now()}` + }) + const _new = await coupon.save() + ctx.body = { + data: _.omit(_new.toObject(), '__v') + } + } + + /** + * PUT: api/sys/coupon/:kid + * 编辑coupon + * params = { kid } + * body = { name?, detail?, start?, end?, method?, apply? } + * @param ctx + * @param next + * @return {Promise.} + */ + static async editCoupon (ctx, next) { + console.log('编辑coupon') + const kid = ctx.params.kid + iv(kid) + const body = _.omit(ctx.request.body, ['_id', 'kid', 'created']) + const old = await Coupon.findById( kid ).exec() + if (!old) throw new Error('优惠券不存在') + for (const k in body) { + if (body[k] === undefined) continue + old[k] = body[k] + } + const _new = await old.save() + ctx.body = { + data: _.omit(_new.toObject(), '__v') + } + } + + /** + * DELETE + * 删除coupon + * params = { kid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async deleteCoupon (ctx, next) { + console.log('删除coupon') + const { kid } = ctx.params + iv(kid) + try { + const res = await Coupon.remove({ _id: kid }).exec() + const { result: { n } } = res + ctx.body = { + message: `成功删除${n}条数据` + } + } catch (err) { + throw err + } + } + // client + // 使用优惠券(count - 1) + +} + +module.exports = CouponController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/likes-controller.js b/koa/HelloKoa2/app/controllers/likes-controller.js new file mode 100644 index 0000000..f659e00 --- /dev/null +++ b/koa/HelloKoa2/app/controllers/likes-controller.js @@ -0,0 +1,73 @@ +const _ = require('lodash') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const User = require('../../models/user') +const Product = require('../../models/product') +const { iv } = require('../../lib/cc') + +class LikeController { + static async addLike (ctx, next) { + console.log('添加收藏') + const { uid } = ctx.params + const { sku } = ctx.request.body + iv(uid) + if (!sku) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const user = await User.findById(uid).exec() + if (!user) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + const p = await Product.findOne({ sku }).select('_id').lean().exec() + if (!p) throw new ApiError(ApiErrorNames.PRODUCT_NOT_EXIST) + const list = [...user.likes] + if (!list.includes(sku)) { + list.unshift(sku) + user.likes = list + await user.save() + } + ctx.body = { + msg: '添加成功' + } + } + static async deleteLike (ctx, next) { + console.log('删除收藏') + const { uid } = ctx.params + const { sku } = ctx.request.body + iv(uid) + if (!sku) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const user = await User.findById(uid).exec() + if (!user) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + const list = [...user.likes] + const d = _.remove(list, s => s === sku) + if (d.length) { + user.likes = list + await user.save() + ctx.body = { + msg: '删除完成' + } + } else { + ctx.body = { + msg: `收藏中没有sku为${sku}的产品` + } + } + } + + /** + * GET + * 获取收藏列表 + * params = { uid } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async listLikes (ctx, next) { + console.log('获取全部收藏') + const { uid } = ctx.params + iv(uid) + const user = await User.findById(uid).exec() + if (!user) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + const list = await user.getLikes() + ctx.body = { + data: list + } + } +} + +module.exports = LikeController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/order-controller.js b/koa/HelloKoa2/app/controllers/order-controller.js new file mode 100644 index 0000000..8e7ee16 --- /dev/null +++ b/koa/HelloKoa2/app/controllers/order-controller.js @@ -0,0 +1,280 @@ +const _ = require('lodash') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const { iv } = require('../../lib/cc') +const Order = require('../../models/order') +const Product = require('../../models/product') +const Address = require('../../models/address') +const User = require('../../models/user') +const io = require('../../utils/socket') +const add2Cycle = require('../../utils/cycleQueue') + +// 用户是否存在 +async function ifUser (uid) { + const user = await User.findById(uid).exec() + if (!user) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + return { nick: user.nick, phone: user.phone } +} +// 地址是否存在 +async function ifAdr (aid, uid) { + const adr = await Address + .findById(aid) + .select('province city detail phone name _owner') + .lean() + .exec() + if (!adr || uid !== adr._owner) throw new ApiError(ApiErrorNames.ADR_NOT_EXIST_OR_NOT_MATCH_USER) + return adr +} +// 获取产品 +async function getProducts (body) { + const ps = await Product + .find() + .where('sku') + .in(body.map(p => p.sku)) + // .select('sku en cn truePrice images content stock') + .exec() + if (ps.length !== body.length) throw new ApiError(ApiErrorNames.PRODUCT_NOT_EXIST) + let total = 0, amount = 0 + const promises = ps.map(async p => { + const sku = p.sku + const productInBody = _.find(body, { sku }) + if( productInBody.count > p.stock) throw new ApiError(ApiErrorNames.LACK_OF_STOCK) + p.stock = p.stock - productInBody.count + await p.save() + const product2Res = { ..._.pick(p.toObject(), ['sku', 'en', 'cn', 'truePrice', 'images', 'content']), ...productInBody } + product2Res.image = product2Res.images[0] || '' + delete product2Res._id + total += product2Res.count + amount += product2Res.truePrice * product2Res.count + return product2Res + }) + const products = await Promise.all(promises) + return { products, amount, total } +} + +class OrderController { + /** + * POST: api/users/:uid/order + * 下单 + * params = { uid } + * body = { aid
    , products = [ { sku, count } ], kid } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async placeOrder (ctx, next) { + console.log('下单'); + const { uid } = ctx.params + const { aid, products: body, kid } = ctx.request.body + // id是否合法 + iv(uid, aid) + // products是否正确 + if (!_.isArray(body) || !body.length) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + // 用户是否存在 + const { nick, phone } = await ifUser(uid) + // 地址是否存在 + const adr = await ifAdr(aid, uid) + // 获取产品 + const { total, amount, products } = await getProducts(body) + const date = new Date() + const orderNumber = `0${+date}${Math.floor(Math.random() * 10000)}` + const show = true + const order = new Order({ + _owner: uid, + orderNumber, + date, + products, + total, + amount, + express: 0, + status: 0, + address: adr, + show, + _ownerNick: nick, + _ownerPhone: phone + }) + const _new = await order.save() + add2Cycle({ orderNumber, body }) + ctx.body = { + data: _.pick(_new.toObject(), ['orderNumber', 'total', 'amount', 'express']) + } + } + + /** + * GET + * 查看订单列表 + * params = { uid } + * query = { page, per_page } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async listOrders (ctx, next) { + console.log('order list') + const { uid } = ctx.params + const { page = 1, perPage = 20 } = ctx.request.query + iv(uid) + const orders = await Order + .find({ _owner: uid }) + .where({ show: true }) + .skip((page - 1) * perPage) + .limit(perPage) + .sort('-date') + .select('orderNumber date products total amount express status') + .lean() + .exec() + console.log(orders) + ctx.body = { + data: orders + } + } + + /** + * GET + * 查看订单详细 + * params = { uid, orderNumber } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async orderDetail (ctx, next) { + console.log('order detail'); + const { uid, orderNumber } = ctx.params + iv(uid) + if (!orderNumber || !/^0\d{17}$/.test(orderNumber)) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const order = await Order + .findOne({ orderNumber }) + .select('-__v') + .lean() + .exec() + if (!order) { + throw new ApiError(ApiErrorNames.ORDER_NOT_EXIST) + } + ctx.body = { + data: order + } + } + + /** + * PUT + * 修改订单(状态) + * 伪删除订单 (改为不可见) + * params = { uid, orderNumber } + * body = { del: Boolean, status: Number } + * status: [0, 1, 2, 3, 4, 5, 6, 7] // 未支付,已支付(待发货),已发货,已完成,已取消, 申请退款, 已退款, 退款失败 + * @param ctx + * @param next + * @returns {Promise.} + */ + static async modifyOrder (ctx, next) { + console.log('订单删除或者状态修改') + const { uid, orderNumber } = ctx.params + iv(uid) + if (!orderNumber || !/^0\d{17}$/.test(orderNumber)) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const { del, status } = ctx.request.body + if (del === undefined && status === undefined) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + if (del) { + const { n, nModified } = await Order.update({ orderNumber }, { show: false }) + if (!n) throw new ApiError(ApiErrorNames.ORDER_NOT_EXIST) + ctx.body = { + message: '删除成功', + data: `发现${n}订单,删除${nModified}订单` + } + return + } + const { n, nModified } = await Order.update({ orderNumber }, { status }) + if (!n) throw new ApiError(ApiErrorNames.ORDER_NOT_EXIST) + if (~~status === 1) { + console.log('新的待发货订单') + const count = await OrderController.toBeDelevred() + // if (count !== io.count) { + + // } + io.nsp.emit('new-order', '新的待发货订单') + io.nsp.emit('msg', { count }) + io.count = count + } + ctx.body = { + message: '更新成功', + data: `发现${n}订单,更新${nModified}订单` + } + } + + /** + * GET + * 获取订单列表(sys) + * query = { size, page, status } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async getOrderList (ctx, next) { + console.log('获取订单列表(sys)') + const { size = 20, page = 1, status, field, q } = ctx.query + const count = await Order.count(status ? { status } : {}) + const s = {} + if (status !== undefined) { + s.status = status + } + if (field && ['orderNumber', '_ownerPhone', '_ownerNick'].indexOf(field) >= 0 && q) { + s[field] = {$regex: new RegExp(`^${q}`) } + } + console.log(s) + const orders = await Order + .find(s) + .sort('-date') + .skip((page - 1) * size) + .limit(~~size) + .select('-__v') + .lean() + .exec() + ctx.body = { + data: { + orders, + count, + total: Math.ceil(count / size), + current: page, + size + } + } + } + + /** + * 非接口 + * 仅供socket使用 + */ + static async toBeDelevred () { + console.log('socket 使用,获取是否有未发货订单') + const count = await Order.count({ status: 1 }) + io.count = count + return count + } + + /** + * PUT + * 确认发货 (sys) + * params = { on } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async deliverGoods (ctx, next) { + console.log('确认发货 (sys)') + const { on } = ctx.params + if (!on || !/^0\d{17}$/.test(on)) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const order = await Order.findOne({ orderNumber: on }).exec() + if (!order) throw new ApiError(ApiErrorNames.ORDER_NOT_EXIST) + if (~~order.status !== 1) throw new ApiError(ApiErrorNames.UNKNOWN_ERROR) + order.status = 2 + await order.save() + console.log('订单发货,代发货订单数量-1') + const count = io.count - 1 + io.nsp.emit('msg', { count }) + io.count = count + ctx.body = { + message: '修改成功' + } + } +} + +module.exports = OrderController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/product-controller.js b/koa/HelloKoa2/app/controllers/product-controller.js new file mode 100644 index 0000000..ac75901 --- /dev/null +++ b/koa/HelloKoa2/app/controllers/product-controller.js @@ -0,0 +1,185 @@ +const _ = require('lodash') +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const Product = require('../../models/product') +// const fs = require('fs') +// const path = require('path') + +class ProductController { + /** + * GET + * 获取产品列表(筛选) + * query ? = { flag = { price, sales } type sort = { desc, asc } action = { recommend, hot } } + * @param ctx + * @param next + * @return {Promise.} + */ + static async getProList (ctx, next) { + console.log('产品列表 ') + const { flag, type, sort = 'desc', action } = ctx.request.query + if (action && action.indexOf(['recommend', 'hot']) > -1) { + const pros = await Product.find({ [action]: true }) + .select('-__v') + .limit(action === 'hot' ? 2 : 10) + .exec() + ctx.body = { + data: pros.length ? pros.map(p => p.toObject({ virtuals: true })) : [] + } + return + } + let q = (type && type !== 'null') ? Product.find({ _type: type }) : Product.find() + const s = sort === 'asc' ? '' : '-' + const f = (flag && flag !== 'null') ? `${flag} date` : 'date' + const pros = await q + .sort(`${s}${f}`) + .select('-__v') + .exec() + ctx.body = { + data: pros.map(p => p.toObject({ virtuals: true })) + } + } + + /** + * GET + * 获取产品详细 + * params = { sku || pid } + * @param ctx + * @param next + * @return {Promise.} + */ + static async getProDetail (ctx, next) { + console.log('产品详情') + const { sku } = ctx.params + if (!sku) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const pro = await Product + .findOne({ sku: sku.toUpperCase() }) + .select('-__v') + .exec() + if (!pro) throw new ApiError(ApiErrorNames.PRODUCT_NOT_EXIST) + ctx.body = { + data: { ...pro.toObject({ virtuals: true }), truePrice: pro.truePrice } + } + } + /** + * GET + * 猜你喜欢 + * query = { type, sku } + * @param ctx + * @param next + * @return {Promise.} + */ + static async maybeLike (ctx, next) { + const { type, sku } = ctx.request.query + let pros = await Product + .find({ _type: type }) + .nor([{ sku: sku.toUpperCase() }]) + .select('-__v') + .exec() + if (pros.length < 2) { + pros = await Product + .find() + .nor([{ sku: sku.toUpperCase() }]) + .select('-__v') + .exec() + } + const mb = _.shuffle(pros).slice(0, 2).map(p => p.toObject({ virtuals: true })) + ctx.body = { + data: mb + } + } + + // sys + // 增,删,改 + /** + * POST + * 新增产品 + * body = { sku... } + * @param ctx + * @param next + * @return {Promise.} + */ + static async addPro (ctx, next) { + const { sku, ...rest } = ctx.request.body + if (!sku) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const date = new Date() + const pro = await Product + .create({ sku: sku.toUpperCase(), date, update: date, ...rest }) + ctx.body = { + data: _.omit(pro.toObject(), '__v') + } + } + + + /** + * PUT + * 更新产品 + * params = { sku } + * body = { en, cn, price, type, ...rest } + * @param ctx + * @param next + * @return {Promise.} + */ + static async modifyPro (ctx, next) { + const body = ctx.request.body + const sku = ctx.params.sku + if (_.isEmpty(body)) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const old = await Product + .findOne({ sku: sku.toUpperCase() }) + .exec() + const ableUpdate = _.omit(body, ['_id', 'sku', 'date', 'update', 'sales', 'like', 'cart', 'truePrice']) + if (!old) throw new ApiError(ApiErrorNames.PRODUCT_NOT_EXIST) + for (let k in ableUpdate) { + if (body[k] === undefined) continue + old[k] = body[k] + } + old.update = new Date() + const _new = await old.save() + ctx.body = { + data: _.omit(_new.toObject({ virtuals: true }), '__v') + } + } + + /** + * DELETE + * 删除产品 + * params = { sku } + * @param ctx + * @param next + * @return {Promise.} + */ + static async delPro (ctx, next) { + const sku = ctx.params.sku + if (!sku) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const { result } = await Product + .remove({ sku: sku.toUpperCase() }) + ctx.body = { + message: '删除成功', + data: `已删除${result.n}条数据` + } + } + + /** + * POST + * 上传图片 + * 仅仅处理图片的io,不会修改数据库。所有的图片都是post,不会存在覆盖的现象。 + * 数据的更新由后续的接口来处理。 + * @param ctx + * @param next + * @returns {Promise.} + */ + static async productImage (ctx, next) { + if ('POST' !== ctx.method) return await next() + const { sku } = ctx.params + const path = `/images/pro-pics/${sku.toUpperCase()}/${ctx.req.file.filename}` + // const path = ctx.req.files.map(f => `/images/pro-pics/${sku.toUpperCase()}/${f.filename}`) + ctx.body = { + data: path + } + } +} + +module.exports = ProductController \ No newline at end of file diff --git a/koa/HelloKoa2/app/controllers/user-controller.js b/koa/HelloKoa2/app/controllers/user-controller.js new file mode 100644 index 0000000..e734027 --- /dev/null +++ b/koa/HelloKoa2/app/controllers/user-controller.js @@ -0,0 +1,396 @@ +const ApiError = require('../error/ApiError') +const ApiErrorNames = require('../error/ApiErrorNames') +const User = require('../../models/user') +const Cart = require('../../models/cart') +const fs = require('fs'); +const os = require('os'); +const path = require('path'); +const _ = require('lodash') +const jwt = require('jsonwebtoken') +const credentials = require('../../lib/credentials') +const regs = require('../../lib/common').regs + +function setToken(phone, ctx) { + const token = jwt.sign({ phone }, credentials.cookieSecret, { + expiresIn: '7d' + }) + ctx.cookies.set('_token', token, { + signed: true, + maxAge: 1000 * 60 * 60 * 24 * 7, + httpOnly: true + }) + return token +} +// 创建购物车 +createCart = async function (_owner) { + const date = new Date() + const cart = new Cart({ _owner, date }) + await cart.save() + return true +} +// uid是否合法 +function validUID(uid) { + if (!regs.objectId.reg.test(uid)) throw new ApiError(ApiErrorNames.WRONG_ID) +} +// 验证码过期时间1min +const timeout = 1000 * 60 +class UserController { + /** + * GET + * /api/users/:ip + * 获取用户信息 + * params = { ip (phone, uid)} + * @param ctx + * @param next + * @returns {Promise.} + */ + static async getUser (ctx, next) { + console.log('获取用户信息') + const { ip } = ctx.params + if (!ip) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + // id or phone + const { phone ,objectId } = regs + const isId = objectId.reg.test(ip) + const isPhone = phone.reg.test(ip) + if (!isId && !isPhone) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const q = isId ? User.findById(ip) : User.findOne({ phone: ip }) + const user = await q.select('nick phone _id').exec() + // const token = ctx.cookies.get('_token', { signed: true }) + // const user = await User.findOne({ token }).select('nick phone _id').exec() + ctx.body = { data: { user } } + } + + /** + * GET + * 获取验证码 + * /api/users/code + * 获取验证码 + * @param ctx + * @param next + * @returns {Promise.} + */ + static async getCode (ctx, next) { + console.log('获取验证码') + const code = Math.floor(Math.random() * 1000000) + // if (!ctx.session.code || !ctx.session.code.result) { + ctx.session.code = { result: code, timeout: Date.now() + timeout } + console.log(code) + // } + ctx.body = { + data: code + } + } + + /** + * GET + * 查询手机号对应的用户是否存在 + * /api/users/is-exist + * query = { phone } + * @param ctx + * @param next + * @return {Promise.} + */ + static async isExist (ctx, next) { + console.log('查询手机号对应的用户是否存在') + const { phone } = ctx.query + if (!regs.phone.reg.test(phone)) throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + const user = await User.findOne({ phone }).exec() + ctx.body = { + data: +!!user + } + } + + /** + * POST + * /api/users/register + * 用户注册 + * body = { nick, phone, password } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async register (ctx, next) { + console.log('用户注册') + const { nick, phone, password } = ctx.request.body + const user = await User.findOne({ phone }).exec() + if (user) { + throw new ApiError(ApiErrorNames.THE_PHONE_WAS_REGISTERED) + } + if (!nick || !phone || !password) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const token = setToken(phone, ctx) + const created = new Date() + const bt = User.encryptPassword(password) + const _new = await User.create({ nick, phone, password: bt, created, token }) + await createCart(_new._id) + ctx.body = { data: { nick, phone, uid: _new._id } } + } + + /** + * POST + * /api/users/login + * 用户登录 + * body = { phone, password } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async login (ctx, next) { + console.log('用户登录') + const { phone, password } = ctx.request.body + if (!password || !phone) { + throw new ApiError(ApiErrorNames.NEED_ACCOUNT_AND_PASSWORD) + } + const user = await User.findOne({ phone }).exec() + if (!user || !user.validPassword(password)) { + throw new ApiError(ApiErrorNames.WRONG_ACCOUNT_OR_PASSWORD) + } + user.token = setToken(phone, ctx) + await user.save() + ctx.body = { + data: _.pick(user, ['nick', 'phone', '_id', 'cart', 'avatar']) + } + } + + /** + * GET + * 退出登录 + * /api/users/logout + * @param ctx + * @param next + * @returns {Promise.} + */ + static async logout (ctx, next) { + console.log('登出') + ctx.cookies.set('_token', '', { + signed: true, + maxAge: 1000 * 60 * 60 * 24 * 7, + httpOnly: true + }) + } + + /** + * PUT + * 修改密码 + * /api/users/:uid/password + * body = { np, op, phone } + * @param ctx + * @param next + * @return {Promise.} + */ + static async modifyPassword (ctx, next) { + console.log('修改密码') + const { uid } = ctx.params + validUID(uid) + const { np, op } = ctx.request.body + console.log(ctx.request.body) + if (!np || !op) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + // const bt = User.encryptPassword(op) + // const user = await User.findByIdAndUpdate(uid, { password: bt }) + // if (!user) { + // throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + // } + // 查找用户 + const user = await User.findById(uid).exec() + console.log(user) + console.log(user.validPassword(op)) + if (!user || !user.validPassword(op)) { + throw new ApiError(ApiErrorNames.WRONG_ACCOUNT_OR_PASSWORD) + } + // 修改密码 + user.password = user.encryptPassword(np) + // 更新token + user.token = setToken(user.phone, ctx) + await user.save() + ctx.body = { + message: '操作成功' + } + } + + /** + * PUT + * 忘记密码 + * /api/users/:uid/forget + * params { uid } + * body { code, password } + * @param ctx + * @param next + * @return {Promise.} + */ + static async forget (ctx, next) { + console.log('忘记密码') + const { uid } = ctx.params + validUID(uid) + const { code, password } = ctx.request.body + console.log(ctx.session.code) + const session = ctx.session.code + // 服务器没有code的session + if (!session || !session.result) throw new ApiError(ApiErrorNames.UNKNOWN_ERROR) + if (code.toString() !== session.result.toString()) throw new ApiError(ApiErrorNames.WRONG_CODE) + if (Date.now() - session.timeout > timeout) throw new ApiError(ApiErrorNames.CODE_EXPIRED) + const user = await User.findById(uid).exec() + if (!user) throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + user.password = user.encryptPassword(password) + user.token = setToken(user.phone, ctx) + await user.save() + ctx.session.code = '' + ctx.body = { + message: '操作成功' + } + } + + /** + * PUT + * /api/users/:uid/nick + * 修改昵称 + * params = { uid } + * body = { nick } + * @param ctx + * @param next + * @return {Promise.} + */ + static async modifyNick (ctx, next) { + console.log('修改昵称') + const { uid } = ctx.params + validUID(uid) + const { nick } = ctx.request.body + if (!nick) { + throw new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR) + } + const user = await User + .findByIdAndUpdate(uid, { $set: { nick } }) + .select('nick phone _id') + .lean() + .exec() + if (!user) { + throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + } + ctx.body = { + data: { ...user, nick } + } + } + + /** + * PUT + * /api/users/:uid/avatar + * 修改头像 + * params = { uid } + * body = { imgStr } + * @param ctx + * @param next + * @return {Promise.} + */ + static async modifyAvatar (ctx, next) { + console.log('修改头像') + const { uid } = ctx.params + validUID(uid) + const { imgStr } = ctx.request.body + const user = await User.findById(uid).exec() + if (!user) { + throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + } + if (/^\d+$/.test(imgStr)) { + user.avatar = imgStr + } else { + const base64 = imgStr.replace(/^data:image\/\w+;base64,/, '') + const buffer = Buffer.from(base64, 'base64') + const p = path.resolve(__dirname, '../../public/avatar/' + user.phone + '.png') + const res = await fs.writeFileSync(p, buffer) + if (res) { + ctx.body = { + code: '1061', + message: '图片上传失败' + } + } + } + user.avatar = '/avatar/' + user.phone + '.png' + const _new = await user.save() + ctx.body = { + data: _.pick(_new, ['nick', 'phone', '_id', 'cart', 'avatar']) + } + } + + // 上传头像 + // static async uploadAvatar (ctx, next) { + // if ('POST' !== ctx.method) return await next() + // console.log(ctx.request.body) + // const file = ctx.request.body.files.avatar + // const reader = fs.createReadStream(file.path); + // const p = '../../public/upload/' + Date.now() + '.png' + // const stream = fs.createWriteStream(path.resolve(__dirname, p)); + // reader.pipe(stream) + // const base = '/upload/' + path.parse(stream.path).base + // ctx.body = { + // data: { + // path: base + // } + // } + // } + // crm system + /** + * GET + * 获取用户列表 + * query = { size, page } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async getUserList (ctx, next) { + console.log('获取用户列表') + const { size = 20, page = 1 } = ctx.query + const count = await User.count() + const users = await User.find() + .skip((page - 1) * size) + .limit(~~size) + .sort('-created') + .select('phone created nick avatar openID cart _id') + .lean() + .exec() + ctx.body = { + data: { + users, + count, + total: Math.ceil(count / size), + current: page, + size + } + } + } + + /** + * GET + * 检索用户 + * query = { ps } + * @param ctx + * @param next + * @returns {Promise.} + */ + static async filterUsers (ctx, next) { + console.log('检索用户') + const { ps } = ctx.query + if (!/^1\d{2,10}$/.test(ps)) { + ctx.body = { + data: [] + } + return false + } + const users = await User + .find({ phone: { $regex: new RegExp(`^${ps}`) } }) + .limit(20) + .lean() + .exec() + ctx.body = { + data: users + } + } +} + + +module.exports = UserController \ No newline at end of file diff --git a/koa/HelloKoa2/app/error/ApiError.js b/koa/HelloKoa2/app/error/ApiError.js new file mode 100644 index 0000000..7f06c9a --- /dev/null +++ b/koa/HelloKoa2/app/error/ApiError.js @@ -0,0 +1,12 @@ +const ApiErrorNames = require('./ApiErrorNames') + +class ApiError extends Error { + constructor(errorName) { + super() + const errorInfo = ApiErrorNames.getErrorInfo(errorName) + this.name = errorName + this.code = errorInfo.code + this.message = errorInfo.message + } +} +module.exports = ApiError \ No newline at end of file diff --git a/koa/HelloKoa2/app/error/ApiErrorNames.js b/koa/HelloKoa2/app/error/ApiErrorNames.js new file mode 100644 index 0000000..ff58dce --- /dev/null +++ b/koa/HelloKoa2/app/error/ApiErrorNames.js @@ -0,0 +1,48 @@ +const ApiErrorNames = {} + +ApiErrorNames.UNKNOWN_ERROR = 'unknownError' +ApiErrorNames.USER_NOT_EXIST = 'userNotExist' +ApiErrorNames.WRONG_ACCOUNT_OR_PASSWORD = 'wrongAccountOrPassword' +ApiErrorNames.NEED_ACCOUNT_AND_PASSWORD = 'needAccountAndPassword' +ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR = 'missingParameterOrParameterError' +ApiErrorNames.THE_PHONE_WAS_REGISTERED = 'thePhoneWasRegistered' +ApiErrorNames.WRONG_PHONE_NUMBER = 'wrongPhoneNumber' +ApiErrorNames.WRONG_ID = 'wrongID' +ApiErrorNames.ADDRESS_NOT_EXIST = 'addressNotExist' +ApiErrorNames.ADR_NOT_EXIST_OR_NOT_MATCH_USER = 'addressNotExistOrNotMatchToUser' +ApiErrorNames.PRODUCT_NOT_EXIST = 'productNotExist' +ApiErrorNames.ORDER_NOT_EXIST = 'orderNotExist' +ApiErrorNames.WRONG_CODE = 'wrongCode' +ApiErrorNames.CODE_EXPIRED = 'codeExpired' +ApiErrorNames.LACK_OF_STOCK = 'lackOfStock' + +const errorMap = new Map() +errorMap.set(ApiErrorNames.UNKNOWN_ERROR, { code: -1, message: '未知错误' }) +errorMap.set(ApiErrorNames.USER_NOT_EXIST, { code: 101, message: '用户不存在' }) +errorMap.set(ApiErrorNames.ADDRESS_NOT_EXIST, { code: 1011, message: '请求的地址信息不存在' }) +errorMap.set(ApiErrorNames.ADR_NOT_EXIST_OR_NOT_MATCH_USER, { code: 1013, message: '地址信息不存在或地址同当前用户不匹配' }) +errorMap.set(ApiErrorNames.PRODUCT_NOT_EXIST, { code: 1012, message: '请求的产品不存在' }) +errorMap.set(ApiErrorNames.ORDER_NOT_EXIST, { code: 1014, message: '订单不存在' }) +errorMap.set(ApiErrorNames.THE_PHONE_WAS_REGISTERED, { code: 105, message: '该手机号码已被注册' }) +errorMap.set(ApiErrorNames.WRONG_ACCOUNT_OR_PASSWORD, { code: 102, message: '账号或密码有误' }) +errorMap.set(ApiErrorNames.NEED_ACCOUNT_AND_PASSWORD, { code: 103, message: '账号密码不能为空' }) +errorMap.set(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR, { code: 104, message: '缺少参数或参数有误' }) +errorMap.set(ApiErrorNames.WRONG_PHONE_NUMBER, { code: 1041, message: '手机号码格式有误' }) +errorMap.set(ApiErrorNames.WRONG_ID, { code: 1043, message: '缺少id或者id格式有误' }) +errorMap.set(ApiErrorNames.WRONG_CODE, { code: 107, message: '验证码有误' }) +errorMap.set(ApiErrorNames.CODE_EXPIRED, { code: 1071, message: '验证码已过期' }) +errorMap.set(ApiErrorNames.LACK_OF_STOCK, { code: 108, message: '库存不足' }) + +ApiErrorNames.getErrorInfo = errorName => { + let errorInfo + if (errorName) { + errorInfo = errorMap.get(errorName) + } + if (!errorInfo) { + errorName = ApiErrorNames.UNKNOWN_ERROR + errorInfo = errorMap[errorName] + } + return errorInfo +} + +module.exports = ApiErrorNames diff --git a/koa/HelloKoa2/bin/www b/koa/HelloKoa2/bin/www new file mode 100755 index 0000000..4713e00 --- /dev/null +++ b/koa/HelloKoa2/bin/www @@ -0,0 +1,91 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +const conf = require('../config') +var debug = require('debug')('demo:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(conf.port || '3000'); +// app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app.callback()); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/koa/HelloKoa2/code.json b/koa/HelloKoa2/code.json new file mode 100644 index 0000000..7f56eb0 --- /dev/null +++ b/koa/HelloKoa2/code.json @@ -0,0 +1,24 @@ +{ + "1" : "success", + "-1" : "未知错误", + "101" : "用户不存在", + "1011" : "请求的地址信息不存在", + "1012" : "请求的产品不存在", + "1013" : "地址信息不存在或地址同当前用户不匹配", + "1014" : "订单不存在", + "102" : "账号或密码有误", + "103" : "账号密码不能为空", + "104" : "缺少参数或参数有误", + "1041": "手机号码格式有误", + "1042": "密码格式有误", + "1043": "缺少id或者id格式有误", + "105" : "该手机号码已被注册", + "106" : "操作失败", + "1062": "图片上传失败", + "107" : "验证码有误", + "1071": "验证码已过期", + "108" : "库存不足", + "200" : "数据库问题", + "211" : "其他", + "401" : "unauthorized" +} diff --git a/koa/HelloKoa2/config/development.js b/koa/HelloKoa2/config/development.js new file mode 100644 index 0000000..d3ccff8 --- /dev/null +++ b/koa/HelloKoa2/config/development.js @@ -0,0 +1,7 @@ +module.exports = { + env: 'development', + port: 3001, + mongodbURL: '', + redisURL: '', + redisPort: '' +} \ No newline at end of file diff --git a/koa/HelloKoa2/config/index.js b/koa/HelloKoa2/config/index.js new file mode 100644 index 0000000..4c59649 --- /dev/null +++ b/koa/HelloKoa2/config/index.js @@ -0,0 +1,7 @@ +const devEnv = require('./development') +const testEnv = require('./test') + +module.exports = { + development: devEnv, + test: testEnv +}[process.env.NODE_ENV || 'development'] \ No newline at end of file diff --git a/koa/HelloKoa2/config/log-config.js b/koa/HelloKoa2/config/log-config.js new file mode 100644 index 0000000..ad989e5 --- /dev/null +++ b/koa/HelloKoa2/config/log-config.js @@ -0,0 +1,30 @@ +const path = require('path') + +const errorLogPath = path.resolve(__dirname, '../logs/error/error') +const responseLogPath = path.resolve(__dirname, '../logs/response/response') + +module.exports = { + 'appenders': + [ + // 错误日主 + { + 'category': 'errorLogger', + 'type': 'dateFile', + 'filename': errorLogPath, + 'alwaysIncludePattern': true, + 'pattern': '-yyyy-MM-dd-hh.log' + }, + // 相应日志 + { + 'category': 'resLogger', + 'type': 'dateFile', + 'filename': responseLogPath, + 'alwaysIncludePattern': true, + 'patter': '-yyyy-MM-dd-hh.log' + } + ], + 'levels': { + 'errorLogger': 'ERROR', + 'resLogger': 'ALL' + } +} diff --git a/koa/HelloKoa2/config/test.js b/koa/HelloKoa2/config/test.js new file mode 100644 index 0000000..c8a1c39 --- /dev/null +++ b/koa/HelloKoa2/config/test.js @@ -0,0 +1,7 @@ +module.exports = { + env: 'test', + port: 3005, + mongodbURL: '', + redisURL: '', + redisPort: '' +} \ No newline at end of file diff --git a/koa/HelloKoa2/lib/auth.js b/koa/HelloKoa2/lib/auth.js new file mode 100644 index 0000000..ed6fd99 --- /dev/null +++ b/koa/HelloKoa2/lib/auth.js @@ -0,0 +1,43 @@ +const passport = require('koa-passport') +const LocalStrategy = require('passport-local') +const User = require('../models/user') +const ApiErrorNames = require('../app/error/ApiErrorNames') + +passport.serializeUser((user, done) => { + done(null, user.id) +}) +passport.deserializeUser(async (id, done) => { + try { + const user = await User.findById(id).exec() + done(null, user) + } catch (err) { + done(err) + } +}) + +passport.use('local.login', new LocalStrategy({ + usernameField: 'phone', + passwordField: 'password' +}, async (username, password, done) => { + if (!username || !password) { + return done(null, false, { msg: ApiErrorNames.NEED_ACCOUNT_AND_PASSWORD }) + } + const user = await User.findOne({ phone: username }) + user + ? done(null, user, { code: 1, msg: 'success' }) + : done(null, false, { msg: ApiErrorNames.WRONG_ACCOUNT_OR_PASSWORD }) +})) + +passport.use('local.register', new LocalStrategy({ + usernameField: 'phone', + passwordField: 'password' +}, async (...rest) => { + console.log(rest) + // console.log('xxxxxxxxxxxxxxxxxxxxxxxxxx') + // const user = await User.findOne({ phone: username }).exec() + // if (user) { + // // 该手机号已被注册 + // } + // console.log(req) + // done(null, user) +})) \ No newline at end of file diff --git a/koa/HelloKoa2/lib/cc.js b/koa/HelloKoa2/lib/cc.js new file mode 100644 index 0000000..1e9ddc0 --- /dev/null +++ b/koa/HelloKoa2/lib/cc.js @@ -0,0 +1,17 @@ +// current project common tools +const reg = require('./common').regs +const ApiError = require('../app/error/ApiError') +const ApiErrorNames = require('../app/error/ApiErrorNames') + +function iv (...ids) { + ids.forEach(id => { + const v = !id || !reg.objectId.reg.test(id) + if (v) throw new ApiError(ApiErrorNames.WRONG_ID) + }) + return true +} + + +module.exports = { + iv +} \ No newline at end of file diff --git a/koa/HelloKoa2/lib/common.js b/koa/HelloKoa2/lib/common.js new file mode 100644 index 0000000..08656ee --- /dev/null +++ b/koa/HelloKoa2/lib/common.js @@ -0,0 +1,11 @@ +// project common tools +const regs = { + phone: { str: '^(1[3|4|5|7|8])[0-9]{9}$', reg: /^(1[3|4|5|7|8])[0-9]{9}$/ }, + password: { str: '^[A-z0-9_]{6,20}$', reg: /^[A-z0-9_]{6,20}$/ }, + code: { str: '^[0-9]{6}$', reg: /^[\d]{6}$/ }, + objectId: { reg: /^[0-9a-fA-F]{24}$/ } +} + +module.exports = { + regs +} \ No newline at end of file diff --git a/koa/HelloKoa2/lib/credentials.js b/koa/HelloKoa2/lib/credentials.js new file mode 100644 index 0000000..ef318fb --- /dev/null +++ b/koa/HelloKoa2/lib/credentials.js @@ -0,0 +1,18 @@ +module.exports = { + cookieSecret: 'u738*6do-yok^TG!we^47', + sysCookieSecret: 'kie8u-Jki*iei^dlk-!pqxz', + ssl: { + windows_nt: { + key: 'c:/nginx/ssl-cer/server.key', + cert: 'c:/nginx/ssl-cer/server.crt' + }, + linux: { + key: '/usr/local/nginx/cert/214334684110204.key', + cert: '/usr/local/nginx/cert/214334684110204.pem' + }, + darwin: { + key: '/usr/local/etc/nginx/ssl_cer/CA/server.key', + cert: '/usr/local/etc/nginx/ssl_cer/CA/server.crt' + } + } +} \ No newline at end of file diff --git a/koa/HelloKoa2/middlewares/jwt.js b/koa/HelloKoa2/middlewares/jwt.js new file mode 100644 index 0000000..6e74fb4 --- /dev/null +++ b/koa/HelloKoa2/middlewares/jwt.js @@ -0,0 +1,17 @@ +async function jwtAuth (ctx, next) { + try { + await next() + } catch (err) { + if (~~err.status === 401) { + ctx.status = 401 + ctx.body = { + code: 401, + message: 'unauthorized' + } + } else { + throw err + } + } +} + +module.exports = jwtAuth \ No newline at end of file diff --git a/koa/HelloKoa2/middlewares/request-validate.js b/koa/HelloKoa2/middlewares/request-validate.js new file mode 100644 index 0000000..c2af07d --- /dev/null +++ b/koa/HelloKoa2/middlewares/request-validate.js @@ -0,0 +1,28 @@ +const reg = require('../lib/common').regs +const ApiError = require('../app/error/ApiError') +const ApiErrorNames = require('../app/error/ApiErrorNames') +async function validate (ctx, next) { + const params = ctx.method === 'GET' ? ctx.query : ctx.request.body + // 手机号码,用户id,地址id,产品id,订单id,购物车中产品的id + const { phone, uid, aid, pid, oid, cid } = params + // /api/adr 路径下的接口必须传递uid + // if (/^\/api\/adr/.test(ctx.originalUrl)) { + // if (!uid || !reg.objectId.reg.test(uid)) { + // throw new ApiError(ApiErrorNames.WRONG_ID) + // } + // } + const ids = [uid, aid, pid, oid, cid].filter(item => item) + // 手机号码不合法 + if (phone && !reg.phone.reg.test(phone)) { + throw new ApiError(ApiErrorNames.WRONG_PHONE_NUMBER) + } + // id不是ObjectId + ids.forEach(item => { + if (item && !reg.objectId.reg.test(item)) { + throw new ApiError(ApiErrorNames.WRONG_ID) + } + }) + await next() +} + +module.exports = validate \ No newline at end of file diff --git a/koa/HelloKoa2/middlewares/response-formatter.js b/koa/HelloKoa2/middlewares/response-formatter.js new file mode 100644 index 0000000..c50d01f --- /dev/null +++ b/koa/HelloKoa2/middlewares/response-formatter.js @@ -0,0 +1,62 @@ +const ApiError = require('../app/error/ApiError') +const mongoose = require('mongoose') + +const responseFormatter = (ctx) => { + if (ctx.body) { + ctx.body = { + code: 0, + message: 'success', + ...ctx.body + } + } else { + ctx.body = { + code: 0, + message: 'success' + } + } +} +const urlFilter = pattern => { + return async (ctx, next) => { + const reg = new RegExp(pattern) + try { + await next() + } catch (err) { + console.log(err) + if (reg.test(ctx.originalUrl)) { + if (err instanceof ApiError) { + ctx.status = 200 + ctx.body = { + code: err.code, + message: err.message, + } + } else if (err instanceof mongoose.Error.ValidationError) { + const { errors } = err + const e1 = Object.values(errors)[0] + ctx.status = 200 + ctx.body = { + code: 210, + message: e1.message || '字段不合法' + } + }else if (err instanceof mongoose.Error) { + ctx.status = 200 + ctx.body = { + code: 200, + message: 'database-error: ' + err.message + } + } else { + ctx.status = 200 + ctx.body = { + code: 211, + message: '->' + err.message || '其他', + } + } + } + // throw err + } + if (reg.test(ctx.originalUrl)) { + responseFormatter(ctx) + } + } +} + +module.exports = urlFilter \ No newline at end of file diff --git a/koa/HelloKoa2/models/address.js b/koa/HelloKoa2/models/address.js new file mode 100644 index 0000000..3f3d94d --- /dev/null +++ b/koa/HelloKoa2/models/address.js @@ -0,0 +1,16 @@ +const mongoose = require('mongoose') + +const addressSchema = new mongoose.Schema({ + _owner: { type: String, require: true }, + province: { require: true, type: String }, + city: { require: true, type: String }, + detail: { require: true, type: String }, + name: { require: true, type: String }, + phone: { require: true, type: String }, + label: String, + isDefault: Boolean, + date: Date +}) + +const Address = mongoose.model('Address', addressSchema) +module.exports = Address \ No newline at end of file diff --git a/koa/HelloKoa2/models/admin.js b/koa/HelloKoa2/models/admin.js new file mode 100644 index 0000000..6b28263 --- /dev/null +++ b/koa/HelloKoa2/models/admin.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose') +const bcrypt = require('bcrypt-nodejs') +const Schema = mongoose.Schema + +const adminSchema = new Schema({ + account: { type: String, required: true }, + password: { type: String, required: true }, + token: { type: String, required: true } +}) + +adminSchema.methods.encryptPassword = password => + bcrypt.hashSync(password, bcrypt.genSaltSync(5), null) +adminSchema.methods.validPassword = function (password) { + return bcrypt.compareSync(password, this.password) +} +adminSchema.statics.encryptPassword = password => + bcrypt.hashSync(password, bcrypt.genSaltSync(5), null) + +const Admin = mongoose.model('admin', adminSchema) +module.exports = Admin diff --git a/koa/HelloKoa2/models/cart.js b/koa/HelloKoa2/models/cart.js new file mode 100644 index 0000000..27707e3 --- /dev/null +++ b/koa/HelloKoa2/models/cart.js @@ -0,0 +1,43 @@ +const mongoose = require('mongoose') +const Schema = mongoose.Schema +const Product = require('./product') +const _ = require('lodash') + +const cProSchema = Schema({ + sku: { type: String, required: true }, + count: { type: Number, required: true }, + chosen: { type: Boolean }, + addDate: Date +}) +const cartSchema = Schema({ + _owner: { type: Schema.Types.ObjectId, ref: 'User' }, + date: Date, + products: [cProSchema] +}) + +cartSchema.methods.getCart = async function () { + const pros = this.products + if (!pros.length) { + return Promise.resolve([]) + } + // 获取产品信息 + const ps = await Product + .find() + .where('sku') + .in(pros.map(p => p.sku)) + .select('_id sku en cn truePrice price _type discount images off') + .lean() + .exec() + // 合并产品信息和购物车信息(数量和chosen等) + return pros.map(p => { + const { chosen, count, _id: cid, sku } = p + const index = _.findIndex(ps, { sku }) + const t = { ...ps[index] } + t.pid = t._id + delete t._id + ps.splice(index, 1) + return { ...t, chosen, count, cid } + }) +} + +module.exports = mongoose.model('Cart', cartSchema) \ No newline at end of file diff --git a/koa/HelloKoa2/models/coupon.js b/koa/HelloKoa2/models/coupon.js new file mode 100644 index 0000000..2c97de6 --- /dev/null +++ b/koa/HelloKoa2/models/coupon.js @@ -0,0 +1,62 @@ +// 优惠券 +const mongoose = require('mongoose') +const Schema = mongoose.Schema +const delay = function(time) { + return new Promise((resolve, reject) => { + setTimeout(resolve, time) + }) +} + +const couponSchema = new Schema({ + // 优惠券id(每一类优惠券都有一个公用的kid) + // 格式为 KD-时间戳, + kid: { type: String, required: true }, + // 使用时间 + start: { type: Date, required: true }, + + end: { type: Date, required: true }, + // 使用方式,暂时只考虑满减 + method: { + achieve: { type: Number, required: true }, + cut: { type: Number, required: true } + }, + // 适用产品[sku] + apply: [String], + // 数量 + count: { type: Number, default: 10000000 }, + // 创建时间 + created: { type: Date, default: Date.now() }, + // 优惠券名称 + name: { type: String }, + // 优惠券描述 + detail: { type: String, required: true } +}) + +couponSchema.pre('save', true, function(next, done) { + next() + const { achieve, cut } = this.method + if (achieve < cut || achieve < 0 || cut < 0) { + throw new Error('规则不合法') + } + if (!this.apply.length) { + throw new Error('至少需要一个适用产品') + } + done() +}) + +couponSchema.pre('save', true, function(next, done) { + next() + const { end, start } = this + let [s, e] = [new Date(+start), new Date(+end)] + if (!+s || !+e) throw new Error('时间格式有误') + // 如果优惠券可用时间期限早于当前时间,视为优惠券已过期 + // if (e <= +Date.now()) + if (s >= e) throw new Error('优惠券活动结束时间不得早于开始时间') + else if (e - s < 1000 * 60 * 30) + throw new Error('优惠券活动时间不得短于30min') + this.start = s + this.end = e + done() +}) + +module.exports = mongoose.model('Coupon', couponSchema) diff --git a/koa/HelloKoa2/models/order.js b/koa/HelloKoa2/models/order.js new file mode 100644 index 0000000..d15ca29 --- /dev/null +++ b/koa/HelloKoa2/models/order.js @@ -0,0 +1,36 @@ +const mongoose = require('mongoose') +const Schema = mongoose.Schema + +const orderSchema = new Schema({ + _owner: Schema.Types.ObjectId, //用户id + _ownerNick: String, + _ownerPhone: String, + orderNumber: String, // 订单号 + date: Date, // 订单日期 + products: [{ + sku: String, // 商品sku + en: String, // 商品名 + cn: String, + count: Number, // 购买商品数量 + price: Number, // 商品单价 + content: Number, // 净含量 + image: String // 商品图 + }], + total: Number, // 订单总商品数量 + amount: Number, // 订单金额, + express: Number, // 快递费用, + status: { // 订单状态 + type: Number, + enum: [0, 1, 2, 3, 4, 5, 6, 7] // 未支付,已支付(待发货),已发货,已完成,已取消, 申请退款, 已退款, 退款失败 + }, + address: { // 地址信息 + province: String, + city: String, + detail: String, + phone: String, + name: String + }, + show: Boolean // 是否可见(默认可见,用户删除订单后不可见) +}) + +module.exports = mongoose.model('Order', orderSchema) \ No newline at end of file diff --git a/koa/HelloKoa2/models/product.js b/koa/HelloKoa2/models/product.js new file mode 100644 index 0000000..0e26815 --- /dev/null +++ b/koa/HelloKoa2/models/product.js @@ -0,0 +1,115 @@ +const mongoose = require('mongoose') +const uniqueValidator = require('mongoose-unique-validator') +const _ = require('lodash') + +const productSchema = new mongoose.Schema({ + sku: { type: String, required: 'sku是必须字段', unique: 'sku必须唯一' }, + en: { type: String, required: '产品英文名是必须字段' }, + cn: { type: String, required: '产品中文名是必须字段' }, + images: [String], + price: { type: Number, min: 0, required: '产品价格是必须字段' }, //原价 + truePrice: { type: Number, min: 0, required: '真实售价是必须字段' }, //真实售价 + setToSales: { + type: Number, + enum: [0, 1, 2], + default: 0 + }, // 设为打折商品,只有在字段不为0,discounted和off才会可用. 1代表discounted,2代表off + discounted: { + type: Number, + default: 0, + validate: { + validator (v) { + return v >= 0 + }, + message: '优惠价不得低于0' + } + }, // 优惠价 + off: { + type: Number, + default: 0.01, + validate: { + validator (v) { + return v >= 0.01 && v <= 0.99 + }, + message: '折扣额度须在0.01~0.99之间' + } + }, // 折扣 + alcoholic: { type: Number, default: 0, min: 0, max: 100 }, + stock: { type: Number, default: 0, min: 0, max: 99999 }, // 库存 + sales: { type: Number, default: 0, min: 0, max: 999999 }, // 销售量 + cart: { type: Number, default: 0, min: 0, max: 999999 }, // 被加入购物车 + like: { type: Number, default: 0, min: 0, max: 999999 }, // 被收藏 + content: { type: Number, default: 1000, min: 1, max: 10000 }, // 净含量 + weight: { type: Number, default: 1000, min: 1, max: 99999 }, // 净重 + origin: { type: String, required: '产地是必须字段', default: '' }, // 产地 + _type: { type: Number, required: '产品类别是必须字段', enum: [1, 2, 3, 4, 5, 6, 7, 8, 9] }, // 类别, + recommend: { type: Boolean, default: false }, // 推荐产品(首页topbar展示) + hot: { type: Boolean, default: false }, // 热销,和销量无关。为手动设置的热销产品。在首页展示 + fs: { type: mongoose.Schema.Types.Mixed, default: false }, // free shipping 免邮 + introduce: { + type: String, + validate: { + validator (v) { + return v.length <= 100000 + }, + message: '内容过长' + } + }, // 产品介绍 + date: { type: Date, default: Date.now() }, // 添加日期 + update: { type: Date, default: Date.now() } // 最后更新日期 +}) + +productSchema.plugin(uniqueValidator) +productSchema.pre('validate', function (next) { + console.log('v') + const { setToSales, discounted, off, price } = this + if (!setToSales) { + this.truePrice = price + this.off = 0.01 + this.discounted = price + } else if (~~setToSales === 1) { + this.truePrice = discounted + this.off = 0.01 + } else if (~~setToSales === 2) { + this.truePrice = (price * (1 - off)).toFixed(2) + this.discounted = price + } else { + this.setToSales = false + } + next() +}) +productSchema.pre('save', function (next) { + console.log('s') + const { price, discounted, truePrice, fs } = this + if (discounted > price || truePrice > price) throw new Error('优惠价格不能高于原价') + if (_.isObject(fs)) { + const { start, end } = fs + const s = +new Date(start) + const e = +new Date(end) + if (!s || !e) throw new Error('时间格式有误') + // 如果结束时间早于当前时间,默认免邮活动结束。 + if (e <= Date.now()) this.fs = false + else if (s >= e) throw new Error('免邮活动开始时间不能晚于结束时间') + else if (e - s < 1000 * 60 * 30) throw new Error('免邮活动时间不得短于30min') + this.fs = { start: s, end: e } + } else if (+fs === 1) { + this.fs = true + } else { + this.fs = false + } + next() +}) +productSchema.virtual('onFS').get(function () { + const fs = this.fs + if (_.isBoolean(fs)) return fs + else if (_.isObject(fs)) { + const { start, end } = fs + const now = Date.now() + if (now > end || now < start) { + return false + } + return true + } +}) + +module.exports = mongoose.model('Product', productSchema) \ No newline at end of file diff --git a/koa/HelloKoa2/models/user.js b/koa/HelloKoa2/models/user.js new file mode 100644 index 0000000..a762d7c --- /dev/null +++ b/koa/HelloKoa2/models/user.js @@ -0,0 +1,47 @@ +const mongoose = require('mongoose') +const bcrypt = require('bcrypt-nodejs') +const Product = require('./product') +const Scheme = mongoose.Schema + +const userSchema = new Scheme({ + phone: { + type: String, + required: true, + unique: true + }, + created: { type: Date, required: true, default: Date.now() }, + password: { type: String, required: true }, + nick: { type: String, required: true }, + avatar: { type: String }, + openID: { type: String }, + token: { type: String }, + cart: { type: Scheme.Types.ObjectId, ref: 'Cart' }, + lastLogin: { type: Date, required: true, default: Date.now()}, + likes: [String] +}) + +userSchema.methods.getLikes = async function () { + const likes = this.likes + if (!likes.length) { + return Promise.resolve([]) + } + const ps = await Product + .find() + .where('sku') + .in(likes) + .select('_id sku en cn truePrice price _type discount off images') + .lean() + .exec() + return ps +} + +userSchema.methods.encryptPassword = password => + bcrypt.hashSync(password, bcrypt.genSaltSync(5), null) +userSchema.methods.validPassword = function (password) { + return bcrypt.compareSync(password, this.password) +} + +userSchema.statics.encryptPassword = password => + bcrypt.hashSync(password, bcrypt.genSaltSync(5), null) + +module.exports = mongoose.model('User', userSchema) \ No newline at end of file diff --git a/koa/HelloKoa2/package-lock.json b/koa/HelloKoa2/package-lock.json new file mode 100644 index 0000000..eb0f040 --- /dev/null +++ b/koa/HelloKoa2/package-lock.json @@ -0,0 +1,4825 @@ +{ + "name": "HelloKoa2", + "version": "0.2.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/addressparser/download/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", + "optional": true + }, + "after": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/after/download/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "agent-base": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/agent-base/download/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" + } + } + }, + "ajv": { + "version": "5.3.0", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.3.0.tgz", + "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "optional": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "append-field": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/append-field/download/append-field-0.1.0.tgz", + "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=" + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "asap": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "optional": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/assertion-error/download/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "ast-types": { + "version": "0.9.14", + "resolved": "http://registry.npm.taobao.org/ast-types/download/ast-types-0.9.14.tgz", + "integrity": "sha1-00ul3/udFaRDUf0qnYLkqyg4tbo=", + "optional": true + }, + "async": { + "version": "0.2.10", + "resolved": "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "async-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz", + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "optional": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "optional": true + }, + "axios": { + "version": "0.15.3", + "resolved": "http://registry.npm.taobao.org/axios/download/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "optional": true, + "requires": { + "follow-redirects": "1.0.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "base64url": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/base64url/download/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" + }, + "bcrypt-nodejs": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/bcrypt-nodejs/download/bcrypt-nodejs-0.0.3.tgz", + "integrity": "sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true + }, + "bl": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/bl/download/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "optional": true, + "requires": { + "readable-stream": "2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/blob/download/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "bluebird": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" + }, + "boom": { + "version": "4.3.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "optional": true, + "requires": { + "hoek": "4.2.0" + } + }, + "boxen": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/boxen/download/boxen-1.2.2.tgz", + "integrity": "sha1-Px1AMsMP/qnUsCwyLq8up0HcvOU=", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.3.0", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "bson": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/bson/download/bson-1.0.4.tgz", + "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/buffer-shims/download/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "buildmail": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/buildmail/download/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", + "optional": true, + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" + } + }, + "busboy": { + "version": "0.2.14", + "resolved": "http://registry.npm.taobao.org/busboy/download/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "bytes": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "callsite": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chai": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/chai/download/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "character-parser": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "1.0.4" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-body": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/co-body/download/co-body-4.2.0.tgz", + "integrity": "sha1-dN8g+nMmISXcRUgq8E40LqjbNRU=", + "requires": { + "inflation": "2.0.0", + "qs": "4.0.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "1.9.0", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.8.1", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "configstore": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/configstore/download/configstore-3.1.1.tgz", + "integrity": "sha1-CU7mYquD+tmRdnjeEU+q6o/NypA=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.1.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + } + }, + "consolidate": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "requires": { + "bluebird": "3.5.1" + } + }, + "constantinople": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/constantinople/download/constantinople-3.1.0.tgz", + "integrity": "sha1-dWnKqKo/jVk11i4fqW+fcCzYHHk=", + "requires": { + "acorn": "3.3.0", + "is-expression": "2.1.0" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookiejar": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.1.tgz", + "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", + "dev": true + }, + "cookies": { + "version": "0.7.1", + "resolved": "http://registry.npm.taobao.org/cookies/download/cookies-0.7.1.tgz", + "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=", + "requires": { + "depd": "1.1.1", + "keygrip": "1.0.2" + } + }, + "copy-to": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/copy-to/download/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.5.0", + "resolved": "http://registry.npm.taobao.org/crc/download/crc-3.5.0.tgz", + "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "optional": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz", + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", + "optional": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha1-dxY+qcINhkG0cH6PGKvfmnjzSDU=", + "optional": true + }, + "date-format": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/date-format/download/date-format-1.1.0.tgz", + "integrity": "sha1-vn32jsJw/Z7HhIK9hb5oyPuPvrw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "dev": true, + "requires": { + "type-detect": "4.0.3" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "optional": true + }, + "degenerator": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/degenerator/download/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "optional": true, + "requires": { + "ast-types": "0.9.14", + "escodegen": "1.9.0", + "esprima": "3.1.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dicer": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/dicer/download/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.14", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "diff": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.3.1.tgz", + "integrity": "sha1-qoVnpu7QPFMfyJ0/cRzQ5SWd7HU=", + "dev": true + }, + "doctypes": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "http://registry.npm.taobao.org/double-ended-queue/download/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", + "optional": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.9.tgz", + "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", + "requires": { + "base64url": "2.0.0", + "safe-buffer": "5.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "engine.io": { + "version": "3.1.4", + "resolved": "http://registry.npm.taobao.org/engine.io/download/engine.io-3.1.4.tgz", + "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.6.9", + "engine.io-parser": "2.1.1", + "uws": "0.14.5", + "ws": "3.3.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + } + } + }, + "engine.io-client": { + "version": "3.1.4", + "resolved": "http://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.1.4.tgz", + "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.6.9", + "engine.io-parser": "2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.2", + "xmlhttprequest-ssl": "1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.1.tgz", + "integrity": "sha1-4Ps/DgRi9/WLt3waUun1p+JuRmg=", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, + "error-inject": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/es6-promise/download/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.9.0", + "resolved": "http://registry.npm.taobao.org/escodegen/download/escodegen-1.9.0.tgz", + "integrity": "sha1-mBGi8mXcHNOJRCDuNxcGS2MriFI=", + "optional": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "estraverse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "optional": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "optional": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "http://registry.npm.taobao.org/event-stream/download/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extglob": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "optional": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "optional": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "optional": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "follow-redirects": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "optional": true, + "requires": { + "debug": "2.6.9" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true + }, + "form-data": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "formidable": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/formidable/download/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/from/download/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "ftp": { + "version": "0.3.10", + "resolved": "http://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "optional": true, + "requires": { + "readable-stream": "1.1.14", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "generate-function": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/generate-object-property/download/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "optional": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-uri": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/get-uri/download/get-uri-2.0.1.tgz", + "integrity": "sha1-29ysrNjGCKODFoaTaBF2l6FjHFk=", + "optional": true, + "requires": { + "data-uri-to-buffer": "1.2.0", + "debug": "2.6.9", + "extend": "3.0.1", + "file-uri-to-path": "1.0.0", + "ftp": "0.3.10", + "readable-stream": "2.3.3" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "global-dirs": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.0.tgz", + "integrity": "sha1-ENNAOeDfBCcuJizyQiT3IJQ0308=", + "dev": true, + "requires": { + "ini": "1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.10.3", + "resolved": "http://registry.npm.taobao.org/growl/download/growl-1.10.3.tgz", + "integrity": "sha1-GSa6kM8+3+KttJJ/WIC8IsZseQ8=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "optional": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "optional": true, + "requires": { + "ajv": "5.3.0", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary2": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "hawk": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz", + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", + "optional": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hipchat-notifier": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/hipchat-notifier/download/hipchat-notifier-1.1.0.tgz", + "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", + "optional": true, + "requires": { + "lodash": "4.17.4", + "request": "2.83.0" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-4.2.0.tgz", + "integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0=" + }, + "hooks-fixed": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/hooks-fixed/download/hooks-fixed-2.0.2.tgz", + "integrity": "sha1-IAdtqgfnfYphBog84/FyLgURQLA=" + }, + "http-assert": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/http-assert/download/http-assert-1.3.0.tgz", + "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", + "requires": { + "deep-equal": "1.0.1", + "http-errors": "1.6.2" + } + }, + "http-errors": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "http-proxy-agent": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-1.0.0.tgz", + "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "httpntlm": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/httpntlm/download/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "requires": { + "httpreq": "0.4.24", + "underscore": "1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "http://registry.npm.taobao.org/httpreq/download/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "humanize-number": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/humanize-number/download/humanize-number-0.0.2.tgz", + "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflation": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inflection": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.10.0.tgz", + "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", + "optional": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "ip": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.0.1.tgz", + "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", + "optional": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.10.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-class": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/is-class/download/is-class-0.0.4.tgz", + "integrity": "sha1-4FdFFwW7NOOePjNZjJOpg3KWtzY=" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-expression": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-expression/download/is-expression-2.1.0.tgz", + "integrity": "sha1-kb6dR968/vB3l36XIr5tz7RGXvA=", + "requires": { + "acorn": "3.3.0", + "object-assign": "4.1.1" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-function": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.6.tgz", + "integrity": "sha1-nnFlPNFf/zQcecQVFGChMdMen8Q=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.0", + "is-path-inside": "1.0.0" + } + }, + "is-my-json-valid": { + "version": "2.16.1", + "resolved": "http://registry.npm.taobao.org/is-my-json-valid/download/is-my-json-valid-2.16.1.tgz", + "integrity": "sha1-WoRnd+LCYg0eaRBOXToDsfYIjxE=", + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-property": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "optional": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-type-of": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/is-type-of/download/is-type-of-1.2.0.tgz", + "integrity": "sha1-tVPLtGIa31tBceiIPzcOem7DiZU=", + "requires": { + "core-util-is": "1.0.2", + "is-class": "0.0.4", + "isstream": "0.1.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/isemail/download/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "joi": { + "version": "6.10.1", + "resolved": "http://registry.npm.taobao.org/joi/download/joi-6.10.1.tgz", + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.19.2", + "topo": "1.1.0" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "optional": true + }, + "jsonwebtoken": { + "version": "8.1.0", + "resolved": "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.1.0.tgz", + "integrity": "sha1-xjl80uX9WD1lwAeoPce7eOaYK4M=", + "requires": { + "jws": "3.1.4", + "lodash.includes": "4.3.0", + "lodash.isboolean": "3.0.3", + "lodash.isinteger": "4.0.4", + "lodash.isnumber": "3.0.3", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/jstransformer/download/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "2.1.0", + "promise": "7.3.1" + } + }, + "jwa": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/jwa/download/jwa-1.1.5.tgz", + "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "5.1.1" + } + }, + "jws": { + "version": "3.1.4", + "resolved": "http://registry.npm.taobao.org/jws/download/jws-3.1.4.tgz", + "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", + "requires": { + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "kareem": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/kareem/download/kareem-1.5.0.tgz", + "integrity": "sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg=" + }, + "keygrip": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.2.tgz", + "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "koa": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/koa/download/koa-2.3.0.tgz", + "integrity": "sha1-nh6OTaQBg5xXuFJ+rcV/dhJ1Vac=", + "requires": { + "accepts": "1.3.4", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookies": "0.7.1", + "debug": "2.6.9", + "delegates": "1.0.0", + "depd": "1.1.1", + "destroy": "1.0.4", + "error-inject": "1.0.0", + "escape-html": "1.0.3", + "fresh": "0.5.2", + "http-assert": "1.3.0", + "http-errors": "1.6.2", + "is-generator-function": "1.0.6", + "koa-compose": "4.0.0", + "koa-convert": "1.2.0", + "koa-is-json": "1.0.0", + "mime-types": "2.1.17", + "on-finished": "2.3.0", + "only": "0.0.2", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "type-is": "1.6.15", + "vary": "1.1.2" + } + }, + "koa-body": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/koa-body/download/koa-body-2.5.0.tgz", + "integrity": "sha1-hOj82NUimozBy5ipJuk5Bp5xaRU=", + "requires": { + "co-body": "5.1.1", + "formidable": "1.1.1" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "co-body": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/co-body/download/co-body-5.1.1.tgz", + "integrity": "sha1-2XeB0eM0S6SoIP0YBr3fg0FQUjY=", + "requires": { + "inflation": "2.0.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + } + } + }, + "koa-bodyparser": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-3.2.0.tgz", + "integrity": "sha1-uRbeF+IDn+gmUEgZc9fClPELVxk=", + "requires": { + "co-body": "4.2.0" + } + }, + "koa-compose": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.0.0.tgz", + "integrity": "sha1-KAClE9nDYe8NY4UrA45Pby1adzw=" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "4.6.0", + "koa-compose": "3.2.1" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "koa-json": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/koa-json/download/koa-json-2.0.2.tgz", + "integrity": "sha1-Nq8U5uofXWRtfESihXAcb4Wk/eQ=", + "requires": { + "koa-is-json": "1.0.0", + "streaming-json-stringify": "3.1.0" + } + }, + "koa-jwt": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/koa-jwt/download/koa-jwt-3.2.2.tgz", + "integrity": "sha1-aA3mFYaWeKeVg4JwGQ16RFgeM04=", + "requires": { + "jsonwebtoken": "7.4.1", + "koa-unless": "1.0.0" + }, + "dependencies": { + "jsonwebtoken": { + "version": "7.4.1", + "resolved": "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-7.4.1.tgz", + "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" + } + } + } + }, + "koa-logger": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/koa-logger/download/koa-logger-2.0.1.tgz", + "integrity": "sha1-PuQvRXxA+01KGaExyAIlBLWyMrg=", + "requires": { + "bytes": "1.0.0", + "chalk": "1.1.3", + "humanize-number": "0.0.2", + "passthrough-counter": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + } + } + }, + "koa-multer": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/koa-multer/download/koa-multer-1.0.2.tgz", + "integrity": "sha1-049//R25exqtM+d3RzLwAOvWclk=", + "requires": { + "multer": "1.3.0" + } + }, + "koa-onerror": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/koa-onerror/download/koa-onerror-1.3.1.tgz", + "integrity": "sha1-pbVh4ch+8yieQwF0bgE4LyT/viI=", + "requires": { + "copy-to": "2.0.1", + "swig": "1.4.2" + } + }, + "koa-passport": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/koa-passport/download/koa-passport-4.0.1.tgz", + "integrity": "sha1-/+QcYtO73F98ScN13PlgbpKXozc=", + "requires": { + "passport": "0.4.0" + } + }, + "koa-router": { + "version": "7.2.1", + "resolved": "http://registry.npm.taobao.org/koa-router/download/koa-router-7.2.1.tgz", + "integrity": "sha1-tApKs8attLQIld69AKnGQDBOMDk=", + "requires": { + "debug": "2.6.9", + "http-errors": "1.6.2", + "koa-compose": "3.2.1", + "methods": "1.1.2", + "path-to-regexp": "1.7.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-send": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/koa-send/download/koa-send-3.3.0.tgz", + "integrity": "sha1-WkriRVZGgMbs9geeknX6UXOoYdw=", + "requires": { + "co": "4.6.0", + "debug": "2.6.9", + "mz": "2.7.0", + "resolve-path": "1.3.3" + } + }, + "koa-session": { + "version": "5.5.1", + "resolved": "http://registry.npm.taobao.org/koa-session/download/koa-session-5.5.1.tgz", + "integrity": "sha1-7Ekc1hlQkWyusaEH1igV63l8u6k=", + "requires": { + "crc": "3.5.0", + "debug": "2.6.9", + "is-type-of": "1.2.0", + "uid-safe": "2.1.5" + } + }, + "koa-sslify": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/koa-sslify/download/koa-sslify-2.1.2.tgz", + "integrity": "sha1-iUf9U5SdadU5YHgUCXhjwezzjzA=" + }, + "koa-static": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/koa-static/download/koa-static-3.0.0.tgz", + "integrity": "sha1-QEQiM9LAs1wiXkUBmcEL+KU55BY=", + "requires": { + "debug": "2.6.9", + "koa-send": "3.3.0" + } + }, + "koa-unless": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/koa-unless/download/koa-unless-1.0.0.tgz", + "integrity": "sha1-WqVzhLyIJWivyQrASFKj1YZYrus=" + }, + "koa-views": { + "version": "5.2.1", + "resolved": "http://registry.npm.taobao.org/koa-views/download/koa-views-5.2.1.tgz", + "integrity": "sha1-/didu8p9n0fa8fJK1utMuSaPXwE=", + "requires": { + "consolidate": "0.14.5", + "debug": "2.6.9", + "koa-send": "3.3.0", + "mz": "2.7.0" + } + }, + "koa2-cors": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/koa2-cors/download/koa2-cors-2.0.5.tgz", + "integrity": "sha1-NARxLNCS9yjH9y3nBO57kg2Vdlg=" + }, + "latest-version": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "4.0.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "levn": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "optional": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "libbase64": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/libbase64/download/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" + }, + "libmime": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/libmime/download/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/libqp/download/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" + }, + "lodash": { + "version": "4.17.4", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/lodash._bindcallback/download/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/lodash._createassigner/download/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "3.0.1", + "lodash._isiterateecall": "3.0.9", + "lodash.restparam": "3.6.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "http://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "http://registry.npm.taobao.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.assign": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/lodash.assign/download/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._createassigner": "3.1.1", + "lodash.keys": "3.1.2" + } + }, + "lodash.defaults": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/lodash.defaults/download/lodash.defaults-3.1.2.tgz", + "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", + "dev": true, + "requires": { + "lodash.assign": "3.2.0", + "lodash.restparam": "3.6.1" + } + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/lodash.foreach/download/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "http://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "http://registry.npm.taobao.org/lodash.includes/download/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "http://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "http://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "log4js": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/log4js/download/log4js-2.3.11.tgz", + "integrity": "sha1-tht+89biyc5eHQ9QgaN51I4tdgA=", + "requires": { + "axios": "0.15.3", + "date-format": "1.1.0", + "debug": "2.6.9", + "hipchat-notifier": "1.1.0", + "loggly": "1.1.1", + "mailgun-js": "0.7.15", + "nodemailer": "2.7.2", + "redis": "2.8.0", + "semver": "5.4.1", + "slack-node": "0.2.0", + "streamroller": "0.6.0" + } + }, + "loggly": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/loggly/download/loggly-1.1.1.tgz", + "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", + "optional": true, + "requires": { + "json-stringify-safe": "5.0.1", + "request": "2.75.0", + "timespan": "2.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "optional": true + }, + "boom": { + "version": "2.10.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "optional": true + }, + "commander": { + "version": "2.11.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.11.0.tgz", + "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=", + "optional": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.1", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "http://registry.npm.taobao.org/node-uuid/download/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "optional": true + }, + "qs": { + "version": "6.2.3", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "optional": true + }, + "request": { + "version": "2.75.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "bl": "1.1.2", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.0.0", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.2.3", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.4.3" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "optional": true + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "mailcomposer": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/mailcomposer/download/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", + "optional": true, + "requires": { + "buildmail": "4.0.1", + "libmime": "3.0.0" + } + }, + "mailgun-js": { + "version": "0.7.15", + "resolved": "http://registry.npm.taobao.org/mailgun-js/download/mailgun-js-0.7.15.tgz", + "integrity": "sha1-7jZqINrGTDwVwD1sGz4O15UlKrs=", + "optional": true, + "requires": { + "async": "2.1.5", + "debug": "2.2.0", + "form-data": "2.1.4", + "inflection": "1.10.0", + "is-stream": "1.1.0", + "path-proxy": "1.0.0", + "proxy-agent": "2.0.0", + "q": "1.4.1", + "tsscmp": "1.0.5" + }, + "dependencies": { + "async": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.1.5.tgz", + "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", + "optional": true, + "requires": { + "lodash": "4.17.4" + } + }, + "debug": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "optional": true + } + } + }, + "make-dir": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.1.0.tgz", + "integrity": "sha1-GbQ2n+SMEW9Twq+VrRAsDjnoXVE=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-stream": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/map-stream/download/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/mocha/download/mocha-4.0.1.tgz", + "integrity": "sha1-Cu5alc9ppGGIIPXlH6MXFxF9rxs=", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.11.0.tgz", + "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "moment": { + "version": "2.19.2", + "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.19.2.tgz", + "integrity": "sha1-in93TJWmRVC0x+vUlmg5CPlBnb4=" + }, + "mongodb": { + "version": "2.2.33", + "resolved": "http://registry.npm.taobao.org/mongodb/download/mongodb-2.2.33.tgz", + "integrity": "sha1-tTfEcdNKZlG0jzb9vyl1A0Dgi1A=", + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.17", + "readable-stream": "2.2.7" + }, + "dependencies": { + "es6-promise": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/es6-promise/download/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" + }, + "readable-stream": { + "version": "2.2.7", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + } + } + }, + "mongodb-core": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mongodb-core/download/mongodb-core-2.1.17.tgz", + "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", + "requires": { + "bson": "1.0.4", + "require_optional": "1.0.1" + } + }, + "mongoose": { + "version": "4.13.1", + "resolved": "http://registry.npm.taobao.org/mongoose/download/mongoose-4.13.1.tgz", + "integrity": "sha1-yeID8IR71QaLUhCwwJtI+EfJ65U=", + "requires": { + "async": "2.1.4", + "bson": "1.0.4", + "hooks-fixed": "2.0.2", + "kareem": "1.5.0", + "lodash.get": "4.4.2", + "mongodb": "2.2.33", + "mpath": "0.3.0", + "mpromise": "0.5.5", + "mquery": "2.3.2", + "ms": "2.0.0", + "muri": "1.3.0", + "regexp-clone": "0.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "async": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.4" + } + } + } + }, + "mongoose-unique-validator": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/mongoose-unique-validator/download/mongoose-unique-validator-1.0.6.tgz", + "integrity": "sha1-+rMeaMGlum9bBdqOk4QttV6wo7E=", + "requires": { + "lodash.foreach": "4.5.0", + "lodash.get": "4.4.2" + } + }, + "mpath": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/mpath/download/mpath-0.3.0.tgz", + "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" + }, + "mpromise": { + "version": "0.5.5", + "resolved": "http://registry.npm.taobao.org/mpromise/download/mpromise-0.5.5.tgz", + "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" + }, + "mquery": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/mquery/download/mquery-2.3.2.tgz", + "integrity": "sha1-4sYK0RfPCA8u+x7N0UTnu/+/yhE=", + "requires": { + "bluebird": "3.5.1", + "debug": "2.6.9", + "regexp-clone": "0.0.1", + "sliced": "0.0.5" + }, + "dependencies": { + "sliced": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/sliced/download/sliced-0.0.5.tgz", + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multer": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/multer/download/multer-1.3.0.tgz", + "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", + "requires": { + "append-field": "0.1.0", + "busboy": "0.2.14", + "concat-stream": "1.6.0", + "mkdirp": "0.5.1", + "object-assign": "3.0.0", + "on-finished": "2.3.0", + "type-is": "1.6.15", + "xtend": "4.0.1" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + } + } + }, + "muri": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/muri/download/muri-1.3.0.tgz", + "integrity": "sha1-rszz22TFaqfFs04A+Vt4eFJ6RyE=" + }, + "mz": { + "version": "2.7.0", + "resolved": "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "netmask": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "optional": true + }, + "nodemailer": { + "version": "2.7.2", + "resolved": "http://registry.npm.taobao.org/nodemailer/download/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", + "optional": true, + "requires": { + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "optional": true + }, + "socks": { + "version": "1.1.9", + "resolved": "http://registry.npm.taobao.org/socks/download/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", + "optional": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + } + } + } + }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/nodemailer-direct-transport/download/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/nodemailer-fetch/download/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/nodemailer-shared/download/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "http://registry.npm.taobao.org/nodemailer-smtp-pool/download/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "http://registry.npm.taobao.org/nodemailer-smtp-transport/download/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "http://registry.npm.taobao.org/nodemailer-wellknown/download/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, + "nodemon": { + "version": "1.12.1", + "resolved": "http://registry.npm.taobao.org/nodemon/download/nodemon-1.12.1.tgz", + "integrity": "sha1-mWpW3EnZ8Wu/G3ik3gjxNjSzh40=", + "dev": true, + "requires": { + "chokidar": "1.7.0", + "debug": "2.6.9", + "es6-promise": "3.3.1", + "ignore-by-default": "1.0.1", + "lodash.defaults": "3.1.2", + "minimatch": "3.0.4", + "ps-tree": "1.1.0", + "touch": "3.1.0", + "undefsafe": "0.0.3", + "update-notifier": "2.3.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "only": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "optional": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "optional": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "pac-proxy-agent": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-1.1.0.tgz", + "integrity": "sha1-NKOF399h0vDsrOCIWMdF0+eR/U0=", + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1", + "get-uri": "2.0.1", + "http-proxy-agent": "1.0.0", + "https-proxy-agent": "1.0.0", + "pac-resolver": "2.0.0", + "raw-body": "2.1.7", + "socks-proxy-agent": "2.1.1" + } + }, + "pac-resolver": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/pac-resolver/download/pac-resolver-2.0.0.tgz", + "integrity": "sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=", + "optional": true, + "requires": { + "co": "3.0.6", + "degenerator": "1.0.4", + "ip": "1.0.1", + "netmask": "1.0.6", + "thunkify": "2.1.2" + }, + "dependencies": { + "co": { + "version": "3.0.6", + "resolved": "http://registry.npm.taobao.org/co/download/co-3.0.6.tgz", + "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=", + "optional": true + } + } + }, + "package-json": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.4.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "passport": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/passport/download/passport-0.4.0.tgz", + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "requires": { + "passport-strategy": "1.0.0", + "pause": "0.0.1" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/passport-local/download/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.0.0" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/passport-strategy/download/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, + "passthrough-counter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/passthrough-counter/download/passthrough-counter-1.0.0.tgz", + "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-proxy": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/path-proxy/download/path-proxy-1.0.0.tgz", + "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", + "optional": true, + "requires": { + "inflection": "1.3.8" + }, + "dependencies": { + "inflection": { + "version": "1.3.8", + "resolved": "http://registry.npm.taobao.org/inflection/download/inflection-1.3.8.tgz", + "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", + "optional": true + } + } + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pathval/download/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pause": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/pause/download/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "optional": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "optional": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "promise": { + "version": "7.3.1", + "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "requires": { + "asap": "2.0.6" + } + }, + "proxy-agent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/proxy-agent/download/proxy-agent-2.0.0.tgz", + "integrity": "sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=", + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1", + "http-proxy-agent": "1.0.0", + "https-proxy-agent": "1.0.0", + "lru-cache": "2.6.5", + "pac-proxy-agent": "1.1.0", + "socks-proxy-agent": "2.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "2.6.5", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-2.6.5.tgz", + "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=", + "optional": true + } + } + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/ps-tree/download/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "3.3.4" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pug": { + "version": "2.0.0-rc.4", + "resolved": "http://registry.npm.taobao.org/pug/download/pug-2.0.0-rc.4.tgz", + "integrity": "sha1-t7CPZZm9UwJWgEK3Q2mE+yjIChM=", + "requires": { + "pug-code-gen": "2.0.0", + "pug-filters": "2.1.5", + "pug-lexer": "3.1.0", + "pug-linker": "3.0.3", + "pug-load": "2.0.9", + "pug-parser": "4.0.0", + "pug-runtime": "2.0.3", + "pug-strip-comments": "1.0.2" + } + }, + "pug-attrs": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/pug-attrs/download/pug-attrs-2.0.2.tgz", + "integrity": "sha1-i+KyIlVo/6ddG4Zpgr/59BEa/8s=", + "requires": { + "constantinople": "3.1.0", + "js-stringify": "1.0.2", + "pug-runtime": "2.0.3" + } + }, + "pug-code-gen": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/pug-code-gen/download/pug-code-gen-2.0.0.tgz", + "integrity": "sha1-lq6jmp5i8exdK2pbQqKdUoxwtD0=", + "requires": { + "constantinople": "3.1.0", + "doctypes": "1.1.0", + "js-stringify": "1.0.2", + "pug-attrs": "2.0.2", + "pug-error": "1.3.2", + "pug-runtime": "2.0.3", + "void-elements": "2.0.1", + "with": "5.1.1" + } + }, + "pug-error": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/pug-error/download/pug-error-1.3.2.tgz", + "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + }, + "pug-filters": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/pug-filters/download/pug-filters-2.1.5.tgz", + "integrity": "sha1-Zr9ugNl/vvgpurCqNe3f8z/JZPM=", + "requires": { + "clean-css": "3.4.28", + "constantinople": "3.1.0", + "jstransformer": "1.0.0", + "pug-error": "1.3.2", + "pug-walk": "1.1.5", + "resolve": "1.5.0", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "pug-lexer": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/pug-lexer/download/pug-lexer-3.1.0.tgz", + "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=", + "requires": { + "character-parser": "2.2.0", + "is-expression": "3.0.0", + "pug-error": "1.3.2" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + }, + "is-expression": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "requires": { + "acorn": "4.0.13", + "object-assign": "4.1.1" + } + } + } + }, + "pug-linker": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/pug-linker/download/pug-linker-3.0.3.tgz", + "integrity": "sha1-JfWet1AjfwNo5ZwzeXZCKcAYnEE=", + "requires": { + "pug-error": "1.3.2", + "pug-walk": "1.1.5" + } + }, + "pug-load": { + "version": "2.0.9", + "resolved": "http://registry.npm.taobao.org/pug-load/download/pug-load-2.0.9.tgz", + "integrity": "sha1-7iF8kUzB2TJNRLhsMtHfJB023no=", + "requires": { + "object-assign": "4.1.1", + "pug-walk": "1.1.5" + } + }, + "pug-parser": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/pug-parser/download/pug-parser-4.0.0.tgz", + "integrity": "sha1-yfUjIuTqvkv1vuumTtGDc7tieAE=", + "requires": { + "pug-error": "1.3.2", + "token-stream": "0.0.1" + } + }, + "pug-runtime": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/pug-runtime/download/pug-runtime-2.0.3.tgz", + "integrity": "sha1-mBYmB7D86eJU1CfzOYelrucWi9o=" + }, + "pug-strip-comments": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pug-strip-comments/download/pug-strip-comments-1.0.2.tgz", + "integrity": "sha1-0xOvoBvMN0mA4TmeI+vy65vchRM=", + "requires": { + "pug-error": "1.3.2" + } + }, + "pug-walk": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/pug-walk/download/pug-walk-1.1.5.tgz", + "integrity": "sha1-kOlDrLz3Ah5kVM8bMiRYkcum+FE=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "optional": true + }, + "q": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/q/download/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "optional": true + }, + "qs": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/random-bytes/download/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "raw-body": { + "version": "2.1.7", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/rc/download/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "redis": { + "version": "2.8.0", + "resolved": "http://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz", + "integrity": "sha1-ICKI4/WMSfYHnZevehDhMDrhSwI=", + "optional": true, + "requires": { + "double-ended-queue": "2.1.0-0", + "redis-commands": "1.3.1", + "redis-parser": "2.6.0" + } + }, + "redis-commands": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/redis-commands/download/redis-commands-1.3.1.tgz", + "integrity": "sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs=", + "optional": true + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "http://registry.npm.taobao.org/redis-parser/download/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", + "optional": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexp-clone": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/regexp-clone/download/regexp-clone-0.0.1.tgz", + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true, + "requires": { + "rc": "1.2.2", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.2" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.83.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.83.0.tgz", + "integrity": "sha1-ygtl2gLtYpNYh4COb1EDgQNOM1Y=", + "optional": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + }, + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", + "optional": true + } + } + }, + "requestretry": { + "version": "1.12.2", + "resolved": "http://registry.npm.taobao.org/requestretry/download/requestretry-1.12.2.tgz", + "integrity": "sha1-E844pM5OgJ88nsbUyjt7m6Ss8mw=", + "optional": true, + "requires": { + "extend": "3.0.1", + "lodash": "4.17.4", + "request": "2.83.0", + "when": "3.7.8" + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz", + "integrity": "sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.4.1" + } + }, + "resolve": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.5.0.tgz", + "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "resolve-path": { + "version": "1.3.3", + "resolved": "http://registry.npm.taobao.org/resolve-path/download/resolve-path-1.3.3.tgz", + "integrity": "sha1-TYOrpkaMK45jKldeP1Kw+g2+Glw=", + "requires": { + "http-errors": "1.5.1", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "http-errors": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.5.1.tgz", + "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "requires": { + "inherits": "2.0.3", + "setprototypeof": "1.0.2", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.2.tgz", + "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" + } + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "semver": { + "version": "5.4.1", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "5.4.1" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slack-node": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/slack-node/download/slack-node-0.2.0.tgz", + "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", + "optional": true, + "requires": { + "requestretry": "1.12.2" + } + }, + "sliced": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "http://registry.npm.taobao.org/smart-buffer/download/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "http://registry.npm.taobao.org/smtp-connection/download/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz", + "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=", + "optional": true, + "requires": { + "hoek": "4.2.0" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/socket.io/download/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "requires": { + "debug": "2.6.9", + "engine.io": "3.1.4", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.2" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.9", + "engine.io-client": "3.1.4", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.1.2", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.1.2.tgz", + "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "requires": { + "component-emitter": "1.2.1", + "debug": "2.6.9", + "has-binary2": "1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "socks": { + "version": "1.1.10", + "resolved": "http://registry.npm.taobao.org/socks/download/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + } + } + }, + "socks-proxy-agent": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-2.1.1.tgz", + "integrity": "sha1-huuwcZMlhjeHDhO3vZnybGY989M=", + "requires": { + "agent-base": "2.1.1", + "extend": "3.0.1", + "socks": "1.1.10" + } + }, + "source-map": { + "version": "0.1.34", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": "1.0.1" + } + }, + "split": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/split/download/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=" + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/stream-combiner/download/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "streaming-json-stringify": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/streaming-json-stringify/download/streaming-json-stringify-3.1.0.tgz", + "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=", + "requires": { + "json-stringify-safe": "5.0.1", + "readable-stream": "2.3.3" + } + }, + "streamroller": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/streamroller/download/streamroller-0.6.0.tgz", + "integrity": "sha1-CV17BsfMUlg1ytLlmPdrseDuaTo=", + "requires": { + "date-format": "1.1.0", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "readable-stream": "2.3.3" + } + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "superagent": { + "version": "3.8.0", + "resolved": "http://registry.npm.taobao.org/superagent/download/superagent-3.8.0.tgz", + "integrity": "sha1-h+PtU2yIYMCMfH0SJdqagMqwZMY=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.1", + "debug": "3.1.0", + "extend": "3.0.1", + "form-data": "2.3.1", + "formidable": "1.1.1", + "methods": "1.1.2", + "mime": "1.4.1", + "qs": "6.5.1", + "readable-stream": "2.3.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", + "dev": true + } + } + }, + "supertest": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/supertest/download/supertest-3.0.0.tgz", + "integrity": "sha1-jUu2j9GDDuBwM7HFpamkAhyWUpY=", + "dev": true, + "requires": { + "methods": "1.1.2", + "superagent": "3.8.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "swig": { + "version": "1.4.2", + "resolved": "http://registry.npm.taobao.org/swig/download/swig-1.4.2.tgz", + "integrity": "sha1-QIXKBFM2kQS11IPihBs5t64aq6U=", + "requires": { + "optimist": "0.6.1", + "uglify-js": "2.4.24" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "thunkify": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/thunkify/download/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", + "optional": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timespan": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/timespan/download/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "optional": true + }, + "to-array": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "token-stream": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + }, + "topo": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/topo/download/topo-1.1.0.tgz", + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "requires": { + "hoek": "2.16.3" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } + }, + "touch": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", + "dev": true, + "requires": { + "nopt": "1.0.10" + } + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tsscmp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/tsscmp/download/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "4.0.3", + "resolved": "http://registry.npm.taobao.org/type-detect/download/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "0.2.10", + "source-map": "0.1.34", + "uglify-to-browserify": "1.0.2", + "yargs": "3.5.4" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/uid-safe/download/uid-safe-2.1.5.tgz", + "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=", + "requires": { + "random-bytes": "1.0.0" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz", + "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw=" + }, + "undefsafe": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/undefsafe/download/undefsafe-0.0.3.tgz", + "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", + "dev": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/underscore/download/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "unique-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "dev": true, + "requires": { + "boxen": "1.2.2", + "chalk": "2.3.0", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz", + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", + "optional": true + }, + "uws": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/uws/download/uws-0.14.5.tgz", + "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, + "when": { + "version": "3.7.8", + "resolved": "http://registry.npm.taobao.org/when/download/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "optional": true + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "widest-line": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/widest-line/download/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "dev": true, + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "with": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/with/download/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "requires": { + "acorn": "3.3.0", + "acorn-globals": "3.1.0" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "ws": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/ws/download/ws-3.3.2.tgz", + "integrity": "sha1-lsHQiz/v2h1cHjNwDTv6qb4tVgg=", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.4", + "resolved": "http://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.4.tgz", + "integrity": "sha1-BPVgkVcks4kIhxXMDteBPpZ3v1c=" + }, + "xregexp": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "optional": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.5.4", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "1.2.1", + "decamelize": "1.2.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/koa/HelloKoa2/package.json b/koa/HelloKoa2/package.json new file mode 100644 index 0000000..c508fc0 --- /dev/null +++ b/koa/HelloKoa2/package.json @@ -0,0 +1,45 @@ +{ + "name": "HelloKoa2", + "version": "0.2.0", + "private": true, + "scripts": { + "start": "node bin/www", + "dev": "./node_modules/.bin/nodemon bin/www", + "prd": "pm2 start bin/www --name wd-server", + "test": "NODE_ENV=test mocha" + }, + "dependencies": { + "bcrypt-nodejs": "^0.0.3", + "debug": "^2.6.3", + "jsonwebtoken": "^8.1.0", + "koa": "^2.2.0", + "koa-body": "^2.5.0", + "koa-bodyparser": "^3.2.0", + "koa-convert": "^1.2.0", + "koa-json": "^2.0.2", + "koa-jwt": "^3.2.2", + "koa-logger": "^2.0.1", + "koa-multer": "^1.0.2", + "koa-onerror": "^1.2.1", + "koa-passport": "^4.0.1", + "koa-router": "^7.1.1", + "koa-session": "^5.5.0", + "koa-sslify": "^2.1.2", + "koa-static": "^3.0.0", + "koa-views": "^5.2.1", + "koa2-cors": "^2.0.5", + "lodash": "^4.17.4", + "log4js": "^2.3.11", + "mongoose": "^4.13.1", + "mongoose-unique-validator": "^1.0.6", + "passport-local": "^1.0.0", + "pug": "^2.0.0-rc.1", + "socket.io": "^2.0.4" + }, + "devDependencies": { + "chai": "^4.1.2", + "mocha": "^4.0.1", + "nodemon": "^1.8.1", + "supertest": "^3.0.0" + } +} diff --git a/koa/HelloKoa2/public/avatar/13022163938.png b/koa/HelloKoa2/public/avatar/13022163938.png new file mode 100644 index 0000000..56141ff Binary files /dev/null and b/koa/HelloKoa2/public/avatar/13022163938.png differ diff --git a/koa/HelloKoa2/public/stylesheets/style.css b/koa/HelloKoa2/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/koa/HelloKoa2/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/koa/HelloKoa2/routes/api/admin-router.js b/koa/HelloKoa2/routes/api/admin-router.js new file mode 100644 index 0000000..199b354 --- /dev/null +++ b/koa/HelloKoa2/routes/api/admin-router.js @@ -0,0 +1,12 @@ +const router = require('koa-router')() +const adminController = require('../../app/controllers/admin-controller') +const orderController = require('../../app/controllers/order-controller') + +router + .post('/login', adminController.login) + .get('/register', adminController.register) + .get('/orders', orderController.getOrderList) + .put('/orders/:on/deliver-goods', orderController.deliverGoods) + .get('/logout', adminController.logout) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/adr-router.js b/koa/HelloKoa2/routes/api/adr-router.js new file mode 100644 index 0000000..f86fb84 --- /dev/null +++ b/koa/HelloKoa2/routes/api/adr-router.js @@ -0,0 +1,12 @@ +const router = require('koa-router')() +const adrController = require('../../app/controllers/address-controller') + +router + .put('/default/:aid', adrController.setDefault) + .post('/add', adrController.addAdr) + .del('/:aid', adrController.delAdr) + .put('/:aid', adrController.modifyAdr) + .get('/:aid', adrController.getAdr) + .get('/', adrController.getAdrList) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/cart-router.js b/koa/HelloKoa2/routes/api/cart-router.js new file mode 100644 index 0000000..1b45ec5 --- /dev/null +++ b/koa/HelloKoa2/routes/api/cart-router.js @@ -0,0 +1,12 @@ +const router = require('koa-router')() +const cartController = require('../../app/controllers/cart-controller') + +router + .post('/add', cartController.addToCart) + .put('/:cid', cartController.modifyCart) + .delete('/:cid', cartController.deleteFromCart) + .get('/', cartController.getCart) + .delete('/', cartController.clearCart) + .put('/', cartController.toggleChoose) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/coupon-router.js b/koa/HelloKoa2/routes/api/coupon-router.js new file mode 100644 index 0000000..ad63e26 --- /dev/null +++ b/koa/HelloKoa2/routes/api/coupon-router.js @@ -0,0 +1,10 @@ +const router = require('koa-router')() +const CouponController = require('../../app/controllers/coupon-controller') + +router + .get('/', CouponController.listCoupons) + .post('/', CouponController.addCoupon) + .put('/:kid', CouponController.editCoupon) + .delete('/:kid', CouponController.deleteCoupon) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/index.js b/koa/HelloKoa2/routes/api/index.js new file mode 100644 index 0000000..b529415 --- /dev/null +++ b/koa/HelloKoa2/routes/api/index.js @@ -0,0 +1,22 @@ +const router = require('koa-router')() +const userRouter = require('./user-router') +const adrRouter = require('./adr-router') +const proRouter = require('./pro-router') +const cartRouter = require('./cart-router') +const orderRouter = require('./order-router') +const adminRouter = require('./admin-router') +const likeRouter = require('./like-router') +const couponRouter = require('./coupon-router') +// const v = process.env.npm_package_version + +router.prefix(`/api`) +router.use('/users/:uid/cart', cartRouter.routes(), cartRouter.allowedMethods()) +router.use('/users/:uid/order', orderRouter.routes(), orderRouter.allowedMethods()) +router.use('/(sys)?/users', userRouter.routes(), userRouter.allowedMethods()) +router.use('/users/:uid/adrs', adrRouter.routes(), adrRouter.allowedMethods()) +router.use('/users/:uid/like', likeRouter.routes(), likeRouter.allowedMethods()) +router.use('/sys/coupon', couponRouter.routes(), couponRouter.allowedMethods()) +router.use('/pros', proRouter.routes(), proRouter.allowedMethods()) +router.use('/sys', adminRouter.routes(), adminRouter.allowedMethods()) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/like-router.js b/koa/HelloKoa2/routes/api/like-router.js new file mode 100644 index 0000000..6411911 --- /dev/null +++ b/koa/HelloKoa2/routes/api/like-router.js @@ -0,0 +1,9 @@ +const router = require('koa-router')() +const LikeController = require('../../app/controllers/likes-controller') + +router + .get('/', LikeController.listLikes) + .put('/', LikeController.addLike) + .delete('/', LikeController.deleteLike) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/order-router.js b/koa/HelloKoa2/routes/api/order-router.js new file mode 100644 index 0000000..2c42974 --- /dev/null +++ b/koa/HelloKoa2/routes/api/order-router.js @@ -0,0 +1,10 @@ +const router = require('koa-router')() +const orderController = require('../../app/controllers/order-controller') + +router + .get('/:orderNumber', orderController.orderDetail) + .put('/:orderNumber', orderController.modifyOrder) + .get('/', orderController.listOrders) + .post('/', orderController.placeOrder) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/pro-router.js b/koa/HelloKoa2/routes/api/pro-router.js new file mode 100644 index 0000000..d511981 --- /dev/null +++ b/koa/HelloKoa2/routes/api/pro-router.js @@ -0,0 +1,52 @@ +const router = require('koa-router')() +const proController = require('../../app/controllers/product-controller') +const ApiError = require('../../app/error/ApiError') +const ApiErrorNames = require('../../app/error/ApiErrorNames') +const multer = require('koa-multer') +const path = require('path') +const fs = require('fs') + +const dataDir = path.resolve(__dirname, '../../public/') + '/images' +const proPics = dataDir + '/pro-pics' +fs.existsSync(dataDir) || fs.mkdirSync(dataDir) +fs.existsSync(proPics) || fs.mkdirSync(proPics) + +const storage = multer.diskStorage({ + destination (req, file, cb) { + const p = proPics + '/' + req.sku + fs.existsSync(p) || fs.mkdirSync(p) + cb(null, p) + }, + filename (req, file, cb) { + const fileFormat = (file.originalname).split('.') + cb(null, Date.now() + '.' + fileFormat[fileFormat.length - 1]) + } +}) +const upload = multer({ + storage, + fileFilter (req, file, cb) { + const m = req.url.match(/api\/pros\/([A-z]{1}-\d{3,4})\/upload/) + if (m && m[1]) { + req.sku = m[1].toUpperCase() + return cb(null, true) + } + cb(new ApiError(ApiErrorNames.MISSING_PARAMETER_OR_PARAMETER_ERROR)) + } +}) + +router + // sys + .post('/sys/add', proController.addPro) + .get('/maybe', proController.maybeLike) + .post('/:sku/upload', upload.single('file'), proController.productImage) + // .post('/:sku/upload', upload.array('file', { maxCount: 5 }), proController.productImage) + // sys only + .put('/sys/:sku', proController.modifyPro) + // sys only + .delete('/sys/:sku', proController.delPro) + // sys + .get('/(sys)?/', proController.getProList) + // sys + .get('/(sys)?/:sku', proController.getProDetail) + +module.exports = router \ No newline at end of file diff --git a/koa/HelloKoa2/routes/api/user-router.js b/koa/HelloKoa2/routes/api/user-router.js new file mode 100644 index 0000000..b7a0609 --- /dev/null +++ b/koa/HelloKoa2/routes/api/user-router.js @@ -0,0 +1,29 @@ +const router = require('koa-router')() +const userController = require('../../app/controllers/user-controller') + +router + // 发送短信验证码 + .get('/code', userController.getCode) + // 注册 + .post('/register', userController.register) + // 登录 + .post('/login', userController.login) + // 上传头像 + // .post('/upload', userController.uploadAvatar) + .put('/:uid/password', userController.modifyPassword) + .put('/:uid/nick', userController.modifyNick) + .put('/:uid/avatar', userController.modifyAvatar) + .put('/:uid/forget', userController.forget) + // 退出登录 + .get('/logout', userController.logout) + .get('/is-exist', userController.isExist) + /** + * 获取用户信息,根据id或者phone + * 没有信息返回null + */ + .get('/sys', userController.getUserList) + .get('/:ip', userController.getUser) + .get('/sys/filter', userController.filterUsers) + +module.exports = router + diff --git a/koa/HelloKoa2/routes/index.js b/koa/HelloKoa2/routes/index.js new file mode 100644 index 0000000..f75048e --- /dev/null +++ b/koa/HelloKoa2/routes/index.js @@ -0,0 +1,19 @@ +const router = require('koa-router')() + +router.get('/', async (ctx, next) => { + await ctx.render('index', { + title: 'Hello Koa 2!' + }) +}) + +router.get('/string', async (ctx, next) => { + ctx.body = 'koa2 string' +}) + +router.get('/json', async (ctx, next) => { + ctx.body = { + title: 'koa2 json' + } +}) + +module.exports = router diff --git a/koa/HelloKoa2/routes/users.js b/koa/HelloKoa2/routes/users.js new file mode 100644 index 0000000..1e361d9 --- /dev/null +++ b/koa/HelloKoa2/routes/users.js @@ -0,0 +1,16 @@ +const router = require('koa-router')() + +router.prefix('/users') + +router.get('/', function (ctx, next) { + ctx.body = 'this is a users response!' +}) + +router.get('/bar', function (ctx, next) { + ctx.body = 'this is a users/bar response' +}) +router.post('/add', function (ctx, next) { + ctx.body = ctx.request.body +}) + +module.exports = router diff --git a/koa/HelloKoa2/test/user-api.test.js b/koa/HelloKoa2/test/user-api.test.js new file mode 100644 index 0000000..7bf2d62 --- /dev/null +++ b/koa/HelloKoa2/test/user-api.test.js @@ -0,0 +1,37 @@ +const request = require('supertest') +const expect = require('chai').expect +const app = require('../app.js') + +describe('user-api', () => { + + it('getUser', done => { + + request(app.listen()) + .get('/api/users/getUser?id=1') + .expect(200) + .end((err, res) => { + console.log(res.body) + //断言data属性是一个对象 + expect(res.body.data).to.be.an('object') + done() + }) + }) + + it('registerUser', done => { + const user = { + username: 'zhin', + age: 20 + } + request(app.listen()) + .post('/api/users/registerUser') + .send(user) + .set('Content-Type', 'application/json') + .expect(200) + .end((err, res) => { + console.log(res.body) + // 断言返回的code是0 + expect(res.body.code).to.be.equal(0) + done() + }) + }) +}) \ No newline at end of file diff --git a/koa/HelloKoa2/utils/cycleQueue.js b/koa/HelloKoa2/utils/cycleQueue.js new file mode 100644 index 0000000..6829d30 --- /dev/null +++ b/koa/HelloKoa2/utils/cycleQueue.js @@ -0,0 +1,109 @@ +const timer = 10 +const cycle = new Array(timer) +const Order = require('../models/order') +const Product = require('../models/product') +const _ = require('lodash') +let currentIndex = 0 +setInterval(function () { + run() + if (currentIndex === timer - 1) { + currentIndex = 0 + } else { + currentIndex ++ + } +}, 1000) + +function run () { + const tasks = cycle[currentIndex] + if (!tasks || !tasks.length) return false + tasks.forEach((t, i) => { + if (t.cycleNum > 0) t.cycleNum -= 1 + else { + Promise.all([ + set2Cancel(tasks[i]), + backDepot(tasks[i]) + ]).then(res => { + tasks.splice(i, 1) + }).catch(e => { + console.log(e) + tasks.splice(i, 1) + }) + } + }) +} + +// 当服务器因为某些原因重启,则需要将数据库中的status => 0的订单加入队列 +async function init() { + const orders = await Order.find({ status: 0 }).lean().exec() + if (!orders || !orders.length) return true + // 当前时间 + const now = new Date() + // 已经过期的订单(需要立刻取消) + const exipredOrders = [] + orders.forEach(o => { + const { orderNumber, date, products } = o + const body = products.map(p => ({ sku: p.sku, count: p.count })) + const timeDif = now - date + // 时间差,如果下单时间与当前时间的差值超过timer,则订单过期。 + if (timeDif >= timer * 1000) { + exipredOrders.push({ orderNumber, body, cycleNum: 0 }) + } else { + const index = Math.floor(timeDif / 1000) + if (!cycle[index]) cycle[index] = [] + cycle[index].push({ orderNumber, body, cycleNum: 0 }) + } + }) + // 如果有过期的订单 + if (exipredOrders.length) { + // 以防过期订单过多,将之分块。push到cycle中 + const chunkExpiredOrders = _.chunk(exipredOrders, 5) + chunkExpiredOrders.forEach((chunk, i) => { + // 从当前指针的下一个开始 + cycle[currentIndex + i + 1] = [...chunk] + }) + } +} + +// 自动取消订单 +async function set2Cancel (task) { + const { orderNumber } = task + const order = await Order.findOne({ orderNumber }).exec() + if (order && order.status === 0) { + order.status = 4 + await order.save() + console.log(`取消orderNumber为${orderNumber}的订单`) + } +} +// 将取消订单的商品返库 +async function backDepot (task) { + const { body } = task + const promises = body.map(async ({ sku, count }) => { + try { + const p = await Product.findOne({ sku }).exec() + if (p) { + p.stock += count + await p.save() + } + } catch (e) { + console.log(e); + } + return true + }) + await Promise.all(promises) + console.log('已返库完成') +} + +function addToCycle (task) { + const nextCycleIndex = currentIndex === 0 ? timer - 1 : currentIndex - 1 + if (!cycle[nextCycleIndex]) cycle[nextCycleIndex] = [] + cycle[nextCycleIndex].push({ ...task, cycleNum: 0 }) +} + +setTimeout(function () { + init().then(() => {}).catch(e => { + console.log('xxx') + console.log(e) + }) +}, 1000) + +module.exports = addToCycle diff --git a/koa/HelloKoa2/utils/log-util.js b/koa/HelloKoa2/utils/log-util.js new file mode 100644 index 0000000..f296d03 --- /dev/null +++ b/koa/HelloKoa2/utils/log-util.js @@ -0,0 +1,18 @@ +// const log4js = require('log4js') +// const logConfig = require('../config/log-config') +// +// log4js.configure(logConfig) +// const logUtil = {} +// const errorLogger = log4js.getLogger('errorLogger') +// const resLogger = log4js.getLogger('resLogger') +// +// logUtil.logError = function (ctx, error, resTime) { +// if (ctx && error) { +// // errorLogger.error(formatError) +// } +// } +// +// function formatRes(ctx, resTime) { +// let logText = '' +// // logText += +// } \ No newline at end of file diff --git a/koa/HelloKoa2/utils/socket.js b/koa/HelloKoa2/utils/socket.js new file mode 100644 index 0000000..9a096d8 --- /dev/null +++ b/koa/HelloKoa2/utils/socket.js @@ -0,0 +1,6 @@ +const io = { + nsp: null, + // 待发货订单数量 + count: 0 +} +module.exports = io \ No newline at end of file diff --git a/koa/HelloKoa2/views/error.pug b/koa/HelloKoa2/views/error.pug new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/koa/HelloKoa2/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/koa/HelloKoa2/views/index.pug b/koa/HelloKoa2/views/index.pug new file mode 100644 index 0000000..89a04e9 --- /dev/null +++ b/koa/HelloKoa2/views/index.pug @@ -0,0 +1,9 @@ +extends layout + +block content + h1= title + p Welcome to #{title} + form(role='form', action='/api/users/test', method='post', enctype='multipart/form-data') + input(type='file', accept='image/*' name="avatar") + input(type='submit') + diff --git a/koa/HelloKoa2/views/layout.pug b/koa/HelloKoa2/views/layout.pug new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/koa/HelloKoa2/views/layout.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/koa/HelloKoa2/yarn.lock b/koa/HelloKoa2/yarn.lock new file mode 100644 index 0000000..7a54d81 --- /dev/null +++ b/koa/HelloKoa2/yarn.lock @@ -0,0 +1,3651 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@1.3.3: + version "1.3.3" + resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +accepts@^1.2.2: + version "1.3.4" + resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +acorn-globals@^3.0.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^3.1.0, acorn@~3.3.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.4, acorn@~4.0.2: + version "4.0.13" + resolved "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +addressparser@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/addressparser/download/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" + +after@0.8.2: + version "0.8.2" + resolved "http://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +agent-base@2: + version "2.1.1" + resolved "http://registry.npm.taobao.org/agent-base/download/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" + dependencies: + extend "~3.0.0" + semver "~5.0.1" + +ajv@^4.9.1: + version "4.11.8" + resolved "http://registry.npm.taobao.org/ajv/download/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.0: + version "5.3.0" + resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.1.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0, any-promise@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +anymatch@^1.3.0: + version "1.3.2" + resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +append-field@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/append-field/download/append-field-0.1.0.tgz#6ddc58fa083c7bc545d3c5995b2830cc2366d44a" + +aproba@^1.0.3: + version "1.2.0" + resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-unique@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arraybuffer.slice@0.0.6: + version "0.0.6" + resolved "http://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" + +asap@~2.0.3: + version "2.0.6" + resolved "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/assertion-error/download/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +ast-types@0.x.x: + version "0.9.14" + resolved "http://registry.npm.taobao.org/ast-types/download/ast-types-0.9.14.tgz#d34ba5dffb9d15a44351fd2a9d82e4ab2838b5ba" + +async-each@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@2.1.4: + version "2.1.4" + resolved "http://registry.npm.taobao.org/async/download/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +async@~2.1.2: + version "2.1.5" + resolved "http://registry.npm.taobao.org/async/download/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.15.3: + version "0.15.3" + resolved "http://registry.npm.taobao.org/axios/download/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" + dependencies: + follow-redirects "1.0.0" + +backo2@1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "http://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +base64id@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + +base64url@2.0.0, base64url@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/base64url/download/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" + +bcrypt-nodejs@^0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/bcrypt-nodejs/download/bcrypt-nodejs-0.0.3.tgz#c60917f26dc235661566c681061c303c2b28842b" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +binary-extensions@^1.0.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + +bl@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/bl/download/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" + dependencies: + readable-stream "~2.0.5" + +blob@0.0.4: + version "0.0.4" + resolved "http://registry.npm.taobao.org/blob/download/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + +block-stream@*: + version "0.0.9" + resolved "http://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.1.1, bluebird@^3.5.0: + version "3.5.1" + resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +boom@2.x.x: + version "2.10.1" + resolved "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "http://registry.npm.taobao.org/boom/download/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "http://registry.npm.taobao.org/boom/download/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +boxen@^1.2.1: + version "1.2.2" + resolved "http://registry.npm.taobao.org/boxen/download/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^1.0.0" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +bson@~1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/bson/download/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/buffer-shims/download/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buildmail@4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/buildmail/download/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" + dependencies: + addressparser "1.0.1" + libbase64 "0.1.0" + libmime "3.0.0" + libqp "1.1.0" + nodemailer-fetch "1.6.0" + nodemailer-shared "1.1.0" + punycode "1.4.1" + +busboy@^0.2.11: + version "0.2.14" + resolved "http://registry.npm.taobao.org/busboy/download/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + +bytes@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + +bytes@2.4.0: + version "2.4.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +bytes@3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +callsite@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +camelcase@^1.0.2: + version "1.2.1" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^4.0.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + +caseless@~0.11.0: + version "0.11.0" + resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chai@^4.1.2: + version "4.1.2" + resolved "http://registry.npm.taobao.org/chai/download/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" + dependencies: + assertion-error "^1.0.1" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1: + version "2.3.0" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +character-parser@^2.1.1: + version "2.2.0" + resolved "http://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + dependencies: + is-regex "^1.0.3" + +check-error@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + +chokidar@^1.7.0: + version "1.7.0" + resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +clean-css@^3.3.0: + version "3.4.28" + resolved "http://registry.npm.taobao.org/clean-css/download/clean-css-3.4.28.tgz#bf1945e82fc808f55695e6ddeaec01400efd03ff" + dependencies: + commander "2.8.x" + source-map "0.4.x" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +cliui@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +co-body@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/co-body/download/co-body-4.2.0.tgz#74df20fa73262125dc45482af04e342ea8db3515" + dependencies: + inflation "~2.0.0" + qs "~4.0.0" + raw-body "~2.1.2" + type-is "~1.6.6" + +co-body@^5.1.1: + version "5.1.1" + resolved "http://registry.npm.taobao.org/co-body/download/co-body-5.1.1.tgz#d97781d1e3344ba4a820fd1806bddf8341505236" + dependencies: + inflation "^2.0.0" + qs "^6.4.0" + raw-body "^2.2.0" + type-is "^1.6.14" + +co@^4.6.0: + version "4.6.0" + resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +co@~3.0.6: + version "3.0.6" + resolved "http://registry.npm.taobao.org/co/download/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.9.0: + version "1.9.0" + resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@2.11.0, commander@^2.9.0: + version "2.11.0" + resolved "http://registry.npm.taobao.org/commander/download/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commander@2.8.x: + version "2.8.1" + resolved "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + +component-bind@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.2.1, component-emitter@^1.2.0: + version "1.2.1" + resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +concat-map@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^3.0.0: + version "3.1.1" + resolved "http://registry.npm.taobao.org/configstore/download/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +consolidate@^0.14.1: + version "0.14.5" + resolved "http://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" + dependencies: + bluebird "^3.1.1" + +constantinople@^3.0.1: + version "3.1.0" + resolved "http://registry.npm.taobao.org/constantinople/download/constantinople-3.1.0.tgz#7569caa8aa3f8d5935d62e1fa96f9f702cd81c79" + dependencies: + acorn "^3.1.0" + is-expression "^2.0.1" + +content-disposition@~0.5.0: + version "0.5.2" + resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@^1.0.0: + version "1.0.4" + resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie@0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +cookiejar@^2.1.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" + +cookies@~0.7.0: + version "0.7.1" + resolved "http://registry.npm.taobao.org/cookies/download/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" + dependencies: + depd "~1.1.1" + keygrip "~1.0.2" + +copy-to@~2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/copy-to/download/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + +core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +crc@^3.4.4: + version "3.5.0" + resolved "http://registry.npm.taobao.org/crc/download/crc-3.5.0.tgz#98b8ba7d489665ba3979f59b21381374101a1964" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "http://registry.npm.taobao.org/cryptiles/download/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +dashdash@^1.12.0: + version "1.14.1" + resolved "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +data-uri-to-buffer@1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + +date-format@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/date-format/download/date-format-1.1.0.tgz#be7df68ec270fd9ec78482bd85be68c8fb8fbebc" + +debug@*, debug@3.1.0, debug@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@2, debug@^2.1.3, debug@^2.2.0, debug@^2.6.0, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9: + version "2.6.9" + resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@~2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-eql@^3.0.0: + version "3.0.1" + resolved "http://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + dependencies: + type-detect "^4.0.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +deep-is@~0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +degenerator@~1.0.2: + version "1.0.4" + resolved "http://registry.npm.taobao.org/degenerator/download/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" + dependencies: + ast-types "0.x.x" + escodegen "1.x.x" + esprima "3.x.x" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.1, depd@^1.1.0, depd@~1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +destroy@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-libc@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" + +dicer@0.2.5: + version "0.2.5" + resolved "http://registry.npm.taobao.org/dicer/download/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + +diff@3.3.1: + version "3.3.1" + resolved "http://registry.npm.taobao.org/diff/download/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + +doctypes@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + +double-ended-queue@^2.1.0-0: + version "2.1.0-0" + resolved "http://registry.npm.taobao.org/double-ended-queue/download/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexer@~0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ecdsa-sig-formatter@1.0.9: + version "1.0.9" + resolved "http://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" + dependencies: + base64url "^2.0.0" + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +engine.io-client@~3.1.0: + version "3.1.4" + resolved "http://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~2.6.9" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.1.tgz#e0fb3f0e0462f7f58bb77c1a52e9f5a7e26e4668" + dependencies: + after "0.8.2" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary2 "~1.0.2" + +engine.io@~3.1.0: + version "3.1.4" + resolved "http://registry.npm.taobao.org/engine.io/download/engine.io-3.1.4.tgz#3d0211b70a552ce841ffc7da8627b301a9a4162e" + dependencies: + accepts "1.3.3" + base64id "1.0.0" + cookie "0.3.1" + debug "~2.6.9" + engine.io-parser "~2.1.0" + ws "~3.3.1" + optionalDependencies: + uws "~0.14.4" + +error-inject@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + +es6-promise@3.2.1: + version "3.2.1" + resolved "http://registry.npm.taobao.org/es6-promise/download/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" + +es6-promise@^3.3.1: + version "3.3.1" + resolved "http://registry.npm.taobao.org/es6-promise/download/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + +escape-html@~1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.x.x: + version "1.9.0" + resolved "http://registry.npm.taobao.org/escodegen/download/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + +esprima@3.x.x, esprima@^3.1.3: + version "3.1.3" + resolved "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +estraverse@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-stream@~3.3.0: + version "3.3.4" + resolved "http://registry.npm.taobao.org/event-stream/download/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +execa@^0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +file-uri-to-path@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +follow-redirects@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" + dependencies: + debug "^2.2.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@^2.3.1, form-data@~2.3.1: + version "2.3.1" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +form-data@~2.1.1: + version "2.1.4" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +formidable@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/formidable/download/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" + +fresh@^0.5.2: + version "0.5.2" + resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from@~0: + version "0.1.7" + resolved "http://registry.npm.taobao.org/from/download/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.2" + resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.36" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/fstream-ignore/download/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "http://registry.npm.taobao.org/fstream/download/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +ftp@~0.3.10: + version "0.3.10" + resolved "http://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +function-bind@^1.0.2: + version "1.1.1" + resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/generate-object-property/download/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-func-name@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + +get-stream@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-uri@2: + version "2.0.1" + resolved "http://registry.npm.taobao.org/get-uri/download/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59" + dependencies: + data-uri-to-buffer "1" + debug "2" + extend "3" + file-uri-to-path "1" + ftp "~0.3.10" + readable-stream "2" + +getpass@^0.1.1: + version "0.1.7" + resolved "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@7.1.2, glob@^7.0.5: + version "7.1.2" + resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.0.tgz#10d34039e0df04272e262cf24224f7209434df4f" + dependencies: + ini "^1.3.4" + +got@^6.7.1: + version "6.7.1" + resolved "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.10.3: + version "1.10.3" + resolved "http://registry.npm.taobao.org/growl/download/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" + +har-schema@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~2.0.6: + version "2.0.6" + resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~4.2.1: + version "4.2.1" + resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.0.3: + version "5.0.3" + resolved "http://registry.npm.taobao.org/har-validator/download/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +has-flag@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "http://registry.npm.taobao.org/hawk/download/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +he@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/he/download/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hipchat-notifier@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/hipchat-notifier/download/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" + dependencies: + lodash "^4.0.0" + request "^2.0.0" + +hoek@2.x.x: + version "2.16.3" + resolved "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.0" + resolved "http://registry.npm.taobao.org/hoek/download/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +hooks-fixed@2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/hooks-fixed/download/hooks-fixed-2.0.2.tgz#20076daa07e77d8a6106883ce3f1722e051140b0" + +http-assert@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/http-assert/download/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" + dependencies: + deep-equal "~1.0.1" + http-errors "~1.6.1" + +http-errors@1.6.2, http-errors@^1.2.8, http-errors@^1.3.1, http-errors@~1.6.1: + version "1.6.2" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-errors@~1.5.0: + version "1.5.1" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" + +http-proxy-agent@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" + dependencies: + agent-base "2" + debug "2" + extend "3" + +http-signature@~1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +httpntlm@1.6.1: + version "1.6.1" + resolved "http://registry.npm.taobao.org/httpntlm/download/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" + dependencies: + httpreq ">=0.4.22" + underscore "~1.7.0" + +httpreq@>=0.4.22: + version "0.4.24" + resolved "http://registry.npm.taobao.org/httpreq/download/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" + +https-proxy-agent@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" + dependencies: + agent-base "2" + debug "2" + extend "3" + +humanize-number@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/humanize-number/download/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +iconv-lite@0.4.15: + version "0.4.15" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexof@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflation@^2.0.0, inflation@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" + +inflection@~1.10.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/inflection/download/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f" + +inflection@~1.3.0: + version "1.3.8" + resolved "http://registry.npm.taobao.org/inflection/download/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" + +inflight@^1.0.4: + version "1.0.6" + resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +ip@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/ip/download/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590" + +ip@^1.1.2, ip@^1.1.4: + version "1.1.5" + resolved "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-class@~0.0.4: + version "0.0.4" + resolved "http://registry.npm.taobao.org/is-class/download/is-class-0.0.4.tgz#e057451705bb34e39e3e33598c93a9837296b736" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-expression@^2.0.1: + version "2.1.0" + resolved "http://registry.npm.taobao.org/is-expression/download/is-expression-2.1.0.tgz#91be9d47debcfef077977e9722be6dcfb4465ef0" + dependencies: + acorn "~3.3.0" + object-assign "^4.0.1" + +is-expression@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-generator-function@^1.0.3: + version "1.0.6" + resolved "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-my-json-valid@^2.12.4: + version "2.16.1" + resolved "http://registry.npm.taobao.org/is-my-json-valid/download/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-promise@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-property@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-regex@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-type-of@^1.0.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/is-type-of/download/is-type-of-1.2.0.tgz#b553cbb4621adf5b4171e8883f370e7a6ec38995" + dependencies: + core-util-is "^1.0.2" + is-class "~0.0.4" + isstream "~0.1.2" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isarray@2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + +isemail@1.x.x: + version "1.2.0" + resolved "http://registry.npm.taobao.org/isemail/download/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" + +isexe@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +joi@^6.10.1: + version "6.10.1" + resolved "http://registry.npm.taobao.org/joi/download/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" + dependencies: + hoek "2.x.x" + isemail "1.x.x" + moment "2.x.x" + topo "1.x.x" + +js-stringify@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + +jsbn@~0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@5, json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsonify@~0.0.0: + version "0.0.0" + resolved "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/jsonpointer/download/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsonwebtoken@7.4.1: + version "7.4.1" + resolved "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-7.4.1.tgz#7ca324f5215f8be039cd35a6c45bb8cb74a448fb" + dependencies: + joi "^6.10.1" + jws "^3.1.4" + lodash.once "^4.0.0" + ms "^2.0.0" + xtend "^4.0.1" + +jsonwebtoken@^8.1.0: + version "8.1.0" + resolved "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.1.0.tgz#c6397cd2e5fd583d65c007a83dc7bb78e6982b83" + dependencies: + jws "^3.1.4" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.0.0" + xtend "^4.0.1" + +jsprim@^1.2.2: + version "1.4.1" + resolved "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jstransformer@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/jstransformer/download/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +jwa@^1.1.4: + version "1.1.5" + resolved "http://registry.npm.taobao.org/jwa/download/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" + dependencies: + base64url "2.0.0" + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.9" + safe-buffer "^5.0.1" + +jws@^3.1.4: + version "3.1.4" + resolved "http://registry.npm.taobao.org/jws/download/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" + dependencies: + base64url "^2.0.0" + jwa "^1.1.4" + safe-buffer "^5.0.1" + +kareem@1.5.0: + version "1.5.0" + resolved "http://registry.npm.taobao.org/kareem/download/kareem-1.5.0.tgz#e3e4101d9dcfde299769daf4b4db64d895d17448" + +keygrip@~1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" + +kind-of@^3.0.2: + version "3.2.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +koa-body@^2.5.0: + version "2.5.0" + resolved "http://registry.npm.taobao.org/koa-body/download/koa-body-2.5.0.tgz#84e8fcd8d5229a8cc1cb98a926e939069e716915" + dependencies: + co-body "^5.1.1" + formidable "^1.1.1" + +koa-bodyparser@^3.2.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-3.2.0.tgz#b916de17e2039fe82650481973d7c294f10b5719" + dependencies: + co-body "^4.2.0" + +koa-compose@^3.0.0: + version "3.2.1" + resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.0.0.tgz#2800a513d9c361ef0d63852b038e4f6f2d5a773c" + +koa-convert@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@1, koa-is-json@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + +koa-json@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/koa-json/download/koa-json-2.0.2.tgz#36af14e6ea1f5d646d7c44a285701c6f85a4fde4" + dependencies: + koa-is-json "1" + streaming-json-stringify "3" + +koa-jwt@^3.2.2: + version "3.2.2" + resolved "http://registry.npm.taobao.org/koa-jwt/download/koa-jwt-3.2.2.tgz#680de615869678a795838270190d7a44581e334e" + dependencies: + jsonwebtoken "7.4.1" + koa-unless "1.0.0" + +koa-logger@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/koa-logger/download/koa-logger-2.0.1.tgz#3ee42f457c40fb4d4a19a131c8022504b5b232b8" + dependencies: + bytes "1" + chalk "^1.1.3" + humanize-number "0.0.2" + passthrough-counter "^1.0.0" + +koa-multer@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/koa-multer/download/koa-multer-1.0.2.tgz#d38f7ffd1db97b1aad33e7774732f000ebd67259" + dependencies: + multer "1.3.0" + +koa-onerror@^1.2.1: + version "1.3.1" + resolved "http://registry.npm.taobao.org/koa-onerror/download/koa-onerror-1.3.1.tgz#a5b561e1c87ef3289e4301746e01382f24ffbe22" + dependencies: + copy-to "~2.0.1" + swig "~1.4.2" + +koa-passport@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/koa-passport/download/koa-passport-4.0.1.tgz#ffe41c62d3bbdc5f7c49c375dcf9606e9297a337" + dependencies: + passport "^0.4.0" + +koa-router@^7.1.1: + version "7.2.1" + resolved "http://registry.npm.taobao.org/koa-router/download/koa-router-7.2.1.tgz#b40a4ab3c6adb4b40895debd00a9c640304e3039" + dependencies: + debug "^2.2.0" + http-errors "^1.3.1" + koa-compose "^3.0.0" + methods "^1.0.1" + path-to-regexp "^1.1.1" + +koa-send@^3.1.0, koa-send@^3.2.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/koa-send/download/koa-send-3.3.0.tgz#5a4ae245564680c6ecf6079e9275fa5173a861dc" + dependencies: + co "^4.6.0" + debug "^2.6.0" + mz "^2.3.1" + resolve-path "^1.3.1" + +koa-session@^5.5.0: + version "5.5.0" + resolved "http://registry.npm.taobao.org/koa-session/download/koa-session-5.5.0.tgz#743ea5e5ead0a23444788c8776d66f674f325815" + dependencies: + crc "^3.4.4" + debug "^2.2.0" + is-type-of "^1.0.0" + uid-safe "^2.1.3" + +koa-sslify@^2.1.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/koa-sslify/download/koa-sslify-2.1.2.tgz#8947fd53949d69d539607814097863c1ecf38f30" + +koa-static@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/koa-static/download/koa-static-3.0.0.tgz#40442233d2c0b35c225e450199c10bf8a539e416" + dependencies: + debug "*" + koa-send "^3.2.0" + +koa-unless@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/koa-unless/download/koa-unless-1.0.0.tgz#5aa57384bc882568afc90ac04852a3d58658aeeb" + +koa-views@^5.2.1: + version "5.2.1" + resolved "http://registry.npm.taobao.org/koa-views/download/koa-views-5.2.1.tgz#fdd89dbbca7d9f47daf1f24ad6eb4cb9268f5f01" + dependencies: + consolidate "^0.14.1" + debug "^2.1.3" + koa-send "^3.1.0" + mz "^2.4.0" + +koa2-cors@^2.0.5: + version "2.0.5" + resolved "http://registry.npm.taobao.org/koa2-cors/download/koa2-cors-2.0.5.tgz#3404712cd092f728c7f72de704ee7b920d957658" + +koa@^2.2.0: + version "2.4.1" + resolved "http://registry.npm.taobao.org/koa/download/koa-2.4.1.tgz#d449cfb970a7e9da571f699eda40bb9e32eb1484" + dependencies: + accepts "^1.2.2" + content-disposition "~0.5.0" + content-type "^1.0.0" + cookies "~0.7.0" + debug "*" + delegates "^1.0.0" + depd "^1.1.0" + destroy "^1.0.3" + error-inject "~1.0.0" + escape-html "~1.0.1" + fresh "^0.5.2" + http-assert "^1.1.0" + http-errors "^1.2.8" + is-generator-function "^1.0.3" + koa-compose "^4.0.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + mime-types "^2.0.7" + on-finished "^2.1.0" + only "0.0.2" + parseurl "^1.3.0" + statuses "^1.2.0" + type-is "^1.5.5" + vary "^1.0.0" + +latest-version@^3.0.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +levn@~0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +libbase64@0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/libbase64/download/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" + +libmime@3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/libmime/download/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" + dependencies: + iconv-lite "0.4.15" + libbase64 "0.1.0" + libqp "1.1.0" + +libqp@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/libqp/download/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/lodash._baseassign/download/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "http://registry.npm.taobao.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "http://registry.npm.taobao.org/lodash._bindcallback/download/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "http://registry.npm.taobao.org/lodash._createassigner/download/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "http://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "http://registry.npm.taobao.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.assign@^3.0.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/lodash.assign/download/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.defaults@^3.1.2: + version "3.1.2" + resolved "http://registry.npm.taobao.org/lodash.defaults/download/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" + dependencies: + lodash.assign "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.foreach@^4.1.0: + version "4.5.0" + resolved "http://registry.npm.taobao.org/lodash.foreach/download/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +lodash.get@4.4.2, lodash.get@^4.0.2: + version "4.4.2" + resolved "http://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "http://registry.npm.taobao.org/lodash.includes/download/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "http://registry.npm.taobao.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "http://registry.npm.taobao.org/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "http://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "http://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.once@^4.0.0: + version "4.1.1" + resolved "http://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "http://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4: + version "4.17.4" + resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +log4js@^2.3.11: + version "2.3.11" + resolved "http://registry.npm.taobao.org/log4js/download/log4js-2.3.11.tgz#b61b7ef3d6e2c9ce5e1d0f5081a379d48e2d7600" + dependencies: + date-format "^1.1.0" + debug "^2.6.8" + semver "^5.3.0" + streamroller "^0.6.0" + optionalDependencies: + axios "^0.15.3" + hipchat-notifier "^1.1.0" + loggly "^1.1.0" + mailgun-js "^0.7.0" + nodemailer "^2.5.0" + redis "^2.7.1" + slack-node "~0.2.0" + +loggly@^1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/loggly/download/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" + dependencies: + json-stringify-safe "5.0.x" + request "2.75.x" + timespan "2.3.x" + +longest@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +lowercase-keys@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@~2.6.5: + version "2.6.5" + resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5" + +mailcomposer@4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/mailcomposer/download/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" + dependencies: + buildmail "4.0.1" + libmime "3.0.0" + +mailgun-js@^0.7.0: + version "0.7.15" + resolved "http://registry.npm.taobao.org/mailgun-js/download/mailgun-js-0.7.15.tgz#ee366a20dac64c3c15c03d6c1b3e0ed795252abb" + dependencies: + async "~2.1.2" + debug "~2.2.0" + form-data "~2.1.1" + inflection "~1.10.0" + is-stream "^1.1.0" + path-proxy "~1.0.0" + proxy-agent "~2.0.0" + q "~1.4.0" + tsscmp "~1.0.0" + +make-dir@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/make-dir/download/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + dependencies: + pify "^3.0.0" + +map-stream@~0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/map-stream/download/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +media-typer@0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +methods@^1.0.1, methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5: + version "2.3.11" + resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.30.0: + version "1.30.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.0.7, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@^1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/mocha/download/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" + dependencies: + browser-stdout "1.3.0" + commander "2.11.0" + debug "3.1.0" + diff "3.3.1" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" + mkdirp "0.5.1" + supports-color "4.4.0" + +moment@2.x.x: + version "2.19.2" + resolved "http://registry.npm.taobao.org/moment/download/moment-2.19.2.tgz#8a7f774c95a64550b4c7ebd496683908f9419dbe" + +mongodb-core@2.1.17: + version "2.1.17" + resolved "http://registry.npm.taobao.org/mongodb-core/download/mongodb-core-2.1.17.tgz#a418b337a14a14990fb510b923dee6a813173df8" + dependencies: + bson "~1.0.4" + require_optional "~1.0.0" + +mongodb@2.2.33: + version "2.2.33" + resolved "http://registry.npm.taobao.org/mongodb/download/mongodb-2.2.33.tgz#b537c471d34a6651b48f36fdbf29750340e08b50" + dependencies: + es6-promise "3.2.1" + mongodb-core "2.1.17" + readable-stream "2.2.7" + +mongoose-unique-validator@^1.0.6: + version "1.0.6" + resolved "http://registry.npm.taobao.org/mongoose-unique-validator/download/mongoose-unique-validator-1.0.6.tgz#fab31e68c1a5ba6f5b05da8e93842db55eb0a3b1" + dependencies: + lodash.foreach "^4.1.0" + lodash.get "^4.0.2" + +mongoose@^4.13.1: + version "4.13.1" + resolved "http://registry.npm.taobao.org/mongoose/download/mongoose-4.13.1.tgz#c9e203f0847bd5068b5210b0c09b48f847c9eb95" + dependencies: + async "2.1.4" + bson "~1.0.4" + hooks-fixed "2.0.2" + kareem "1.5.0" + lodash.get "4.4.2" + mongodb "2.2.33" + mpath "0.3.0" + mpromise "0.5.5" + mquery "2.3.2" + ms "2.0.0" + muri "1.3.0" + regexp-clone "0.0.1" + sliced "1.0.1" + +mpath@0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/mpath/download/mpath-0.3.0.tgz#7a58f789e9b5fd3c94520634157960f26bd5ef44" + +mpromise@0.5.5: + version "0.5.5" + resolved "http://registry.npm.taobao.org/mpromise/download/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" + +mquery@2.3.2: + version "2.3.2" + resolved "http://registry.npm.taobao.org/mquery/download/mquery-2.3.2.tgz#e2c60ad117cf080f2efb1ecdd144e7bbffbfca11" + dependencies: + bluebird "^3.5.0" + debug "^2.6.9" + regexp-clone "^0.0.1" + sliced "0.0.5" + +ms@0.7.1: + version "0.7.1" + resolved "http://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@2.0.0, ms@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multer@1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/multer/download/multer-1.3.0.tgz#092b2670f6846fa4914965efc8cf94c20fec6cd2" + dependencies: + append-field "^0.1.0" + busboy "^0.2.11" + concat-stream "^1.5.0" + mkdirp "^0.5.1" + object-assign "^3.0.0" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + +muri@1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/muri/download/muri-1.3.0.tgz#aeccf3db64c56aa7c5b34e00f95b7878527a4721" + +mz@^2.3.1, mz@^2.4.0: + version "2.7.0" + resolved "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.3.0: + version "2.7.0" + resolved "http://registry.npm.taobao.org/nan/download/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + +negotiator@0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +netmask@~1.0.4: + version "1.0.6" + resolved "http://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" + +node-pre-gyp@^0.6.36: + version "0.6.39" + resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-uuid@~1.4.7: + version "1.4.8" + resolved "http://registry.npm.taobao.org/node-uuid/download/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" + +nodemailer-direct-transport@3.3.2: + version "3.3.2" + resolved "http://registry.npm.taobao.org/nodemailer-direct-transport/download/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" + dependencies: + nodemailer-shared "1.1.0" + smtp-connection "2.12.0" + +nodemailer-fetch@1.6.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/nodemailer-fetch/download/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" + +nodemailer-shared@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/nodemailer-shared/download/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" + dependencies: + nodemailer-fetch "1.6.0" + +nodemailer-smtp-pool@2.8.2: + version "2.8.2" + resolved "http://registry.npm.taobao.org/nodemailer-smtp-pool/download/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" + dependencies: + nodemailer-shared "1.1.0" + nodemailer-wellknown "0.1.10" + smtp-connection "2.12.0" + +nodemailer-smtp-transport@2.7.2: + version "2.7.2" + resolved "http://registry.npm.taobao.org/nodemailer-smtp-transport/download/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" + dependencies: + nodemailer-shared "1.1.0" + nodemailer-wellknown "0.1.10" + smtp-connection "2.12.0" + +nodemailer-wellknown@0.1.10: + version "0.1.10" + resolved "http://registry.npm.taobao.org/nodemailer-wellknown/download/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" + +nodemailer@^2.5.0: + version "2.7.2" + resolved "http://registry.npm.taobao.org/nodemailer/download/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" + dependencies: + libmime "3.0.0" + mailcomposer "4.0.1" + nodemailer-direct-transport "3.3.2" + nodemailer-shared "1.1.0" + nodemailer-smtp-pool "2.8.2" + nodemailer-smtp-transport "2.7.2" + socks "1.1.9" + +nodemon@^1.8.1: + version "1.12.1" + resolved "http://registry.npm.taobao.org/nodemon/download/nodemon-1.12.1.tgz#996a56dc49d9f16bbf1b78a4de08f13634b3878d" + dependencies: + chokidar "^1.7.0" + debug "^2.6.8" + es6-promise "^3.3.1" + ignore-by-default "^1.0.1" + lodash.defaults "^3.1.2" + minimatch "^3.0.4" + ps-tree "^1.1.0" + touch "^3.1.0" + undefsafe "0.0.3" + update-notifier "^2.2.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~1.0.10: + version "1.0.10" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-component@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + +object.omit@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +on-finished@^2.1.0, on-finished@^2.3.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +only@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + +optimist@~0.6: + version "0.6.1" + resolved "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +pac-proxy-agent@1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" + dependencies: + agent-base "2" + debug "2" + extend "3" + get-uri "2" + http-proxy-agent "1" + https-proxy-agent "1" + pac-resolver "~2.0.0" + raw-body "2" + socks-proxy-agent "2" + +pac-resolver@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/pac-resolver/download/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd" + dependencies: + co "~3.0.6" + degenerator "~1.0.2" + ip "1.0.1" + netmask "~1.0.4" + thunkify "~2.1.1" + +package-json@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + +parseurl@^1.3.0: + version "1.3.2" + resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +passport-local@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/passport-local/download/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x: + version "1.0.0" + resolved "http://registry.npm.taobao.org/passport-strategy/download/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + +passport@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/passport/download/passport-0.4.0.tgz#c5095691347bd5ad3b5e180238c3914d16f05811" + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +passthrough-counter@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/passthrough-counter/download/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa" + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-proxy@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/path-proxy/download/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" + dependencies: + inflection "~1.3.0" + +path-to-regexp@^1.1.1: + version "1.7.0" + resolved "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + +pathval@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/pathval/download/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pause@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/pause/download/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + +performance-now@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +promise@^7.0.1: + version "7.3.1" + resolved "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +proxy-agent@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/proxy-agent/download/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499" + dependencies: + agent-base "2" + debug "2" + extend "3" + http-proxy-agent "1" + https-proxy-agent "1" + lru-cache "~2.6.5" + pac-proxy-agent "1" + socks-proxy-agent "2" + +ps-tree@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/ps-tree/download/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +pug-attrs@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/pug-attrs/download/pug-attrs-2.0.2.tgz#8be2b2225568ffa75d1b866982bff9f4111affcb" + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.3" + +pug-code-gen@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/pug-code-gen/download/pug-code-gen-2.0.0.tgz#96aea39a9e62f1ec5d2b6a5b42a29d528c70b43d" + dependencies: + constantinople "^3.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.2" + pug-error "^1.3.2" + pug-runtime "^2.0.3" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.2: + version "1.3.2" + resolved "http://registry.npm.taobao.org/pug-error/download/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26" + +pug-filters@^2.1.5: + version "2.1.5" + resolved "http://registry.npm.taobao.org/pug-filters/download/pug-filters-2.1.5.tgz#66bf6e80d97fbef829bab0aa35eddff33fc964f3" + dependencies: + clean-css "^3.3.0" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.2" + pug-walk "^1.1.5" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/pug-lexer/download/pug-lexer-3.1.0.tgz#fd087376d4a675b4f59f8fef422883434e9581a2" + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.2" + +pug-linker@^3.0.3: + version "3.0.3" + resolved "http://registry.npm.taobao.org/pug-linker/download/pug-linker-3.0.3.tgz#25f59eb750237f0368e59c3379764229c0189c41" + dependencies: + pug-error "^1.3.2" + pug-walk "^1.1.5" + +pug-load@^2.0.9: + version "2.0.9" + resolved "http://registry.npm.taobao.org/pug-load/download/pug-load-2.0.9.tgz#ee217c914cc1d9324d44b86c32d1df241d36de7a" + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.5" + +pug-parser@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/pug-parser/download/pug-parser-4.0.0.tgz#c9f52322e4eabe4bf5beeba64ed18373bb627801" + dependencies: + pug-error "^1.3.2" + token-stream "0.0.1" + +pug-runtime@^2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/pug-runtime/download/pug-runtime-2.0.3.tgz#98162607b0fce9e254d427f33987a5aee7168bda" + +pug-strip-comments@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/pug-strip-comments/download/pug-strip-comments-1.0.2.tgz#d313afa01bcc374980e1399e23ebf2eb9bdc8513" + dependencies: + pug-error "^1.3.2" + +pug-walk@^1.1.5: + version "1.1.5" + resolved "http://registry.npm.taobao.org/pug-walk/download/pug-walk-1.1.5.tgz#90e943acbcf7021e6454cf1b32245891cba6f851" + +pug@^2.0.0-rc.1: + version "2.0.0-rc.4" + resolved "http://registry.npm.taobao.org/pug/download/pug-2.0.0-rc.4.tgz#b7b08f6599bd5302568042b7436984fb28c80a13" + dependencies: + pug-code-gen "^2.0.0" + pug-filters "^2.1.5" + pug-lexer "^3.1.0" + pug-linker "^3.0.3" + pug-load "^2.0.9" + pug-parser "^4.0.0" + pug-runtime "^2.0.3" + pug-strip-comments "^1.0.2" + +punycode@1.4.1, punycode@^1.4.1: + version "1.4.1" + resolved "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@~1.4.0: + version "1.4.1" + resolved "http://registry.npm.taobao.org/q/download/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +qs@^6.4.0, qs@^6.5.1, qs@~6.5.1: + version "6.5.1" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/qs/download/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + +qs@~6.2.0: + version "6.2.3" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" + +qs@~6.4.0: + version "6.4.0" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/random-bytes/download/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +randomatic@^1.1.3: + version "1.1.7" + resolved "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +raw-body@2, raw-body@^2.2.0: + version "2.3.2" + resolved "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +raw-body@~2.1.2: + version "2.1.7" + resolved "http://registry.npm.taobao.org/raw-body/download/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: + version "1.2.2" + resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@1.1.x: + version "1.1.14" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@2, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.0: + version "2.3.3" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readable-stream@2.2.7: + version "2.2.7" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +readable-stream@~2.0.5: + version "2.0.6" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +redis-commands@^1.2.0: + version "1.3.1" + resolved "http://registry.npm.taobao.org/redis-commands/download/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b" + +redis-parser@^2.6.0: + version "2.6.0" + resolved "http://registry.npm.taobao.org/redis-parser/download/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" + +redis@^2.7.1: + version "2.8.0" + resolved "http://registry.npm.taobao.org/redis/download/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" + dependencies: + double-ended-queue "^2.1.0-0" + redis-commands "^1.2.0" + redis-parser "^2.6.0" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexp-clone@0.0.1, regexp-clone@^0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/regexp-clone/download/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" + +registry-auth-token@^3.0.1: + version "3.3.1" + resolved "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@2.75.x: + version "2.75.0" + resolved "http://registry.npm.taobao.org/request/download/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.0.0" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.2.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +request@2.81.0: + version "2.81.0" + resolved "http://registry.npm.taobao.org/request/download/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@^2.0.0, request@^2.74.0: + version "2.83.0" + resolved "http://registry.npm.taobao.org/request/download/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +requestretry@^1.2.2: + version "1.12.2" + resolved "http://registry.npm.taobao.org/requestretry/download/requestretry-1.12.2.tgz#13ce38a4ce4e809f3c9ec6d4ca3b7b9ba4acf26c" + dependencies: + extend "^3.0.0" + lodash "^4.15.0" + request "^2.74.0" + when "^3.7.7" + +require_optional@~1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +resolve-path@^1.3.1: + version "1.3.3" + resolved "http://registry.npm.taobao.org/resolve-path/download/resolve-path-1.3.3.tgz#4d83aba6468c2b8e632a575e3f52b0fa0dbe1a5c" + dependencies: + http-errors "~1.5.0" + path-is-absolute "1.0.1" + +resolve@^1.1.6: + version "1.5.0" + resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.2" + resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: + version "5.4.1" + resolved "http://registry.npm.taobao.org/semver/download/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@~5.0.1: + version "5.0.3" + resolved "http://registry.npm.taobao.org/semver/download/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setprototypeof@1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slack-node@~0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/slack-node/download/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" + dependencies: + requestretry "^1.2.2" + +sliced@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/sliced/download/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" + +sliced@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + +smart-buffer@^1.0.13, smart-buffer@^1.0.4: + version "1.1.15" + resolved "http://registry.npm.taobao.org/smart-buffer/download/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" + +smtp-connection@2.12.0: + version "2.12.0" + resolved "http://registry.npm.taobao.org/smtp-connection/download/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" + dependencies: + httpntlm "1.6.1" + nodemailer-shared "1.1.0" + +sntp@1.x.x: + version "1.0.9" + resolved "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "http://registry.npm.taobao.org/sntp/download/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + +socket.io-client@2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~2.6.4" + engine.io-client "~3.1.0" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.1.1" + to-array "0.1.4" + +socket.io-parser@~3.1.1: + version "3.1.2" + resolved "http://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2" + dependencies: + component-emitter "1.2.1" + debug "~2.6.4" + has-binary2 "~1.0.2" + isarray "2.0.1" + +socket.io@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/socket.io/download/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" + dependencies: + debug "~2.6.6" + engine.io "~3.1.0" + socket.io-adapter "~1.1.0" + socket.io-client "2.0.4" + socket.io-parser "~3.1.1" + +socks-proxy-agent@2: + version "2.1.1" + resolved "http://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3" + dependencies: + agent-base "2" + extend "3" + socks "~1.1.5" + +socks@1.1.9: + version "1.1.9" + resolved "http://registry.npm.taobao.org/socks/download/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" + dependencies: + ip "^1.1.2" + smart-buffer "^1.0.4" + +socks@~1.1.5: + version "1.1.10" + resolved "http://registry.npm.taobao.org/socks/download/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" + dependencies: + ip "^1.1.4" + smart-buffer "^1.0.13" + +source-map@0.1.34: + version "0.1.34" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" + dependencies: + amdefine ">=0.0.4" + +source-map@0.4.x: + version "0.4.4" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +split@0.3: + version "0.3.3" + resolved "http://registry.npm.taobao.org/split/download/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sshpk@^1.7.0: + version "1.13.1" + resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.1 < 2", statuses@^1.2.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "http://registry.npm.taobao.org/stream-combiner/download/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +streaming-json-stringify@3: + version "3.1.0" + resolved "http://registry.npm.taobao.org/streaming-json-stringify/download/streaming-json-stringify-3.1.0.tgz#80200437a993cc39c4fe00263b7b3b903ac87af5" + dependencies: + json-stringify-safe "5" + readable-stream "2" + +streamroller@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/streamroller/download/streamroller-0.6.0.tgz#095d7b06c7cc525835cad2e598f76bb1e0ee693a" + dependencies: + date-format "^1.1.0" + debug "^2.6.8" + mkdirp "^0.5.1" + readable-stream "^2.3.0" + +streamsearch@0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +superagent@^3.0.0: + version "3.8.0" + resolved "http://registry.npm.taobao.org/superagent/download/superagent-3.8.0.tgz#87e3ed536c8860c08c7c7d1225da9a80cab064c6" + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.1.1" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.0.5" + +supertest@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/supertest/download/supertest-3.0.0.tgz#8d4bb68fd1830ee07033b1c5a5a9a4021c965296" + dependencies: + methods "~1.1.2" + superagent "^3.0.0" + +supports-color@4.4.0: + version "4.4.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^4.0.0: + version "4.5.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +swig@~1.4.2: + version "1.4.2" + resolved "http://registry.npm.taobao.org/swig/download/swig-1.4.2.tgz#4085ca0453369104b5d483e2841b39b7ae1aaba5" + dependencies: + optimist "~0.6" + uglify-js "~2.4" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "http://registry.npm.taobao.org/tar-pack/download/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/tar/download/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +term-size@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + dependencies: + any-promise "^1.0.0" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunkify@~2.1.1: + version "2.1.2" + resolved "http://registry.npm.taobao.org/thunkify/download/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + +timed-out@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +timespan@2.3.x: + version "2.3.0" + resolved "http://registry.npm.taobao.org/timespan/download/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" + +to-array@0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +token-stream@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + +topo@1.x.x: + version "1.1.0" + resolved "http://registry.npm.taobao.org/topo/download/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" + dependencies: + hoek "2.x.x" + +touch@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + dependencies: + nopt "~1.0.10" + +tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tsscmp@~1.0.0: + version "1.0.5" + resolved "http://registry.npm.taobao.org/tsscmp/download/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0: + version "4.0.3" + resolved "http://registry.npm.taobao.org/type-detect/download/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" + +type-is@^1.5.5, type-is@^1.6.14, type-is@^1.6.4, type-is@~1.6.6: + version "1.6.15" + resolved "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typedarray@^0.0.6: + version "0.0.6" + resolved "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@^2.6.1: + version "2.8.29" + resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-js@~2.4: + version "2.4.24" + resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.4.24.tgz#fad5755c1e1577658bb06ff9ab6e548c95bebd6e" + dependencies: + async "~0.2.6" + source-map "0.1.34" + uglify-to-browserify "~1.0.0" + yargs "~3.5.4" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "http://registry.npm.taobao.org/uid-number/download/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uid-safe@^2.1.3: + version "2.1.5" + resolved "http://registry.npm.taobao.org/uid-safe/download/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + dependencies: + random-bytes "~1.0.0" + +ultron@~1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/ultron/download/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + +undefsafe@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/undefsafe/download/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" + +underscore@~1.7.0: + version "1.7.0" + resolved "http://registry.npm.taobao.org/underscore/download/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +unique-string@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + +unpipe@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +update-notifier@^2.2.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +uws@~0.14.4: + version "0.14.5" + resolved "http://registry.npm.taobao.org/uws/download/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc" + +vary@^1.0.0: + version "1.1.2" + resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + +when@^3.7.7: + version "3.7.8" + resolved "http://registry.npm.taobao.org/when/download/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" + +which@^1.2.9: + version "1.3.0" + resolved "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +widest-line@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/widest-line/download/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +with@^5.0.0: + version "5.1.1" + resolved "http://registry.npm.taobao.org/with/download/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + +wordwrap@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrappy@1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@~3.3.1: + version "3.3.2" + resolved "http://registry.npm.taobao.org/ws/download/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.4" + resolved "http://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.4.tgz#04f560915724b389088715cc0ed7813e9677bf57" + +xregexp@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yallist@^2.1.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs@~3.10.0: + version "3.10.0" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yargs@~3.5.4: + version "3.5.4" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.5.4.tgz#d8aff8f665e94c34bd259bdebd1bfaf0ddd35361" + dependencies: + camelcase "^1.0.2" + decamelize "^1.0.0" + window-size "0.1.0" + wordwrap "0.0.2" + +yeast@0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/koa/hello_world/index.js b/koa/hello_world/index.js new file mode 100644 index 0000000..14b42d2 --- /dev/null +++ b/koa/hello_world/index.js @@ -0,0 +1,12 @@ +var Koa = require('koa') +var app = new Koa() +app.use(function *(next) { + var start = new Date() + yield next + var ms = new Date() - start + this.set('X-response-Time', ms + 'ms') +}) +app.use(function *() { + this.body = 'Hello World' +}) +app.listen(3000) \ No newline at end of file diff --git a/MongoDB/Mongoose/package.json b/koa/hello_world/package.json similarity index 59% rename from MongoDB/Mongoose/package.json rename to koa/hello_world/package.json index 0ad3c1f..f971674 100644 --- a/MongoDB/Mongoose/package.json +++ b/koa/hello_world/package.json @@ -1,13 +1,14 @@ { - "name": "mongoose", + "name": "hello_world", "version": "1.0.0", "description": "", - "main": "app.js", + "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "zhin", + "author": "", + "license": "ISC", "dependencies": { - "mongoose":">=2.3.1" + "koa": "^2.3.0" } } diff --git a/koa/hello_world/yarn.lock b/koa/hello_world/yarn.lock new file mode 100644 index 0000000..5d5276d --- /dev/null +++ b/koa/hello_world/yarn.lock @@ -0,0 +1,204 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@^1.2.2: + version "1.3.4" + resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +any-promise@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +co@^4.6.0: + version "4.6.0" + resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +content-disposition@~0.5.0: + version "0.5.2" + resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@^1.0.0: + version "1.0.4" + resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookies@~0.7.0: + version "0.7.1" + resolved "http://registry.npm.taobao.org/cookies/download/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" + dependencies: + depd "~1.1.1" + keygrip "~1.0.2" + +debug@*: + version "3.1.0" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +delegates@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.1, depd@^1.1.0, depd@~1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +destroy@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +ee-first@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +error-inject@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + +escape-html@~1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +fresh@^0.5.0: + version "0.5.2" + resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +http-assert@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/http-assert/download/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" + dependencies: + deep-equal "~1.0.1" + http-errors "~1.6.1" + +http-errors@^1.2.8, http-errors@~1.6.1: + version "1.6.2" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +inherits@2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +is-generator-function@^1.0.3: + version "1.0.6" + resolved "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4" + +keygrip@~1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" + +koa-compose@^3.0.0: + version "3.2.1" + resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.0.0.tgz#2800a513d9c361ef0d63852b038e4f6f2d5a773c" + +koa-convert@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + +koa@^2.3.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/koa/download/koa-2.3.0.tgz#9e1e8e4da401839c57b8527eadc57f76127555a7" + dependencies: + accepts "^1.2.2" + content-disposition "~0.5.0" + content-type "^1.0.0" + cookies "~0.7.0" + debug "*" + delegates "^1.0.0" + depd "^1.1.0" + destroy "^1.0.3" + error-inject "~1.0.0" + escape-html "~1.0.1" + fresh "^0.5.0" + http-assert "^1.1.0" + http-errors "^1.2.8" + is-generator-function "^1.0.3" + koa-compose "^4.0.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + mime-types "^2.0.7" + on-finished "^2.1.0" + only "0.0.2" + parseurl "^1.3.0" + statuses "^1.2.0" + type-is "^1.5.5" + vary "^1.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mime-db@~1.30.0: + version "1.30.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.0.7, mime-types@~2.1.15, mime-types@~2.1.16: + version "2.1.17" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +ms@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +on-finished@^2.1.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +only@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + +parseurl@^1.3.0: + version "1.3.2" + resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +"statuses@>= 1.3.1 < 2", statuses@^1.2.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +type-is@^1.5.5: + version "1.6.15" + resolved "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +vary@^1.0.0: + version "1.1.2" + resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" diff --git a/module/os.js b/module/os.js deleted file mode 100644 index a7dc17e..0000000 --- a/module/os.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Created by 斌 on 2017/2/19. - */ -var os = require('os'); - -console.log('CPU的字节序:' + os.endianness()); -console.log('操作系统:' + os.type()); -console.log('操作系统:' + os.platform()); -console.log('系统内存总量:' + os.totalmem()/1024/1024/1024 + ' GB'); -console.log('系统空闲内存量:' + os.freemem()/1024/1024/1024 + ' GB'); diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 0000000..636af0f --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,22 @@ +0 info it worked if it ends with ok +1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe', +1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js', +1 verbose cli 'start' ] +2 info using npm@3.10.10 +3 info using node@v6.11.0 +4 verbose stack Error: ENOENT: no such file or directory, open 'D:\LR\nodejs\package.json' +4 verbose stack at Error (native) +5 verbose cwd D:\LR\nodejs +6 error Windows_NT 10.0.14393 +7 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start" +8 error node v6.11.0 +9 error npm v3.10.10 +10 error path D:\LR\nodejs\package.json +11 error code ENOENT +12 error errno -4058 +13 error syscall open +14 error enoent ENOENT: no such file or directory, open 'D:\LR\nodejs\package.json' +15 error enoent ENOENT: no such file or directory, open 'D:\LR\nodejs\package.json' +15 error enoent This is most likely not a problem with npm itself +15 error enoent and is related to npm not being able to find a file. +16 verbose exit [ -4058, true ] diff --git a/play/.vscode/settings.json b/play/.vscode/settings.json new file mode 100644 index 0000000..e69de29 diff --git a/play/EventEmitter/class.js b/play/EventEmitter/class.js new file mode 100644 index 0000000..37fd42d --- /dev/null +++ b/play/EventEmitter/class.js @@ -0,0 +1,43 @@ +class A { + + constructor(name) { + /* 实例属性 */ + this.name = name + } + /* 实例方法 */ + say() { + console.log('lala') + } + + /* 存取器 */ + get age() { + return this._age + } + set age(value) { + this._age = value + } + + /* 私有属性 */ + // _age = 1 + /* 私有方法 */ + _say() { + console.log('private say') + } + + /* 静态属性 */ + // static value = 20 + /* 静态方法 */ + static speak() { + console.log('this is A') + } + +} + +console.log(A.value) +A.speak() + +const v = new A('vv') + +console.log(v.name) +console.log(v.age) +v.say() \ No newline at end of file diff --git a/play/EventEmitter/ee.js b/play/EventEmitter/ee.js new file mode 100644 index 0000000..7624ccc --- /dev/null +++ b/play/EventEmitter/ee.js @@ -0,0 +1,73 @@ +const util = require('util') +const EventEmitter = require('events').EventEmitter +const fs = require('fs') + +// function InputChecker(name, file) { this.name = name this.writeStream = +// fs.createWriteStream(`./${file}.txt`, { flags: 'a', encoding: 'utf8', +// mode: 0666 }) } + +class InputChecker { + constructor(name, file) { + this.name = name + this.writeStream = fs.createWriteStream(`./${file}.txt`, { + flags: 'a', + encoding: 'utf8', + mode: 0o666 + }) + } + + check(input) { + const command = input + .toString() + .trim() + .slice(0, 3) + if (command === 'wr:') { + this.emit('write', input.slice(3)) + } else if (command === 'en:') { + this.emit('end') + } else { + this.emit('echo', input) + } + } + + static say () { + // x + } +} + +util.inherits(InputChecker, EventEmitter) + +// InputChecker.prototype.check = function (input) { const command = input +// .toString() .trim() .slice(0, 3) if (command === 'wr:') { +// this.emit('write', input.slice(3)) } else if (command === 'en:') { +// this.emit('end') } else { this.emit('echo', input) } } + +const ic = new InputChecker('zhin', 'output2') + +ic.on('write', function (data) { + this + .writeStream + .write(data, 'utf8') +}) + +ic.on('end', () => { + process.exit() +}) + +ic.on('echo', function (data) { + console.log(this.name + ' wrote ' + data) +}) + +// global.xx = 123 ic.on('echo', xx => { console.log(xx) }) + +process + .stdin + .resume() +process + .stdin + .setEncoding('utf8') +process + .stdin + .on('data', input => { + ic.check(input) + }) diff --git a/play/EventEmitter/output.txt b/play/EventEmitter/output.txt new file mode 100644 index 0000000..bca443a --- /dev/null +++ b/play/EventEmitter/output.txt @@ -0,0 +1,2 @@ + nihao + .... diff --git a/play/EventEmitter/output2.txt b/play/EventEmitter/output2.txt new file mode 100644 index 0000000..e792c64 --- /dev/null +++ b/play/EventEmitter/output2.txt @@ -0,0 +1,3 @@ + Oooooo + kirei + haha diff --git a/play/UDP-server/client.js b/play/UDP-server/client.js new file mode 100644 index 0000000..a1ab480 --- /dev/null +++ b/play/UDP-server/client.js @@ -0,0 +1,18 @@ +const dgram = require('dgram') +const client = dgram.createSocket('udp4') + +process + .stdin + .resume() + +process + .stdin + .on('data', data => { + console.log(data.toString('utf8')) + client.send(data, 0, data.length, 8124, 'imuntil.com', (err, bytes) => { + if (err) + console.log('error:' + err) + else + console.log('successful') + }) + }) \ No newline at end of file diff --git a/play/UDP-server/server.js b/play/UDP-server/server.js new file mode 100644 index 0000000..b4af199 --- /dev/null +++ b/play/UDP-server/server.js @@ -0,0 +1,8 @@ +const dgram = require('dgram') +const server = dgram.createSocket('udp4') + +server.on('message', (msg, rinfo) => { + console.log(`Message: ${msg} from ${rinfo.address}: ${rinfo.port}`) +}) + +server.bind() \ No newline at end of file diff --git a/play/child_process/child_process.exec.js b/play/child_process/child_process.exec.js new file mode 100644 index 0000000..34c70f5 --- /dev/null +++ b/play/child_process/child_process.exec.js @@ -0,0 +1,6 @@ +const execfile = require('child_process').execFile +const child = execfile('./exec.js', (err, stdout, stderr) => { + console.log('err:', err) + console.log('stdout:', stdout) + console.log('stderr:', stderr) +}) \ No newline at end of file diff --git a/play/child_process/child_process.spawn.js b/play/child_process/child_process.spawn.js new file mode 100644 index 0000000..55e4bc2 --- /dev/null +++ b/play/child_process/child_process.spawn.js @@ -0,0 +1,50 @@ +// const spawn = require('child_process').spawn +// const pwd = spawn('pwd') + +// pwd +// .stdout +// .on('data', data => console.log('stdout:', data)) +// pwd +// .stderr +// .on('data', data => console.log('err:', data)) +// pwd.on('exit', code => { +// console.log('child process exited with code' + code) +// }) + + +const spawn = require('child_process').spawn +const [find, grep] = [ + spawn('find', ['.', '-ls']), + spawn('grep', ['exec.js']) +] + +grep.stdout.setEncoding('utf8') + +find.stdout.on('data', data => { + grep.stdin.write(data) +}) + +grep.stdout.on('data', data => { + console.log(data) +}) + +grep.stderr.on('data', data => { + console.log('err:', data) +}) +find.stderr.on('data', data => { + console.log('err:', data) +}) + +find.on('exit', code => { + if (code !== 0) { + console.log('find process exited width code ' + code) + } + grep.stdin.end() +}) + +grep.on('exit', code => { + if (code !== 0) { + console.log(`grep process exited with code ${code}`) + } +}) + diff --git a/play/child_process/exec.js b/play/child_process/exec.js new file mode 100644 index 0000000..0e5b776 --- /dev/null +++ b/play/child_process/exec.js @@ -0,0 +1,2 @@ +#!/usr/local/bin/node +console.log(123456) \ No newline at end of file diff --git a/play/dns/dns.js b/play/dns/dns.js new file mode 100755 index 0000000..300e3d7 --- /dev/null +++ b/play/dns/dns.js @@ -0,0 +1,8 @@ +#!/usr/local/bin/node + +const dns = require('dns') + +dns.reverse('106.14.8.246', (err, domains) => { + console.log('err:', err) + console.log(domains) +}) diff --git a/play/fs.js b/play/fs.js new file mode 100644 index 0000000..812048c --- /dev/null +++ b/play/fs.js @@ -0,0 +1,36 @@ +/* eslint-disable */ +const fs = require('fs') +const path = require('path') + +function getLoadFile(dir) { + const list = [] + + function read(dir = './src/assets/') { + const stat = fs.statSync(dir) + const v = stat.isDirectory() + if (v) { + fs + .readdirSync(dir) + .map(f => { + read(path.join(dir, f)) + }) + } else if (/\.(png|jpg)$/.test(dir)) { + if (stat.size > 10000) { + list.push(dir) + } + } + } + read(dir) + + const defs = [...Array(list.length).keys()].map(v => `i${v + 1}`) + const imps = list.map((v, i) => { + return `import i${i + 1} from '${v.replace("src", "@")}'` + }) + const exps = `export default [ + ${defs.join(',\n')} + ]` + + fs.writeFileSync('imgs.ts', imps.join('\n') + '\n\n' + exps) +} + +getLoadFile() \ No newline at end of file diff --git a/play/metalsmith b/play/metalsmith new file mode 160000 index 0000000..00b2c7a --- /dev/null +++ b/play/metalsmith @@ -0,0 +1 @@ +Subproject commit 00b2c7aaee13fbe0f7fb3be332929a303b2df51d diff --git a/play/pa/.vscode/launch.json b/play/pa/.vscode/launch.json new file mode 100644 index 0000000..b6c5f3f --- /dev/null +++ b/play/pa/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "启动程序", + "program": "${workspaceFolder}/app.js" + } + ] +} \ No newline at end of file diff --git a/play/pa/app.js b/play/pa/app.js new file mode 100644 index 0000000..a44596e --- /dev/null +++ b/play/pa/app.js @@ -0,0 +1,99 @@ +const fs = require('fs') +const superagent = require('superagent') +const cheerio = require('cheerio') +const async = require('async') + +const uri = 'http://www.llss.cool/wp/category/all/anime/page/1/' +// const uri = 'http://www.llss.cool/wp/category/all/anime/' +const magnet = /(熟|生)?[A-z\d]{20,}/g +let totalsPages = 0 +let currentPage = 0 + +/* 获取每条信息内容 */ +function fetchUrl(url, cb) { + return superagent + .get(url.link) + .end((err, res) => { + if (!err) { + const content = cheerio + .load(res.text)('.entry-content') + .text() + const mgs = content.match(magnet) + cb(null, { + ...url, + magnet: mgs + }) + } else { + cb(null, false) + } + }) +} + +/* 获取总页数 */ +function getTotalPages($) { + return Number.parseInt($('.wp-pagenavi span.pages').text().match(/共(.+)页/)[1].trim()) +} + +/* 获取每页内容 */ +function fetchPage(currentPage = 1) { + return new Promise((resolve, reject) => { + superagent + .get(`http://www.llss.cool/wp/category/all/anime/page/${currentPage}/`) + .end((err, res) => { + if (err) { + return reject(err) + } + resolve(parseText(res.text)) + }) + }) +} +function parseText(text) { + const $ = cheerio.load(text) + if (!totalsPages) { + totalsPages = getTotalPages($) + console.log('total-pages is ', totalsPages) + } + const eros = $('.type-post').map((idx, element) => { + const el = $(element).find('.entry-title a') + return { + title: el + .text() + .trim(), + link: el.attr('href'), + img: $(element) + .find('.entry-content img') + .eq(0) + .attr('src') + } + }) + return new Promise((resolve, reject) => { + return async.mapLimit(Array.from(eros).filter(v => v.title), 5, fetchUrl, (err, result) => { + if (err) { + reject(err) + } + resolve(result.filter(v => !!v)) + }) + }) +} + +async function run() { + const steam = fs.createWriteStream('./m.json', { + flags: 'a', + encoding: 'utf8', + mode: 0o666 + }) + do { + try { + const v = await fetchPage(++currentPage) + console.log('current-page:', currentPage) + console.log('当前页面数据数:', v.length) + steam.write(JSON.stringify(v), 'utf8') + // steam.write(JSON.stringify(v).slice(1, -1), 'utf8') + } catch (e) { + console.log('error:', e) + } + } while (currentPage < 2); + // console.log(list) +} + +run() \ No newline at end of file diff --git a/play/pa/db.txt b/play/pa/db.txt new file mode 100644 index 0000000..3aa1018 --- /dev/null +++ b/play/pa/db.txt @@ -0,0 +1 @@ +{"title":"[AT-X] 缘之空 第01-12话 MKV 720p 合集","link":"http://www.llss.cool/wp/all/anime/at-x-%e7%bc%98%e4%b9%8b%e7%a9%ba-%e7%ac%ac01-12%e8%af%9d-mkv-720p-%e5%90%88%e9%9b%86/","magnet":["D73AB5CE10A862D2C145161059FCF6A773E5A15D"]}{"title":"【最终幻想】尤菲·如月【动画+3D同人游戏】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e6%9c%80%e7%bb%88%e5%b9%bb%e6%83%b3%e3%80%91%e5%b0%a4%e8%8f%b2%c2%b7%e5%a6%82%e6%9c%88%e3%80%90%e5%8a%a8%e7%94%bb3d%e5%90%8c%e4%ba%ba%e6%b8%b8%e6%88%8f%e3%80%91/","magnet":["65226935E5ACEEF223F84DC58C0C0A7D7D366589","C1A94B5E6B11C2D45DB894486885D908331E5BFC"]}{"title":"【K-ON】阿梓喵 的同人小游戏(+动画)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90k-on%e3%80%91%e9%98%bf%e6%a2%93%e5%96%b5-%e7%9a%84%e5%90%8c%e4%ba%ba%e5%b0%8f%e6%b8%b8%e6%88%8f%ef%bc%88%e5%8a%a8%e7%94%bb%ef%bc%89/","magnet":["342327B31F19343E767567D90E47A8362D5ADCBE","XPMediaCenterEdition","29B3F98E7EF8D349671658B1AAD2F6526F70B4F5"]}{"title":"[魔人]Euphoria 上卷 ~真中合歓 地獄始動編~[字幕]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%baeuphoria-%e4%b8%8a%e5%8d%b7-%ef%bd%9e%e7%9c%9f%e4%b8%ad%e5%90%88%e6%ad%93-%e5%9c%b0%e7%8d%84%e5%a7%8b%e5%8b%95%e7%b7%a8%ef%bd%9e%e5%ad%97%e5%b9%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/Kd6gD.jpg","magnet":["73458A4ED41A4A2080602C9177F8BFACCFF8686D"]}{"title":"【少女映画】[コスプレ一本勝負] 马猴烧酒COS","link":"http://www.llss.cool/wp/all/comic/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91%e3%82%b3%e3%82%b9%e3%83%97%e3%83%ac%e4%b8%80%e6%9c%ac%e5%8b%9d%e8%b2%a0-%e9%a9%ac%e7%8c%b4%e7%83%a7%e9%85%92cos/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/HfWCU.jpg","magnet":["64B327AB052C964A18A102C1AE58198538D2F27B"]}{"title":"[Pashmina]姉恋 スキ キライ ダイスキ。 (1-2)附漫画","link":"http://www.llss.cool/wp/all/comic/pashmina%e5%a7%89%e6%81%8b-%e3%82%b9%e3%82%ad-%e3%82%ad%e3%83%a9%e3%82%a4-%e3%83%80%e3%82%a4%e3%82%b9%e3%82%ad%e3%80%82-%ef%bc%881-2%ef%bc%89%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/7VZ4Oa1.jpg","magnet":["537bc665c9dba08cebb8e0cc43c25dacacc6031e"]}{"title":"某科学的超电磁炮S 第2季 01-08 附:第一季1-24合集 [目录]","link":"http://www.llss.cool/wp/all/anime/%e6%9f%90%e7%a7%91%e5%ad%a6%e7%9a%84%e8%b6%85%e7%94%b5%e7%a3%81%e7%82%aes-%e7%ac%ac2%e5%ad%a3-01-08-%e9%99%84%e7%ac%ac%e4%b8%80%e5%ad%a31-24%e5%90%88%e9%9b%86-%e7%9b%ae%e5%bd%95/","magnet":["0a723ae35e95a0a0befbe99ba648a59b8dc39752","7a5e5cb168948a1468cec1cc6523ca91d7bf1b4d","e16024d0b438d569057079e071ee7c26c3108119","1c84ab0b243759f830b260e9cab931ee29a6ba4f","7c6354edc90aa0dba524abb5a6dab5664cf6c189"]}{"title":"[BOOTLEG] [Selen] 借金姉妹 1-2 OVA动画+原作游戏","link":"http://www.llss.cool/wp/all/game/bootleg-selen-%e5%80%9f%e9%87%91%e5%a7%89%e5%a6%b9-1-2-ova%e5%8a%a8%e7%94%bb%e5%8e%9f%e4%bd%9c%e6%b8%b8%e6%88%8f/","magnet":["438ff52dd5d743623c6528a0bddf124100e332bf","ed4b3286d8bd6396ebaa692b14ef4f757e54890a","e08cf6961748e89978638bf7bf9aa51a32fb4e0d","8499c093a116ff5a51292519465c6a59d08056ff"]}{"title":"[Pashmina]かくしデレ -妹チョコH- #2[附第一话]","link":"http://www.llss.cool/wp/all/anime/pashmina%e3%81%8b%e3%81%8f%e3%81%97%e3%83%87%e3%83%ac-%ef%bc%8d%e5%a6%b9%e3%83%81%e3%83%a7%e3%82%b3h%ef%bc%8d-%ef%bc%832%e9%99%84%e7%ac%ac%e4%b8%80%e8%af%9d/","magnet":["f2b404fc435f5cc2850439f609bc0a93926fd221"]}{"title":"[琉璃神社汉化][Pashmina(パシュミナ)]純情少女エトセトラ ~純情少女~(中英字幕)","link":"http://www.llss.cool/wp/all/anime/%e7%90%89%e7%92%83%e7%a5%9e%e7%a4%be%e6%b1%89%e5%8c%96pashmina%ef%bc%88%e3%83%91%e3%82%b7%e3%83%a5%e3%83%9f%e3%83%8a%ef%bc%89%e7%b4%94%e6%83%85%e5%b0%91%e5%a5%b3%e3%82%a8%e3%83%88%e3%82%bb/","magnet":["61e79060e3f87397d2669dbb9a60c52da6bcd5ca"]}{"title":"[Pashmina] 純情少女エトセトラ ~ネット▼ラブ~","link":"http://www.llss.cool/wp/all/anime/pashmina-%e7%b4%94%e6%83%85%e5%b0%91%e5%a5%b3%e3%82%a8%e3%83%88%e3%82%bb%e3%83%88%e3%83%a9-%ef%bd%9e%e3%83%8d%e3%83%83%e3%83%88%e2%96%bc%e3%83%a9%e3%83%96%ef%bd%9e/","magnet":["77aadf48f3c59c8624f795a2f80813a08ff5f777"]}{"title":"[PashminaA] フルエルクチビル fuzzy lips 1","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%83%95%e3%83%ab%e3%82%a8%e3%83%ab%e3%82%af%e3%83%81%e3%83%93%e3%83%ab-fuzzy-lips-1/","magnet":["aff69777a9569c054114d5788f050b1ea69eef56"]}{"title":"[鈴木みら乃] Wanna. ~SpartanSex Spermax!!!~ (1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-wanna-%ef%bd%9espartansex-spermax%ef%bd%9e-1-2/","magnet":["7fc36bcd3962a50dad7a4179e4ea5a97b1120a26"]}{"title":"[鈴木みら乃] RIN×SEN+Ran→Sem Cross Mix 第2话(1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-rinxsen%ef%bc%8bran%e2%86%92sem-cross-mix-%e7%ac%ac2%e8%af%9d%ef%bc%881-2%ef%bc%89/","magnet":["b36f6a17b5d273136e19dd8216e78be8fa37a0e0"]}{"title":"[PoRO]Chu(治癒)してあげちゃう~(1-2)「エロ可愛い区 女教師 優」","link":"http://www.llss.cool/wp/all/anime/porochu%ef%bc%88%e6%b2%bb%e7%99%92%ef%bc%89%e3%81%97%e3%81%a6%e3%81%82%e3%81%92%e3%81%a1%e3%82%83%e3%81%86%ef%bd%9e%ef%bc%881-2%ef%bc%89%e3%80%8c%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9b%e3%81%84/","magnet":["4c6ec15bcfedc28fa590c2c785b98b8f77e169cc"]}{"title":"2015年7月里番合集","link":"http://www.llss.cool/wp/all/anime/2015%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1euoeeht08pj20vi0hqk5b.jpg","magnet":["AF50532FF65D26652CA57DE77748C7E1C3C83F70","FC8755B575D9A7F76AC5FCD83F0E1456306C1C4A"]}{"title":"2015年8月各组作品合集","link":"http://www.llss.cool/wp/all/anime/2015%e5%b9%b48%e6%9c%88%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/eJ4kX.jpg","magnet":null}{"title":"2015年9月各组作品合集","link":"http://www.llss.cool/wp/all/anime/2015%e5%b9%b49%e6%9c%88%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww4.sinaimg.cn/mw690/8c007b5cjw1ewgcr8d1e7j21kw0w87lu.jpg","magnet":["wKgDWlXlSHbTdCZYACEo6P5WxLo810","432682714D796B942950D49410B0DB5F5B6CEFBD","2D10079A5CC81E2C5A40C2DBC174D8431979975F"]}{"title":"[夜桜字幕组]2015年10月3D合集","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842015%e5%b9%b410%e6%9c%883d%e5%90%88%e9%9b%86/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1exw0eamv3dj20m80go0tu.jpg","magnet":["GB]7a7e7810a09884cc56c06e","][171003][opiumud]Yoshiwara"]}{"title":"[Queen Bee] 私が虜になって犯る 2 [井雲泰助]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a7%81%e3%81%8c%e8%99%9c%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e7%8a%af%e3%82%8b-2-%e4%ba%95%e9%9b%b2%e6%b3%b0%e5%8a%a9/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ey1tgy382rj20zk0k0q7q.jpg","magnet":["89d49802af551864a5a00b149fc882ab6ccc5258"]}{"title":"[chippai] ちっちゃなおなか -ひみつのあそび- (1-2)","link":"http://www.llss.cool/wp/all/anime/chippai-%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e3%81%b2%e3%81%bf%e3%81%a4%e3%81%ae%e3%81%82%e3%81%9d%e3%81%b3-1-2/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1extql41cgqj20zk0k0dix.jpg","magnet":["ff7cea0e72af9a275f07d8797e50db833d86e630"]}{"title":"[Queen Bee] 私が虜になって犯る 1[井雲泰助]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a7%81%e3%81%8c%e8%99%9c%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e7%8a%af%e3%82%8b-1%e4%ba%95%e9%9b%b2%e6%b3%b0%e5%8a%a9/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ewbgu2ncrij20zk0k076s.jpg","magnet":["e77b8a59efe09df9631dc2041d053ea10e0d5cd6"]}{"title":"[ピンクパイナップル]TSF物语(1-2)[Maho.sub]","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abtsf%e7%89%a9%e8%af%ad%ef%bc%881-2%ef%bc%89maho-sub/","img":"http://llss.cool/wp/wp-content/uploads/2015/12/8jiHC.jpg","magnet":["D5453A764FDD631018BC13614D06B75D3AD90B42"]}{"title":"[ピンクパイナップル]あねき… MY SWEET ELDER SISTER コアMIX メガ盛り オカズですよ","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%81%82%e3%81%ad%e3%81%8d-my-sweet-elder-sister-%e3%82%b3%e3%82%a2mix-%e3%83%a1%e3%82%ac%e7%9b%9b%e3%82%8a/","magnet":["e1d9f16959a14fc415c9d3fc779f54a998cf6f75"]}{"title":"[ピンクパイナップル] 相思相愛ノート (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%9b%b8%e6%80%9d%e7%9b%b8%e6%84%9b%e3%83%8e%e3%83%bc%e3%83%88-1-2/","magnet":["f0abc22bb202100eaaaea7f612c9c7f252519b1b"]}{"title":"[鈴木みら乃] 学園で時間よ止まれ(1-4) 時間停止の悪夢。惨劇最終章は……“止まらない”編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c1-4-%e6%99%82%e9%96%93%e5%81%9c%e6%ad%a2%e3%81%ae%e6%82%aa%e5%a4%a2/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exmv58c0oyj20zk0k0n1s.jpg","magnet":["7f5af34eb0b25b5c44159cbd3722e7546a178ddc"]}{"title":"[PoRO petit] 鬼父 Refresh 「小生意気ロマンティックが止まらない」(1-9)","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ad%e3%83%9e%e3%83%b3%e3%83%86%e3%82%a3%e3%83%83%e3%82%af%e3%81%8c%e6%ad%a2%e3%81%be%e3%82%89%e3%81%aa/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ev4qhbtkdfj20zk0k042d.jpg","magnet":["404d1cf190660dfd301e289411cfc3185fcb2c92"]}{"title":"[@OZ] アリスの森 快楽奴隷人形 DL版","link":"http://www.llss.cool/wp/all/anime/oz-%e3%82%a2%e3%83%aa%e3%82%b9%e3%81%ae%e6%a3%ae-%e5%bf%ab%e6%a5%bd%e5%a5%b4%e9%9a%b7%e4%ba%ba%e5%bd%a2-dl%e7%89%88/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1er46j8w9axj20j804vtb7.jpg","magnet":["31291b9cde88d1a908dc81448317687e9c61f62f","77efe296e0b8667ad6d581945d36002492ec9ae4"]}{"title":"[メリー・ジェーン] 厳格クールな先生がアヘボテオチ!(1-2) 下巻 絶頂漬けの10日間","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%8e%b3%e6%a0%bc%e3%82%af%e3%83%bc%e3%83%ab%e3%81%aa%e5%85%88%e7%94%9f%e3%81%8c%e3%82%a2%e3%83%98%e3%83%9c%e3%83%86/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1euvg9nzfydj20zk0k0acw.jpg","magnet":["143a3f3c36f4b2ac576dad8164bf6191506a5fed"]}{"title":"[EDGE] 少女から娼女へ… #1","link":"http://www.llss.cool/wp/all/anime/edge-%e5%b0%91%e5%a5%b3%e3%81%8b%e3%82%89%e5%a8%bc%e5%a5%b3%e3%81%b8-%ef%bc%831/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1f12pdf2h74j20jg0d2tb0.jpg","magnet":["55F296CD7B25866B99E66E0E28200F7FF77D48F7"]}{"title":"[ピンクパイナップル]小悪魔カノジョ THE ANIMATION #2 「かたこい」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%b0%8f%e6%82%aa%e9%ad%94%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation-2-%e3%80%8c%e3%81%8b%e3%81%9f%e3%81%93/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f1fc3rtqnsj20zi0jxwg5.jpg","magnet":["9b1348dccc0d76c0fe7bbcdf2db2e982231e75c9"]}{"title":"[魔人]euphoria 目指す楽園は神聖なる儀式の先に。救世主の母は……白夜凛音!? 編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%baeuphoria-%e7%9b%ae%e6%8c%87%e3%81%99%e6%a5%bd%e5%9c%92%e3%81%af%e7%a5%9e%e8%81%96%e3%81%aa%e3%82%8b%e5%84%80%e5%bc%8f%e3%81%ae%e5%85%88%e3%81%ab%e3%80%82%e6%95%91%e4%b8%96%e4%b8%bb/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1m82qcshcj20zh0jymyb.jpg","magnet":["0D787B3AF81663F1CF1FC1EDF397DFE6F012829A"]}{"title":"[メリー・ジェーン]アマカノ 星川こはる編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%ef%bd%a5%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e6%98%9f%e5%b7%9d%e3%81%93%e3%81%af%e3%82%8b%e7%b7%a8/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f1n643iizsj20zf0jx76p.jpg","magnet":["EBDA615DE411C6C349B92B08A308125474BBA1FE"]}{"title":"[Queen Bee]私は、快楽依存症 1[弥美津ヒロ]","link":"http://www.llss.cool/wp/all/anime/queen-bee%e7%a7%81%e3%81%af%e3%80%81%e5%bf%ab%e6%a5%bd%e4%be%9d%e5%ad%98%e7%97%87-1%ef%bc%bb%e5%bc%a5%e7%be%8e%e6%b4%a5%e3%83%92%e3%83%ad%ef%bc%bd/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f1kue5gnysj20zh0jvjti.jpg","magnet":["B00CC020A0339433F741EDCB600DCDF860675EB7"]}{"title":"[WHITE BEAR]新生 ふたなりアイドルでかたま系! 前編 ~の宴は超絶MAX~","link":"http://www.llss.cool/wp/all/anime/white-bear%e6%96%b0%e7%94%9f-%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%a7%e3%81%8b%e3%81%9f%e3%81%be%e7%b3%bb%ef%bc%81-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e3%81%ae/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1irfx2kpqj20zk0jy76r.jpg","magnet":["3D74F915554C26ED1A5A19542A525AC3F8B24B37"]}{"title":"[ばにぃうぉ~か~]OVA ましゅまろ☆いもうと☆さっきゅばす☆ #1 ふたりの☆さっきゅばす","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e3%81%be%e3%81%97%e3%82%85%e3%81%be%e3%82%8d%e2%98%86%e3%81%84%e3%82%82%e3%81%86%e3%81%a8%e2%98%86%e3%81%95%e3%81%a3/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f23f2ipbbfj20zh0jxtac.jpg","magnet":["4E266AF10B541DB65DDEBCCC6270592C511370A2"]}{"title":"[AniMan] イエナイコト -2nd scene- (1-3)","link":"http://www.llss.cool/wp/all/anime/animan-%e3%82%a4%e3%82%a8%e3%83%8a%e3%82%a4%e3%82%b3%e3%83%88-2nd-scene-1-3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f29d7lo2lfj20zk0k0q64.jpg","magnet":["0770141ffb3a4e3265f98679f7288ca876b564de"]}{"title":"[EDGE]ドロップアウト ~公衆・渡会静華~","link":"http://www.llss.cool/wp/all/anime/edge%e3%83%89%e3%83%ad%e3%83%83%e3%83%97%e3%82%a2%e3%82%a6%e3%83%88-%ef%bd%9e%e5%85%ac%e8%a1%86%e3%83%bb%e6%b8%a1%e4%bc%9a%e9%9d%99%e8%8f%af%ef%bd%9e/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f2a8kzyybkj20zg0jxmyu.jpg","magnet":["2C474EE7F293E8283F326B2FB03BA39B56DF8A49","Fow]Beastly_Bacchanalia["]}{"title":"2016年3月 各组作品合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b43%e6%9c%88-%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f2cdn32okyj21kw0x6nd6.jpg","magnet":["199091B9C8E891BF82355634D61036E2CFA09DD6","SMYKJR3OWTM5LVHGQABSVOUJ4YR7IXTB"]}{"title":"[Collaboration Works]えろげー!~Hもゲームも開発三昧~ 露天のお風呂でいい気持ち 深夜のお外で肝試し編","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%81%88%e3%82%8d%e3%81%92%e3%83%bc%ef%bc%81%ef%bd%9eh%e3%82%82%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%82%e9%96%8b%e7%99%ba%e4%b8%89%e6%98%a7%ef%bd%9e-%e9%9c%b2%e5%a4%a9%e3%81%ae/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f2cg4w6lgwj20zh0jxju3.jpg","magnet":["88BC0489CF6917C9F1BA1B2C1BDCFCF41667F52C"]}{"title":"[ピンクパイナップル]PRETTY×CATION THE ANIMATION #1「初恋、それぞれの距離」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abprettyxcation-the-animation-%ef%bc%831%e3%80%8c%e5%88%9d%e6%81%8b%e3%80%81%e3%81%9d%e3%82%8c%e3%81%9e%e3%82%8c/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f2bi1pc84qj20zh0jwmya.jpg","magnet":["1B969036397186DB7060CF384F22D5C9D9D3D971"]}{"title":"[PoRO]牝教師4 ~穢された教壇~ 「鉄仮面女教師・マキ ~蔑み漏れる罵り吐息」","link":"http://www.llss.cool/wp/all/anime/poro%e7%89%9d%e6%95%99%e5%b8%ab4-%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e-%e3%80%8c%e9%89%84%e4%bb%ae%e9%9d%a2%e5%a5%b3%e6%95%99%e5%b8%ab%e3%83%bb%e3%83%9e%e3%82%ad/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f2dnaoc17kj20zf0jvabm.jpg","magnet":["94A2FADFC28E4C79B5B4C3087CE049FCE2835491"]}{"title":"[メリー・ジェーン]あねよめカルテット 下巻 甘やかし系お姉ちゃんといたずら好きお姉ちゃん","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%81%82%e3%81%ad%e3%82%88%e3%82%81%e3%82%ab%e3%83%ab%e3%83%86%e3%83%83%e3%83%88-%e4%b8%8b%e5%b7%bb-%e7%94%98%e3%82%84/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f2dnsnqfo3j20zi0jv0u2.jpg","magnet":["233AC214631C410608565C16B0E739CB169CABA1"]}{"title":"[EDGE]少女から娼女へ… #2","link":"http://www.llss.cool/wp/all/anime/edge%e5%b0%91%e5%a5%b3%e3%81%8b%e3%82%89%e5%a8%bc%e5%a5%b3%e3%81%b8-%ef%bc%832/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1ugjsvrrwj20zh0jxwgc.jpg","magnet":["48915DAB2018A5C4D89ECA6AC5C99A00965DAF72"]}{"title":"[Queen Bee]SECRET JOURNEY(シークレット·ジャーニー) VOL.2","link":"http://www.llss.cool/wp/all/anime/queen-beesecret-journey%ef%bc%88%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%c2%b7%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%8b%e3%83%bc%ef%bc%89-vol-2/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f2kvx7oavdj20zc0jx76h.jpg","magnet":["8F6AEB52695CEE0255D6D6EA73EF463CE7EF2213"]}{"title":"[桜都字幕组][chippai]Aサイズ クラスメイト Anime Edition 2限目","link":"http://www.llss.cool/wp/all/anime/chippai%e7%ad%94%e3%82%b5%e3%82%a4%e3%82%ba%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a1%e3%82%a4%e3%83%88%e5%8a%a8%e6%bc%ab%e7%89%882%e9%99%90%e7%9b%ae/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f2m2f4r9hxj20ze0jy0ud.jpg","magnet":["3F615237FA33B3D40E97D8660094947197C4BAED","CC9FC3AD4EDCAE32646849B7F24DD50A5A41ABB9","5F02BCC9BC6712CE538E404047759C14F57DE678"]}{"title":"[桜都字幕组][Queen Bee]SECRET JOURNEY(シークレットジャーニー) VOL.2","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queen-beesecret-journey%ef%bc%88%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%8b%e3%83%bc%ef%bc%89-vol-2/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f2kvx95zshj20zf0jumzs.jpg","magnet":["8F6AEB52695CEE0255D6D6EA73EF463CE7EF2213"]}{"title":"TO LOVE 同人动画 3D游戏","link":"http://www.llss.cool/wp/all/anime/to-love-%e5%90%8c%e4%ba%ba%e5%8a%a8%e7%94%bb-3d%e6%b8%b8%e6%88%8f/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/tolove2.jpg","magnet":["243468B4773865D44B63EBDEB4BF6702E41A4F12","714BA698D974267BCB3C97375F4CF2AB7E84827F"]}{"title":"TMA 制服縞パンポニーテール","link":"http://www.llss.cool/wp/all/anime/tma-%e5%88%b6%e6%9c%8d%e7%b8%9e%e3%83%91%e3%83%b3%e3%83%9d%e3%83%8b%e3%83%bc%e3%83%86%e3%83%bc%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/nfPnE.jpg","magnet":["4df04f20ad87ca285677be647fdfbd247ef15d2b","65a370707dca596b264ad384458637abd5f86c70"]}{"title":"既然有人伸手了 那就发吧 该来的总是会来的","link":"http://www.llss.cool/wp/all/anime/%e6%97%a2%e7%84%b6%e6%9c%89%e4%ba%ba%e4%bc%b8%e6%89%8b%e4%ba%86-%e9%82%a3%e5%b0%b1%e5%8f%91%e5%90%a7-%e8%af%a5%e6%9d%a5%e7%9a%84%e6%80%bb%e6%98%af%e4%bc%9a%e6%9d%a5%e7%9a%84/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/6L75S.jpg","magnet":["4da302bb8db039bdcbe1529138c1591759c629bf"]}{"title":"青龍君 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%9d%92%e9%be%8d%e5%90%9b-%ef%bc%881-2%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/LT0id.jpg","magnet":["383F6A86A77E9FE6AB2D6B8D42D2DDE0129FD7FD","3AF8FDDBDF2CF95BA1D6B4810798F7F7CFE9DDE7"]}{"title":"金色之暗 同人游戏 附提取动画[マーマレード★スター] とらぶるだいあり~・ごーるど TO LOVE 3D","link":"http://www.llss.cool/wp/all/anime/%e9%87%91%e8%89%b2%e4%b9%8b%e6%9a%97-%e5%90%8c%e4%ba%ba%e6%b8%b8%e6%88%8f-%e9%99%84%e6%8f%90%e5%8f%96%e5%8a%a8%e7%94%bb%e3%83%9e%e3%83%bc%e3%83%9e%e3%83%ac%e3%83%bc%e3%83%89%e2%98%85%e3%82%b9/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/rPRw4.jpg","magnet":["c2ea1dc1ced6c35dd7a3d72bf245bc64a5bf26d6","fd2b240cd2225019876de3d5282552bf5ce92cc5"]}{"title":"[Pashmina(パシュミナ)]姉恋 スキ・キライ・ダイスキ。 #1 附 漫画","link":"http://www.llss.cool/wp/all/comic/pashmina%ef%bc%88%e3%83%91%e3%82%b7%e3%83%a5%e3%83%9f%e3%83%8a%ef%bc%89%e5%a7%89%e6%81%8b-%e3%82%b9%e3%82%ad%e3%83%bb%e3%82%ad%e3%83%a9%e3%82%a4%e3%83%bb%e3%83%80%e3%82%a4%e3%82%b9%e3%82%ad%e3%80%82/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/7VZ4Oa1.jpg","magnet":["9914a7fa19974d59c03786fd75170ae0387e0d0e"]}{"title":"[Pashmina]かくしデレ #1 附带漫画","link":"http://www.llss.cool/wp/all/comic/pashmina%e3%81%8b%e3%81%8f%e3%81%97%e3%83%87%e3%83%ac-%ef%bc%831-%e9%99%84%e5%b8%a6%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/70Owaga.jpg","magnet":["9722a9a40046087807ac35930eb5d6c7384d26fe"]}{"title":"[Pashmina] かくしデレ -初×初シンドローム- #3 (1-3)","link":"http://www.llss.cool/wp/all/anime/pashmina-%e3%81%8b%e3%81%8f%e3%81%97%e3%83%87%e3%83%ac-%ef%bc%8d%e5%88%9dx%e5%88%9d%e3%82%b7%e3%83%b3%e3%83%89%e3%83%ad%e3%83%bc%e3%83%a0%ef%bc%8d-%ef%bc%833-%ef%bc%881-3%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/wOqJzQD.jpg","magnet":["923816c3fe99e8cc2745fa780b235f3cc02dde7e"]}{"title":"[PashminaA] アマネェ! ~トモダチンチでこんな事になるなんて!~","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%82%a2%e3%83%9e%e3%83%8d%e3%82%a7%ef%bc%81-%ef%bd%9e%e3%83%88%e3%83%a2%e3%83%80%e3%83%81%e3%83%b3%e3%83%81%e3%81%a7%e3%81%93%e3%82%93%e3%81%aa%e4%ba%8b%e3%81%ab%e3%81%aa%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/jRGAkoK.jpg","magnet":["40d511c3c28b571cc3c25d2d7dac58ff7e39c43e"]}{"title":"【最终幻想】尤菲·如月【动画+3D同人游戏】","link":"http://www.llss.cool/wp/all/game/%e3%80%90%e6%9c%80%e7%bb%88%e5%b9%bb%e6%83%b3%e3%80%91%e5%b0%a4%e8%8f%b2%c2%b7%e5%a6%82%e6%9c%88%e3%80%90%e5%8a%a8%e7%94%bb3d%e5%90%8c%e4%ba%ba%e6%b8%b8%e6%88%8f%e3%80%91-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/200px-Ffviiyuffie.jpg","magnet":["65226935E5ACEEF223F84DC58C0C0A7D7D366589","C1A94B5E6B11C2D45DB894486885D908331E5BFC"]}{"title":"[PashminaA]もう挟まずにはいられない ~星にお願いしたらこんなにおっきくなっちゃった!~","link":"http://www.llss.cool/wp/all/anime/pashminaa%e3%82%82%e3%81%86%e6%8c%9f%e3%81%be%e3%81%9a%e3%81%ab%e3%81%af%e3%81%84%e3%82%89%e3%82%8c%e3%81%aa%e3%81%84-%ef%bd%9e%e6%98%9f%e3%81%ab%e3%81%8a%e9%a1%98%e3%81%84%e3%81%97%e3%81%9f/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/Bv5MVaI.jpg","magnet":["d76e9e503fdb13ca779ed1fc63a54b7e0b7551ba"]}{"title":"[PashminaA] いただきっ!セーエキ ~吸血鬼のフルコース~","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%81%84%e3%81%9f%e3%81%a0%e3%81%8d%e3%81%a3%ef%bc%81%e3%82%bb%e3%83%bc%e3%82%a8%e3%82%ad-%ef%bd%9e%e5%90%b8%e8%a1%80%e9%ac%bc%e3%81%ae%e3%83%95%e3%83%ab%e3%82%b3%e3%83%bc%e3%82%b9/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/La8aQZ2.jpg","magnet":["75811574c58ec9fc5f22ea643b7e6e20a0521cfa"]}{"title":"[PashminaA] ふぇちかの!","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%81%b5%e3%81%87%e3%81%a1%e3%81%8b%e3%81%ae%ef%bc%81/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/SoU6li2.jpg","magnet":["ab11f9gf6a0af104ab3cf243s539cd186ecds4f39042e8"]}{"title":"[AniMan] 艶美 その弐 (1-2)","link":"http://www.llss.cool/wp/all/anime/animan-%e8%89%b6%e7%be%8e-%e3%81%9d%e3%81%ae%e5%bc%90-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/RPyMFXN.jpg","magnet":["KTGMFKQMXJZGJP6TBXPYEX37S4NNYFG7"]}{"title":"[ドールハウス] Support_Girl","link":"http://www.llss.cool/wp/all/anime/%e3%83%89%e3%83%bc%e3%83%ab%e3%83%8f%e3%82%a6%e3%82%b9-support_girl/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/UfPdFKL.jpg","magnet":["0945ab37991908e8e47e28cb1f23b26c76051f1a"]}{"title":"[魔人] 黒獣(クロイヌ)第4集 (1-4) ~クラウディア×セレスティン 義父との関係。女神が堕ちる朝には…編~","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%ba-%e9%bb%92%e7%8d%a3%ef%bc%88%e3%82%af%e3%83%ad%e3%82%a4%e3%83%8c%ef%bc%89%e7%ac%ac4%e9%9b%86-%ef%bc%881-4%ef%bc%89-%ef%bd%9e%e3%82%af%e3%83%a9%e3%82%a6%e3%83%87%e3%82%a3%e3%82%a2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/2dq9CKt.jpg","magnet":["713faeb243c7ee86429db6fdf2a4d33d36d3df37"]}{"title":"[生肉]琉璃神社首发Energy Kyo-ka!! / えなじぃキョーカ!! [episode 01]附漫画","link":"http://www.llss.cool/wp/all/comic/%e7%90%89%e7%92%83%e7%a5%9e%e7%a4%be%e9%a6%96%e5%8f%91energy-kyo-ka-%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab-episode-01/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ图片20160409184132.png","magnet":["889D6F8C62AC9FA0DBD11496C3A4F71538B3F47D","F80F767309390FD3A57B05AE4E1D0E59731A207A"]}{"title":"私は, 快楽依存症 [episode 02]","link":"http://www.llss.cool/wp/all/anime/%e7%a7%81%e3%81%af-%e5%bf%ab%e6%a5%bd%e4%be%9d%e5%ad%98%e7%97%87-episode-02/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ图片20160409183530.png","magnet":null}{"title":"[桜都字幕组][EDGE(エッジ)]えなじぃキョーカ!!ヌキサポ編 第1巻","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab%ef%bc%81%ef%bc%81%e3%83%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ图片20160409184058.png","magnet":["BF550E40533DE1A3DF75B689196128E4834D72CF","6FEA125CB701BE064ADEDA5F336C40E84BCAB98E"]}{"title":"[PoRO]JKとエロ議員センセイ「ドジっ娘メガネ秘書 初音」(1-2)","link":"http://www.llss.cool/wp/all/anime/porojk%e3%81%a8%e3%82%a8%e3%83%ad%e8%ad%b0%e5%93%a1%e3%82%bb%e3%83%b3%e3%82%bb%e3%82%a4%e3%80%8c%e3%83%89%e3%82%b8%e3%81%a3%e5%a8%98%e3%83%a1%e3%82%ac%e3%83%8d%e7%a7%98%e6%9b%b8-%e5%88%9d%e9%9f%b3/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/aEymZ1k.jpg","magnet":["191989d0ff23c4c96a4e2611d257c80e6a35db63"]}{"title":"[魔穗字幕组][PoRO]Dark Blue Vol. 1-2","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84porodark-blue-vol-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/8xHH89c.jpg","magnet":["f278a802703110719cedaffd8dbd4cd7f37c9811"]}{"title":"[PoRO]2009-2012高清动漫集合(720P)","link":"http://www.llss.cool/wp/all/anime/poro2009-2012%e9%ab%98%e6%b8%85%e5%8a%a8%e6%bc%ab%e9%9b%86%e5%90%88%ef%bc%88720p%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/gGugWHZ.jpg","magnet":["CC3BAC7585131C1709CE9F9620D5B50550C14C09"]}{"title":"[PoRO]パパラブ 変態仮面っ娘・氷華~パパパンツに恋するツインテール (1-2)","link":"http://www.llss.cool/wp/all/anime/poro%e3%83%91%e3%83%91%e3%83%a9%e3%83%96-%e5%a4%89%e6%85%8b%e4%bb%ae%e9%9d%a2%e3%81%a3%e5%a8%98%e3%83%bb%e6%b0%b7%e8%8f%af%ef%bd%9e%e3%83%91%e3%83%91%e3%83%91%e3%83%b3%e3%83%84%e3%81%ab%e6%81%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/xZ7lECr.jpg","magnet":["ba760ef211e256ff45bef082cbae558ff0577429"]}{"title":"[鈴木みら乃] ヤバい!―復讐・闇サイト―(1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e3%83%a4%e3%83%90%e3%81%84%ef%bc%81%e2%80%95%e5%be%a9%e8%ae%90%e3%83%bb%e9%97%87%e3%82%b5%e3%82%a4%e3%83%88%e2%80%95%ef%bc%881-2%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/X48Yeog.jpg","magnet":["5da3015320d5d4d071c58349a3e1188a20cea1f0"]}{"title":"[鈴木みら乃]凌成敗!~学園美少女制裁秘録~ 若菜と咲と、成敗の終わりと……編 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e5%87%8c%e6%88%90%e6%95%97%ef%bc%81%ef%bd%9e%e5%ad%a6%e5%9c%92%e7%be%8e%e5%b0%91%e5%a5%b3%e5%88%b6%e8%a3%81%e7%a7%98%e9%8c%b2%ef%bd%9e-%e8%8b%a5/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/1Vrbdgz.jpg","magnet":["49F22F2EBE51DADB3B72F29460DB3419788E18CB"]}{"title":"[PashminaA] オトメヒメ","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%82%aa%e3%83%88%e3%83%a1%e3%83%92%e3%83%a1/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1emwrpcr5c6j20np0dcdhc.jpg","magnet":["5d9e6cb245c5165f522547ba456bb52658d6e45d","][171003][opiumud]Yoshiwara"]}{"title":"[PashminaA] 恋まぐわい ~忘却の妖狐~","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e6%81%8b%e3%81%be%e3%81%90%e3%82%8f%e3%81%84-%ef%bd%9e%e5%bf%98%e5%8d%b4%e3%81%ae%e5%a6%96%e7%8b%90%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1enxmmshxjvj20np0dcgn1.jpg","magnet":["0db0acfed71cf3588f1ece6247f290f79685b5dd"]}{"title":"[PashminaA] 異国なレトロ","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e7%95%b0%e5%9b%bd%e3%81%aa%e3%83%ac%e3%83%88%e3%83%ad/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1erp2xydz7sj20zl0k2mzw.jpg","magnet":["565f8e1e48f686eeec33baa90a3a21b12ecaa6d2"]}{"title":"[PashminaA] 彼女がネコミミに着替えたら","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e5%bd%bc%e5%a5%b3%e3%81%8c%e3%83%8d%e3%82%b3%e3%83%9f%e3%83%9f%e3%81%ab%e7%9d%80%e6%9b%bf%e3%81%88%e3%81%9f%e3%82%89/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ets5m4e61mj20go0b4wgj.jpg","magnet":["86cf3c1a4c4bd7f7ac7b7c40b115cf7181b0ae93"]}{"title":"[魔人] euphoria (1-4)~『蒔羽梨香』『葵菜月』 蘇る地獄絵図編~","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%ba-euphoria-%ef%bc%881-4%ef%bc%89%ef%bd%9e%e3%80%8e%e8%92%94%e7%be%bd%e6%a2%a8%e9%a6%99%e3%80%8f%e3%80%8e%e8%91%b5%e8%8f%9c%e6%9c%88%e3%80%8f-%e8%98%87%e3%82%8b%e5%9c%b0%e7%8d%84/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eppd4c3e91j20hs09zabu.jpg","magnet":["7128bb3f354fcca67a6de7e647c8aaddf54f42d5","a6b3f7a969c7f712eacb22db1a4cd772e9455737"]}{"title":"2016年3月里番合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f1n643iizsj20zf0jx76p.jpg","magnet":["F1DA8908596D5A85B048EF64D5AF8C0E7871081B"]}{"title":"[進撃の巨人] 104期訓練兵団日記 ミ○サ編【進擊的巨人】","link":"http://www.llss.cool/wp/all/anime/%e9%80%b2%e6%92%83%e3%81%ae%e5%b7%a8%e4%ba%ba-104%e6%9c%9f%e8%a8%93%e7%b7%b4%e5%85%b5%e5%9b%a3%e6%97%a5%e8%a8%98-%e3%83%9f%e2%97%8b%e3%82%b5%e7%b7%a8%e3%80%90%e9%80%b2%e6%93%8a%e7%9a%84%e5%b7%a8/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ey582c26q8j20tn0kadiz.jpg","magnet":["92ff09a3c64db3165bf65ad9aded43f7ac9ceb8f"]}{"title":"[ドリームドット] ゆかりのDIKIDOKIサマーバケーション","link":"http://www.llss.cool/wp/all/anime/%e3%83%89%e3%83%aa%e3%83%bc%e3%83%a0%e3%83%89%e3%83%83%e3%83%88-%e3%82%86%e3%81%8b%e3%82%8a%e3%81%aedikidoki%e3%82%b5%e3%83%9e%e3%83%bc%e3%83%90%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exsmkunn9wj21hc0u0tti.jpg","magnet":["f7654b8824277fb2ed45d05b9dafd65cdcf6bd72"]}{"title":"[少女映画] 物语系列cosplay合集 蝸物語 変物語 忍物語 撫物語 月物語","link":"http://www.llss.cool/wp/all/comic/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb-%e7%89%a9%e8%af%ad%e7%b3%bb%e5%88%97cosplay%e5%90%88%e9%9b%86-%e8%9d%b8%e7%89%a9%e8%aa%9e-%e5%a4%89%e7%89%a9%e8%aa%9e-%e5%bf%8d%e7%89%a9%e8%aa%9e-%e6%92%ab/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1exyezphj4mj21150as7bw.jpg","magnet":["5b2b9b6723c62c3caa69709ca2d3c3c958c2248d","3ed6902396cce62554a5b1ab026afcf3b4bc33d2","ab61d9fb82cf2bae87cc27c9b201c653d94ab518","f3dc7a78309949acc926a9b17a82a2a7947d8303","bb0e4af838ea5ea6035f65863006165025740919","27567c91600f693e9c58de7651fad12d24a7db58","8e6f5ecd6a303200d4b82413e36099085aa2d710","30071696f9b08559df258","4450f006e92178b7551e2322fb7e72b0efa099b4","a253982c2e1d189d324ddae5c4fae89f8c2171ec"]}{"title":"ももいろみるく (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%82%82%e3%82%82%e3%81%84%e3%82%8d%e3%81%bf%e3%82%8b%e3%81%8f-%ef%bc%881-2%ef%bc%89/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1euxrc8e347j20zk0k0gpw.jpg","magnet":["07797382e66978e03cd1607485e41bf063609b43"]}{"title":"[Milky] メイドさんとボイン魂(1-2)EXTEND THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/milky-%e3%83%a1%e3%82%a4%e3%83%89%e3%81%95%e3%82%93%e3%81%a8%e3%83%9c%e3%82%a4%e3%83%b3%e9%ad%82%ef%bc%881-2%ef%bc%89extend-the-animation/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1euyzt6xz6sj20sg0fdai0.jpg","magnet":["cd6124f88572f8f5057cddd5ff4849cbf497755c"]}{"title":"【少女映画】HITMA合集 AKB-001到054 [持续更新] CosPlay系列","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91hitma%e5%90%88%e9%9b%86-akb-001%e5%88%b0054-%e6%8c%81%e7%bb%ad%e6%9b%b4%e6%96%b0-cosplay%e7%b3%bb%e5%88%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/923zYHr.jpg","magnet":["73AF55153C216BE0C39ECDA5843EB5B32D1E0674","e00c06aefd0fdc94d9ae1166ec08a1c8b9331500","73AF55153C216BE0C39ECDA5843EB5B32D1E0674","65e3b98913014dd4a20dfe87a895c14b2cc17ca3","9c32c08401d845a33d2a426abf6e3ea5c61461e3","506F4F0BE4D982E2E45711B7FA9BD4B03D3908CF","6CC6261C7953776169F9EDB8DE3FC422CF8ED8C8","c63ca35f411005ceba711ac3c6e9291df5746cbb","04eaa10ea0e8c0516dea2d50f48e0d1406aabeaf","da3f9a545acbb250d436df019c0a5a04d083b447","f6fba37f99cd2b17082142fc98ccdcfead39ace3","GHI6ORJMPUAO6BSZ55TQXKKBPRO7UOR4","f06dcf0caecea18559e2c99dacb4bd4d5e1827c2","CF6B0AE138737E1F0A36E162DECCA21E03A8AA05","0DAAA901479CDD8706247D5BBC4E849936F4734C","10C02C1728B375E5B21450E88B45E943D339C876","311bab261fb721121462649885e14121ae2ef6dd","e7f053dbde952bb66b0ad9c0fb799162fe1da26d","26df1af67f3f856168fe887acd2ab00d7be88285","9bf61b786044c7ddf3ec75b07ffc7d91dd8700e7","6CC6261C7953776169F9EDB8DE3FC422CF8ED8C8","b8e1e515c923f427da7edf2ae08cd44bf8ac37d9","0382e626ac10c93ce2d98b2d5a53d8751f3b2d80","ecd7925097114556394e7f39606ac1207f569751","90FFA6D641AE28D1A206DA16B84825C75907E10A","4da302bb8db039bdcbe1529138c1591759c629bf","c3f53ebd670eeaafbec5b3e7b1d43e3d68511ec2","ea89575ae44b31374b084a89c3de64c15f4d09ee","a593a22e1cee18a04056d75bac99202198ef47c0","a74a45594dc7ef361d81636ca9863866ecb9788b","590b8b4aef3c4f61ddafc772876ffdefc5101293","8aec171e49bf1f0c7514776c757157ca0bc25e55","c878c0bdb3dca0bbfd27598ed8c7bc492ea1d4bf","5ba300bc4c8ab2af63ad0ca6e8fe4a4fc347b5e8","0cd51e267c0a8126b9d7145f35ae9a351c61e0c8","1CED60173A230834E582B4A2C135495E05ED1E0E","09c46eb552ccb54c7ad0408fe33628465268bb19","32fc568c8aabf06f253a5c1e8e86ff54a5150e5b","3b3eec14b84688b7b8bd4f090b903d41acb38ad0","D0E31EDC78C934041A0F51EF427190FAB016808D","2F355CA8610FEA1B24DB6BD0B6DEC85C9D67A835","259500af26b857cfed34d5f8b670f0f816bd7c71","4f3d1f311ad41d7fbac2015223dcd98ab20552f3","36f39e0b103d7c5bd00ed516a95484aca4253041","de65c81a3c52e80673a48e109907304d95bae525","PHYKW6WBJXNY5FIZLTOZQEYTOP5XNJ6C","6db46b606dc69bdc905fe78fbf3921ec4ef626f3","e8542ef6b4f8cebf390666d00b9c4b1b5750a0ae","F74511BA11A7B4E939320437517F42BDF23F84BF","ffb30f6f26e906a3e719546ec0fa87446bceb7fb"]}{"title":"[ZIZG-001~004] 対魔忍ムラサキ (実写)系列 COSPLAY 合集","link":"http://www.llss.cool/wp/all/anime/zizg-001004-%e5%af%be%e9%ad%94%e5%bf%8d%e3%83%a0%e3%83%a9%e3%82%b5%e3%82%ad-%ef%bc%88%e5%ae%9f%e5%86%99%ef%bc%89%e7%b3%bb%e5%88%97-cosplay-%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/RpyM1FO-1.jpg","magnet":["475eb87d1349a5100cabcb9ef80f3a677f9c1824","bb4138bd1228420f6012c25bce72fa5992ef47ed","549553de101ef06447ae9fb04472fa3db11308f0","67cdcf452f517354667c2694ac4044728c3fe6a4"]}{"title":"[@OZ] 妖夢 拘束快 首締め窒息 [中字]","link":"http://www.llss.cool/wp/all/game/oz-%e5%a6%96%e5%a4%a2/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ev88kbmhtlj20zd0jtq93.jpg","magnet":["a727f49aa33e4ac3d6d3d6557feced27c743f2b9[","24E8A0E00B001FF94AED7250528824510A53734E["]}{"title":"[第6基地(キチロク)] コトリのシリーズ lovelive! 南小鸟系列(1-5)汉化合集","link":"http://www.llss.cool/wp/all/comic/%e7%ac%ac6%e5%9f%ba%e5%9c%b0%e3%82%ad%e3%83%81%e3%83%ad%e3%82%af-%e3%82%b3%e3%83%88%e3%83%aa%e3%81%ae%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-lovelive-%e5%8d%97%e5%b0%8f%e9%b8%9f%e7%b3%bb%e5%88%971/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evu4r4um07j20jg0afae3.jpg","magnet":["3b60a5c1eb480120eafc9edfc89cf77004827510"]}{"title":"[少女映画] 02.RANKO","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb-02-ranko/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evv9hasem4j20rs0dxdlp.jpg","magnet":["C9DC72532ADCC1D48BCF906266F434D381D019EC"]}{"title":"[SYLD]Moment~花火咲き散る刹那、彼女に起きた事~[中字]","link":"http://www.llss.cool/wp/all/anime/syldmoment%ef%bd%9e%e8%8a%b1%e7%81%ab%e5%92%b2%e3%81%8d%e6%95%a3%e3%82%8b%e5%88%b9%e9%82%a3%e3%80%81%e5%bd%bc%e5%a5%b3%e3%81%ab%e8%b5%b7%e3%81%8d%e3%81%9f%e4%ba%8b%ef%bd%9e%e4%b8%ad%e5%ad%97/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evzu1vr3dij20qo0f0wf8.jpg","magnet":["b3192c843706529b950fedac42afd500845b806c"]}{"title":"[One Piece] 海贼王NAMI 娜美後悔日誌","link":"http://www.llss.cool/wp/all/game/one-piece-%e6%b5%b7%e8%b4%bc%e7%8e%8bnami-%e5%a8%9c%e7%be%8e%e5%be%8c%e6%82%94%e6%97%a5%e8%aa%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/5ea9KaN.jpg","magnet":["c54a4a2f9a24679c09047c597462593a8c7ea53c"]}{"title":"[木火土金水] ToROUBる-THEちゅぽちゅぽアニメーション-","link":"http://www.llss.cool/wp/all/anime/%e6%9c%a8%e7%81%ab%e5%9c%9f%e9%87%91%e6%b0%b4-toroub%e3%82%8b-the%e3%81%a1%e3%82%85%e3%81%bd%e3%81%a1%e3%82%85%e3%81%bd%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ew4loo0lkcj20ku0bq795.jpg","magnet":["49fc2eebd6f62b9acf083e82ebdae62929a0e094"]}{"title":"[spermation] クリムゾンガールズ~痴漢支配~ (1-3) 「第二章 NOZOMI屈服 ChapterII」","link":"http://www.llss.cool/wp/all/anime/spermation-%e3%82%af%e3%83%aa%e3%83%a0%e3%82%be%e3%83%b3%e3%82%ac%e3%83%bc%e3%83%ab%e3%82%ba%ef%bd%9e%e7%97%b4%e6%bc%a2%e6%94%af%e9%85%8d%ef%bd%9e-1-3-%e3%80%8c%e7%ac%ac%e4%ba%8c%e7%ab%a0-nozomi/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ewacidigpwj20zk0k0n0d.jpg","magnet":["16b736a16736ce451e14a811ee05639ebf251d1d"]}{"title":"[鈴木みら乃] 学園で時間よ止まれ 止まる日菜と動く香奈子。固まる白濁液と流れる破瓜の血編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c-%e6%ad%a2%e3%81%be%e3%82%8b%e6%97%a5%e8%8f%9c%e3%81%a8%e5%8b%95/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1espy42jwtfj20zk0k0gpm.jpg","magnet":["f9acdee420eb53a87d96d72add71b8d6c20ac047"]}{"title":"[鈴木みら乃] 学園で時間よ止まれ(1-3)終わらない復讐劇 止まらない破瓜の血編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c%ef%bc%881-3%ef%bc%89%e7%b5%82%e3%82%8f%e3%82%89%e3%81%aa%e3%81%84/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewidson9l1j20zk0k0djs.jpg","magnet":["bc8595bb7755bb8ca7d0d37186bb92aebeee9c1a"]}{"title":"[鈴木みら乃] 学園で時間よ止まれ(1-2)プールを満たす白濁液。スクール水着は浮かばない編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c%ef%bc%881-2%ef%bc%89%e3%83%97%e3%83%bc%e3%83%ab%e3%82%92%e6%ba%80/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1etnl4al4lkj20zk0k0whe.jpg","magnet":["53cd51b3a01d8c227530d782166f98bdd04c03fb"]}{"title":"[PoRO petit]狙われた女神天使エンゼルティアー ~守った人間達に裏切られて~ (1-3)「クール女教師・涼音 ~頬張り睨むコスプレ女神~」","link":"http://www.llss.cool/wp/all/anime/poro-petit%e7%8b%99%e3%82%8f%e3%82%8c%e3%81%9f%e5%a5%b3%e7%a5%9e%e5%a4%a9%e4%bd%bf%e3%82%a8%e3%83%b3%e3%82%bc%e3%83%ab%e3%83%86%e3%82%a3%e3%82%a2%e3%83%bc-%ef%bd%9e%e5%ae%88%e3%81%a3%e3%81%9f/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewjkqedx30j20hs0a0401.jpg","magnet":["c47d5a2c3ab97dc3a0021094c425ce15837b6688"]}{"title":"[ピンクパイナップル] デーモンバスターズ ~えっちなえっちなデーモン退治~ THE ANIMATION 「ドキドキッ 触手だらけの大決戦 ポロリどころかムフフのフ」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%87%e3%83%bc%e3%83%a2%e3%83%b3%e3%83%90%e3%82%b9%e3%82%bf%e3%83%bc%e3%82%ba-%ef%bd%9e%e3%81%88%e3%81%a3/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewltsk7kcqj20jq0b4di2.jpg","magnet":["355d72f714a542bbd2b6e7a85124252ad723cd24"]}{"title":"[夜桜字幕组] 3D汉化作品 合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-3d%e6%b1%89%e5%8c%96%e4%bd%9c%e5%93%81-%e5%90%88%e9%9b%86big5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ewn0d74s0aj20zk0k0n0u.jpg","magnet":["GB]1b8d5aaa25f44fe31fe4ba"]}{"title":"[TMA] 冴えない女優の育てかた","link":"http://www.llss.cool/wp/all/anime/tma-%e5%86%b4%e3%81%88%e3%81%aa%e3%81%84%e5%a5%b3%e5%84%aa%e3%81%ae%e8%82%b2%e3%81%a6%e3%81%8b%e3%81%9f/","img":"http://ww3.sinaimg.cn/large/006fCErsgw1f30wia7mr5j30ai0ey78m.jpg","magnet":["7E5B3AA7CE8D345DA75D1B6EB16D5B81690F0D7C"]}{"title":"2016年5月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/2-1.png","magnet":null}{"title":"【非H】少女爱上姐姐2~二人的ELDER~妃宫千早","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e5%b0%91%e5%a5%b3%e7%88%b1%e4%b8%8a%e5%a7%90%e5%a7%902%ef%bd%9e%e4%ba%8c%e4%ba%ba%e7%9a%84elder%ef%bd%9e%e5%a6%83%e5%ae%ab%e5%8d%83%e6%97%a9/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/images.jpg","magnet":["501B2B14D02804B0DCDF1968E56C8501FD212EEA"]}{"title":"【非H】[肯普法-皆川瞳美][1-12完]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e8%82%af%e6%99%ae%e6%b3%95-%e7%9a%86%e5%b7%9d%e7%9e%b3%e7%be%8e1-12%e5%ae%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/img_2.jpg","magnet":["0F2B0838C1D56A670AD5DBCDAEFA49A18122485E"]}{"title":"[夜桜字幕组]3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%843d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1et0bm4t9onj20zk0k0q4f.jpg","magnet":["719397E527CACB029C35","F41ADC6270D28E88C233","][171003][opiumud]Yoshiwara"]}{"title":"[メリー・ジェーン] アノコトイイコト 第1話 こんな胸でも愛されたい!!","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%82%a2%e3%83%8e%e3%82%b3%e3%83%88%e3%82%a4%e3%82%a4%e3%82%b3%e3%83%88-%e7%ac%ac1%e8%a9%b1-%e3%81%93%e3%82%93%e3%81%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewpc1djkd4j20dc0k0whd.jpg","magnet":["bc1ba35b430d9d85f320964ed4f94afc484dbf85"]}{"title":"[chippai] ちっちゃなおなか -ナイショですよ。-","link":"http://www.llss.cool/wp/all/anime/chippai-%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e3%83%8a%e3%82%a4%e3%82%b7%e3%83%a7%e3%81%a7%e3%81%99%e3%82%88%e3%80%82/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ewssb83wq1j20zk0k0diu.jpg","magnet":["cf15e49363d3b7985632c7409641ebb444a48857"]}{"title":"ちっちゃなおなか -ナイショですよ","link":"http://www.llss.cool/wp/all/anime/%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e3%83%8a%e3%82%a4%e3%82%b7%e3%83%a7%e3%81%a7%e3%81%99%e3%82%88/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ewtw2ibcelj20zk0k0q59.jpg","magnet":["3ebefbbbfabe695fcd65edee488d29ab64602cd6"]}{"title":"[メリー・ジェーン] あねよめカルテット 上巻 キャリアウーマンな姉と引きこもりメイド姉","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%82%e3%81%ad%e3%82%88%e3%82%81%e3%82%ab%e3%83%ab%e3%83%86%e3%83%83%e3%83%88-%e4%b8%8a%e5%b7%bb-%e3%82%ad%e3%83%a3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ex0w5ogpupj20jq0b375p.jpg","magnet":["3463D5B9C03549BECC82140CAEEB8BD746BEDE66"]}{"title":"『AKB0048』OP&ED「希望について」/NO [email protected][MP3/320K]","link":"http://www.llss.cool/wp/all/anime/%e3%80%8eakb0048%e3%80%8foped%e3%80%8c%e5%b8%8c%e6%9c%9b%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%80%8dno-nameakb48mp3320k-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/YDKjS-1.jpg","magnet":["3bb01d2a9401d1ba7b1b25b9a00973a314234c26"]}{"title":"[Queen Bee] くりぃみぃパイ 1 [emily]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%8f%e3%82%8a%e3%81%83%e3%81%bf%e3%81%83%e3%83%91%e3%82%a4-1%e3%80%80emily/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ex4coa6dbaj20ci09qmyd.jpg","magnet":["e4a0eba061d77a71b4ab0592b5cc40e1595ec2b2"]}{"title":"[@OZ] ロリビッチ フランドール [字幕]","link":"http://www.llss.cool/wp/all/anime/oz-%e3%83%ad%e3%83%aa%e3%83%93%e3%83%83%e3%83%81-%e3%83%95%e3%83%a9%e3%83%b3%e3%83%89%e3%83%bc%e3%83%ab-%e5%ad%97%e5%b9%95/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eww78wnd00j20fk0bodkm.jpg","magnet":["d0c101c910e1047b408e1fad3213bf6c61665f63","c72c446acf60ff9aa6c951310860a216484fe2f2["]}{"title":"[少女映画][TMA] ご注文はこの娘ですか? 请问您要来点姑娘吗?(akb-057)","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbtma-%e3%81%94%e6%b3%a8%e6%96%87%e3%81%af%e3%81%93%e3%81%ae%e5%a8%98%e3%81%a7%e3%81%99%e3%81%8b-%e8%af%b7%e9%97%ae%e6%82%a8%e8%a6%81%e6%9d%a5%e7%82%b9%e5%a7%91/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ewdu3co64cj20i806uwgi.jpg","magnet":["FB6C3A9D99114267D0C1570CFD4942D2E9D7183A"]}{"title":"[りっぷるん] 神待ちサイト ~出逢い編~","link":"http://www.llss.cool/wp/all/game/%e3%82%8a%e3%81%a3%e3%81%b7%e3%82%8b%e3%82%93-%e7%a5%9e%e5%be%85%e3%81%a1%e3%82%b5%e3%82%a4%e3%83%88-%ef%bd%9e%e5%87%ba%e9%80%a2%e3%81%84%e7%b7%a8%ef%bd%9e/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ewymf22hllj20sg0lctbw.jpg","magnet":["8bd5efff90f9cdea23006bd2bd3b2b943aea55b6","Lipplen_KamimachiSite"]}{"title":"[ディスカバリー] Unbalance~アンバランス~MENU.1-3","link":"http://www.llss.cool/wp/all/anime/%e3%83%87%e3%82%a3%e3%82%b9%e3%82%ab%e3%83%90%e3%83%aa%e3%83%bc-unbalance%ef%bd%9e%e3%82%a2%e3%83%b3%e3%83%90%e3%83%a9%e3%83%b3%e3%82%b9%ef%bd%9emenu-1-3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exb9988qekj20is081q61.jpg","magnet":["3f45592c98e13c8610e07a36da900010c5e9b4b0"]}{"title":"网球双飞物语ova1-4+PC初回限定1+2+3作 附CG","link":"http://www.llss.cool/wp/all/anime/%e7%bd%91%e7%90%83%e5%8f%8c%e9%a3%9e%e7%89%a9%e8%af%adova1-4pc%e5%88%9d%e5%9b%9e%e9%99%90%e5%ae%9a123%e4%bd%9c-%e9%99%84cg/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/20200000013920144735943295768_s.jpg","magnet":["F20D385D9D44E093320AEA3B0486B7AB12802142","DC35D217118B6F23576F7FDA75822DD8F571E964","FF2C856DA45D6A6F1067BCCA164F1CBBB94BE26B","2A11C30DBD2DBCB4CC40609BB6663EA3553E7767","d7db2c30b3574736802a5c49f4bd22eecbd24849","379299BBB79CA95D8ADD7CC80389B87A85A7191E","379299bbb79ca95d8add7cc80389b87a85a7191e","3294ac438b3249de3549bdb633e4bc38dfe98150","[collaborationworks]"]}{"title":"[少女映画][C2.Lab] 03.RIN","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbc2-lab-03-rin/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1exfwokft4tj218f0m8jww.jpg","magnet":["a0397108e192310c465ae55abd7e32c85651ff79"]}{"title":"[WHITE BEAR] 輪姦媚薬中毒 前編 ~逃げ場無し!1428人の生徒全員にSEXされる令嬢沙也香~","link":"http://www.llss.cool/wp/all/anime/white-bear-%e8%bc%aa%e5%a7%a6%e5%aa%9a%e8%96%ac%e4%b8%ad%e6%af%92-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e9%80%83%e3%81%92%e5%a0%b4%e7%84%a1%e3%81%97%ef%bc%811428%e4%ba%ba%e3%81%ae%e7%94%9f%e5%be%92%e5%85%a8/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exi6bnviabj20zk0k0q4s.jpg","magnet":["ee7e29d6ffb38d9949b997a4ae526cc8d0c9805d"]}{"title":"[ZIZ] 対魔忍アサギ2 #01 改造再び #02 淫謀の始まり","link":"http://www.llss.cool/wp/all/anime/ziz-%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae2-%ef%bc%8301-%e6%94%b9%e9%80%a0%e5%86%8d%e3%81%b3-02-%e6%b7%ab%e8%ac%80%e3%81%ae%e5%a7%8b%e3%81%be%e3%82%8a/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exnzgkx1g2j20zk0k0wh5.jpg","magnet":["e90fc9e29688d6697c0e4e98fb9ca10f2ac2e619"]}{"title":"[PoRO petit] 牝教師4 ~穢された教壇~ 「生意気ドジっ娘女教師・美結~高飛車ハメ堕ち2濁金」","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e7%89%9d%e6%95%99%e5%b8%ab4-%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e-%e3%80%8c%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%89%e3%82%b8%e3%81%a3%e5%a8%98%e5%a5%b3/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1exoxalntbgj20zk0k0n18.jpg","magnet":["b3e65bc0fbd147cc6db2d34c88d14bc433254734"]}{"title":"【少女映画】【TMA/CMP】合集 COSQ-001到046 [さとう遥希 《超时空要塞F》、EVA、街头霸王]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91%e3%80%90tmacmp%e3%80%91%e5%90%88%e9%9b%86-cosq-001%e5%88%b0046-%e3%81%95%e3%81%a8%e3%81%86%e9%81%a5%e5%b8%8c-%e3%80%8a%e8%b6%85%e6%97%b6/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/fC7D64Nl.jpg","magnet":["d9de0b082d6b8dc813c83fac96a07d9f1f4401b0","6074b4e0dc2342ae007629bd0ea4ade73c9a813c","5f14b0cae11315987d426adf690496cb3ad8dc42","c9f75facee74771799e3b949f62c32f2ef20c245","6a9c36ab99336e86d0d613a87e2cd8a67d53dca9","B918B9748F4648169C7E68E2A7D02EC0758A6DD3","6902101bca4a31863bc6a6644ebc79be957f56cc","0f0106730d93c5a6b30b54ab860869f67ff21b18","db677f64e6f8f64b256832638dd1e1e45227422a","AAB6CD217DFA78E31C0D585D8A7980EBDF388023","41FCDA42FB78AA97A88B0A8212DB3157A783EC2C","4270125d496d8e3524d4f62352499b92ed1b7fb1","1170547887C3958C478177AE337D49F7F85F09CD","c474e108bd31d279a4ae587e8bf0e69a93c4c747","BA3D85FC5BEE91E8B5155B856639D9B1FAD96633","7df308dcd1ae476a013fc97cbd3752ac379a250a","874dcb94f9a5eabd146f3395b3d13db1c0a013b1","f02b1253b0ec69e57c404c87ba07f984b761baa6","e56da389c6b8226376ffeaf607d6b27588cf9145","06090663375f1df8d13e18b9cc5d37fb7819ae71","09daee98ed80b5d47176c6d00203f19ccecc3451","e1cda56538b8ebca61ab0d60646fe2974ff08c2d","d5459c04505146070f5c2359df0ab4424567b95d","3b6cca714666bae9c830d53967c16fcb03776881","9ce9475e7f6726daad396146e1ad103bbc88cbda","431350c46748081533c9c3f2cebf797d164cb529","193198320a633cc09e79f707dd7cb395b936a35c","7df0cddbae3d84e502846844a9ea1ffd7a528382","f0afaed643aeee21db2115dc4fdb8b816c6de9c1","34c214a5f1f7e20232297e07a03fc1ea5f98e557","0a33a2fc72963081cab45ee3e3ee569ddf2513be","851590f71aca8995911d19095dec486d6a84d682","2af6f843dd87bdb90c3382fe80fd1e2378e3a805","b312a3a03d5e17b94d290c053d843e5ed5791428","2c662a3babd8f2d691ab997dff6bb2ef79ef1282","b5fc76db10f2a00504a38192e12fb3a97feed87f","fd4fbd9050cfcdb762c887043ced0b3c2fb0fbea","54AF08D98A253F1274E78D36F7655B86B414FDBF","01a5ef8e2e2684332cf55ff5d339d40da47f518d","3d80a4f3ed25a6eb4332c935cb31a4b6aee5a493","f08765336f5e76da4bb14434e4f45e743327918c","082df63ec14257baf8e769b34f682b853068a035","57cbf3e81e2a271ce0ed41ce252b403bcd6bde08"]}{"title":"[PoRO] あい☆きゃん (1-3) ~はめドル・レイナ ~囁く憎棒に拒み潤う媚肉~","link":"http://www.llss.cool/wp/all/anime/poro-%e3%81%82%e3%81%84%e2%98%86%e3%81%8d%e3%82%83%e3%82%93-1-3-%ef%bd%9e%e3%81%af%e3%82%81%e3%83%89%e3%83%ab%e3%83%bb%e3%83%ac%e3%82%a4%e3%83%8a-%ef%bd%9e%e5%9b%81%e3%81%8f%e6%86%8e%e6%a3%92/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1erj81eusbej20zk0k0n0z.jpg","magnet":["4f30856f7bdc3e15dbcf61ff3978d36c449861f0"]}{"title":"[PoRO] 黒の教室 「生意気レオタード・まひる ~勝気な尻穴に穿つ無碍の剛棒」","link":"http://www.llss.cool/wp/all/anime/poro-%e9%bb%92%e3%81%ae%e6%95%99%e5%ae%a4-%e3%80%8c%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ac%e3%82%aa%e3%82%bf%e3%83%bc%e3%83%89%e3%83%bb%e3%81%be%e3%81%b2%e3%82%8b-%ef%bd%9e%e5%8b%9d%e6%b0%97%e3%81%aa/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1esns0w60asj20zk0k0jv9.jpg","magnet":["f9e0a2830806258d556b138c3db6be27496c947a"]}{"title":"[PoRO] ふくびき!トライアングル(1-3) ~双葉はあたふた~~ 「小悪魔イタズラっ娘の壁ドン哀歌」","link":"http://www.llss.cool/wp/all/anime/poro-%e3%81%b5%e3%81%8f%e3%81%b3%e3%81%8d%ef%bc%81%e3%83%88%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%82%b0%e3%83%ab%ef%bc%881-3%ef%bc%89-%ef%bd%9e%e5%8f%8c%e8%91%89%e3%81%af%e3%81%82%e3%81%9f%e3%81%b5/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eqnku4u6fcj20np0dc407.jpg","magnet":["8b6576837839cfa16c8cd1ee816edb10fa02fb9a"]}{"title":"[PoRO] 館 ~官能奇譚~(1-2)「天然牝奴れ妹・瑠璃 ~躊躇い拡げる卑猥な皺穴」","link":"http://www.llss.cool/wp/all/anime/poro-%e9%a4%a8-%ef%bd%9e%e5%ae%98%e8%83%bd%e5%a5%87%e8%ad%9a%ef%bd%9e%ef%bc%881-2%ef%bc%89%e3%80%8c%e5%a4%a9%e7%84%b6%e7%89%9d%e5%a5%b4%e3%82%8c%e5%a6%b9%e3%83%bb%e7%91%a0%e7%92%83-%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eprozywk0nj20np0dcac5.jpg","magnet":["f1439eed88889b699133d52bd43d918af0448660","80dd7d13cdecf078af9ce73357095e95faa2c838","0e888303651f19f63b77401ed243a56d6de2a074"]}{"title":"[PoRO] 鬼父2 -harvest-「天然巨乳のハメロス日和」(1-5)","link":"http://www.llss.cool/wp/all/anime/poro-%e9%ac%bc%e7%88%b62-harvest-%e3%80%8c%e5%a4%a9%e7%84%b6%e5%b7%a8%e4%b9%b3%e3%81%ae%e3%83%8f%e3%83%a1%e3%83%ad%e3%82%b9%e6%97%a5%e5%92%8c%e3%80%8d1-5/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eosy5bn5pyj20np0dc0up.jpg","magnet":["1db0759c81543d37facc02cef9f754ea5ee28667"]}{"title":"[PoRO]鬼父 Rebuild Vol.3「小生意気な萌顔ほぃほぃ◆」","link":"http://www.llss.cool/wp/all/anime/poro%e9%ac%bc%e7%88%b6-rebuild-vol-3%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%81%aa%e8%90%8c%e9%a1%94%e3%81%bb%e3%81%83%e3%81%bb%e3%81%83%e2%97%86%e3%80%8d/","img":"http://ww3.sinaimg.cn/large/8c007b5ctw1eno3q1b8yhj20k00b9aal.jpg","magnet":["41649B2378B73CAD34E432D3C7B3FF3FE295979C"]}{"title":"[PoRO]狙われた女神天使エンゼルティアー (1-2)「狙われた巨乳無垢・優理 ~護った笑顔に堕とされて~」","link":"http://www.llss.cool/wp/all/anime/poro%e7%8b%99%e3%82%8f%e3%82%8c%e3%81%9f%e5%a5%b3%e7%a5%9e%e5%a4%a9%e4%bd%bf%e3%82%a8%e3%83%b3%e3%82%bc%e3%83%ab%e3%83%86%e3%82%a3%e3%82%a2%e3%83%bc-1-2%e3%80%8c%e7%8b%99%e3%82%8f%e3%82%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/rRPVjZO.jpg","magnet":["5acf61b0702c01ea5f2abaab949cad179b9fb96f"]}{"title":"[PoRO]町ぐるみの罠~白濁にまみれた肢体~(1-4) 「チビ可愛ゆいの恥辱ジェラ・ハメ馴染む街コン」","link":"http://www.llss.cool/wp/all/anime/poro%e7%94%ba%e3%81%90%e3%82%8b%e3%81%bf%e3%81%ae%e7%bd%a0%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ab%e3%81%be%e3%81%bf%e3%82%8c%e3%81%9f%e8%82%a2%e4%bd%93%ef%bd%9e1-4-%e3%80%8c%e3%83%81%e3%83%93/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/fcl2Q7B.jpg","magnet":["fd29846ed806a1488f43bc080e358d2fd1ed1c1a"]}{"title":"[PoRO]蠱惑の刻 「切ない少女の調べ~儚く濡れる蠱惑の刻~」","link":"http://www.llss.cool/wp/all/anime/poro%e8%a0%b1%e6%83%91%e3%81%ae%e5%88%bb-%e3%80%8c%e5%88%87%e3%81%aa%e3%81%84%e5%b0%91%e5%a5%b3%e3%81%ae%e8%aa%bf%e3%81%b9%ef%bd%9e%e5%84%9a%e3%81%8f%e6%bf%a1%e3%82%8c%e3%82%8b%e8%a0%b1%e6%83%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/kaAt0Mh.jpg","magnet":["fadff003d7b1d59b978123682a4ac2da67f3d49a","191c6cd8723fd03fca6761f3b473e3dc0f94a8af"]}{"title":"[PoRO]喰ヒ人 ツンデレストッキング・琴音~乱れ尻ハメ乗り2穴~","link":"http://www.llss.cool/wp/all/anime/poro%e5%96%b0%e3%83%92%e4%ba%ba-%e3%83%84%e3%83%b3%e3%83%87%e3%83%ac%e3%82%b9%e3%83%88%e3%83%83%e3%82%ad%e3%83%b3%e3%82%b0%e3%83%bb%e7%90%b4%e9%9f%b3%ef%bd%9e%e4%b9%b1%e3%82%8c%e5%b0%bb%e3%83%8f/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/NXGJgK0.jpg","magnet":["27056f1bbd4c1abcc28d60620e24e6ef3773cf97"]}{"title":"[PoRO] JKとオーク兵団 第2话","link":"http://www.llss.cool/wp/all/anime/poro-jk%e3%81%a8%e3%82%aa%e3%83%bc%e3%82%af%e5%85%b5%e5%9b%a3-%e7%ac%ac2%e8%af%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/unNvpDU.jpg","magnet":["add23daf97e123aa7eb6de5d36dfd8b950c0519a"]}{"title":"[桜都字幕组][ばにぃうぉ~か~]ましゅまろいもうとさっきゅばす #2 いもうととともだちさっきゅばすといもうとさっきゅばす","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9e%e3%81%be%e3%81%97%e3%82%85%e3%81%be%e3%82%8d%e3%81%84%e3%82%82%e3%81%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c885519sample12.jpg","magnet":["0A99F3541BC95A10B8C13D8A6A6C973439129A1D"]}{"title":"【PoRO】JKと〇行教師4(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90poro%e3%80%91jk%e3%81%a8%e3%80%87%e8%a1%8c%e6%95%99%e5%b8%ab41-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/J4.jpg","magnet":["B50ED05273C8AA79AE7FE2CD8E1C5CED021B9B24","E0C02A2FC8DB81AD61FCDA1298A7EE270FD2316D"]}{"title":"[Collaboration Works] 喫ハプニング(1-4) ツンツンデレデレSとMのホライゾン。爆乳おバカ令嬢はアブノーマルがお好き!?編","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e5%96%ab%e3%83%8f%e3%83%97%e3%83%8b%e3%83%b3%e3%82%b01-4-%e3%83%84%e3%83%b3%e3%83%84%e3%83%b3%e3%83%87%e3%83%ac%e3%83%87%e3%83%acs%e3%81%a8m%e3%81%ae%e3%83%9b%e3%83%a9/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evkyhgpy3wj20zk0k00xk.jpg","magnet":["5e1b8c3410a0ec0f0d17f4f012b0c3a1ee6a33af","5e1b8c3410a0ec0f0d17f4f012b0c3a1ee6a33af"]}{"title":"[Collaboration Works] 都合のよいセックスフレンド?(1-4)太陽の下で、あん・あん・あん 露天のお風呂で、ぴゅっ・ぴゅっ・ぴゅっ編","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e9%83%bd%e5%90%88%e3%81%ae%e3%82%88%e3%81%84%e3%82%bb%e3%83%83%e3%82%af%e3%82%b9%e3%83%95%e3%83%ac%e3%83%b3%e3%83%89%ef%bc%9f%ef%bc%881-4%ef%bc%89%e5%a4%aa%e9%99%bd%e3%81%ae/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eou5iag75aj20np0dcjta.jpg","magnet":["6653df0ab3b24658cecb2e5235268780e0ad062a","e529242b1b50e40f97a4efc3a237d64c756f722a","dd1cb7278a2d1c9d89d1ee12f8b221f7cc8bb732"]}{"title":"[Collaboration Works] 真希ちゃんとなう。(1-4)~姉妹で挑む未開の穴。三条探検隊が今日もいく!!編~","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e7%9c%9f%e5%b8%8c%e3%81%a1%e3%82%83%e3%82%93%e3%81%a8%e3%81%aa%e3%81%86%e3%80%82%ef%bc%881-4%ef%bc%89%ef%bd%9e%e5%a7%89%e5%a6%b9%e3%81%a7%e6%8c%91%e3%82%80%e6%9c%aa%e9%96%8b/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eo7082ipgzj20np0dc0u8.jpg","magnet":["2ba851704feb28ef6fa63fee23cc399586c459b7"]}{"title":"[Collaboration Works]えろげー!~Hもゲームも開発三昧~ み、みんなが見ている前でこんなこと!? 寧々は大人のレディーだもん編","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%81%88%e3%82%8d%e3%81%92%e3%83%bc%ef%bc%81%ef%bd%9eh%e3%82%82%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%82%e9%96%8b%e7%99%ba%e4%b8%89%e6%98%a7%ef%bd%9e-%e3%81%bf%e3%80%81%e3%81%bf/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/51GzzuD.jpg","magnet":["34dab18a2d637293f1ef5e96a37359c9d5446bac","34dab18a2d637293f1ef5e96a37359c9d5446bac"]}{"title":"[Collaboration Works]トロピカルKISS 第3话 by立夏編 (1-3)","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%83%88%e3%83%ad%e3%83%94%e3%82%ab%e3%83%abkiss-%e7%ac%ac3%e8%af%9d-by%e7%ab%8b%e5%a4%8f%e7%b7%a8-%ef%bc%881-3%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/X605oEx.jpg","magnet":["252b26937c267143a26891c65c19738e54c88c75"]}{"title":"[Collaboration Works]プリーズ・◯◯◯・ミー!~九条さくら編~(1-2)","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%83%97%e3%83%aa%e3%83%bc%e3%82%ba%e3%83%bb%e2%97%af%e2%97%af%e2%97%af%e3%83%bb%e3%83%9f%e3%83%bc%ef%bc%81%ef%bd%9e%e4%b9%9d%e6%9d%a1%e3%81%95%e3%81%8f%e3%82%89%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/GgI5H-1.jpg","magnet":["ade4eed817138b731961cc5d6546d6f64bb7f902","8b73540466c69320a3b9eb050f3937a3ad4261c8"]}{"title":"[ピンクパイナップル]武想少女隊ぶれいど☆ブライダーズ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%ad%a6%e6%83%b3%e5%b0%91%e5%a5%b3%e9%9a%8a%e3%81%b6%e3%82%8c%e3%81%84%e3%81%a9%e2%98%86%e3%83%96%e3%83%a9%e3%82%a4/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1exkicxf82mj20qo0b4jyp.jpg","magnet":["c0586d12806208ab1aa584626007d2877d5967a0","c0586d12806208ab1aa584626007d2877d5967a0"]}{"title":"[ピンクパイナップル]少女×少女×少女 第一幕「祭子」[720P]","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3-%e7%ac%ac%e4%b8%80%e5%b9%95%e3%80%8c%e7%a5%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/Zpi1b.jpg","magnet":["d41165ee5f082f9f1563680ac05c7ee0db510ce9"]}{"title":"[ピンクパイナップル]好きで好きで、すきで Pretty.2「浮空」&「ふたごころ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%a5%bd%e3%81%8d%e3%81%a7%e5%a5%bd%e3%81%8d%e3%81%a7%e3%80%81%e3%81%99%e3%81%8d%e3%81%a7-pretty-2%e3%80%8c%e6%b5%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/AKKtV.jpg","magnet":["19623416f47452ce9d7778dc79081313515182ff"]}{"title":"[ピンクパイナップル]禁断の病棟 Desire.1","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e7%a6%81%e6%96%ad%e3%81%ae%e7%97%85%e6%a3%9f-desire-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/u9Gd1.jpg","magnet":["61856b85c4737c498eaaab3cc59840e27c3a309a"]}{"title":"[みさくらなんこつハースニール] 内気ふたなりネトア「みーふゅ」の鬼ヤバ配信事故~公衆便所編~","link":"http://www.llss.cool/wp/all/anime/%e3%81%bf%e3%81%95%e3%81%8f%e3%82%89%e3%81%aa%e3%82%93%e3%81%93%e3%81%a4%e3%83%8f%e3%83%bc%e3%82%b9%e3%83%8b%e3%83%bc%e3%83%ab-%e5%86%85%e6%b0%97%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%83%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f3blz10spqj20zk0k0ae5.jpg","magnet":["09133752a57b356738e3bafab318552565c6e184","d388f760e9b96d84ec3e3e33b99912799e6e6459"]}{"title":"[ピンクパイナップル]最終痴漢電車NEXT Molester.2「お前は最高の女だ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%9c%80%e7%b5%82%e7%97%b4%e6%bc%a2%e9%9b%bb%e8%bb%8anext-molester-2%e3%80%8c%e3%81%8a%e5%89%8d%e3%81%af%e6%9c%80/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/ZjUbq.jpg","magnet":["af4412f904aafc8c99484572ed320242cb38a388"]}{"title":"[字幕]「ピンクパイナップル」少女×少女×少女 第二幕「酒池肉林」","link":"http://www.llss.cool/wp/all/anime/%e5%ad%97%e5%b9%95%e3%80%8c%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%80%8d%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3-%e7%ac%ac/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/X1MJx.jpg","magnet":["84cccacd6a5f7e9dd2bc1c290e27ab47df06e960"]}{"title":"[Maho.sub][ピンクパイナップル]恋糸記念日 1「むすんで ひらいて」","link":"http://www.llss.cool/wp/all/anime/maho-sub%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%81%8b%e7%b3%b8%e8%a8%98%e5%bf%b5%e6%97%a5-1%e3%80%8c%e3%82%80%e3%81%99%e3%82%93%e3%81%a7-%e3%81%b2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/cCdrP.jpg","magnet":["43c048e5502dd5f7d456b807c86a05ea567402b2"]}{"title":"[ピンクパイナップル]禁断の病棟 第2话「淫らな診療室へようこそ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e7%a6%81%e6%96%ad%e3%81%ae%e7%97%85%e6%a3%9f-%e7%ac%ac2%e8%af%9d%e3%80%8c%e6%b7%ab%e3%82%89%e3%81%aa%e8%a8%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/4eeH3.jpg","magnet":["953cc188e406c539498adb959eef710f9621a3a6"]}{"title":"[ピンクパイナップル]ハーレムタイム 「私、赤ちゃんが欲しいですっ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%bf%e3%82%a4%e3%83%a0-%e3%80%8c%e7%a7%81%e3%80%81%e8%b5%a4%e3%81%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/0u8i9VU.jpg","magnet":["9201763e6107b3e805dab376aa4ad51a3ab4c39b"]}{"title":"[ピンクパイナップル]恋糸記念日(1-2)附漫画","link":"http://www.llss.cool/wp/all/comic/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%81%8b%e7%b3%b8%e8%a8%98%e5%bf%b5%e6%97%a5%ef%bc%881-2%ef%bc%89%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/zBer3wB.jpg","magnet":["ad12bd59fa4ff441a93eefcd41ba07138ec8dc6e"]}{"title":"[工口字幕组][ピンクパイナップル] 「早紀先輩、ふたたび…」","link":"http://www.llss.cool/wp/all/anime/%e5%b7%a5%e5%8f%a3%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%80%8c%e6%97%a9%e7%b4%80%e5%85%88%e8%bc%a9%e3%80%81%e3%81%b5/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/e7fd0402-s.jpg","magnet":["46BBEDFCB672D72E7D2B39B334D104B753C5438A"]}{"title":"[ピンクパイナップル]恋騎士 Purely☆Kiss The Animation 「エルシア=ハーヴェンス」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%81%8b%e9%a8%8e%e5%a3%ab-purely%e2%98%86kiss-the-animation-%e3%80%8c%e3%82%a8%e3%83%ab%e3%82%b7%e3%82%a2%ef%bc%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/1374987398205_Screenshot_2013-07-28-13-34-00.png","magnet":["7b3f09567e279c47ff4389d050a2b836dcb29b3d"]}{"title":"【首发】[生肉][PoRO]鬼父化ケーション 「小生意気タヌキぽんぽこぽん」初回限定版","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a6%96%e5%8f%91%e3%80%91%e7%94%9f%e8%82%89poro%e9%ac%bc%e7%88%b6%e5%8c%96%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%82%bf%e3%83%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c875820sample11-1.jpg","magnet":["LHO4QVHGQWU534DLMWXNWZ56KZTBAU5O"]}{"title":"[首发][生肉][ピンクパイナップル]こいなか-小田舎で初恋×中出しセクシャルライフ- THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e9%a6%96%e5%8f%91%e7%94%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%81%93%e3%81%84%e3%81%aa%e3%81%8b-%e5%b0%8f%e7%94%b0%e8%88%8e%e3%81%a7/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c889479sample3.jpg","magnet":["3Q32VDSUV7MTEYBM33FGKRPI6E6QII2P"]}{"title":"【首发】【生肉】[Collaboration Works]バカな妹を利口にするのは俺の××だけな件について ミルク大好き!! 御津井 芭華編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a6%96%e5%8f%91%e3%80%91%e3%80%90%e7%94%9f%e8%82%89%e3%80%91collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ%E5%9B%BE%E7%89%8720160405004133.png","magnet":["ZMHVKXWGONWS4DMXYDFTX62WFP5Q6UXF"]}{"title":"[熟肉][ピンクパイナップル]こいなか-小田舎で初恋×中出しセクシャルライフ- THE ANIMATION继续阅读 →","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%81%93%e3%81%84%e3%81%aa%e3%81%8b-%e5%b0%8f%e7%94%b0%e8%88%8e%e3%81%a7%e5%88%9d%e6%81%8bx/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f3dxworlq7j212m0lrjx2.jpg","magnet":["9D1240A9C59AA13E408D9D3743F1DE818FE41DA1","9D1240A9C59AA13E408D9D3743F1DE818FE41DA1","9D1240A9C59AA13E408D9D3743F1DE818FE41DA1","9D1240A9C59AA13E408D9D3743F1DE818FE41DA1"]}{"title":"[熟肉][桜都字幕组][PoRO]鬼父 化ケーション 「小生意気タヌキぽんぽこぽん」","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e9%ac%bc%e7%88%b6-%e5%8c%96%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c875820sample11-1.jpg","magnet":["A726029745BA08AD6F00D241D56DE16A2B80A73D"]}{"title":"【熟肉】[桜都字幕组][Collaboration Works]バカな妹を利口にするのは俺の××だけな件について ミルク大好き!! 御津井 芭華編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ%E5%9B%BE%E7%89%8720160405004133.png","magnet":["CCC8FBBBDB0D88858B0E997D36731202F63D595A"]}{"title":"[PoRO]鬼父 化ケーション 「小生意気タヌキぽんぽこぽん」[附前作]","link":"http://www.llss.cool/wp/all/anime/poro%e9%ac%bc%e7%88%b6-%e5%8c%96%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%82%bf%e3%83%8c%e3%82%ad%e3%81%bd%e3%82%93%e3%81%bd%e3%81%93%e3%81%bd/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f3dzfvfvquj20zg0jywkq.jpg","magnet":["C563818DF165DA0AA9C0E48C75A5418661E79B6F"]}{"title":"[熟肉]2016年4月里番合集","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%892016%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/nVCOIu8.jpg","magnet":["JKE7QIJ7PJJ4NOTMUBYKAX2YFJKIA77L","2B894F662D916C3DD40D2892A9BC920DCEFBD49C"]}{"title":"【非H】甲铁城的卡巴内里1-3话","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c1-3%e8%af%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["efa3afe46173dd5ea656fa82189920172e9d9e2c","8efbdb6dbf8f69c2c5467dc3a51fb77b1d3fa0d4","aa7ccfa3eb8cb3cacbd2c061049050b225e13a23"]}{"title":"[ピンクパイナップル]ガーデン (1-2) THE ANIMATION Bloom.2「メモリー」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%82%ac%e3%83%bc%e3%83%87%e3%83%b3-1-2-the-animation-bloom-2%e3%80%8c%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%bc/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/6Ej1v.jpg","magnet":["1411b5837e5247cfc4dad57d2a18d9ff7cddfa7d"]}{"title":"[ピンクパイナップル] 母娘乱館 THE ANIMATION 「琴音の章」[720P]","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%af%8d%e5%a8%98%e4%b9%b1%e9%a4%a8-the-animation-%e3%80%8c%e7%90%b4%e9%9f%b3%e3%81%ae%e7%ab%a0%e3%80%8d720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/0541040852FFCE9D6A0A4C4C3D9C1817.jpg","magnet":["070dad62b1b39aec6bb0420517df29b5a5d5882d"]}{"title":"[ピンクパイナップル]霧谷伯爵家の六姉妹 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e9%9c%a7%e8%b0%b7%e4%bc%af%e7%88%b5%e5%ae%b6%e3%81%ae%e5%85%ad%e5%a7%89%e5%a6%b9-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/zMizz.jpg","magnet":["B3B45A1A17D7CEC3506FE69CC808F8C485AF4D82"]}{"title":"[ピンクパイナップル]猥褻ミサイル THE ANIMATION 「うっ、また出ちゃった」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e7%8c%a5%e8%a4%bb%e3%83%9f%e3%82%b5%e3%82%a4%e3%83%ab-the-animation-%e3%80%8c%e3%81%86%e3%81%a3%e3%80%81%e3%81%be/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/4bab3bccgw1eykhwxa05ij204605yjrk.jpg","magnet":["ec8470fb50290048ec6ab99346bb80f88c7798b1"]}{"title":"[ピンクパイナップル] 奴隷兎とアンソニー「Hな欲望、私が全部叶えてあげる」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%a5%b4%e9%9a%b7%e5%85%8e%e3%81%a8%e3%82%a2%e3%83%b3%e3%82%bd%e3%83%8b%e3%83%bc%e3%80%8ch%e3%81%aa%e6%ac%b2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/rxkdaeO.jpg","magnet":["ba4356af912f88109550cee6b4d41952155d9320"]}{"title":"[ピンクパイナップル]JUNK LAND「まじめな彼女と…思ってた?」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abjunk-land%e3%80%8c%e3%81%be%e3%81%98%e3%82%81%e3%81%aa%e5%bd%bc%e5%a5%b3%e3%81%a8%e6%80%9d%e3%81%a3%e3%81%a6/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/fIwvNCz.jpg","magnet":["ebc8534dcd036d4aec748c1dba16c565516d82d0"]}{"title":"[ピンクパイナップル] 小悪魔カノジョ THE ANIMATION「汁まみれでトロトロ」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%b0%8f%e6%82%aa%e9%ad%94%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation%e3%80%8c%e6%b1%81%e3%81%be%e3%81%bf/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/cAy6LCp.jpg","magnet":["c5cc601448d5670e2966e074439665f311b76b3b"]}{"title":"[ピンクパイナップル] 椎葉さんのウラの顔。 with イモートリップ","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%a4%8e%e8%91%89%e3%81%95%e3%82%93%e3%81%ae%e3%82%a6%e3%83%a9%e3%81%ae%e9%a1%94%e3%80%82-with-%e3%82%a4%e3%83%a2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/ammYrqy.jpg","magnet":["b1af7d63f96006c4942a025190b2df43acb8bda6"]}{"title":"[ピンクパイナップル] 恋騎士 Purely☆Kiss 第2话「藤守由宇」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%81%8b%e9%a8%8e%e5%a3%ab-purely%e2%98%86kiss-%e7%ac%ac2%e8%af%9d%e3%80%8c%e8%97%a4%e5%ae%88%e7%94%b1%e5%ae%87/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/Gdn7wrC.jpg","magnet":["f6556ca1468b94cf5d18ae857332460eb7a2a696"]}{"title":"[ピンクパイナップル]フェラピュア ~御手洗さん家の事情~「朝から晩までしゃぶってあげる」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%95%e3%82%a7%e3%83%a9%e3%83%94%e3%83%a5%e3%82%a2-%ef%bd%9e%e5%be%a1%e6%89%8b%e6%b4%97%e3%81%95%e3%82%93/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/oeVLUhg.jpg","magnet":["24f61ebf479363dc42ad87db7fa38504ee1ab266","6e615202f6abc598bc895865cde297909210bd97"]}{"title":"[ピンクパイナップル] 恋乳ているず THE ANIMATION 「この娘とヤリたい」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%81%8b%e4%b9%b3%e3%81%a6%e3%81%84%e3%82%8b%e3%81%9a-the-animation-%e3%80%8c%e3%81%93%e3%81%ae%e5%a8%98%e3%81%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/e5wcTdT.jpg","magnet":["C300AB8A469C8665DAFAFD5EA854C7CA2ED86FAE"]}{"title":"[ピンクパイナップル]ラブesエム THE ANIMATION 「誰にも言えない秘密」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%a9%e3%83%96es%e3%82%a8%e3%83%a0-the-animation-%e3%80%8c%e8%aa%b0%e3%81%ab%e3%82%82%e8%a8%80%e3%81%88%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/izOascZ.jpg","magnet":["3a0eaef9e5fba0wedf2308f3f9431f97d2bd68a7f40fa6"]}{"title":"[ピンクパイナップル] 恋愛不要学派「私を調教してみたい?」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%81%8b%e6%84%9b%e4%b8%8d%e8%a6%81%e5%ad%a6%e6%b4%be%e3%80%8c%e7%a7%81%e3%82%92%e8%aa%bf%e6%95%99%e3%81%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/wqeXZaQl.jpg","magnet":["d720991117af30hd552d3df454c478d77tc88aaa1762"]}{"title":"[ピンクパイナップル] ばくあね 弟しぼっちゃうぞ!","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%81%b0%e3%81%8f%e3%81%82%e3%81%ad-%e5%bc%9f%e3%81%97%e3%81%bc%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%e3%81%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/lzkspfF.jpg","magnet":["1ee8074101486b2b1a55a0ef68fb2ec5b42b26b2"]}{"title":"[ピンクパイナップル]フリフレ THE ANIMATION ~制服堕天使の課外授業~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%95%e3%83%aa%e3%83%95%e3%83%ac-the-animation-%ef%bd%9e%e5%88%b6%e6%9c%8d%e5%a0%95%e5%a4%a9%e4%bd%bf%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/FmY69bX.jpg","magnet":["1be6768ffa38d2c593618dc19226d8af71bf46a3"]}{"title":"[ピンクパイナップル] ボーイ・ミーツ・ハーレム THE ANIMATION 「南国ハーレム」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%9c%e3%83%bc%e3%82%a4%e3%83%bb%e3%83%9f%e3%83%bc%e3%83%84%e3%83%bb%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0-the-ani/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/eeW15Oh.jpg","magnet":["8ae6088df03b4830c2eabf565c071ac24d25d7ae"]}{"title":"[ピンクパイナップル] 肉牝R30 ~肉欲に堕ちた牝たち~「もっと、淫らに…してください…」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e8%82%89%e7%89%9dr30-%ef%bd%9e%e8%82%89%e6%ac%b2%e3%81%ab%e5%a0%95%e3%81%a1%e3%81%9f%e7%89%9d%e3%81%9f%e3%81%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/rBSjuRX.jpg","magnet":["c5761ce621014703b931fe1c95b8855b16f759de"]}{"title":"[ピンクパイナップル] 神曲のグリモワール -PANDRA saga 2nd story-「有角の少女と不思議な本」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%a5%9e%e6%9b%b2%e3%81%ae%e3%82%b0%e3%83%aa%e3%83%a2%e3%83%af%e3%83%bc%e3%83%ab-pandra-saga-2nd-story-%e3%80%8c/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1emt929rskzj20np0dc40f.jpg","magnet":["e15369b06d1cdb4da74510e4ffbac73a242dfdb5"]}{"title":"[ピンクパイナップル] PANDRA―白き欲望 黒の希望―II (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-pandra%e2%80%95%e7%99%bd%e3%81%8d%e6%ac%b2%e6%9c%9b-%e9%bb%92%e3%81%ae%e5%b8%8c%e6%9c%9b%e2%80%95ii-1-2/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1emt9f0jbjsj20hs0a0whq.jpg","magnet":["86edafa6a51ab15119e56f016c04a55deb0edb23"]}{"title":"[ピンクパイナップル] ランス 兰斯01 光をもとめて 第1話「ランス、起つ!!」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a9%e3%83%b3%e3%82%b9-%e5%85%b0%e6%96%af01-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8%e3%82%81%e3%81%a6-%e7%ac%ac1/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eo5idbip0bj20np0dcjtr.jpg","magnet":["3fbf5e76fb32782e1460ab961c48413b3de9c303","3fbf5e76fb32782e1460ab961c48413b3de9c303"]}{"title":"[ピンクパイナップル] 豚の如き山賊に捕らわれて処女を奪われる巨乳姫騎士&女戦士 ~絶対チ●ポなんかに負けたりしない!!~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e8%b1%9a%e3%81%ae%e5%a6%82%e3%81%8d%e5%b1%b1%e8%b3%8a%e3%81%ab%e6%8d%95%e3%82%89%e3%82%8f%e3%82%8c%e3%81%a6/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eovabbniplj20np0dcq6j.jpg","magnet":["69d596c3af4ab00c124ef8a2b74b9b652246db4c","a21ee01fc31b88c53e282ef38f1dda24a54a09c6","a0eb88f98ebcb4cf09461c8c9b207c07a0e25080"]}{"title":"[ピンクパイナップル] しゃぶらレンタル エッチなおねえさんとのエロエロレンタルお勉強","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%81%97%e3%82%83%e3%81%b6%e3%82%89%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab-%e3%82%a8%e3%83%83%e3%83%81%e3%81%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1epssq7nz12j20nk0dcjt3.jpg","magnet":["5C4C9605420E577D0B83A09FC44271BFE2145972","aa5cb097001c2453e4c5c4dfb0a5048dbfd7a993","65d7c97f4cdaee7bdddf9ab1f53e81eeec56fccf","cc596daab5d63be5a091d555528c1d6520dd1055"]}{"title":"[ピンクパイナップル] 初犬+初犬 2 全4集 (HD 720P x264 AAC)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%88%9d%e7%8a%ac%e5%88%9d%e7%8a%ac-2-%e5%85%a84%e9%9b%86-hd-720p-x264-aac/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/zM4AK.jpg","magnet":["F6DAC77B1FAE903253B1CF6B145FBF844DC29C6B"]}{"title":"THE ANIMATION #1「もうずっと初恋の日々」","link":"http://www.llss.cool/wp/all/anime/the-animation-1%e3%80%8c%e3%82%82%e3%81%86%e3%81%9a%e3%81%a3%e3%81%a8%e5%88%9d%e6%81%8b%e3%81%ae%e6%97%a5%e3%80%85%e3%80%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1er30bj161uj20np0dctaz.jpg","magnet":["67d91e9c299044cad674d67f0b9be926901c36e3","1f07a9fe435c7264d0c92af369bc70a9926e0451","79b3a17beba916a10557049b8d7c205c295ef593","7d28cd5ad178b307635444906a9c2de37ed5aa1d"]}{"title":"[首发][生肉]Pako Sukusuku Mizuki-chan The Animation / LO Re:パコ すくすくみずきちゃん THE ANIMATION [episode 01]","link":"http://www.llss.cool/wp/all/anime/%e9%a6%96%e5%8f%91%e7%94%9f%e8%82%89pako-sukusuku-mizuki-chan-the-animation-lo-re%ef%bc%9a%e3%83%91%e3%82%b3-%e3%81%99%e3%81%8f%e3%81%99%e3%81%8f%e3%81%bf%e3%81%9a%e3%81%8d%e3%81%a1%e3%82%83/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c896389table1.jpg","magnet":["FF7E8849A061F42D84E95A28D94C3C7BE6E15565"]}{"title":"[熟肉][桜都字幕组][chippai]LO Reパコ すくすくみずきちゃん THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippailo-re%e3%83%91%e3%82%b3-%e3%81%99%e3%81%8f%e3%81%99%e3%81%8f%e3%81%bf%e3%81%9a%e3%81%8d%e3%81%a1%e3%82%83%e3%82%93-the-anima/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ截图20160506222858.png","magnet":["FF7E8849A061F42D84E95A28D94C3C7BE6E15565"]}{"title":"[ピンクパイナップル] 炎の孕ませ乳(パイ)ドルマイ★スター学園Z THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e4%b9%b3%ef%bc%88%e3%83%91%e3%82%a4%ef%bc%89%e3%83%89%e3%83%ab/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ermp42fpqjj20k10bcdh7.jpg","magnet":["f2b6a6a1076b15e158de7e5274f106a1baeb3918"]}{"title":"[ピンクパイナップル] なまイキ ~生粋荘(きっすいそう)へようこそ!~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%81%aa%e3%81%be%e3%82%a4%e3%82%ad-%ef%bd%9e%e7%94%9f%e7%b2%8b%e8%8d%98%ef%bc%88%e3%81%8d%e3%81%a3%e3%81%99/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ernvlgfrfmj20zl0k241y.jpg","magnet":["b9e56412b3aadd9498c752c07cab366ab86089e7","29]de890552b046cf14f4d4c28be8f55623c0d80b96"]}{"title":"[ピンクパイナップル]3Ping Lovers!☆一夫二妻の世界へようこそ♪ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab3ping-lovers%ef%bc%81%e2%98%86%e4%b8%80%e5%a4%ab%e4%ba%8c%e5%a6%bb%e3%81%ae%e4%b8%96%e7%95%8c%e3%81%b8%e3%82%88/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1esegywph0tj20zk0k0gqg.jpg","magnet":["96f7239823a46226d6a49635c667885121937f4e"]}{"title":"[ピンクパイナップル] アラルガンド The Animation","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%82%a2%e3%83%a9%e3%83%ab%e3%82%ac%e3%83%b3%e3%83%89-the-animation/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1esgqjq1o02j20zk0k00wn.jpg","magnet":["414a5793750348c6d3d284caea2e3ec7a99acd4e"]}{"title":"[ピンクパイナップル] 新・聖ヤリマン学園援交日記 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%96%b0%e3%83%bb%e8%81%96%e3%83%a4%e3%83%aa%e3%83%9e%e3%83%b3%e5%ad%a6%e5%9c%92%e6%8f%b4%e4%ba%a4%e6%97%a5/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/FvzXsco.jpg","magnet":["2b1211e3b13dbd5e4283a25f9d8e119c09c9007739"]}{"title":"[ピンクパイナップル]聖女「聖女のように清らかで、婦のようにらに…」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e8%81%96%e5%a5%b3%e3%80%8c%e8%81%96%e5%a5%b3%e3%81%ae%e3%82%88%e3%81%86%e3%81%ab%e6%b8%85%e3%82%89%e3%81%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/bvjaViI.jpg","magnet":["169c16c60e906aecff9cb9f0e98138a6bccc11dd"]}{"title":"[ピンクパイナップル]ランス01 光をもとめて THE ANIMATION 第2話「進行!! リーザス中枢」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%a9%e3%83%b3%e3%82%b901-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8%e3%82%81%e3%81%a6-the-animation-%e7%ac%ac2/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1etl79er7a7j20zk0k0acq.jpg","magnet":["1E5325A6CC7A45A12ECC97746DCE57B63191DCC5"]}{"title":"[ピンクパイナップル] LOVELY×CATION THE ANIMATION #2「初恋の日々、再び」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-lovelyxcation-the-animation-%ef%bc%832%e3%80%8c%e5%88%9d%e6%81%8b%e3%81%ae%e6%97%a5%e3%80%85%e3%80%81%e5%86%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1euhmhpfz97j20zk0k0dj0.jpg","magnet":["3f42b9d1dd6294c563ed96cf5c38cfcb9f762f97"]}{"title":"[ピンクパイナップル] 学園の生贄――慰み者と化した巨乳不良少女~白濁に侵される褐色&堕肉の狂宴~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%ad%a6%e5%9c%92%e3%81%ae%e7%94%9f%e8%b4%84%e2%80%95%e2%80%95%e6%85%b0%e3%81%bf%e8%80%85%e3%81%a8%e5%8c%96/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eul6xbth2fj20fk09qaco.jpg","magnet":["AA9530C1C919A58882BA973D75FF693E6677E52B"]}{"title":"[ピンクパイナップル] 逆転魔女裁判 ~痴女な魔女に裁かれちゃう~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e9%80%86%e8%bb%a2%e9%ad%94%e5%a5%b3%e8%a3%81%e5%88%a4-%ef%bd%9e%e7%97%b4%e5%a5%b3%e3%81%aa%e9%ad%94%e5%a5%b3/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1evn6245cbmj20jg0b4tbd.jpg","magnet":["7BE8361D17CEE3998191CB0CF964AEED10FB0F8B"]}{"title":"[メリー・ジェーン] 少女教育 雛田麻未編 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%b0%91%e5%a5%b3%e6%95%99%e8%82%b2-%e9%9b%9b%e7%94%b0%e9%ba%bb%e6%9c%aa%e7%b7%a8-1-2/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eu77ui978hj20zk0k0di7.jpg","magnet":["9b68d1a805f1799d7ec179e59e4142bf83dcbe28"]}{"title":"[@factory-EX]絶頂の彼方EX 愛玩少女は傷つかないEX トモきゅーと!EX トモきゅーと!EX","link":"http://www.llss.cool/wp/all/anime/factory-ex%e7%b5%b6%e9%a0%82%e3%81%ae%e5%bd%bc%e6%96%b9ex-%e6%84%9b%e7%8e%a9%e5%b0%91%e5%a5%b3%e3%81%af%e5%82%b7%e3%81%a4%e3%81%8b%e3%81%aa%e3%81%84ex-%e3%83%88%e3%83%a2%e3%81%8d%e3%82%85%e3%83%bc/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f3pg72gpx1j20mt0asn0k.jpg","magnet":["12C55CD0F97C4979979A8A4B7DA1369E42136E0E","308E881FB95DC7D1AF16B0873E80276F48538682","B8D57B3132056036C7511BBA5DFF09143A230894","00C3B8C46E95FD9DFCB9EC0B56775B92BCA33B87"]}{"title":"[メリー・ジェーン] いいなり!催眠彼女(1-2) ~隷属洗脳・生ハメ性活!!~ 下巻 生意気な妹への処方箋","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%84%e3%81%84%e3%81%aa%e3%82%8a%ef%bc%81%e5%82%ac%e7%9c%a0%e5%bd%bc%e5%a5%b3%ef%bc%881-2%ef%bc%89-%ef%bd%9e%e9%9a%b7/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1es2v670qytj20zk0k0gon.jpg","magnet":["0A1D98AF4D3EE063C7E8F2EF2E2BBF9A2FD11FA8","141AB5FBA47E5B64F5E7627FB1E6C96126A82613","0BC7F8491D25ABA63980CB0FCF276B4C9A89A3E7"]}{"title":"[澄空学园&华盟字幕社][非H]甲铁城的卡巴内瑞 第04话 流动的血潮","link":"http://www.llss.cool/wp/all/anime/%e6%be%84%e7%a9%ba%e5%ad%a6%e5%9b%ad%e5%8d%8e%e7%9b%9f%e5%ad%97%e5%b9%95%e7%a4%be%e9%9d%9eh%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e7%91%9e-%e7%ac%ac04%e8%af%9d-%e6%b5%81/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["b7c958f5599c7c7084ffe4ddb3d1d18ecc06f7a7"]}{"title":"[メリー・ジェーン] 女子高生の腰つき(1-6) 演劇部編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%a5%b3%e5%ad%90%e9%ab%98%e7%94%9f%e3%81%ae%e8%85%b0%e3%81%a4%e3%81%8d%ef%bc%881-6%ef%bc%89-%e6%bc%94%e5%8a%87%e9%83%a8/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ertlx3bdi8j20zk0k0adr.jpg","magnet":["14e1d5c8633de150ae0a9e8e40139d9023a252be"]}{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【05】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9005%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["45NWCDRDKN32YXBXGCHIJVTOQY5A56WF"]}{"title":"[非H]火影忍者疾风传:鼬真传篇~光与暗~","link":"http://www.llss.cool/wp/all/anime/%e9%9d%9eh%e7%81%ab%e5%bd%b1%e5%bf%8d%e8%80%85%e7%96%be%e9%a3%8e%e4%bc%a0%ef%bc%9a%e9%bc%ac%e7%9c%9f%e4%bc%a0%e7%af%87%ef%bd%9e%e5%85%89%e4%b8%8e%e6%9a%97%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/50da81cb39dbb6fda332334a0e24ab18972b3775.jpg","magnet":["e3a1c3e7866f2e42084cdac0c518365ce954feb8"]}{"title":"疑似新田惠海第二部AV销售","link":"http://www.llss.cool/wp/all/anime/%e7%96%91%e4%bc%bc%e6%96%b0%e7%94%b0%e6%83%a0%e6%b5%b7%e7%ac%ac%e4%ba%8c%e9%83%a8av%e9%94%80%e5%94%ae/","img":"http://ww1.sinaimg.cn/mw690/67aeb6d9gw1f3wztm8eamj20m40dndqf.jpg","magnet":["E193A0B9CD94AFFE8BB542111CB12E6F2B362C48"]}{"title":"[survive] ムチムチJKといつでも中出しして孕ませOKの学校","link":"http://www.llss.cool/wp/all/anime/survive-%e3%83%a0%e3%83%81%e3%83%a0%e3%83%81jk%e3%81%a8%e3%81%84%e3%81%a4%e3%81%a7%e3%82%82%e4%b8%ad%e5%87%ba%e3%81%97%e3%81%97%e3%81%a6%e5%ad%95%e3%81%be%e3%81%9bok%e3%81%ae%e5%ad%a6%e6%a0%a1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f3xhu4961ij20m80dw79q.jpg","magnet":["[ANIME]653ee539121c5d05d69c0129cbf2783423064c2a","[CG]dc86d3f6194d7836ba968b1f7df44f9b2190bf71"]}{"title":"[Queen Bee]私は、快楽依存症 2[弥美津ヒロ][附前作]","link":"http://www.llss.cool/wp/all/anime/queen-bee%e7%a7%81%e3%81%af%e3%80%81%e5%bf%ab%e6%a5%bd%e4%be%9d%e5%ad%98%e7%97%87-2%ef%bc%bb%e5%bc%a5%e7%be%8e%e6%b4%a5%e3%83%92%e3%83%ad%ef%bc%bd%e9%99%84%e5%89%8d%e4%bd%9c/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f42evcctuvj20ze0jtdhb.jpg","magnet":["91AA8F072EA99951EF43E436E0F2755AF9E6B45B"]}{"title":"[桜都字幕组][ばにぃうぉ~か~]OVA 恥辱の制服 #1 明美と香純(双语字幕)","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e6%81%a5%e8%be%b1%e3%81%ae%e5%88%b6%e6%9c%8d-1-%e6%98%8e%e7%be%8e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c894568sample1.jpg","magnet":["8DD7B4E0108A4E32BD81D1E54A651BE5C86BC652"]}{"title":"生肉:[メリー・ジェーン]都市伝説シリーズ 其の弐ェ 呪いのビデオ","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%a1%e3%83%aa%e3%83%bc%ef%bd%a5%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c893080sample6.jpg","magnet":["F95B104BB14FC6B11CE57E82A8D25887B1DC2CA4"]}{"title":"生肉:ヌーディストビーチに修学旅行で!! THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%8c%e3%83%bc%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%93%e3%83%bc%e3%83%81%e3%81%ab%e4%bf%ae%e5%ad%a6%e6%97%85%e8%a1%8c%e3%81%a7-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/1-2.jpg","magnet":["6310BFCB04CB67CA238BA663F123F66423D09733"]}{"title":"生肉:[Collaboration Works] バカな妹を利口にするのは俺の××だけな件について アイスも大好き!! 御津井芭華 下のお口で頬張っちゃうぞ編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9acollaboration-works-%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aexx%e3%81%a0/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c903577sample16.jpg","magnet":["6F77E0ED44817D47735ED8347093134548A38B2E"]}{"title":"生肉:[PoRO] 氷堂伊吹 ~完璧伊吹会長が拘束ドMな理由~ 「クールドM・伊吹会長の妄迫溜イキ」 初回限定版","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89poro-%e6%b0%b7%e5%a0%82%e4%bc%8a%e5%90%b9-%ef%bd%9e%e5%ae%8c%e7%92%a7%e4%bc%8a%e5%90%b9%e4%bc%9a%e9%95%b7%e3%81%8c%e6%8b%98%e6%9d%9f%e3%83%89m%e3%81%aa%e7%90%86%e7%94%b1%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160528160947.png","magnet":["B457D8A45476CD88946973EF574C571DD09C9B86","049D9960837F4BA38395AE6D3020BE22B8F8B27E"]}{"title":"[桜都字幕组][PoRO]氷堂伊吹~完璧伊吹会長が拘束ドMな理由~「クールドM・伊吹会長の妄迫溜イキ」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e6%b0%b7%e5%a0%82%e4%bc%8a%e5%90%b9%ef%bd%9e%e5%ae%8c%e7%92%a7%e4%bc%8a%e5%90%b9%e4%bc%9a%e9%95%b7%e3%81%8c%e6%8b%98%e6%9d%9f%e3%83%89m%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160528160947.png","magnet":["04B7EECDC6C01C0F74553DD061D0CA7F6527CD35"]}{"title":"[桜都字幕组][ピンクパイナップル]ヌーディストビーチに修学旅行で!! THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%8c%e3%83%bc%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%93/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/1-2.jpg","magnet":["3D3775282951C94D0ABCBA658FACAFBA4F636C88"]}{"title":"[桜都字幕组][Collaboration Works]バカな妹を利口にするのは俺の××だけな件イスも大好き!芭華下のお口で頬ゃうぞ編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aex/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c903577sample16.jpg","magnet":["73185B83805ECF3A4E22E33B255ABEC24D132988","[collaborationworks]"]}{"title":"[桜都字幕组] [メリー・ジェーン]都市伝説シリーズ 其の弐 ェ呪いのビデオ","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84-%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c893080sample6.jpg","magnet":["88FD7FB1E15169108F7D648676BF762C125CE625"]}{"title":"2016年6月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c898731sample5.jpg","magnet":null}{"title":"[メリー・ジェーン] 夜這いする七人の孕女 (1-2) 下巻 当主の花嫁","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%a4%9c%e9%80%99%e3%81%84%e3%81%99%e3%82%8b%e4%b8%83%e4%ba%ba%e3%81%ae%e5%ad%95%e5%a5%b3-1-2-%e4%b8%8b%e5%b7%bb-%e5%bd%93/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eqfz54atopj20vo0ht75r.jpg","magnet":["a9c27d86b726614fa682fa49c89449a88270039f","587e49d6b4708f0d29792d84314ea3643078f97f","ab3ec5248dc7daf6868d876a5956ee134b28b7b4","821347775343a0b1d29f3ed41bcd647844f79ee3"]}{"title":"[Queen Bee]ピスはめ! 4 (1-4) OVA 附漫画","link":"http://www.llss.cool/wp/all/comic/queen-bee%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-4-1-4-ova-%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/EaF5H.jpg","magnet":["M3AVQVWPRI4T6K644ZOWWCPUJM754NZR"]}{"title":"[メリー・ジェーン] すぽコン!(1-2)~SPORTS WEAR-COMPLEX~ 下巻 決着!?コーチ争奪戦","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%99%e3%81%bd%e3%82%b3%e3%83%b3%ef%bc%811-2%ef%bd%9esports-wear-complex%ef%bd%9e-%e4%b8%8b%e5%b7%bb-%e6%b1%ba%e7%9d%80/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/JBa8dIc.jpg","magnet":["3ebd9a65c124f68283048c819293a8ae0d11820d"]}{"title":"[Queen Bee] 私が虜になって犯る (1-2) [井雲泰助]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a7%81%e3%81%8c%e8%99%9c%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e7%8a%af%e3%82%8b-1-2-%e4%ba%95%e9%9b%b2%e6%b3%b0%e5%8a%a9/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ey1tg3rl8nj20zk0k0779.jpg","magnet":["89d49802af551864a5a00b149fc882ab6ccc5258"]}{"title":"[Queen Bee]ふた部!MIX(1-5) ~ふたなりワールド~","link":"http://www.llss.cool/wp/all/anime/queen-bee%e3%81%b5%e3%81%9f%e9%83%a8%ef%bc%81mix%ef%bc%881-5%ef%bc%89-%ef%bd%9e%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%83%af%e3%83%bc%e3%83%ab%e3%83%89%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1etww741d6vj20zk0k079e.jpg","magnet":["53b5596bc69332cde12aa524298024086531af4c"]}{"title":"[Queen Bee] 純愛まにあっく 1 ~Pure Love Maniac~","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%b4%94%e6%84%9b%e3%81%be%e3%81%ab%e3%81%82%e3%81%a3%e3%81%8f-1-%ef%bd%9epure-love-maniac%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1er9xha6tjej20zk0k0wis.jpg","magnet":["b94514b966896d64cf7fa6018af3b0eb4d967146"]}{"title":"[Queen Bee] えろまめ (1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%88%e3%82%8d%e3%81%be%e3%82%81-1-2/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eqyev2i8i8j20np0dc75e.jpg","magnet":["2116954f58d9066c1eb868271cb3cc3e19fdbd07","ee0a872c86decf5eb6a587eb7924e572180ddc0c"]}{"title":"[king Bee] およめさまHONEYDAYS(1-2)[TANA]","link":"http://www.llss.cool/wp/all/anime/king-bee-%e3%81%8a%e3%82%88%e3%82%81%e3%81%95%e3%81%behoneydays%ef%bc%881-2%ef%bc%89tana/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eqh5mxl9pmj20dw08g76c.jpg","magnet":["ff2f7ec055fe85c620323d90cd30c6ee2243a5fe","85fb94d08a00c66961f1946d1590468a6b6c35fc","8424f36d21a879522c380d584415d0a6892d4dc2"]}{"title":"[Queen Bee] 穴の奥のいい秘部(ところ)(1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a9%b4%e3%81%ae%e5%a5%a5%e3%81%ae%e3%81%84%e3%81%84%e7%a7%98%e9%83%a8%ef%bc%88%e3%81%a8%e3%81%93%e3%82%8d%ef%bc%89%ef%bc%881-2%ef%bc%89/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1epbi8bomr9j20zk0k0774.jpg","magnet":["aa5862b47f58d68db05692a804907913ee9141d9","adc319aa8744a2f7d8e7f589879c6906f33ab8ac","b259f6b3371b3aab80fcfd80ebd6f364b9f1d2de"]}{"title":"[Queen Bee]OVA ピスはめ! 5 (1-5)","link":"http://www.llss.cool/wp/all/anime/queen-beeova-%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-5-%ef%bc%881-5%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/UoO5a.jpg","magnet":["dddeb25d0ad21fcfd2a402708f65c9058a2cf0b6"]}{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【06-07】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9005-07%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["1e2f47df9e7a7d375ba43b7429e9cb65ac3d45c3","bb726e3e02b454dff899376c75e404cce13c469a"]}{"title":"[魔穗字幕组]2016年5月作品合集","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b45%e6%9c%88%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/2-1.png","magnet":["762F82884A1E6F3C41DB7B8D49663C44A8DE8C27"]}{"title":"[メリー・ジェーン] 乳色吐息 下巻 妹に兄の威厳を見せつけろ","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e4%b9%b3%e8%89%b2%e5%90%90%e6%81%af-%e4%b8%8b%e5%b7%bb-%e5%a6%b9%e3%81%ab%e5%85%84%e3%81%ae%e5%a8%81%e5%8e%b3%e3%82%92/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/fjjSPoc.jpg","magnet":["9053f9d398031c141a4284160aff9f3d7907ef36"]}{"title":"[Queen Bee] OVA ピスはめ! 6(1-6)","link":"http://www.llss.cool/wp/all/anime/queen-bee-ova-%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-6%ef%bc%881-6%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/JX9QdXa.jpg","magnet":["a14aee45fd546f9be313f086522656b32c4c07a2"]}{"title":"[メリー・ジェーン]My妹~小悪魔なAカップ~ 上巻 お兄ちゃんなんて大嫌い!?","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3my%e5%a6%b9%ef%bd%9e%e5%b0%8f%e6%82%aa%e9%ad%94%e3%81%aaa%e3%82%ab%e3%83%83%e3%83%97%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e3%81%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c726673sample1.jpg","magnet":["C2FD96F7F7CCAC699AD18BFF661C542776F65D20"]}{"title":"[Queen Bee]ピスはめ! 3 (1-3) OVA 附漫画","link":"http://www.llss.cool/wp/all/comic/queen-bee%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-3-1-3-ova-%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/4bab3bccjw1enhqx0vok2j20bj07qjtd.jpg","magnet":["E1C129B86999C68F83540FB9035596ED9065E924"]}{"title":"[Queen Bee] えろまめ 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%88%e3%82%8d%e3%81%be%e3%82%81-1/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1enhqdzv832j20np0dc409.jpg","magnet":["b470bd52f635677e1846c19f4c2f669b764eadcc"]}{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【08】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9008%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["7d6ee8a766a2927919394db004afd25407c695ae"]}{"title":"生肉:[chippai]なま LO Re なまけもの(No Watermark)","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%aa%e3%81%be-lo-re-%e3%81%aa%e3%81%be%e3%81%91%e3%82%82%e3%81%aeno-watermark/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c898731sample5.jpg","magnet":["E22FF1DB1391422E6D00C0D089BF3D5C76A8BFDA"]}{"title":"[熟肉][chippai]なま LO Re なまけもの","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e3%81%aa%e3%81%be-lo-re-%e3%81%aa%e3%81%be%e3%81%91%e3%82%82%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c898731sample5.jpg","magnet":["ABDC87FECD9F584C4354C9CD1DD2DF18BD572F45"]}{"title":"[Queen Bee] 穴の奥のいい秘部(ところ) 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a9%b4%e3%81%ae%e5%a5%a5%e3%81%ae%e3%81%84%e3%81%84%e7%a7%98%e9%83%a8%ef%bc%88%e3%81%a8%e3%81%93%e3%82%8d%ef%bc%89-1/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1en9jlk0ez8j20np0dcq4i.jpg","magnet":["12a33a9e8447dc5e32f328946d848990d707fc6a"]}{"title":"[King Bee] OVA およめさまHONEYDAYS 1","link":"http://www.llss.cool/wp/all/anime/king-bee-ova-%e3%81%8a%e3%82%88%e3%82%81%e3%81%95%e3%81%behoneydays-1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1emxwtv2j1yj20np0dcq4d.jpg","magnet":["e4a29292717b3183db8ae20bcf3ed4bb601e47d2"]}{"title":"[Queen Bee] こんなに優しくされたの 3 (1-3)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%84%aa%e3%81%97%e3%81%8f%e3%81%95%e3%82%8c%e3%81%9f%e3%81%ae-3-1-3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1emoqc2ih3tj20np0dc3zv.jpg","magnet":["4411def87eff5c40c500ba8707bf56b88fe9f357"]}{"title":"[Queen Bee] OVA らぶコロン 2","link":"http://www.llss.cool/wp/all/anime/queen-bee-ova-%e3%82%89%e3%81%b6%e3%82%b3%e3%83%ad%e3%83%b3-2/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1em4ymxtkdwj20np0dcdh3.jpg","magnet":["079397a49aa9b5acfe76ad09ffdbb65b9d5526c0"]}{"title":"[メリー・ジェーン] 乳色吐息 上巻 幼なじみに男を刻め","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e4%b9%b3%e8%89%b2%e5%90%90%e6%81%af-%e4%b8%8a%e5%b7%bb-%e5%b9%bc%e3%81%aa%e3%81%98%e3%81%bf%e3%81%ab%e7%94%b7%e3%82%92/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/ID6Vl6H.jpg","magnet":["1C2A9D60CC535350902C1CCF42D2C2B0A4E2E66C"]}{"title":"[Queen Bee]こんなに優しくされたの 2 (1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%84%aa%e3%81%97%e3%81%8f%e3%81%95%e3%82%8c%e3%81%9f%e3%81%ae-2-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/vxSbHsY.jpg","magnet":["80e75f80d04b8809d7e4fb54b5ee690aa253e894"]}{"title":"[Queen Bee] OVA らぶコロン 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-ova-%e3%82%89%e3%81%b6%e3%82%b3%e3%83%ad%e3%83%b3-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/3fUKVDx.jpg","magnet":["15da5j6861a1fe35874ab3c4aea75f4b700b14hcf2d0c"]}{"title":"[Queen Bee] こんなに優しくされたの 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%84%aa%e3%81%97%e3%81%8f%e3%81%95%e3%82%8c%e3%81%9f%e3%81%ae-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/P4Xbppx.jpg","magnet":["18991becdb4ee38a2348500f94f2d29e224c1818fc97"]}{"title":"[Queen Bee]イマコシステム II ~イマコさんと薬物学編~","link":"http://www.llss.cool/wp/all/anime/queen-bee%e3%82%a4%e3%83%9e%e3%82%b3%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0-ii-%ef%bd%9e%e3%82%a4%e3%83%9e%e3%82%b3%e3%81%95%e3%82%93%e3%81%a8%e8%96%ac%e7%89%a9%e5%ad%a6%e7%b7%a8%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/InozTIw.jpg","magnet":["55DF5335D82E9E78EAEA3A478BFE3668C1BA63E36B"]}{"title":"[Queen Bee] たゆたゆ #4","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%9f%e3%82%86%e3%81%9f%e3%82%86-%ef%bc%834/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/63Fli1i.jpg","magnet":["B23D58CC3CC06573122EC6B3395EE973EC98DCBA"]}{"title":"[Queen Bee] イマコシステム I ~イマコさんとイチナくん~","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%82%a4%e3%83%9e%e3%82%b3%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0-i-%ef%bd%9e%e3%82%a4%e3%83%9e%e3%82%b3%e3%81%95%e3%82%93%e3%81%a8%e3%82%a4%e3%83%81%e3%83%8a%e3%81%8f%e3%82%93%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/6kvW5Be.jpg","magnet":["8dfa9e025b8bfba072d5b925dea9207c915ea5c5"]}{"title":"[Queen Bee] たゆたゆ #3 (1-3)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%9f%e3%82%86%e3%81%9f%e3%82%86-%ef%bc%833-1-3/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/1nqX07p.jpg","magnet":["B23D58CC3CC06573122EC6B3395EE973EC98DCBA"]}{"title":"【生肉】[EDGE](エッジ) えなじぃキョーカ!! ヌキサポ編 第2巻","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89-%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab%ef%bc%81%ef%bc%81-%e3%83%8c%e3%82%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c893656table2.jpg","magnet":["28CEDCDE1B273087FAA1DD50BC25F7AE4FFE27BF"]}{"title":"[EDGE(エッジ)]えなじぃキョーカ!! ヌキサポ編 第2巻[附前作]","link":"http://www.llss.cool/wp/all/anime/edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab%ef%bc%81%ef%bc%81-%e3%83%8c%e3%82%ad%e3%82%b5%e3%83%9d%e7%b7%a8-%e7%ac%ac2/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f4r7nmdjntj30ze0jw764.jpg","magnet":["8193437D8314176A3A60471C4794614EB4A0F6D2"]}{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【09】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9009%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":null}{"title":"【少女映画】Sex Friend 系列合集 1-18","link":"http://www.llss.cool/wp/all/comic/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-friend-%e7%b3%bb%e5%88%97%e5%90%88%e9%9b%86-1-18/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f4twch9590j20m80go436.jpg","magnet":["05909fcc429404bd51bee9e705a0a57665b36359","04d9538c66ffe7519eb43a388c3ce67c606a442a","f1a42865537a0bb5e56b323f15c490d46517ac11","ef394f0cfdc62b2b1a8a8aa2e445aa1a45eeea51","d8ab45808d6abf5e3f4f79f5b2eea65eead1e19d","6474ec20456b00a193e7792696a705137427132d","f2f293ec6a8599b9f6694b634e2a948234bb3499","720734f6fe732563cf2400b268213f4e2791aca6","ecbd58344e19ff911f758e345882e745956c8026","749c7155c3ba5f5e2ee93f041382be087ca7d83e","e0f1e967637bfbe7d7b6bfa0cfe229ef91e2e466","d925fbb5c1c4c6626b33d75c1971f4ad527ae123","4e127527ffccc5aaf025b62850acfa377a76adfe","609b6a94bb9817ad165de050cca30a8c30e28185","2ebe458a71f48cccbfabb8327b63ae930e67290c","1aea1da84acd1102277eb2a81bde030391af3277","38403af376f62d81ca04a000c16a26a9f490b38e","f298e22509425e493a49d38b8b548b1a6111f449","cd8e01dd5fd1a5960164877f309d62a20a07c19f"]}{"title":"[中字]極楽看護+ほすぴたる[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e4%b8%ad%e5%ad%97%e6%a5%b5%e6%a5%bd%e7%9c%8b%e8%ad%b7%e3%81%bb%e3%81%99%e3%81%b4%e3%81%9f%e3%82%8bbig5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f4v8bb4pu7j20m80goq3m.jpg","magnet":["2FF32F23BA54674E8CFBA"]}{"title":"[seismic] 狼少女といっしょ","link":"http://www.llss.cool/wp/all/game/seismic-%e7%8b%bc%e5%b0%91%e5%a5%b3%e3%81%a8%e3%81%84%e3%81%a3%e3%81%97%e3%82%87/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f4xc1b59kuj20xp0ivdi3.jpg","magnet":["ad3322e328b03d274d4dd40bb6078ceccf7e8189","\\Liru\\Content\\XML\\cut\\"]}{"title":"[@OZ]舞 リョナ陵辱の輪舞曲(ロンド)[中字]","link":"http://www.llss.cool/wp/all/anime/oz%e8%88%9e-%e3%83%aa%e3%83%a7%e3%83%8a%e9%99%b5%e8%be%b1%e3%81%ae%e8%bc%aa%e8%88%9e%e6%9b%b2%e3%83%ad%e3%83%b3%e3%83%89%e4%b8%ad%e5%ad%97/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f4zi6wvadgj20q30eo0wi.jpg","magnet":["A65842DB189E26AE618990940"]}{"title":"[Queen Bee] 絶頂ロケット 発射2発目 (1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%b5%b6%e9%a0%82%e3%83%ad%e3%82%b1%e3%83%83%e3%83%88-%e7%99%ba%e5%b0%842%e7%99%ba%e7%9b%ae-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/k1TtUMu.jpg","magnet":["243f54459c5aeb40cba08f5499d5530e48f690ad","08a1f45837611d7b890fd036449713639c00e54e"]}{"title":"[Queen Bee] たゆたゆ #2 (1-2)","link":"http://www.llss.cool/wp/all/anime/httphacg-lawpwp-contentuploads201606k1ttumu-jpg/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/EKXdatG.jpg","magnet":["c7a08a0c116b20c6f8030a144df9684a94c01b8f"]}{"title":"[Queen Bee] 絶頂ロケット 発射1発目","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%b5%b6%e9%a0%82%e3%83%ad%e3%82%b1%e3%83%83%e3%83%88-%e7%99%ba%e5%b0%841%e7%99%ba%e7%9b%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/QQ图片20160619010343.png","magnet":["43120ac7d22072dad6cab19fb5407e4db0f2912c","19798d1ce3606e85b911e584cba79cb7b1636590"]}{"title":"[Queen Bee] たゆたゆ #1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%9f%e3%82%86%e3%81%9f%e3%82%86-%ef%bc%831/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/63Fli1i.jpg","magnet":["573a9698d1692113addac4443478be21074ecc4d"]}{"title":"[Queen Bee]OVA 生膣ひゃくぱぁせんと!固結びのシンパ くぱぁ(1-3)附漫画","link":"http://www.llss.cool/wp/all/comic/queen-beeova-%e7%94%9f%e8%86%a3%e3%81%b2%e3%82%83%e3%81%8f%e3%81%b1%e3%81%81%e3%81%9b%e3%82%93%e3%81%a8%ef%bc%81%e5%9b%ba%e7%b5%90%e3%81%b3%e3%81%ae%e3%82%b7%e3%83%b3%e3%83%91-%e3%81%8f%e3%81%b1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eykhtxi7ugj20el0a20ty.jpg","magnet":["904b9340a05dba458fc8cd3b97a2f061eb1b8ba1"]}{"title":"[メリー・ジェーン] 虜ノ契~ 家族のために身体を差し出す姉と妹~下巻 姉妹の絆 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e8%99%9c%e3%83%8e%e5%a5%91%ef%bd%9e-%e5%ae%b6%e6%97%8f%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ab%e8%ba%ab%e4%bd%93%e3%82%92/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/QKbwDBz.jpg","magnet":["4392c6ac15f70cc9abc7f465c96cab2b0bea5ed6","4a9ac5e350357d77d069c6491f1c6740ffe6344e"]}{"title":"[メリー・ジェーン] てにおはっ!(1-2) ~女の子だってホントはえっちだよ?~ 下巻 女友達と、いつでもどこでも","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%a6%e3%81%ab%e3%81%8a%e3%81%af%e3%81%a3%ef%bc%811-2-%ef%bd%9e%e5%a5%b3%e3%81%ae%e5%ad%90%e3%81%a0%e3%81%a3%e3%81%a6/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/mkbSJr5.jpg","magnet":["B3WSTJ6CWYV7BZKKCG3DKBYO3DE2BDND"]}{"title":"[メリー・ジェーン] My妹~小悪魔なAカップ~ 下巻 お兄ちゃんに夢中だよ","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-my%e5%a6%b9%ef%bd%9e%e5%b0%8f%e6%82%aa%e9%ad%94%e3%81%aaa%e3%82%ab%e3%83%83%e3%83%97%ef%bd%9e-%e4%b8%8b%e5%b7%bb-%e3%81%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/6SipW.jpg","magnet":["23fd9ac0aee6fb45acc150824e4f0b5815f4fa2a"]}{"title":"[メリー・ジェーン]Brandish 第2话 勇者退治しちゃいます (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3brandish-%e7%ac%ac2%e8%af%9d-%e5%8b%87%e8%80%85%e9%80%80%e6%b2%bb%e3%81%97%e3%81%a1%e3%82%83%e3%81%84%e3%81%be%e3%81%99/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/Sk0gP.jpg","magnet":["58b1d398f65ccb51826a6873b8c125863b70fa12"]}{"title":"[GOLD BEAR]ケダモノ(家族)たちの住む家で (1-2) ~勝 編~ 大嫌いな最低家族と彼女との寝取られ同居生活","link":"http://www.llss.cool/wp/all/anime/gold-bear%e3%82%b1%e3%83%80%e3%83%a2%e3%83%8e%ef%bc%88%e5%ae%b6%e6%97%8f%ef%bc%89%e3%81%9f%e3%81%a1%e3%81%ae%e4%bd%8f%e3%82%80%e5%ae%b6%e3%81%a7-1-2-%ef%bd%9e%e5%8b%9d-%e7%b7%a8%ef%bd%9e-%e5%a4%a7/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ey8ue5wv8sj20zk0k0wh8.jpg","magnet":["c5291f47261c019296354ca24f63e5534579272a"]}{"title":"[PoRO] 螺旋遡行のディストピア (1-2) 「絡まり合う触手・美羽 ~搾られ捻るふたなり巨乳~」继续阅读 →","link":"http://www.llss.cool/wp/all/anime/poro-%e8%9e%ba%e6%97%8b%e9%81%a1%e8%a1%8c%e3%81%ae%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%94%e3%82%a2-1-2-%e3%80%8c%e7%b5%a1%e3%81%be%e3%82%8a%e5%90%88%e3%81%86%e8%a7%a6%e6%89%8b%e3%83%bb/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eyguvp7m2jj20zk0k0td1.jpg","magnet":["a3c0d8c1bdb41462031b9520a164d5282909e24d","a3c0d8c1bdb41462031b9520a164d5282909e24d"]}{"title":"[魔人]euphoria (1-5)~地下の戦慄ゲーム、地上のスカトロ地獄。笑う黒幕は……幼なじみ!?編~","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%baeuphoria-1-5%ef%bd%9e%e5%9c%b0%e4%b8%8b%e3%81%ae%e6%88%a6%e6%85%84%e3%82%b2%e3%83%bc%e3%83%a0%e3%80%81%e5%9c%b0%e4%b8%8a%e3%81%ae%e3%82%b9%e3%82%ab%e3%83%88%e3%83%ad%e5%9c%b0/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eykfw3km19j20zk0k0gnx.jpg","magnet":["28d271a9fa3502d4fc16b493ab612ee8bb50c648"]}{"title":"[桜都字幕组][Queen Bee]放課後Initiation VOL.1","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queen-bee%e6%94%be%e8%aa%b2%e5%be%8cinitiation-vol-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ%E5%9B%BE%E7%89%8720160529213012.png","magnet":["F2B77C37980624D3EC95595498B693B9EB84710D","[collaborationworks]"]}{"title":"[桜都字幕组][ばにぃうぉ~か~]OVA 恥辱の制服 #2 三人目の獲物 (双语字幕)","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e6%81%a5%e8%be%b1%e3%81%ae%e5%88%b6%e6%9c%8d-2-%e4%b8%89%e4%ba%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/QQ图片20160619001548.png","magnet":["1112D63E7950B393D65BF1D3DBCB6348FB082314"]}{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【10】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9010%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["88a9df4284d5f5bf9ba8258bfa0bffc53ed6cd64"]}{"title":"[ピンクパイナップル ] 炎の孕ませもっと!発育っ!身体測定2 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e3%82%82%e3%81%a3%e3%81%a8%ef%bc%81%e7%99%ba%e8%82%b2%e3%81%a3/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eymmnlrrhnj20zk0k0q75.jpg","magnet":["2c536991a12625440d1bdd0fb013e3791524f507"]}{"title":"[サークルトリビュート ]奥様は元ヤリマン (1-2)第二巻","link":"http://www.llss.cool/wp/all/anime/%e3%82%b5%e3%83%bc%e3%82%af%e3%83%ab%e3%83%88%e3%83%aa%e3%83%93%e3%83%a5%e3%83%bc%e3%83%88-%e5%a5%a5%e6%a7%98%e3%81%af%e5%85%83%e3%83%a4%e3%83%aa%e3%83%9e%e3%83%b3-%ef%bc%881-2%ef%bc%89%e7%ac%ac/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eynwnp6g13j20jq0b40wo.jpg","magnet":["260f948d820eab8962b432b4719e438b1d336795"]}{"title":"[BOOTLEG] 娘ワレモノ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/bootleg-%e5%a8%98%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e-the-animation/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eyq65sy462j20zk0k0di5.jpg","magnet":["043dc907c625c20d3f1f6f325dc649448b7c1b2d"]}{"title":"[メリー・ジェーン ] 闘技場の戦姫~another story~ 上巻 すべてを捧げた戦姫","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e9%97%98%e6%8a%80%e5%a0%b4%e3%81%ae%e6%88%a6%e5%a7%ab%ef%bd%9eanother-story%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e3%81%99%e3%81%b9/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eytkp09zalj20np0dctat.jpg","magnet":["6bcb77ceef07c95bda450a3296ae9ff38d915ee9"]}{"title":"[WHITE BEAR] 輪姦媚薬中毒 後編 (1-2) ~逃げ場無し!1428人の生徒全員にSEXされる令嬢沙也香~","link":"http://www.llss.cool/wp/all/anime/white-bear-%e8%bc%aa%e5%a7%a6%e5%aa%9a%e8%96%ac%e4%b8%ad%e6%af%92-%e5%be%8c%e7%b7%a8-1-2-%ef%bd%9e%e9%80%83%e3%81%92%e5%a0%b4%e7%84%a1%e3%81%97%ef%bc%811428%e4%ba%ba%e3%81%ae%e7%94%9f%e5%be%92/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eyus3movohj20zk0k0tbm.jpg","magnet":["b732f4f86099c2585472e631accb3749813152d6"]}{"title":"[yosino] 村","link":"http://www.llss.cool/wp/all/anime/yosino-%e6%9d%91/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eyvvo4wwkwj20za0js79z.jpg","magnet":["612ef07a46befa359a98789fea1c1335b986c42c"]}{"title":"[151113][Studio Fow]Kunoichi 2[中字]","link":"http://www.llss.cool/wp/all/anime/151113studio-fowkunoichi-2%e4%b8%ad%e5%ad%97/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eyxb8m5gzcj20zk0k00uc.jpg","magnet":["3f98f8204aed94dff46a5718a41717ff1f17a0cf"]}{"title":"孔中窥得真理之貌 1-13 汉化全集+OVA","link":"http://www.llss.cool/wp/all/comic/%e5%ad%94%e4%b8%ad%e7%aa%a5%e5%be%97%e7%9c%9f%e7%90%86%e4%b9%8b%e8%b2%8c-1-13-%e6%b1%89%e5%8c%96%e5%85%a8%e9%9b%86ova/","img":"http://ww1.sinaimg.cn/mw690/8c007b5cjw1eyz3oxkpbzj21kw28uqmg.jpg","magnet":["3KU63BYD6PY3DHVS2OCZN3DNQCOVMYWE","F2QVE2Q6EQQ7L7KX7XT7FQ6IT7HXUFRU"]}{"title":"[夜桜字幕组]2015年11月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842015%e5%b9%b411%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ez0ks0yqvij20qo0f0gnp.jpg","magnet":["dc75c442463749e9b2eab"]}{"title":"[erozuki] OVA ツンプリ","link":"http://www.llss.cool/wp/all/anime/erozuki-ova-%e3%83%84%e3%83%b3%e3%83%97%e3%83%aa/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ezd0vngaatj20zk0k042g.jpg","magnet":["d0d2eaeae673615d50bd310688b75a135040bdc1"]}{"title":"[PoRO petit] 鬼父 Refresh「小生意気変態フレンドのビーチびっち」(1-10)","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e9%ac%bc%e7%88%b6-refresh%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e5%a4%89%e6%85%8b%e3%83%95%e3%83%ac%e3%83%b3%e3%83%89%e3%81%ae%e3%83%93%e3%83%bc%e3%83%81%e3%81%b3%e3%81%a3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezed3o6gxuj20jq0b4gny.jpg","magnet":["30932493234ece059e3ce0b5eee6a02fabb3c604"]}{"title":"[桜都字幕组][Collaboration Works]バカな妹を利口にするのは俺の××だけな件について 子猫も大好き!! 御津井 芭華にゃんこな姿でぺろぺろしちゃうぞ編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aex-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c903577table1.jpg","magnet":["704CAAA1223810EC1B42C79AE0B98A190E25A633","[collaborationworks]"]}{"title":"[桜都字幕组][PoRO]らぶ2Quad 「妹巫女ぷりん・ほのか~拡げて弾く未開のレッスン」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e3%82%89%e3%81%b62quad-%e3%80%8c%e5%a6%b9%e5%b7%ab%e5%a5%b3%e3%81%b7%e3%82%8a%e3%82%93%e3%83%bb%e3%81%bb%e3%81%ae%e3%81%8b%ef%bd%9e%e6%8b%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c897847table1.jpg","magnet":["FEE2CD0303DECCE7491D54829A07E1A2D136E168","[collaborationworks]"]}{"title":"[桜都字幕组][ピンクパイナップル]ランス01 光をもとめて THE ANIMATION 第4話「そして、王道へ…」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%a9%e3%83%b3%e3%82%b901-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c901000sample1.jpg","magnet":["00EB83EBD106CDAC5B68F7FCD2D1B955A8D42294"]}{"title":"【生肉】[GOLD BEAR]魔将の贄3 前編 ~白濁の海に沈む淫辱の隷姫~+特典","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91gold-bear%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e6%b7%ab%e8%be%b1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160529213534.png","magnet":null}{"title":"[桜都字幕组][GOLD BEAR]魔将の贄3 前編 ~白濁の海に沈む淫辱の隷姫~","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84gold-bear%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e6%b7%ab/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160529213534.png","magnet":["NHFKAZACLSLBOBVYFBY3QXV2ILDV3VKB","[collaborationworks]"]}{"title":"2016年7月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c910356sample12-1.jpg","magnet":null}{"title":"[Collaboration Works] えろまんが! Hもマンガもステップアップ♪ 描いて描かれてステップアップ!? 綾部はるるを召し上がれ編","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e3%81%88%e3%82%8d%e3%81%be%e3%82%93%e3%81%8c%ef%bc%81-h%e3%82%82%e3%83%9e%e3%83%b3%e3%82%ac%e3%82%82%e3%82%b9%e3%83%86%e3%83%83%e3%83%97%e3%82%a2%e3%83%83%e3%83%97%e2%99%aa/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezhqxvfkghj20zk0k078e.jpg","magnet":["11f77d44d2de9e8feb1b62d360d05fdb8578509d"]}{"title":"[BOOTLEG] コワレモノ:璃沙 THE ANIMATION","link":"http://www.llss.cool/wp/all/comic/bootleg-%e3%82%b3%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e%ef%bc%9a%e7%92%83%e6%b2%99-the-animation/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezld4lx89mj20zk0k0772.jpg","magnet":["d9e4ca6f29481db89b5cc9741b325ecdbc2408e4"]}{"title":"[メリー・ジェーン] アノコトイイコト(1-2) 第2話 そうだ妹と練習しよう。","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%82%a2%e3%83%8e%e3%82%b3%e3%83%88%e3%82%a4%e3%82%a4%e3%82%b3%e3%83%88%ef%bc%881-2%ef%bc%89-%e7%ac%ac2%e8%a9%b1-%e3%81%9d/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ezpxruomdyj20o00dcdgi.jpg","magnet":["c1247b2b9a8d7b57ba00f4e549d14330e89a45ae"]}{"title":"[ピンクパイナップル] 神曲のグリモワール THE ANIMATION 第二章「強欲の魔導書」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%a5%9e%e6%9b%b2%e3%81%ae%e3%82%b0%e3%83%aa%e3%83%a2%e3%83%af%e3%83%bc%e3%83%ab-the-animation-%e7%ac%ac%e4%ba%8c/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezr5ns7gykj20zk0k0jwp.jpg","magnet":["951ec7ea227c4353a12cf14aad71212149c22b80"]}{"title":"[夜桜字幕组]作品合集 [BIG5+GB]【古墓丽影、生化危机等】","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-big5gb/","img":"http://ww4.sinaimg.cn/mw690/8c007b5cgw1ezse63knvpj20zk0k0dhg.jpg","magnet":["1633f120a712c99fccbb[","GB]9aba3ae5b445820e2d51"]}{"title":"[EDGE] 魔獣浄化少女ウテア(1-2) soul.2 ミズキの鏡 发表于 2016年1月10日 由 多啦H萌","link":"http://www.llss.cool/wp/all/anime/edge-%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a21-2-soul-2-%e3%83%9f%e3%82%ba%e3%82%ad%e3%81%ae%e9%8f%a1-%e5%8f%91%e8%a1%a8%e4%ba%8e-2016%e5%b9%b41%e6%9c%8810/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ezumi3axunj20zl0k278x.jpg","magnet":["2b3ac08e77bf588e25d3dafad440d87ebb8052f1"]}{"title":"[マーマレード★スター] と○ぶるだいあり~・ぴーち ムービー版","link":"http://www.llss.cool/wp/all/anime/%e3%83%9e%e3%83%bc%e3%83%9e%e3%83%ac%e3%83%bc%e3%83%89%e2%98%85%e3%82%b9%e3%82%bf%e3%83%bc-%e3%81%a8%e2%97%8b%e3%81%b6%e3%82%8b%e3%81%a0%e3%81%84%e3%81%82%e3%82%8a%ef%bd%9e%e3%83%bb%e3%81%b4/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ezwt04kjhwj20hs0dcdhy.jpg","magnet":["2a20c7cb21689f77ff9f25ce0c66cf994d17b702"]}{"title":"[fruit] Hな体験は神社でθ","link":"http://www.llss.cool/wp/all/anime/fruit-h%e3%81%aa%e4%bd%93%e9%a8%93%e3%81%af%e7%a5%9e%e7%a4%be%e3%81%a7%ce%b8/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ezy2skua8jj20zk0k0tbp.jpg","magnet":["6d8065bcad4baee02f3b7d3d1f1b7b44bd6dad76"]}{"title":"[ZIZ] 対魔忍ユキカゼ #2 凜子、陥落 (1-2)","link":"http://www.llss.cool/wp/all/anime/ziz-%e5%af%be%e9%ad%94%e5%bf%8d%e3%83%a6%e3%82%ad%e3%82%ab%e3%82%bc-2-%e5%87%9c%e5%ad%90%e3%80%81%e9%99%a5%e8%90%bd-%ef%bc%881-2%ef%bc%89/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f00d68k65rj20zk0k076u.jpg","magnet":["[1]319b38808af3f658964ac6bf5e50502382318b8e","[2]183e70720a20f8ee968ed250cae8edda1285aba0"]}{"title":"[メリー・ジェーン] 都市伝説シリーズ 其の壱 トイレのHanakoさん","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae%e5%a3%b1-%e3%83%88%e3%82%a4/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f0c3sy4kdxj20zk0k00uy.jpg","magnet":["d1ab6df8972a233251aea07a00087d87da4b8426"]}{"title":"[ばにぃうぉ~か~]OVA 巨乳人妻女教師催眠#1","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e5%b7%a8%e4%b9%b3%e4%ba%ba%e5%a6%bb%e5%a5%b3%e6%95%99%e5%b8%ab%e5%82%ac%e7%9c%a0%ef%bc%831/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f0fgjo68pzj20hs0a00vg.jpg","magnet":["9af87ec7a807151f513b1bb6b8914cb18cf12901"]}{"title":"[ピンクパイナップル] ランス01 光をもとめて THE ANIMATION 第3話「ランス、断つ!!」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a9%e3%83%b3%e3%82%b901-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8%e3%82%81%e3%81%a6-the-animation-%e7%ac%ac3/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f0in2g4axxj20hs0aidk2.jpg","magnet":["527e197ca59e1fd63f1a773cc2ef6c241b41c234"]}{"title":"[夜桜字幕组]2016年6月3D作品合集[BIG5+GB]继续阅读 →","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b46%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f0oatct1cij20m80gogmj.jpg","magnet":["0603E4535CFB2E9762EE0FC40AC79DDA3175F5E6","D2A5910F5C8B0233FFC534FFEA02E01B6FAA4C45","FA78789EE9BDEF3BCF2302CD528F9CD38517339B","7B7DCACCE5B1452697319873110E55E54B87562F","5542C1351C1A55CAF97A3C16D66E4BC4DC4B3916","GB]4bbec30dcaca12517ab84e","][171003][opiumud]Yoshiwara","0603E4535CFB2E9762EE0FC40AC79DDA3175F5E6","D2A5910F5C8B0233FFC534FFEA02E01B6FAA4C45","FA78789EE9BDEF3BCF2302CD528F9CD38517339B","7B7DCACCE5B1452697319873110E55E54B87562F","5542C1351C1A55CAF97A3C16D66E4BC4DC4B3916","GB]4bbec30dcaca12517ab84e"]}{"title":"[chippai] Aサイズ クラスメイト Anime Edition 1限目继续阅读 →","link":"http://www.llss.cool/wp/all/anime/chippai-a%e3%82%b5%e3%82%a4%e3%82%ba-%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a1%e3%82%a4%e3%83%88-anime-edition-1%e9%99%90%e7%9b%ae/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f0r8ibwi6bj20zi0jxdhp.jpg","magnet":["3F615237FA33B3D40E97D8660094947197C4BAED","3F615237FA33B3D40E97D8660094947197C4BAED"]}{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【11-12完】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9011-12%e5%ae%8c%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["1ac4e4f682fb961619c162c411df16cdf9964562","f03e0e77d480e330dbd02dc137334bdfdcfedd72"]}{"title":"[メリー・ジェーン] アマカノ 上林聖編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e4%b8%8a%e6%9e%97%e8%81%96%e7%b7%a8/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f0tks7op00j20zg0jydhv.jpg","magnet":["D0E8319C3E0A83A7167E2CA7610E41366E8C878F"]}{"title":"[Queen Bee] SECRET JOURNEY VOL.1","link":"http://www.llss.cool/wp/all/anime/queen-bee-secret-journey-vol-1/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f0yzkcyuxnj20jq0b4gpk.jpg","magnet":["8D8FDC1C7A5DA33783A894E4582285D6941B9702"]}{"title":"【少女映画】Sex Friend 17「ほたるさんの割れ目にうまい棒を入れようとしたがしかし。」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-friend-17%e3%80%8c%e3%81%bb%e3%81%9f%e3%82%8b%e3%81%95%e3%82%93%e3%81%ae%e5%89%b2%e3%82%8c%e7%9b%ae%e3%81%ab%e3%81%86%e3%81%be%e3%81%84/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f110vnudbzj21bk0qrgpt.jpg","magnet":["04D9538C66FFE7519EB43A388C3CE67C606A442A","48FD16E553B511A61EDD79880175019F113971A2"]}{"title":"【少女映画】Sex Friend 18「無◯◯のハメドリ・ワールド」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-friend-18%e3%80%8c%e7%84%a1%e2%97%af%e2%97%af%e3%81%ae%e3%83%8f%e3%83%a1%e3%83%89%e3%83%aa%e3%83%bb%e3%83%af%e3%83%bc%e3%83%ab%e3%83%89/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f172m0jzs1j20j60ardhx.jpg","magnet":["05909FCC429404BD51BEE9E705A0A57665B36359"]}{"title":"[ばにぃうぉ~か~] 巨乳人妻女教師催眠 #2 奈緒子とゆい (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9e-%e5%b7%a8%e4%b9%b3%e4%ba%ba%e5%a6%bb%e5%a5%b3%e6%95%99%e5%b8%ab%e5%82%ac%e7%9c%a0-2-%e5%a5%88%e7%b7%92%e5%ad%90%e3%81%a8/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f18b32najsj20zk0jx0u3.jpg","magnet":["1e71f6ca5e6ae41ec350fc28b8de0e396ae03a00"]}{"title":"[PoRO petit ] 狙われた女神天使エンゼルティアー ~守った人間達に裏切られて~ 「憂鬱女教師・涼音 ~護りハメられチェーン肉棒~」(1-4)","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e7%8b%99%e3%82%8f%e3%82%8c%e3%81%9f%e5%a5%b3%e7%a5%9e%e5%a4%a9%e4%bd%bf%e3%82%a8%e3%83%b3%e3%82%bc%e3%83%ab%e3%83%86%e3%82%a3%e3%82%a2%e3%83%bc-%ef%bd%9e%e5%ae%88%e3%81%a3%e3%81%9f/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f1ald4mjwlj20zk0k077m.jpg","magnet":["d1a4af3e74d4fa3a6e2e1b71f27eaa7e5c323a05"]}{"title":"[PoRO]JKとエロコンビニ店長 小生意気蓮っ葉JK・栞~啜り画策ハメ千切り~","link":"http://www.llss.cool/wp/all/anime/porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e8%93%ae%e3%81%a3%e8%91%89jk%e3%83%bb%e6%a0%9e%ef%bd%9e%e5%95%9c%e3%82%8a/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f1doe0eok5j20zf0jw76o.jpg","magnet":["B8B41F73D2C9E24F3E27214B94A0019510631E67"]}{"title":"[EDGE(エッジ)]ドロップアウト ~性処理便器・七条鈴香~","link":"http://www.llss.cool/wp/all/anime/edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%83%89%e3%83%ad%e3%83%83%e3%83%97%e3%82%a2%e3%82%a6%e3%83%88-%ef%bd%9e%e6%80%a7%e5%87%a6%e7%90%86%e4%be%bf%e5%99%a8%e3%83%bb%e4%b8%83%e6%9d%a1/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1f5yvhh75j20zi0jxwfz.jpg","magnet":["1445C7349F55E66AADB75DE968413F92E3B80FEC"]}{"title":"[おてもと屋] 夏のひめごと。/ 凛 -Rin- (字幕)","link":"http://www.llss.cool/wp/all/game/%e3%81%8a%e3%81%a6%e3%82%82%e3%81%a8%e5%b1%8b-%e5%a4%8f%e3%81%ae%e3%81%b2%e3%82%81%e3%81%94%e3%81%a8%e3%80%82-%e5%87%9b-rin-%e5%ad%97%e5%b9%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/7TUvFvk.jpg","magnet":["f82c79bc9cd3e05a18c5bcc6db57f955e760506c","10db11d3226a43ba71077d303d7090a9d0438601","194caa65ac1199ea03241d89e2f578e44054fb91"]}{"title":"[脸肿字幕组][chippai] ちっちゃなおなか -恵未ちゃんてさ","link":"http://www.llss.cool/wp/all/anime/%e8%84%b8%e8%82%bf%e5%ad%97%e5%b9%95%e7%bb%84chippai-%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e6%81%b5%e6%9c%aa%e3%81%a1%e3%82%83%e3%82%93%e3%81%a6%e3%81%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c910356sample12-1.jpg","magnet":["FA1D3854FCBA6ACC882E711A17FB2C8829B1D201"]}{"title":"[夜桜]2016年6月3D作品合集[含不知火舞]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c2016%e5%b9%b46%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160705234307.png","magnet":["97F29B9DF500B349F352FF32F23BA54674E8CFBA","016CB65357EDD1F5F372F5CD9AE391971F15C345","CC9E9D23ECE85D559840834568BEC6A95FC29E3D","A958D59152E2AA360181E45D354D977D5456E360","kamimachi_20160705010814","7A997AA0232009192F68C3FB26B0F0190F334168","EBFF5D92B61BEA2F7DFECBFF99A6021C0C899F27","CC3996DC0590384AF3A8CF"]}{"title":"[Studio Fow]Beastly_Bacchanalia[中字]","link":"http://www.llss.cool/wp/all/anime/studio-fowbeastly_bacchanalia%e4%b8%ad%e5%ad%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/FOW-006Beastly_Bacchanalia_20160709154631.jpg","magnet":["61CEAACFB738D3C891914","006]Beastly_Bacchanalia[BIG5","][171003][opiumud]Yoshiwara"]}{"title":"[FOW-007]Scarlet Nights Episode 01[中字]【蝙蝠侠同人小丑女哈莉·奎茵】","link":"http://www.llss.cool/wp/all/anime/fow-007scarlet-nights-episode-01%e4%b8%ad%e5%ad%97%e3%80%90%e8%9d%99%e8%9d%a0%e4%be%a0%e5%90%8c%e4%ba%ba%e5%b0%8f%e4%b8%91%e5%a5%b3%e5%93%88%e8%8e%89%c2%b7%e5%a5%8e%e8%8c%b5%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/01_20160716020125.jpg","magnet":["D5817DB905C5A8C2F37F8"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][01-02][GB&BIG5][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh02gbbig5avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/c912211package.jpg","magnet":["D496C2E754AE0F10D739DEF78ABE784B63106508","95D3C2463E40E95A17A4C4628158AF36ADC70782"]}{"title":"[桜都字幕组][Queen Bee]PINKERTON VOL.1[モノリノ]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queen-beepinkerton-vol-1%ef%bc%bb%e3%83%a2%e3%83%8e%e3%83%aa%e3%83%8e%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160723143615.png","magnet":["AF9C2E77A76F1055598083F68C1F8185967EA59A"]}{"title":"[魔装学园HxH][03]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh03/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160718235436.png","magnet":["20b00c5b1009f55a66712dbf50d722d434104132"]}{"title":"[脸肿字幕组][魔装学园HxH][04][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e8%84%b8%e8%82%bf%e5%ad%97%e5%b9%95%e7%bb%84%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh04%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/53EvCBz.jpg","magnet":["25d5bfaceb7360045b6408f35da882fd9b1a97d3"]}{"title":"桜都字幕组 [collaborationworks] バカな妹を利口にするのは俺の××だけな件について コスプレ爛漫!! 御津井 芭華◆ 一番好きなのは、お兄ちゃん Baka na Imouto o Rikou ni Suru no","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-collaborationworks-%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aexx%e3%81%a0%e3%81%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/c903807sample1.jpg","magnet":["FB6CE4F1C54815A89E14DB2C919BBF990CC278D8","06DC67B26FCF474A829394F419E986920DB268FD"]}{"title":"桜都字幕组 [PoRO] 黒の教室 「潮ミルクJK搾り~馴染み蔑む授業散姦」","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-poro-%e9%bb%92%e3%81%ae%e6%95%99%e5%ae%a4-%e3%80%8c%e6%bd%ae%e3%83%9f%e3%83%ab%e3%82%afjk%e6%90%be%e3%82%8a%ef%bd%9e%e9%a6%b4%e6%9f%93%e3%81%bf%e8%94%91%e3%82%80%e6%8e%88%e6%a5%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/unnamed-file.png","magnet":["CD8563B39C83B6224A509B8AF70384B372941FC0","BBA363085A7E26D5390317806B93A5559E154A29"]}{"title":"桜都字幕组 [ZIZ] ボクの弥生さん Boku no Yayoi-San – Episode 1-2【有2集】","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-ziz-%e3%83%9c%e3%82%af%e3%81%ae%e5%bc%a5%e7%94%9f%e3%81%95%e3%82%93-boku-no-yayoi-san-episode-3-4%e3%80%90%e6%9c%892%e9%9b%86%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160730012642.png","magnet":["F51AB4320BAFC923CC64FFF39BAD1D428690269A","D6EE789304F88855D15A783B252AABE817BA6ADF"]}{"title":"桜都字幕组[Pink Pineapple] PRETTY×CATION THE ANIMATION#2 姉妹の初恋 PRETTY×CATION THE ANIMATION – Episode 2","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89pink-pineapple-prettyxcation-the-animation%ef%bc%832-%e5%a7%89%e5%a6%b9%e3%81%ae%e5%88%9d%e6%81%8b-prettyxcation-the-animation-episode-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/c903701sample1.jpg","magnet":["E7AA34914AD574F31F98CCBB5351ACBE8DEAFA9D","52A31558CACF4221B683E50C41E878493F1B2B6D","[collaborationworks]"]}{"title":"2016年7月 各组作品合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b47%e6%9c%88-%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f6d2q12yfxj218g0vk4hs.jpg","magnet":["UBA5TGSEPIUNASGZZFQUGXAH57HNNOZH","YYKZRZK34FEBPP6CZIFSXS75SZ7GN2CU"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][05][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh05%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/53EvCBz.jpg","magnet":["77WUDXVG6E5OAFHCRGFZJPRCJZCFEN6B"]}{"title":"[@OZ] MIX FIGHT 小悪魔サーバント・バトルリョナ陵辱","link":"http://www.llss.cool/wp/all/anime/oz-mix-fight-%e5%b0%8f%e6%82%aa%e9%ad%94%e3%82%b5%e3%83%bc%e3%83%90%e3%83%b3%e3%83%88%e3%83%bb%e3%83%90%e3%83%88%e3%83%ab%e3%83%aa%e3%83%a7%e3%83%8a%e9%99%b5%e8%be%b1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f6i4w06cnzj20j904vwgh.jpg","magnet":["46e165f70f30b488649212fc1910bdd557862f74"]}{"title":"[少女映画][Sex Friend] Sex Friend 24「甲鉄嬢のハメドリ」【甲铁城的卡巴内里】","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbsex-friend-sex-friend-24%e3%80%8c%e7%94%b2%e9%89%84%e5%ac%a2%e3%81%ae%e3%83%8f%e3%83%a1%e3%83%89%e3%83%aa%e3%80%8d%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f6j544cj73j20ku0dwaci.jpg","magnet":["1d2e7e04ff6586fe8411424bfcc3227ea8a68cda"]}{"title":"生肉:[chippai]なま LO Re ふらちもの THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%aa%e3%81%be-lo-re-%e3%81%b5%e3%82%89%e3%81%a1%e3%82%82%e3%81%ae-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912702table2.jpg","magnet":["6395F353DF9A8F0B2724A81EA7EF9E6DF02DF7D3"]}{"title":"生肉:[Animan]Misuzu イケナイコトAnime Edition","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aanimanmisuzu-%e3%82%a4%e3%82%b1%e3%83%8a%e3%82%a4%e3%82%b3%e3%83%88anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912703sample31.jpg","magnet":["035DF291E758A16D9FFA22A0599CDE6E30366AA7"]}{"title":"[桜都字幕组]:[Animan]Misuzu イケナイコトAnime Edition","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aanimanmisuzu-%e3%82%a4%e3%82%b1%e3%83%8a%e3%82%a4%e3%82%b3%e3%83%88anime-edition-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912703sample1.jpg","magnet":["E47B6474F0538B421FFFB4378305E7B26055C576"]}{"title":"[夜桜字幕组]2016年7月3D作品合集","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b47%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://www.imghost.eu/images/2016/08/06/mkv_20160806_224034.976.jpg","magnet":["006]Beastly_Bacchanalia","61CEAACFB738D3C891914EDE74B12D2E7E905CE1","D5817DB905C5A8C2F37F8DAD3C227268A6A8664E","A853369D8388681D5C4F9A7FDB9894295ED75DFB","2D41C07583BFAE990DD85101AF7C066694FBC577","466994DAECAC2790397C0B9EEC0D8B5A384DB015","7E50148B57AB73A0AB698"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][06][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh06%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/53EvCBz.jpg","magnet":["64ac42894ed7f36560086913859d86b93d85a250"]}{"title":"FLOWERS -Le volume sur autonme-(秋篇)","link":"http://www.llss.cool/wp/all/anime/flowers-le-volume-sur-autonme-%e7%a7%8b%e7%af%87/","img":"http://ww4.sinaimg.cn/mw690/8c007b5cjw1f1wqkqdaslj21hc0xcafj.jpg","magnet":["192123F4FF31D696158D51990EE37767008C15CC","9289f422c409ca07a006da1c2872c9b7fb619ed4"]}{"title":"[少女映画][Sex Syndrome] 雷姆 Cospaly 3部 合集","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbsex-syndrome-%e9%9b%b7%e5%a7%86-cospaly-3%e9%83%a8-%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1f6sbmmtpp4j20ku0bqq61.jpg","magnet":["9077C10E546DCDAB9987EFA91EE10D487AB8CB72","5037A258381D5128DACD61E908C1C3C5BFC8B76D","889598aa6916aa5a5b62b4d1f27bf09bafba8f6d"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][07][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh07%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["38ab4926f262fe3232c09809fa5a9126830a925a"]}{"title":"生肉:OVA JKビッチに搾られたい #1 ヤリマンJK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aova-jk%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%831-%e3%83%a4%e3%83%aa%e3%83%9e%e3%83%b3jk/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160819012940.png","magnet":["F006EF0DDCB7A8BFF503B099BA00E9CA78073ACF"]}{"title":"[熟肉][ばにぃうぉ~か~]OVA JKビッチに搾られたい #1 ヤリマンJK","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-jk%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%831-%e3%83%a4%e3%83%aa%e3%83%9e/","img":"http://ww4.sinaimg.cn/large/659503cagw1f70rt0jz7xj20yg0jd0u0.jpg","magnet":["F006EF0DDCB7A8BFF503B099BA00E9CA78073ACF"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][08][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh08%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["20CD7071BE877C274861CCCB5AA3B094CA2BCCDC"]}{"title":"[桜都字幕组][鈴木みら乃]飼育×彼女 天使の拘束 編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e6%8b%98%e6%9d%9f-%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c897846sample11.jpg","magnet":["90BACABA7282E5E8FA80EBA325510AD12B9ABE5C"]}{"title":"生肉:真・秘湯めぐり 若女将の慇懃~躊躇い捲る前身頃","link":"http://www.llss.cool/wp/all/anime/%e7%9c%9f%e3%83%bb%e7%a7%98%e6%b9%af%e3%82%81%e3%81%90%e3%82%8a-%e8%8b%a5%e5%a5%b3%e5%b0%86%e3%81%ae%e6%85%87%e6%87%83%ef%bd%9e%e8%ba%8a%e8%ba%87%e3%81%84%e6%8d%b2%e3%82%8b%e5%89%8d%e8%ba%ab%e9%a0%83/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160827003351.jpg","magnet":["FD94B300F5B45917025E563F87B4E6997B1A6B0B"]}{"title":"生肉:円交少女 ~陸上部ゆっきーの場合~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e5%86%86%e4%ba%a4%e5%b0%91%e5%a5%b3-%ef%bd%9e%e9%99%b8%e4%b8%8a%e9%83%a8%e3%82%86%e3%81%a3%e3%81%8d%e3%83%bc%e3%81%ae%e5%a0%b4%e5%90%88%ef%bd%9e-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c850501package.jpg","magnet":["F58FE63308A7FEDB27F9ED8AACA09C60FFE153D4"]}{"title":"[桜都字幕组][PoRO]真・秘湯めぐり 若女将の慇懃~躊躇い捲る前身頃","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e7%9c%9f%e3%83%bb%e7%a7%98%e6%b9%af%e3%82%81%e3%81%90%e3%82%8a-%e8%8b%a5%e5%a5%b3%e5%b0%86%e3%81%ae%e6%85%87%e6%87%83%ef%bd%9e%e8%ba%8a%e8%ba%87/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160827003351.jpg","magnet":["0D1F2EF9D714827888C3AE409820AE62C04E005B"]}{"title":"[桜都字幕组][ピンクパイナップル]円交少女 ~陸上部ゆっきーの場合~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%86%86%e4%ba%a4%e5%b0%91%e5%a5%b3-%ef%bd%9e%e9%99%b8%e4%b8%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c850501package.jpg","magnet":["D3C1B4B1F770C3EF7ACF01F191E4D30503BAC6ED"]}{"title":"[桜都字幕组]2016年8月合集","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b48%e6%9c%88%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912703sample1.jpg","magnet":["6101B4C96492AD3D9F8D44973956DC48A6B5C99E"]}{"title":"【少女映画】[Sex Syndrome] Sex Syndrome 13 G∀TE ゴスロリ神様ロゥリィ","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-syndrome-sex-syndrome-13-%ef%bd%87%e2%88%80%ef%bd%94%ef%bd%85-%e3%82%b4%e3%82%b9%e3%83%ad%e3%83%aa%e7%a5%9e%e6%a7%98%e3%83%ad%e3%82%a5/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f77mvvs6yyj20zk0npn2a.jpg","magnet":["750a79758ed92b997c6ca348dca5b6fb4497b610"]}{"title":"2016年9月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b49%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c923792sample2.jpg","magnet":null}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][09][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh09%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["472A5093F1EF262FC125C14F372BCA40DCA5CD24"]}{"title":"[夜桜字幕组]2016年8月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b48%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://www.imghost.eu/images/2016/09/01/_20160901150401.jpg","magnet":["22CD510572BE1760B177AB5FAF19114765DAB084","B2CE83F1223C57CED43CDC6C32F00EAF2DA88375","618A57DB0478D73CDB66C5AFE78F29092E074204","742ED29708BB1510C8A9B45C398726D617A8E3AC","DBAE133440883CB27EBEFA62D043CC9364C4BA11","A0C3042A563A3603A4A3","A8C0FFE082D16B132CED","Fow]Beastly_Bacchanalia["]}{"title":"[桜都字幕组][QueenBee]放課後Initiation VOL.2[荒井啓]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queenbee%e6%94%be%e8%aa%b2%e5%be%8cinitiation-vol-2%ef%bc%bb%e8%8d%92%e4%ba%95%e5%95%93%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/3ZtQ4Kn.jpg","magnet":["1287B6FB21D0F1E437934AC52C4A9906BAD12907"]}{"title":"[桜都字幕组][chippai]300円のおつきあい Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai300%e5%86%86%e3%81%ae%e3%81%8a%e3%81%a4%e3%81%8d%e3%81%82%e3%81%84-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c923792sample2.jpg","magnet":["84AD3DEAAA953AA18FCCE0779E8888C025A3007D"]}{"title":"[桜都字幕组]少女達の茶道ism THE ANIMATION 一席","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e5%b0%91%e5%a5%b3%e9%81%94%e3%81%ae%e8%8c%b6%e9%81%93ism-the-animation-%e4%b8%80%e5%b8%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/unnamed-file.jpg","magnet":["8D9D8CD51CFEB397F321BEDED09E2D005E3E7267"]}{"title":"[少女映画][nonsummerjack (non)]My GOD ANUBIS","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbnonsummerjack-nonmy-god-anubis/","img":"http://ww1.sinaimg.cn/large/8c007b5cgw1f7huvckmnoj21e00xcal7.jpg","magnet":["655FBA026AE13D629A7AA93"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][10][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh10%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["550BFA50B84EA75FBAFD9203C92FD18CCFFBB918"]}{"title":"[Queen Bee]放課後Initiation VOL.2[附前作]","link":"http://www.llss.cool/wp/all/anime/queen-bee%e6%94%be%e8%aa%b2%e5%be%8cinitiation-vol-2%e9%99%84%e5%89%8d%e4%bd%9c/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f7i01t8m96j312n0lpq79.jpg","magnet":["1287B6FB21D0F1E437934AC52C4A9906BAD12907"]}{"title":"[桜都字幕组][ばにぃうぉ~か~]JKビッチに搾られたい #2 ヤリマン彼女","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9ejk%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160819012940.png","magnet":["DC78D40F02891CDD96829ADD27580A689E9FB1EA","][171003][opiumud]Yoshiwara"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][11][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh11%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["ac1e7c2a5d89a9732c23f6f22855cf1944cfeb62"]}{"title":"[にじいろばんび] えっちなふたりっ娘","link":"http://www.llss.cool/wp/all/anime/%e3%81%ab%e3%81%98%e3%81%84%e3%82%8d%e3%81%b0%e3%82%93%e3%81%b3-%e3%81%88%e3%81%a3%e3%81%a1%e3%81%aa%e3%81%b5%e3%81%9f%e3%82%8a%e3%81%a3%e5%a8%98/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1f872eut7fgj20zk0k00y7.jpg","magnet":["811dc40e4b2dd92677b49a7c8023bee9b09f50c1"]}{"title":"[][Yuri Majyo(百合魔女)] -酒吞童子- Cosplay","link":"http://www.llss.cool/wp/all/anime/yuri-majyo%e7%99%be%e5%90%88%e9%ad%94%e5%a5%b3-%e9%85%92%e5%90%9e%e7%ab%a5%e5%ad%90-cosplay/","img":"http://ww1.sinaimg.cn/large/8c007b5cjw1f81e6s997gj20xc0m8aeb.jpg","magnet":["edd5c6234c3f94ad060232485aec0d13c0ee2b45"]}{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][12]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh12/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["71116A01C164153023D1CA789CAB222F19B56496"]}{"title":"[生肉][160930][鈴木みら乃]飼育×彼女 天使の調教 編 无水印版","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89160930%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e8%aa%bf%e6%95%99-%e7%b7%a8-%e6%97%a0%e6%b0%b4/","img":"http://llss.cool/wp/wp-content/uploads/2016/09/c913263table1.jpg","magnet":["5281ADE79597AEF117D6430E67E86D8E34267B4D"]}{"title":"[生肉][160930][ピンクパイナップル]妻みぐい3","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89160930%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%a6%bb%e3%81%bf%e3%81%90%e3%81%843/","img":"http://llss.cool/wp/wp-content/uploads/2016/09/QQ图片20161001025625.png","magnet":["50031AC3D5F73D4493B4CE7F4FB83332BB6A6E45"]}{"title":"[生肉] [160930] [PoRO] JKとエロコンビニ店長~扱いてしゃぶるレジの下","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-160930-poro-jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7%ef%bd%9e%e6%89%b1%e3%81%84%e3%81%a6%e3%81%97%e3%82%83%e3%81%b6%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/09/c913264sample1.jpg","magnet":["7U4Q2G4P2UCMZ4XXPOAG5JQLTM3GLPD6"]}{"title":"[鈴木みら乃]飼育×彼女 天使の調教編[付前作]","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e8%aa%bf%e6%95%99%e7%b7%a8%e4%bb%98%e5%89%8d%e4%bd%9c/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1f8c6m8xp9uj312r0lrju4.jpg","magnet":["A5D92C442230EC3611E4B62D48DD971C600AA938"]}{"title":"[PoRO]JKとエロコンビニ店長 ハメ拗ねJK・栞 ~扱いてしゃぶるレジの下[付前作]","link":"http://www.llss.cool/wp/all/anime/porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%83%8f%e3%83%a1%e6%8b%97%e3%81%adjk%e3%83%bb%e6%a0%9e-%ef%bd%9e%e6%89%b1%e3%81%84%e3%81%a6%e3%81%97/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1f8cv3930ggj312q0lqgok.jpg","magnet":["6F05D8036D6ABDAD8D3D9988B7A09BA549127AA5"]}{"title":"2016年9月 各组作品合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b49%e6%9c%88-%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f8eb4ix1d9j21hc0xc1hc.jpg","magnet":["SG6L5PK3JAFQAV3EKZ5M2SNWQLOVP7ZW"]}{"title":"[ピンクパイナップル]妻みぐい3 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%a6%bb%e3%81%bf%e3%81%90%e3%81%843-the-animation/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f8dqk46strj312p0lqq4o.jpg","magnet":["DCFDA5487C5C464149BCFA3EBD10836E07FAF838"]}{"title":"[メリー・ジェーン]今からアタシ…… 上巻 初めてを捧げます","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e4%bb%8a%e3%81%8b%e3%82%89%e3%82%a2%e3%82%bf%e3%82%b7-%e4%b8%8a%e5%b7%bb-%e5%88%9d%e3%82%81%e3%81%a6/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1f8dz6jolguj312m0lqjts.jpg","magnet":["133158B137368B33B3312FBD9BB938BAB196D2D4"]}{"title":"[夜桜字幕组]2016年9月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b49%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://i.imgur.com/4pKfVvC.jpg","magnet":["71DB5B4C6699483EA99DAEC9BEA65FFD9798268C","99264481F38F5F8902221ECE4D669E02D532A825","6AC1D2C07CCF14111E10435390E4306B2A19A50E","7B2191884864EA9024EB0B04857D2DE84F17A4A5","26A1D4C8F76F66C760B29CB20342B97FF72ADED9","D1739977149E43F82B808"]}{"title":"[メリー・ジェーン]小女ラムネ 第1話 ちーちゃんと秘密のアルバイト","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac1%e8%a9%b1-%e3%81%a1%e3%83%bc%e3%81%a1%e3%82%83%e3%82%93%e3%81%a8/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f8m2332937j30sc0fvq49.jpg","magnet":["74C2AEF5F3FBC38840CCA92D9C8EF9CC763FCDA4"]}{"title":"[生肉][chippai]せいかつ指導!! Anime Edition ― あい・さくら・なな","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e%ef%bc%81%ef%bc%81-anime-edition-%e2%80%95-%e3%81%82%e3%81%84%e3%83%bb%e3%81%95%e3%81%8f%e3%82%89%e3%83%bb%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161010003057.jpg","magnet":["1302D2D20FE661B84366416D2C4849497C25CC7F"]}{"title":"【生肉】[BOOTLEG]コワレモノ璃沙 PLUS THE ANIMATION – Kowaremono Risa Plus The Animation – Episode 1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89bootleg%e3%82%b3%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e%e7%92%83%e6%b2%99-plus-the-animation-kowaremono-risa-plus-the-animation-episode-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c923794table3.jpg","magnet":["5D461E07F09F89DE95DD3D112A16F0B6A8CE1AF5"]}{"title":"[chippai]せいかつ指導!! Anime Edition ― あい・さくら・なな ―","link":"http://www.llss.cool/wp/all/anime/chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e-anime-edition-%e2%80%95-%e3%81%82%e3%81%84%e3%83%bb%e3%81%95%e3%81%8f%e3%82%89%e3%83%bb%e3%81%aa%e3%81%aa-%e2%80%95/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f8nfjh7c6xj30uq0h63zl.jpg","magnet":["B208CD4068DD3DC9EB141162C12E7E3B29D582AB"]}{"title":"[BOOTLEG]コワレモノ:璃沙 PLUS THE ANIMATION[附前作+漫画]","link":"http://www.llss.cool/wp/all/anime/bootleg%e3%82%b3%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e%ef%bc%9a%e7%92%83%e6%b2%99-plus-the-animation%e9%99%84%e5%89%8d%e4%bd%9c%e6%bc%ab%e7%94%bb/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8nfovez9bj30ur0h83zr.jpg","magnet":["9C64105586809B78D877167764064E4933EB493C"]}{"title":"【幻樱字幕组】【魔装学园HxH Masou Gakuen HxH】【SP01】【BDrip】【GB_MP4】【1920X1080】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b9%bb%e6%a8%b1%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e3%80%90%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh-masou-gakuen-hxh%e3%80%91%e3%80%90sp01%e3%80%91%e3%80%90bdrip%e3%80%91%e3%80%90gb_mp4/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161012013257.jpg","magnet":["1095C017A8BCE15BAFF84241239F6DCAC7D4A5FA"]}{"title":"[Queen Bee]PINKERTON VOL.2 [モノリノ]","link":"http://www.llss.cool/wp/all/anime/queen-beepinkerton-vol-2-%e3%83%a2%e3%83%8e%e3%83%aa%e3%83%8e/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8ti5oeyfmj30uo0h9jso.jpg","magnet":["ED90A86CCFB4275124F1E6ADBF2A353CF8E1AA51"]}{"title":"[EDGE]フェラハメりっぷす Throat.1","link":"http://www.llss.cool/wp/all/anime/edge%e3%83%95%e3%82%a7%e3%83%a9%e3%83%8f%e3%83%a1%e3%82%8a%e3%81%a3%e3%81%b7%e3%81%99-throat-1/","img":"https://i.imgur.com/1vJtez5.jpg","magnet":["D4637FA6017BAF9B66B25F469BDDC42AC98CB85A"]}{"title":"[少女映畫] 五河琴里","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e4%ba%94%e6%b2%b3%e7%90%b4%e9%87%8c/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f8xxfe7spzj20zk0npt9x.jpg","magnet":["d137df4c479fb39f0d83eaecae6a57c01e05ad36"]}{"title":"[MY PICO/Boku no Pico/ぼくのぴこ][三作合集]","link":"http://www.llss.cool/wp/all/anime/my-picoboku-no-pico%e3%81%bc%e3%81%8f%e3%81%ae%e3%81%b4%e3%81%93%e4%b8%89%e4%bd%9c%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f94wodk2xxj215o0jc45n.jpg","magnet":["7C17F1B2523C585A188B5157AE301087B5BBDAD1"]}{"title":"【少女映畫】Ayase Eli(绚濑绘理)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab%e3%80%91ayase-eli%e7%bb%9a%e6%bf%91%e7%bb%98%e7%90%86/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f99k64noftj21kw11xn61.jpg","magnet":["6955d76f9ecbc7fe1eea3bd7114c45a100a9b60e"]}{"title":"[PoRO]おいでよ! 私立ヤリま×り学園 「潔癖会長・ミラ ~ハメ濡らし妄想天下」","link":"http://www.llss.cool/wp/all/anime/poro%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92-%e3%80%8c%e6%bd%94%e7%99%96%e4%bc%9a%e9%95%b7%e3%83%bb%e3%83%9f/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1f99m187qdfj30ut0h8gn0.jpg","magnet":["71A3347555BDD979D7D633E836D26B53215555AD"]}{"title":"[桜都字幕组][Collaboration Works]妹とその友人がエロすぎて俺の股間がヤバイ 黒髪ロングでぺたんこ胸なツンデレ妹「海羽」編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e5%a6%b9%e3%81%a8%e3%81%9d%e3%81%ae%e5%8f%8b%e4%ba%ba%e3%81%8c%e3%82%a8%e3%83%ad%e3%81%99%e3%81%8e%e3%81%a6%e4%bf%ba%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c920296sample5.jpg","magnet":["3D7451EE8471B04CA6EEE04B0D86A15895C255EA"]}{"title":"[桜都字幕组][ピンクパイナップル]ヌーディストビーチに修学旅行で!! THE ANIMATION 第2話[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%8c%e3%83%bc%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%93-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c919219table2.jpg","magnet":["7012A087A6692F4DAB00B65C330C39E135EF4AA0"]}{"title":"2016年10月里番合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b410%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c923794table3.jpg","magnet":["4B79EE6456CD9A5F19D904ECF025496C82EA9C1E"]}{"title":"2016年11月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b411%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161030220142.jpg","magnet":null}{"title":"[少女映畫] 時崎狂三","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e6%99%82%e5%b4%8e%e7%8b%82%e4%b8%89/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f9bscum3kwj21kw11xdoo.jpg","magnet":["445d34cee5c9c3c476d9fff64e896a2238701659"]}{"title":"[少女映畫] 佐倉千代","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e4%bd%90%e5%80%89%e5%8d%83%e4%bb%a3/","img":"http://ww1.sinaimg.cn/large/8c007b5cjw1f9etx8vu9uj21kw11xgsk.jpg","magnet":["76E2ECCDAD1A3C10921019D5394C468478B7C3D7"]}{"title":"[少女映畫] 忍野忍","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e5%bf%8d%e9%87%8e%e5%bf%8d/","img":"http://ww4.sinaimg.cn/large/8c007b5cjw1f9ges0njhij21kw11xtko.jpg","magnet":["247DE55E2E940D27772FE5B1EBE90AA5F6D067EC","247DE55E2E940D27772FE5B1EBE90AA5F6D067EC"]}{"title":"生肉:[BOOTLEG]飯塚先輩×ブレザー ―姉キュン!より― THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9abootleg%e9%a3%af%e5%a1%9a%e5%85%88%e8%bc%a9x%e3%83%96%e3%83%ac%e3%82%b6%e3%83%bc-%e2%80%95%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88%e3%82%8a%e2%80%95-the/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ%E5%9B%BE%E7%89%8720161030220142.jpg","magnet":["81D494D6DB659DF94DBE95C021F5D0328515C268"]}{"title":"生肉:[chippai]せいかつ指導!! Anime Edition ― しの・みかん・れん","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e%ef%bc%81%ef%bc%81-anime-edition-%e2%80%95-%e3%81%97%e3%81%ae%e3%83%bb%e3%81%bf%e3%81%8b%e3%82%93%e3%83%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c927917sample16.jpg","magnet":["5EC517871CF9DBF50CF3A7421F719A6032B8A0F7"]}{"title":"[桜都字幕组][chippai]せいかつ指導!! Anime Edition ― しの・みかん・れん","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e%ef%bc%81%ef%bc%81-anime-edition-%e2%80%95-%e3%81%97%e3%81%ae%e3%83%bb%e3%81%bf%e3%81%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c927917sample16.jpg","magnet":["A0E00C02C33461D7E58EA21E1BB1F8B45D9E3070"]}{"title":"更正:[桜都字幕组][脸肿字幕组][BOOTLEG]飯塚先輩×ブレザー ―姉キュン!より― THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84bootleg%e9%a3%af%e5%a1%9a%e5%85%88%e8%bc%a9x%e3%83%96%e3%83%ac%e3%82%b6%e3%83%bc-%e2%80%95%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f9jxfchwc7j30uu0hcn0z.jpg","magnet":["8ACA371D2456059764E0D8E0A39611D17817EEE3","DC516E64D9FB27B2500E6B38D5AD7882EB102B26"]}{"title":"【脸肿字幕组】[chippai]せいかつ指導!! Anime Edition ― しの・みかん・れん ―[附前作]","link":"http://www.llss.cool/wp/all/anime/chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e-anime-edition-%e2%80%95-%e3%81%97%e3%81%ae%e3%83%bb%e3%81%bf%e3%81%8b%e3%82%93%e3%83%bb%e3%82%8c%e3%82%93-%e2%80%95%e9%99%84%e5%89%8d/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1f9k11a3heyj30uu0hc79n.jpg","magnet":["A0E00C02C33461D7E58EA21E1BB1F8B45D9E3070"]}{"title":"[みポZ] とりま、行為。5 (1-5合集)","link":"http://www.llss.cool/wp/all/anime/%e3%81%bf%e3%83%9dz-%e3%81%a8%e3%82%8a%e3%81%be%e3%80%81%e8%a1%8c%e7%82%ba%e3%80%825-1-5%e5%90%88%e9%9b%86/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f9ny0n5emfj20fk0bomz5.jpg","magnet":["[5]86bed7a75b0c722e617dcf5920fa87242fd05782","[4]b0b65daf19325bf78eda156f79f066c2fac6335c","173ff3969078b2e54ace6e8aedc971643e24934c"]}{"title":"[少女映畫] 時崎狂三 插畫靈裝","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e6%99%82%e5%b4%8e%e7%8b%82%e4%b8%89-%e6%8f%92%e7%95%ab%e9%9d%88%e8%a3%9d/","img":"http://ww4.sinaimg.cn/large/8c007b5cjw1f9phosfh8ij21kw2db4mp.jpg","magnet":["3ECEC89E5CE34A18513FC62D5FBD049CF2A9F9CD"]}{"title":"[せるふぃっしゅ] ヤれる子!電車エッチ #01 純情そうな〇学生","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-01-%e7%b4%94%e6%83%85%e3%81%9d%e3%81%86%e3%81%aa/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f9qt1aw1wdj20qo0f0q4h.jpg","magnet":["[MOV]0d30627d7e831dd8629690666ff12e7a815645e9","[CG]f64207776468433bb3c028464f7fbc8087bfeb51"]}{"title":"[少女映畫] 命运石之门-牧瀨紅莉棲","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e5%91%bd%e8%bf%90%e7%9f%b3%e4%b9%8b%e9%97%a8-%e7%89%a7%e7%80%a8%e7%b4%85%e8%8e%89%e6%a3%b2/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f9s0kdkct8j21kw11xwlp.jpg","magnet":["1f87bf336463436d93ff00079022784e82034f2b"]}{"title":"生肉[メリー・ジェーン]アマカノ 高社紗雪編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e9%ab%98%e7%a4%be%e7%b4%97%e9%9b%aa%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c923219sample2.jpg","magnet":["21A2C17CAA42D11D6804125D2F928572044A33B8"]}{"title":"[桜都字幕组][メリー・ジェーン]アマカノ 高社紗雪編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e9%ab%98%e7%a4%be%e7%b4%97%e9%9b%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c923219sample1.jpg","magnet":["601C7BA2C00FDCACD1971B2DD351974C4A02D244"]}{"title":"[夜桜字幕组]2016年10月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b410%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","magnet":["B6FDF8F9964970DA59ED948836E27BDCDED6A491","134E4D3B20343059D8108158489027EBDFA61724","8D2685B3981156764E6FF06218F4C81119B77CB6","7223A6041C44B61E8376AF7375C3C0B0DA5F429A","FD8956E8A5DBD7421C8BB50D3A1B756ADA280734","24F1F1FD77621A2D8702","43227F8EA04FD1928E7D"]}{"title":"无名司机个人汉化:[せるふぃっしゅ] ヤれる子!電車エッチ #01 純情そうな〇学生","link":"http://www.llss.cool/wp/all/anime/%e6%97%a0%e5%90%8d%e5%8f%b8%e6%9c%ba%e4%b8%aa%e4%ba%ba%e6%b1%89%e5%8c%96%ef%bc%9a%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%e9%9b%bb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f9qt1aw1wdj20qo0f0q4h.jpg","magnet":["D1F630BCA8C501E0EB9D4D3B1A9A29BC6A5042BE"]}{"title":"[せるふぃっしゅ] ヤれる子!電車エッチ #02 留学生はオタク女子 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-02-%e7%95%99%e5%ad%a6%e7%94%9f%e3%81%af%e3%82%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1fa2an6k8gwj20qo0f00u6.jpg","magnet":["[01]0d30627d7e831dd8629690666ff12e7a815645e9","[02]1ee997734ad91d474cfebde125f1c14af6eba4fb","[CG]f64207776468433bb3c028464f7fbc8087bfeb51"]}{"title":"生肉:[PoRO] JKとエロコンビニ店長 言いなり卑潤JK・結衣~桃尻参発、破瓜弐秒◆~ – JK to Ero Konbini Tenchou – Episode 3","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aporo-jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e8%a8%80%e3%81%84%e3%81%aa%e3%82%8a%e5%8d%91%e6%bd%a4jk%e3%83%bb%e7%b5%90/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c925024sample3.jpg","magnet":["79E5BCE5001B4976692B52EA46433CC8F19AD5C0"]}{"title":"生肉: [ZIZ] 君の魔名はリナ・ウィッチ アイドルのファミリア – Kimi no Mana wa Rina Witch- Episode","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a-ziz-%e5%90%9b%e3%81%ae%e9%ad%94%e5%90%8d%e3%81%af%e3%83%aa%e3%83%8a%e3%83%bb%e3%82%a6%e3%82%a3%e3%83%83%e3%83%81-%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%ae%e3%83%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c931518table3.jpg","magnet":["3CBC1A26C4D7EC149674C4147C101AEFE9E1538C"]}{"title":"生肉:[鈴木みら乃 petit] 飼育×彼女 天使の変貌編 Shiiku x Kanojo 3 NO WATERMARK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-petit-%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e5%a4%89%e8%b2%8c%e7%b7%a8-shiiku-x-kanojo-3-no/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c924928sample15.jpg","magnet":["AD5E4F2F3754CDAF507121FAA9FC69C19F7AF5C4"]}{"title":"生肉:[ピンクパイナップル] PRETTYxCATION 2 THE ANIMATION #1「二人の休日」2 NO WATERMARK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-prettyxcation-2-the-animation-%ef%bc%831%e3%80%8c%e4%ba%8c%e4%ba%ba%e3%81%ae%e4%bc%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c924006table2.jpg","magnet":["A0A2AADE7DB4C230CBCB88EED725F6443E90E582"]}{"title":"生肉: [メリー・ジェーン] 都市伝説シリーズ 其の参 八尺さんToshi Densetsu Series vol. 3 NO WATERMARK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a-%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c927151sample17.jpg","magnet":["60F9167B863AB905C9A914F28158E1CD5D8C15AC"]}{"title":"生肉: [ピンクパイナップル] 八尺八話快樂巡り ~異形怪奇譚~ THE ANIMATION 第一話 「八尺様」 Hachishaku Hachiwa Keraku Meguri vol.1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a-%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%85%ab%e5%b0%ba%e5%85%ab%e8%a9%b1%e5%bf%ab%e6%a8%82%e5%b7%a1%e3%82%8a-%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c922421sample2.jpg","magnet":["5094B486FD41854BFCEB144D95DDB3D1DC3F3D21"]}{"title":"[桜都字幕组][PoRO]JKとエロコンビニ店長 言いなり卑潤JK・結衣~桃尻参発、破瓜弐秒[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e8%a8%80%e3%81%84%e3%81%aa%e3%82%8a%e5%8d%91%e6%bd%a4jk/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c925024sample3.jpg","magnet":["AEEAE68BA50802789FE62DEA1B867D06249BFB06"]}{"title":"[桜都字幕组][ピンクパイナップル]PRETTY×CATION 2 THE ANIMATION #1 二人の休日[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abprettyxcation-2-the-animation-%ef%bc%831-%e4%ba%8c%e4%ba%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c924006table2.jpg","magnet":["683A344910B48D208F68FC3635E7CB8B6A83E200"]}{"title":"[桜都字幕组][鈴木みら乃]飼育×彼女 天使の変貌編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e5%a4%89%e8%b2%8c-%e7%b7%a8/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1fa81ttfjd8j30uu0hcn1a.jpg","magnet":["F5DF026160942C75BC8C04B6A4C65F80255D3302"]}{"title":"[少女映畫]南小鳥 警官","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab%e5%8d%97%e5%b0%8f%e9%b3%a5-%e8%ad%a6%e5%ae%98/","img":"http://ww4.sinaimg.cn/large/8c007b5cjw1fa70rrsv8ij21kw11xguc.jpg","magnet":["8EEFE9B028F851CC827FEEEB51CBDE2CB0FE0673"]}{"title":"[桜都字幕组][ZIZ]OVA 君の魔名はリナ・ウィッチ アイドルのファミリア","link":"http://www.llss.cool/wp/all/anime/zizova-%e5%90%9b%e3%81%ae%e9%ad%94%e5%90%8d%e3%81%af%e3%83%aa%e3%83%8a%e3%83%bb%e3%82%a6%e3%82%a3%e3%83%83%e3%83%81-%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%ae%e3%83%95%e3%82%a1%e3%83%9f%e3%83%aa/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fa82mxdnxgj30uu0hc78k.jpg","magnet":["3AD764EF6E13FFB44A7F4B91E3E0DD237983296E"]}{"title":"[桜都字幕组][ピンクパイナップル]八尺八話快樂巡り(はちしゃくはちわけらくめぐり)~異形怪奇譚~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%85%ab%e5%b0%ba%e5%85%ab%e8%a9%b1%e5%bf%ab%e6%a8%82%e5%b7%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c922421sample2.jpg","magnet":["4A69E44E9C5521EA2929B8869CF140E7C201993B"]}{"title":"[桜都字幕组][QueenBee]僕らのセックス1[いのまる]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queenbee%e5%83%95%e3%82%89%e3%81%ae%e3%82%bb%e3%83%83%e3%82%af%e3%82%b91%ef%bc%bb%e3%81%84%e3%81%ae%e3%81%be%e3%82%8b%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161030221500.jpg","magnet":["49CF944900F54C69BAB2A15BEA9BB0D1869A40D3"]}{"title":"[桜都字幕组][メリー・ジェーン]都市伝説シリーズ 其の参 八尺さん[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c927151sample17.jpg","magnet":["998C2BB11416A99FF546C8E1F0F4044505C5FD50"]}{"title":"[Sakurato字幕组]2016年11月合集","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b411%e6%9c%88%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161030220142.jpg","magnet":["7A8623B9D716985FE955DF06E6BF9A1258CA9696"]}{"title":"2016年12月里番预告【多图】","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b412%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8dz6h29uej312l0lrgnl.jpg","magnet":null}{"title":"生肉:[chippai]少女達の茶道ism THE ANIMATION 二席","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e5%b0%91%e5%a5%b3%e9%81%94%e3%81%ae%e8%8c%b6%e9%81%93ism-the-animation-%e4%ba%8c%e5%b8%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c933495sample1.jpg","magnet":["6CDE0D524C7CA7F8C54187577669DE7F434013D8"]}{"title":"生肉:[chippai]ちいさいこ いいよね…えっちな身体測定Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%a1%e3%81%84%e3%81%95%e3%81%84%e3%81%93-%e3%81%84%e3%81%84%e3%82%88%e3%81%ad%e3%81%88%e3%81%a3%e3%81%a1%e3%81%aa%e8%ba%ab%e4%bd%93%e6%b8%ac%e5%ae%9aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c933496sample23.jpg","magnet":["30DCFE9F5C6061E5BD314E11AC83619F68DCC7D4"]}{"title":"生肉:[メリー・ジェーン]今からアタシ……下巻 セカンドバージンも捧げます","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e4%bb%8a%e3%81%8b%e3%82%89%e3%82%a2%e3%82%bf%e3%82%b7%e4%b8%8b%e5%b7%bb/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8dz6h29uej312l0lrgnl.jpg","magnet":["75A1711AC384413257846DCE7C93288399C752CE"]}{"title":"[夜桜字幕组]2016年11月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b411%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/HpbBnVr.jpg","magnet":["DA81B2F746672F759988E31CAA1BF0ADDE892557","F697B3A1BA0DF4B77456528C05FA0E6B8BFF0C09","EAAA0B9B88A6A36A385742071E5D3245141B5E2F","F9EF784D748E6689D488AC9C2D031955937D5B6A","0539E82F7A7FB7C8BF5E5393C29EF24F5D2AE030","88FA2EEE2731640682D8","77E83973F6EE8DC1AC92"]}{"title":"[少女映畫]無名[甲铁城的卡巴内瑞]系列","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab%e7%84%a1%e5%90%8d%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e7%91%9e%e7%b3%bb%e5%88%97/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1faf5wl83doj21kw2dbhdt.jpg","magnet":["C3D26B0DD551C4B41702F0844973B234E72AE791"]}{"title":"[桜都字幕组][chippai]えっちな身体測定 Anime Edition","link":"http://www.llss.cool/wp/all/anime/chippai%e3%81%88%e3%81%a3%e3%81%a1%e3%81%aa%e8%ba%ab%e4%bd%93%e6%b8%ac%e5%ae%9a-anime-edition/","img":"https://image.sexacg.com/images/2016/12/04/64jV.jpg","magnet":["795DAEA8A5C8B2F3A8820D388A62290121B5DE1C"]}{"title":"[桜都字幕组][chippai]少女達の茶道ism THE ANIMATION 二席[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e5%b0%91%e5%a5%b3%e9%81%94%e3%81%ae%e8%8c%b6%e9%81%93ism-the-animation-%e4%ba%8c%e5%b8%ad/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fag8uqpm5yj30uu0hc771.jpg","magnet":["327E5DE4C9528E049C97C57732CF852832B3EB24"]}{"title":"[桜都字幕组][メリージェーン]今からアタシ……下巻 セカンドバージンも捧げます[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%a1%e3%83%aa%e3%83%bc%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e4%bb%8a%e3%81%8b%e3%82%89%e3%82%a2%e3%82%bf%e3%82%b7%e4%b8%8b/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1fag8uq7mfqj30uu0hcad6.jpg","magnet":["03FE8208CB923C6159C1D23DDBE2A83A9D14595D","[collaborationworks]"]}{"title":"生肉:魔将の贄3 後編 ~白濁の海に沈む印褥の隷姫","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%be%8c%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e5%8d%b0%e8%a4%a5%e3%81%ae%e9%9a%b7/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ%E5%9B%BE%E7%89%8720160529213534.png","magnet":["34431D97EB4813765362336713CE5B57C860E1CD"]}{"title":"生肉:魔将の贄3 後編 ~白濁の海に沈む印褥の隷姫~特典【附初回版】","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%be%8c%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e5%8d%b0%e8%a4%a5%e3%81%ae%e9%9a%b7-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ%E5%9B%BE%E7%89%8720160529213534.png","magnet":["2A33541B6A50565557A54CD7CC341670D59D10CF"]}{"title":"[桜都字幕组]:[GOLD BEAR]魔将の贄3 後編 ~白濁の海に沈む印褥の隷姫~特典【附初回版+前作】","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%ef%bc%9a%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%be%8c%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e5%8d%b0/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f5a1lqz85ij20zf0jvmyh.jpg","magnet":["36F84315DD0CCE00AE6FB1EE3EFA11FA564BB39F"]}{"title":"[生肉][ピンクパイナップル] 働くオトナの恋愛事情 THE ANIMATION [episode 01]","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%83%8d%e3%81%8f%e3%82%aa%e3%83%88%e3%83%8a%e3%81%ae%e6%81%8b%e6%84%9b%e4%ba%8b%e6%83%85-the-a/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c929109table1.jpg","magnet":["86956ABE7F05049E05009DD773CBD34E6FC8E018"]}{"title":"[熟肉][ピンクパイナップル] 働くオトナの恋愛事情 THE ANIMATION [episode 01]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%83%8d%e3%81%8f%e3%82%aa%e3%83%88%e3%83%8a%e3%81%ae%e6%81%8b%e6%84%9b%e4%ba%8b%e6%83%85-the-a/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/CDqH.jpg","magnet":["95798F617F42D5657B1F0761696E088728A7AD05"]}{"title":"生肉[EDGE] 催眠クラス~女子全員、知らないうちに妊娠してました~ 前編 – Saimin Class – Episode1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89edge-%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa%e3%81%84%e3%81%86%e3%81%a1%e3%81%ab%e5%a6%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/dsad344.jpg","magnet":["E7E503C1407590E68EC3529FA548D3AFEBCDFEED"]}{"title":"生肉 [ZIZ] 対魔忍アサギ3 #01 叶わぬ願い – Taimanin Asagi 3 – Episode 1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-ziz-%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8301-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84-taimanin-asagi-3-episode-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c936877sample11.jpg","magnet":["4DB8A0F2854090BFB0CD5562FF7B808B1B855B33"]}{"title":"[夜桜字幕组]2016年12月3D作品合集-一大波提莫来袭[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b412%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-%e4%b8%80%e5%a4%a7%e6%b3%a2%e6%8f%90%e8%8e%ab%e6%9d%a5%e8%a2%adbig5gb/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/pI4ye3i.jpg","magnet":["5784E2C1B94A02CE5DAAB1F1541484BE0FCA02DC","B67FD54253E34357CCEAD7B598BF04FAA6F1EA2F","8079D8DDC6570593E985944E5A41583523434130","1F48B67C8F0945E043F1FCEAE5846FAB27AE5542","751306F85B839814C9CBFB4E888EF7BC1DBE19B5","1D7880C567E0BE1CF702F0393DA2B20F6F13AD7F","4732335A1CCC9246E26F14E991B189978F9AE372","9909AB2D86239D03DDDD189CB8B1D8048F65F014","3CA042B1FF954C2969C1879BBA9692EA76FBD3FF","3557163D345D8870DE921EA6020525E87EF285CD","EFB721D55DF5FBF5C67FECADE60E902A9D985A33","065C0A46AF226707C32D16CA89AFFC173366664D","2D60639E56357E2902F0F6DA5FC2BA5A99C8AF3D","C215253A98FB14F6760DE7A","Fow]Beastly_Bacchanalia["]}{"title":"[熟肉]対魔忍アサギ3 #01 叶わぬ願い","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%a2%e7%98%ab%e7%a4%be%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8301-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c936877sample10.jpg","magnet":["154C692D497B0B96E84880A37D4F24555B095A7B"]}{"title":"[生肉][EDGE(エッジ)]フェラハメりっぷす Throat.2 Fella Hame Lips ep.2","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%83%95%e3%82%a7%e3%83%a9%e3%83%8f%e3%83%a1%e3%82%8a%e3%81%a3%e3%81%b7%e3%81%99-throat-2-fella-hame-lips-ep-2/","img":"https://image.sexacg.com/images/2016/12/27/BL3F.jpg","magnet":["0A61E08FBE598D9DACB6EB1726AB992BCBF2E7D8"]}{"title":"[熟肉][EDGE]催眠クラス~女子全員、知らないうちに妊娠してました~ 前編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%a2%e7%98%ab%e7%a4%be%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fb43dnl73fj30uu0hcdja.jpg","magnet":["E4BAEF8AA3204B1DDB10DA56039B83A2B6E7A8C2"]}{"title":"[熟肉][EDGE(エッジ)]フェラハメりっぷす Throat.2 Fella Hame Lips ep.2[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%83%95%e3%82%a7%e3%83%a9%e3%83%8f%e3%83%a1%e3%82%8a%e3%81%a3%e3%81%b7%e3%81%99-throat-2-fella-hame-lips-ep-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/0060lm7Tgw1fb59grfd0vj30uu0hcadh.jpg","magnet":["0BAC2AFDAD189A149BA38FB9C1A697E67CBDCAD3"]}{"title":"[生肉]妹とその友人がエロすぎて俺の股間がヤバイ 茶髪ツインテールでユサユサ巨乳!?妹の可愛い友人『莉子』 編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e5%a6%b9%e3%81%a8%e3%81%9d%e3%81%ae%e5%8f%8b%e4%ba%ba%e3%81%8c%e3%82%a8%e3%83%ad%e3%81%99%e3%81%8e%e3%81%a6%e4%bf%ba%e3%81%ae%e8%82%a1%e9%96%93%e3%81%8c%e3%83%a4%e3%83%90%e3%82%a4/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/0060lm7Tgw1f9clg791ebj30ur0h7tah.jpg","magnet":["765C8A2290BB1A996906AD78D929B8D082F595C2"]}{"title":"[生肉]鬼父 Refresh 「小生意気な肝っ玉」","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%81%aa%e8%82%9d%e3%81%a3%e7%8e%89%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c930296sample1.jpg","magnet":["55A29E85427B7612F6C24714BBDA6AADCD1C300A"]}{"title":"[熟肉][Collaboration Works]妹とその友人がエロすぎて俺の股間がヤバイ 茶髪ツインテールでユサユサ巨乳!妹の可愛い友人『莉子』編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89collaboration-works%e5%a6%b9%e3%81%a8%e3%81%9d%e3%81%ae%e5%8f%8b%e4%ba%ba%e3%81%8c%e3%82%a8%e3%83%ad%e3%81%99%e3%81%8e%e3%81%a6%e4%bf%ba%e3%81%ae%e8%82%a1%e9%96%93%e3%81%8c/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fbay5be5w9j30uu0hcn17.jpg","magnet":["4E244D97037A48D838C0B801350C4012F40D32C7"]}{"title":"[熟肉]鬼父 Refresh 「小生意気な肝っ玉」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%81%aa%e8%82%9d%e3%81%a3%e7%8e%89%e3%80%8d/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1fbadknt8cxj30uu0hcn31.jpg","magnet":["5EA1913B0202A5DE9D405F46ED6DF534B8296DE9","02A7BAEBD298DE332E0CCDD0C80669405063F260"]}{"title":"2016年12月里番合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b412%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8dz6h29uej312l0lrgnl.jpg","magnet":["9150B382EE3D301094CCB80B2DACA7BAB1101DAE"]}{"title":"[生肉][メリー・ジェーン]アマカノ 特別編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e7%89%b9%e5%88%a5%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c933485sample1.jpg","magnet":["361BCB765094113AF567B3ED26CF287FA924EEB3"]}{"title":"[熟肉][メリー・ジェーン]アマカノ 特別編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e7%89%b9%e5%88%a5%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c933485package.jpg","magnet":["858ECAD30B09622F37B5B469149E4450E7E86CCE","FDFDAEE445722AB39918E095FE08667C15DDAEF2"]}{"title":"[生肉]サグラレ堕メ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%82%b5%e3%82%b0%e3%83%a9%e3%83%ac%e5%a0%95%e3%83%a1-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/566.jpg","magnet":["464B92720DA668160A3065BB059B391CFE38416B","4328A86C801BA5B5C842D407A88E28FBEA4D7D5E"]}{"title":"[熟肉]サグラレ堕メ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%82%b5%e3%82%b0%e3%83%a9%e3%83%ac%e5%a0%95%e3%83%a1-the-animation/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1fbkmf38ry6j30uu0hc0vw.jpg","magnet":["E1BD33C2F05C6F740D899AE51EBBCAC0BCF0F2E6"]}{"title":"[桜都字幕组][メリージェーン]都市伝説シリーズ 其の肆 メリーちゃんの電話[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae%e8%82%86-%e3%83%a1%e3%83%aa%e3%83%bc%e3%81%a1%e3%82%83%e3%82%93%e3%81%ae%e9%9b%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c934211sample1.jpg","magnet":["F032D4C14542BA95BFFE397EC2256CE3A0605EA4"]}{"title":"[桜都字幕组][Teamおと♂デリ] オトコのコ♂デリバリー","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84team%e3%81%8a%e3%81%a8%e2%99%82%e3%83%87%e3%83%aa-%e3%82%aa%e3%83%88%e3%82%b3%e3%81%ae%e3%82%b3%e2%99%82%e3%83%87%e3%83%aa%e3%83%90%e3%83%aa%e3%83%bc/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/c943202table2.jpg","magnet":["AD543F5EBF0B0736181D17884CDC738E50C0DFD4","[collaborationworks]"]}{"title":"[夜桜字幕组]2017年1月3D作品合集[BIG5+GB][提莫放开我的金克丝]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b41%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb%e6%8f%90%e8%8e%ab%e6%94%be%e5%bc%80%e6%88%91%e7%9a%84%e9%87%91%e5%85%8b%e4%b8%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/pI4ye3i.jpg","magnet":["25DFC3EF28D877BD9C1904AC2AE6EB479AABC1C0","65291A640D710B464532ED77D21FBD51B8907D9B","DEE5D8665D858D662F4C87745127EDFA4E15DC1C","44823463E2E3ED5B96C0574EC95538F908F82165","6917B5F3EC6E88B3FB7A5F29FBB8E2EA2E83339B","9DE72B008D573572AC83CC71870B4A2562FEFD99","A507B9A344E97B2532879F"]}{"title":"[桜都字幕组]:僕らのセックス 2 [いのまる][附27日合集]","link":"http://www.llss.cool/wp/all/anime/%e5%83%95%e3%82%89%e3%81%ae%e3%82%bb%e3%83%83%e3%82%af%e3%82%b9-2-%e3%81%84%e3%81%ae%e3%81%be%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/psb.jpg","magnet":["9BBE783897B02CF15B354B19D0D14D20B39BE4CF"]}{"title":"[桜都字幕组][脸肿字幕组]飼育×彼女 天使の結末編","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e7%b5%90%e6%9c%ab%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/0060lm7Tgw1fa81tt6cxdj30uu0hcjuv.jpg","magnet":["F9A4C5E5FCD33EC15A49B9245463EC21A3DC9CA8","3BD90E97A2FB2C7EE1E35D81D2883CAA7A1D977B"]}{"title":"[桜都字幕组]牝教師4 ~穢された教壇~ 「聖凛学園長・優理~熟れ晒すめげない媚肉~」","link":"http://www.llss.cool/wp/all/anime/%e7%89%9d%e6%95%99%e5%b8%ab4-%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e-%e3%80%8c%e8%81%96%e5%87%9b%e5%ad%a6%e5%9c%92%e9%95%b7%e3%83%bb%e5%84%aa%e7%90%86%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/568.jpg","magnet":["6B57704FC6F42D73889BA3DD6F9F709BDFA6A3DE","1E308A102B5635F9CB6CA0F039E65F5B5FD27890"]}{"title":"[桜都字幕组]PRETTY×CATION 2 THE ANIMATION #2「このさきも、ずっと」","link":"http://www.llss.cool/wp/all/anime/prettyxcation-2-the-animation-%ef%bc%832%e3%80%8c%e3%81%93%e3%81%ae%e3%81%95%e3%81%8d%e3%82%82%e3%80%81%e3%81%9a%e3%81%a3%e3%81%a8%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/567.jpg","magnet":["7696A16A3AAD9E7E20D1C2B9D97B0723F59D4A7B"]}{"title":"[桜都字幕组][せるふぃっしゅ] もんむす・くえすと 1 「外伝・サキュバス幻想(ファンタジー)」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%82%82%e3%82%93%e3%82%80%e3%81%99%e3%83%bb%e3%81%8f%e3%81%88%e3%81%99%e3%81%a8-1/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/2-1.jpg","magnet":["3968153BE2A421D09F4EC872C9D57061E276A060"]}{"title":"各组2017年1月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b41%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c933485sample9.jpg","magnet":["DCB15B636A4323B7A05E81D06C8DFEC0392239D9","455BCDD06DC3796BDBC82E05C205C1B81E8545CF","E1BA15718AD355C269B960A939B1DA513F6A8355"]}{"title":"2017年2月里番预告【多图】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138sample12.jpg","magnet":null}{"title":"[生肉]新生 ふたなりアイト?ルて?かたま系! 後編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e6%96%b0%e7%94%9f-%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%a7%e3%81%8b%e3%81%9f%e3%81%be%e7%b3%bb%ef%bc%81-%e5%be%8c%e7%b7%a8-%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/e51463bbgw1f1irid12qnj20go09e77r.jpg","magnet":["F078025691F6590024AA273CD8F484BE1C365DE0"]}{"title":"[桜都字幕组][WHITE BEAR] 新生 ふたなりアイト?ルて?かたま系! 後編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84white-bear-%e6%96%b0%e7%94%9f-%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%82%a2%e3%82%a4%e3%83%88%e3%83%ab%e3%81%a6%e3%81%8b%e3%81%9f%e3%81%be%e7%b3%bb/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/e51463bbgw1f1irid12qnj20go09e77r.jpg","magnet":["C77C021A4A6209582258651CD1D3AE1365DA0E87","DB7F60DB43E4778EF4370417774F46E795A51426"]}{"title":"[生肉]グリーン・アイズ -姉キュン!より- THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%82%b0%e3%83%aa%e3%83%bc%e3%83%b3%e3%83%bb%e3%82%a2%e3%82%a4%e3%82%ba-%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88%e3%82%8a-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943080table2.jpg","magnet":["4B706C1765510ED08ADE9A35F45257C211009B3C"]}{"title":"[桜都字幕组]小女ラムネ 第2話 ドキドキの撮影タイムと恋のABC","link":"http://www.llss.cool/wp/all/anime/%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac2%e8%a9%b1-%e3%83%89%e3%82%ad%e3%83%89%e3%82%ad%e3%81%ae%e6%92%ae%e5%bd%b1%e3%82%bf%e3%82%a4%e3%83%a0%e3%81%a8%e6%81%8b%e3%81%aeabc/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138table2.jpg","magnet":["8676EAE48F2D24ECBA3F2E6053E95D89E05450FD","B469542007E2D17A82FC914921CC7DDF318B8F3D","6EAC8BABF4A545B21B04A9A9410E073CE93FA821"]}{"title":"[生肉]桃色望遠鏡 Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e6%a1%83%e8%89%b2%e6%9c%9b%e9%81%a0%e9%8f%a1-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943081table1.jpg","magnet":["CD6EB082A37704E9CDE57458BEE0856D36D8F33A"]}{"title":"[桜都字幕组][chippai]桃色望遠鏡 Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e6%a1%83%e8%89%b2%e6%9c%9b%e9%81%a0%e9%8f%a1-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943081sample1.jpg","magnet":["77e19b17081288ee4044c7f54933461ff6183003","3B35C5B142E6C646FD79645E9D958FD82458CECA"]}{"title":"[桜都字幕组]グリーン・アイズ -姉キュン!より- THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%82%b0%e3%83%aa%e3%83%bc%e3%83%b3%e3%83%bb%e3%82%a2%e3%82%a4%e3%82%ba-%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88%e3%82%8a-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943080sample6.jpg","magnet":["30d587dc5856b11f01dd3fd3df69a0a1fa962069"]}{"title":"[生肉]催眠クラス~女子全員、知らないうちに妊娠してました~ 後編 V2版","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa%e3%81%84%e3%81%86%e3%81%a1%e3%81%ab%e5%a6%8a%e5%a8%a0/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/dsad344.jpg","magnet":["01A557E00A87DE4950D9CD124B2EE6A120BCC370","958060FEA59437DC07414A973F2ED62417A8CD79"]}{"title":"[生肉][せるふぃっしゅ] もんむす・くえすと #2「魅凪・バビロンのXX婦」V2","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%82%82%e3%82%93%e3%82%80%e3%81%99%e3%83%bb%e3%81%8f%e3%81%88%e3%81%99%e3%81%a8-2%e3%80%8c%e9%ad%85%e5%87%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/2.jpg","magnet":["066c19b07bfdbd28ef8c151300808efeb5974606","6445908c49f3947037c1b583b9c78fbf713861f6","AB3B7ADBE574FEC977617A4EFB473E21F4374F65"]}{"title":"[熟肉]催眠クラス~女子全員、知らないうちに妊娠してました~ 後編 【附前作】","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa%e3%81%84%e3%81%86%e3%81%a1%e3%81%ab%e5%a6%8a%e5%a8%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/1-1.jpg","magnet":["27a62b1c737b1f02c38442446db00af5fe54a9ae","77A1890610F414D86147FCA92823352FC370D199","8C8AC50F8BF2320E5DAF3E89CF54A288BCEFB929"]}{"title":"[首发][夜桜汉化组][111103][I]スク水の黒猫がこんなに喘ぐわけがない(穿死库水的黑猫不可能娇喘成这样)[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e9%a6%96%e5%8f%91%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84111103i%e3%82%b9%e3%82%af%e6%b0%b4%e3%81%ae%e9%bb%92%e7%8c%ab%e3%81%8c%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%96%98%e3%81%90/","img":"http://wx3.sinaimg.cn/mw690/be8e860egy1fcq80bz951j20m40gp40s.jpg","magnet":["834A8232A42DEDC4DAD4AA"]}{"title":"[熟肉][せるふぃっしゅ] もんむす・くえすと #2「魅凪・バビロンのXX婦」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%82%82%e3%82%93%e3%82%80%e3%81%99%e3%83%bb%e3%81%8f%e3%81%88%e3%81%99%e3%81%a8-2%e3%80%8c%e9%ad%85%e5%87%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/1.jpg","magnet":["ea819f4a5013db4c322e293db3b88baa3d7f4f46","3968153BE2A421D09F4EC872C9D57061E276A060","c9a34482259da9f6b41277982bdc3e301e040954","025F4A3EEDCC927089884BD6674521ECFF1DAB26"]}{"title":"【魔穗字幕组】2016年作品合集","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%912016%e5%b9%b4%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/10.jpg","magnet":["D418F21A522FF163D754A62A7EFA1323653A78D7"]}{"title":"【生肉】ヌキどきッ!revolution~天使と悪魔の搾Xバトル~ 月夜の晩に悪魔参上!フィリカの狙いはダメ男のX液!? 編","link":"http://www.llss.cool/wp/all/anime/%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%bex%e3%83%90%e3%83%88%e3%83%ab%ef%bd%9e-%e6%9c%88%e5%a4%9c/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/6.jpg","magnet":["2B2F807321F2A5D2FE07648FB29B782255E3F83F"]}{"title":"【生肉】おいでよ! 私立ヤリま×り学園「エロ可愛ビッチJK・奈々~しゃぶり責めハメイキ牝堕~」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92%e3%80%8c%e3%82%a8%e3%83%ad%e5%8f%af/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/5.jpg","magnet":["907978B183B85B549B970708AFA3752956C586C1"]}{"title":"【生肉】PINKERTON VOL.3 [Monorino]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91pinkerton-vol-3-monorino/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c939388sample1.jpg","magnet":["31E6F5180308C9D3721F0FB6EA3875016BE59E25"]}{"title":"【生肉】対魔忍アサギ3 #02 叶わぬ願い","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8302-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943981sample29.jpg","magnet":["FD40450C4F64C619A9EC5017AA863CD2067D242B"]}{"title":"【生肉】OVA 巨X令嬢MC学園 #1 支配の序章","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91ova-%e5%b7%a8x%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%831-%e6%94%af%e9%85%8d%e3%81%ae%e5%ba%8f%e7%ab%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/4-2-1.jpg","magnet":["A33E18EE75E5F045C110ADF537024CDA0424F5EA"]}{"title":"【生肉】漆黒のシャガ THE ANIMATION 第一話「女郎蜘蛛」","link":"http://www.llss.cool/wp/all/anime/%e6%bc%86%e9%bb%92%e3%81%ae%e3%82%b7%e3%83%a3%e3%82%ac-the-animation-%e7%ac%ac%e4%b8%80%e8%a9%b1%e3%80%8c%e5%a5%b3%e9%83%8e%e8%9c%98%e8%9b%9b%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/3.jpg","magnet":["9726972324F0A9025E49F353088926882DF2E530"]}{"title":"【生肉】アイドル強制操作~女を思いのままに操る悪魔のスマートフォン~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e5%bc%b7%e5%88%b6%e6%93%8d%e4%bd%9c%ef%bd%9e%e5%a5%b3%e3%82%92%e6%80%9d%e3%81%84%e3%81%ae%e3%81%be%e3%81%be%e3%81%ab%e6%93%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c937462sample1.jpg","magnet":["6B140E06A16FA65A7A610BCEF5F5217141FF2A6F"]}{"title":"[夜桜字幕组]2017年2月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b42%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://wx3.sinaimg.cn/mw690/be8e860egy1fd1xd1ybzaj20zk0k00ua.jpg","magnet":["8B3AE1FD51BEE9F662C7CF9CA612957FEF68A2F5","E08193763100A7E559049B80D87CBA7FEC4B24C2","61D359F034D96255C970C7B1C1E1A97994B09795","4D18E4133550FC25F5C7D8417A6B3FA0DA8421A6","7E27828860693A07A45BF9A7730E1E2ACB40FB66","548C96B2201BCCC976B5A"]}{"title":"【熟肉】対魔忍アサギ3 #02 叶わぬ願い【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8302-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943981sample11.jpg","magnet":["15903E295E7E97BCA8F4CD233C8CA376A8EABA7A","3D163749A89F160327D09BC4D378FC57EAE19E2B"]}{"title":"【熟肉】PINKERTON VOL.3 [Monorino]【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91pinkerton-vol-3-monorino%e3%80%90%e9%99%84%e5%89%8d%e4%bd%9c%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/1-4.jpg","magnet":["87F827C38A030EB4C840411FB2F5FF602A4BE1EF","779eac0ffed0e432d568d73ef3e8a3096f7bf0c9"]}{"title":"【熟肉】ヌキどきッ!revolution~天使と悪魔の搾Xバトル~ 月夜の晩に悪魔参上!フィリカの狙いはダメ男のX液!? 編 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%bex%e3%83%90%e3%83%88%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/7.jpg","magnet":["7A9666A6AFF80FCDA9BF5A1BF4EB519F35D8682E","82d8ac2569cceee6c3e923ed6ebac3cfa66b0f89"]}{"title":"【熟肉】OVA 巨X令嬢MC学園 #1 支配の序章 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91ova-%e5%b7%a8x%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%831-%e6%94%af%e9%85%8d%e3%81%ae%e5%ba%8f%e7%ab%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c935570table2.jpg","magnet":["B39C6774A5818174C271709366586924A6BD643F","B17A3C973B2B20CAC3E58EB6DEC0F6BBFC4E34E0"]}{"title":"【熟肉】アイドル強制操作~女を思いのままに操る悪魔のスマートフォン~ V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e5%bc%b7%e5%88%b6%e6%93%8d%e4%bd%9c%ef%bd%9e%e5%a5%b3%e3%82%92%e6%80%9d%e3%81%84%e3%81%ae%e3%81%be%e3%81%be%e3%81%ab%e6%93%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c937462sample1.jpg","magnet":["8437AFED06899FEA0965D509386E28C7ACDDB961","49554a6e3f92c04cb02361c8a63ab07c60598cb4"]}{"title":"【熟肉】おいでよ! 私立ヤリま×り学園「エロ可愛ビッチJK・奈々~しゃぶり責めハメイキ牝堕~」【附前作】 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92%e3%80%8c%e3%82%a8%e3%83%ad%e5%8f%af/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c920297sample4.jpg","magnet":["06D6BB82C00C758CB1995AD60FE8A28FD0E8A809","e8ea5c85678c2a13a5913bb0ad50263e9ffbd848"]}{"title":"【熟肉】漆黒のシャガ THE ANIMATION 第一話「女郎蜘蛛」V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%bc%86%e9%bb%92%e3%81%ae%e3%82%b7%e3%83%a3%e3%82%ac-the-animation-%e7%ac%ac%e4%b8%80%e8%a9%b1%e3%80%8c%e5%a5%b3%e9%83%8e%e8%9c%98%e8%9b%9b%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c936876sample4.jpg","magnet":["3bb3006c4ac2f91763d96f423fb250cf80391750","a3026ddbfd9f840accc3be00def760db29bd75f3"]}{"title":"2017年2月里番合集【樱都】【魔穗】【脸肿】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/41913.jpg","magnet":["L5JZ6UNOMJ55XG7KS2DI7JK65KGTQZGO","4E0C016AFB373EDF753BC14E5AB26E67FC21DD91","5ETMVCXROSAEITKPA25NVBFKGCRPGFYM","659fb7326cc54619b8fbc26b30c4ed1e3b2a6b58"]}{"title":"2017年3月里番预告和期待调查【多图】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c941546table2.jpg","magnet":null}{"title":"【生肉】一年ぶりの THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e4%b8%80%e5%b9%b4%e3%81%b6%e3%82%8a%e3%81%ae-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c947870sample1.jpg","magnet":["4319d73f5ed75643b3cedf2074d78d0dca148fc3"]}{"title":"【熟肉】一年ぶりの THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e4%b8%80%e5%b9%b4%e3%81%b6%e3%82%8a%e3%81%ae-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c947870sample22.jpg","magnet":["b9e629c88b81916c9c8a0b8fc78ffe2450d3eae9","A8705009C5CFCB27D81181B917368DFA813A7723"]}{"title":"【最终幻想】コルネオの野望・動画版/蒂法的野望(提取动画)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e6%9c%80%e7%bb%88%e5%b9%bb%e6%83%b3%e3%80%91%e3%82%b3%e3%83%ab%e3%83%8d%e3%82%aa%e3%81%ae%e9%87%8e%e6%9c%9b%e3%83%bb%e5%8b%95%e7%94%bb%e7%89%88%e8%92%82%e6%b3%95%e7%9a%84%e9%87%8e%e6%9c%9b/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/1-2.jpg","magnet":["21C959F2C6E9F36ECAD92F6E5589FE10E44E9B68","77EF8C12C19DC4430092458F04F939D5F80E365A"]}{"title":"【生肉】魔獣浄化少女ウテア soul.3 love affair","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a2-soul-3-love-affair/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/4-1.jpg","magnet":["324DE802380DA933278CA951B39AC17B1B16D247"]}{"title":"【熟肉】魔獣浄化少女ウテア soul.3 love affair","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a2-soul-3-love-affair/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/5-1.jpg","magnet":["5b47e3efa5275f2ec768853c081cc2fd81b60781"]}{"title":"精神文明建设之“绅士”养成(1969-1994里番作品列表)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%881969-1994%e9%87%8c%e7%95%aa%e4%bd%9c%e5%93%81%e5%88%97%e8%a1%a8%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/862c2f712a75d8b73393002f12c0d9b4.jpg","magnet":["27FA88F2BB7DF239AB2D8"]}{"title":"精神文明建设之“绅士”养成(1995-2000里番作品列表)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%881995-2000%e9%87%8c%e7%95%aa%e4%bd%9c%e5%93%81%e5%88%97%e8%a1%a8%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/3bfc48be01dfeaec48e5745c4d7710ae.jpg","magnet":["A1BF566BFE49E236581E3"]}{"title":"From2000To2017触手番合集","link":"http://www.llss.cool/wp/all/anime/from2000to2017%e8%a7%a6%e6%89%8b%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/3961528i.jpg","magnet":["967624FA4DD385C6812747C39409E7A4F9D4E5AD","030b092fe17eb5a8917995321b0b6e994692b5ac","efae9fc47ffb393c0cbf3ac155d72f32939fb182","a221fb0cf378bee01e7f575a336c03f7dc450b60","11b716f96c0d024e2e498b45a0b2a083af6f6f0d","65616AB7E7C1145DFD803CEA1AFBD7A784EA9CD0","4748918542b2f6615bf94dd64c383e8f286440cd","10D8150BED99FEC117A516EBE2DD0D488709F423","c4b1a544ddba16195a520e912a4b0dded9a30d85","d3e1e2fd2d8c1a8d9213fe2dec18800e8c278621","CE1EA577B288A7E484E77C541056C98A15157E73","280D155A4965021271F4F30D6E9ED45F838796C1","a470f82eaa804a8f0f7b5f62a669b279db9a6ee5","817460f4c80f420d563c825e51c7129ca2209547","39838a8a5de28991532be01fde593a6d280c347d","F323AE481049838E32FD690A042FEB86C33F0D7A","68B7A6535016DB33A0D75E3B6D2D27AF63B8F57E","9a7c60f7fe21e8effd50832a617047cdb499ba93","F82A51545E0C9C79BE574CE28930890710AAE609","aa73755df207c997c195f937c61a6aadbb03ed91","b4abe4d207557fbbb690f4303a44c9ad5f0c744d","D3E1E2FD2D8C1A8D9213FE2DEC18800E8C278621","D2E528ACEF84A51B9AAAEFE8C38DF3DA4A7F2203","2E22004A654E9AFA4AAF80F63D5801493D8E37EF","f269879cf9485dd87c4fc3204320175a3f39d3fd","3dc62b309e38539bbefea2af280b5739579c1162","05D4483CE3A2FDC8A1AEAF08CA83FFADECA5C90A","N747N7NYGYULWYQZIBUZFVBBMMFQ6FFS","03c50787e72ce9feca3c979444649629b8ab83a0","B0AC95AD2317E9760EA7ADFE41B4B50F259A1EDE","7900018c3aacb6f133d419d45398f3f4af7d0a06","A540C268A378F3C9D18862EB7D8B2C60CC40BFDF","ad3a12a97ab7046802aae49135bca3347526fbbe","6A4E7F33CC73C8B782E2A6757913873F20218CC2","2358F58E527F9D681D0CFA30217B74FA5357849B","9A6425C5787F0608469140064FF253225742A936","C132DD7F1DD7671B03EA70185BE5675E1DD9156B","a3c0d8c1bdb41462031b9520a164d5282909e24d","2b3ac08e77bf588e25d3dafad440d87ebb8052f"]}{"title":"[夜桜字幕组][母親による筆おろしが義務化された世界 第二话【附前作】","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e6%af%8d%e8%a6%aa%e3%81%ab%e3%82%88%e3%82%8b%e7%ad%86%e3%81%8a%e3%82%8d%e3%81%97%e3%81%8c%e7%be%a9%e5%8b%99%e5%8c%96%e3%81%95%e3%82%8c%e3%81%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/4-2.jpg","magnet":["0af083317b270b98037e78d6d7d237617892d0e3","][171003][opiumud]Yoshiwara"]}{"title":"精神文明建设之“绅士”养成(2001-2005)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%882001-2005%ef%bc%89/","img":"https://static.acg12.com/uploads/2017/01/ba737244760f0bf75e318ef2c7776285.jpg","magnet":["385216FBE8C5716432778"]}{"title":"[首发][夜桜汉化组][卡特琳娜][Studio Fow]THE GENERAL’S DAUGHTER(杜·克卡奥之女)[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e9%a6%96%e5%8f%91%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84%e5%8d%a1%e7%89%b9%e7%90%b3%e5%a8%9cstudio-fowthe-generals-daughter%ef%bc%88%e6%9d%9c%c2%b7%e5%85%8b%e5%8d%a1%e5%a5%a5/","img":"http://wx2.sinaimg.cn/large/be8e860egy1fdx2m608m2j20zk0k0ngr.jpg","magnet":["UxGrqXijBAP_5JkgiMH9fyTUCSj2","C364D1ABCC9B57271CAAF4"]}{"title":"2017年3月31日(本周)里番发售预告","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b43%e6%9c%8831%e6%97%a5%ef%bc%88%e6%9c%ac%e5%91%a8%ef%bc%89%e9%87%8c%e7%95%aa%e5%8f%91%e5%94%ae%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/6.jpg","magnet":null}{"title":"【生肉】えろゼミ ~エッチにヤルきにABC~ THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%81%88%e3%82%8d%e3%82%bc%e3%83%9f-%ef%bd%9e%e3%82%a8%e3%83%83%e3%83%81%e3%81%ab%e3%83%a4%e3%83%ab%e3%81%8d%e3%81%ababc%ef%bd%9e-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a7/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/4-3.jpg","magnet":["9ECDD85F03E70674D39CD34E696DD95140ADD92D"]}{"title":"【生肉】自宅警備員 1stミッション イイナリ巨X長女・さやか~編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-1st%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%82%a4%e3%82%a4%e3%83%8a%e3%83%aa%e5%b7%a8x%e9%95%b7%e5%a5%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/5.jpg","magnet":["4995A4A9AA9E5F62B999E3145B729566C58D6B04"]}{"title":"【生肉】OVA 巨乳令嬢MC学園 #2 女帝の陥落","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91ova-%e5%b7%a8%e4%b9%b3%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%832-%e5%a5%b3%e5%b8%9d%e3%81%ae%e9%99%a5%e8%90%bd/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/2-3.jpg","magnet":["B67DAD4022EFB77D27CE3D78ED16C24D15DC1D9F"]}{"title":"【生肉】JKとエロコンビニ店長 エロ可愛JK・栞&結衣~イケないぶら下がり~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9bjk%e3%83%bb%e6%a0%9e%ef%bc%86%e7%b5%90/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c941546table2.jpg","magnet":["BEFF05A2931B0C6ED23B6218AB7A889B1CB4671F"]}{"title":"【熟肉】[ばにぃうぉ~か~] OVA 巨X令嬢MC学園 #2 女帝の陥落【附前作】 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91ova-%e5%b7%a8%e4%b9%b3%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%832-%e5%a5%b3%e5%b8%9d%e3%81%ae%e9%99%a5%e8%90%bd%e3%80%90%e9%99%84%e5%89%8d%e4%bd%9c%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/1-9.jpg","magnet":["FCEF8C962DE7DE0CB2F816F7BA9CAA8BC380566E","358136f358261c69e5c90fb0cb765150f1751cb8"]}{"title":"【熟肉】[PORO][JKとエロコンビニ店長 エロ可愛JK・栞&結衣〜イケないぶら下がり〜] V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9bjk%e3%83%bb%e6%a0%9e%ef%bc%86/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fe7elix41ij20zk0k0jto.jpg","magnet":["4F50D157358FC39601F4230E359B5E19CEA3408A","407ed6f48788373a505428cf9b29c0a97b468d1e"]}{"title":"【熟肉】[Pink Pineapple] えろゼミ ~エッチにヤルきにABC~ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91pink-pineapple-%e3%81%88%e3%82%8d%e3%82%bc%e3%83%9f-%ef%bd%9e%e3%82%a8%e3%83%83%e3%83%81%e3%81%ab%e3%83%a4%e3%83%ab%e3%81%8d%e3%81%ababc%ef%bd%9e-the-animation/","img":"http://wx4.sinaimg.cn/mw690/8c007b5cly1fe7go4pfq4j20zk0k00ua.jpg","magnet":["72783A935C30B51EFB6B82EB330B4E78D8513E8B","048ec783799d08048ef521c7d2395905e91caf0c"]}{"title":"【熟肉】自宅警備員 1stミッション イイナリ巨乳長女・さやか〜編 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-1st%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%82%a4%e3%82%a4%e3%83%8a%e3%83%aa%e5%b7%a8%e4%b9%b3%e9%95%b7/","img":"http://wx4.sinaimg.cn/mw690/8c007b5cly1fe7fy50getj20zk0k0q4e.jpg","magnet":["AD9B07E498AE6AF9E952CFA5B3CE4545AFB5BB85","0816abe10b2e6f3ddcfdbebb86ea0c310af0ea31","[collaborationworks]"]}{"title":"2017年4月里番预告及期待调查【多图】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e5%8f%8a%e6%9c%9f%e5%be%85%e8%b0%83%e6%9f%a5%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/ccc.jpg","magnet":null}{"title":"[夜桜字幕组]2017年3月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b43%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/238437973429fa6fab916d1633246922324f36bc.jpg","magnet":["40C42CEBA088A56B4994BBA555C7CD0A03E02CCB","83C8988A6D6C6E6E4B8C90FFECC8D53E840B1834","36CF0B43FCD884C2FD029BFFFD24D5DFEBC79C05","932ECD3D3DC01C510F5A32E12097C2406F3717EB","85454A64934DA0C6284068D00734B1ABCE9DBD88","EAA64383D94B757ED1D210A0D589C9F172DA1B22","4B06852BD07506CC0E27AD35679A5FDBBCB87005","6A94B616F43A5406DE5A260DD4B45370E7223D60","27F63CCD20066F870A8F","AC52566BC26C1E822092"]}{"title":"2017年3月里番合集 V2【樱都、魔穗】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx2.sinaimg.cn/mw690/8c007b5cly1fe7hgqsnplj20zk0k00vf.jpg","magnet":["E2BE90C968A307AA0C14D8445DB4F202218EC2A9","cb8b003d83e5fbde2c81dcf3fc877a656a5ca5bc"]}{"title":"精神文明建设之“绅士”养成(2006-2010)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%882006-2010%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/cg_img_evcg02.jpg","magnet":["FEA301EF9F829C49C755","77EC0C7CB36F7219ACC0"]}{"title":"survive作品介绍","link":"http://www.llss.cool/wp/all/comic/survive%e4%bd%9c%e5%93%81%e4%bb%8b%e7%bb%8d/","img":"http://wx3.sinaimg.cn/mw690/bccc2b49gy1fe3kiu6j4ej20fk0bomzy.jpg","magnet":null}{"title":"【生肉】堕落令嬢 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e5%a0%95%e8%90%bd%e4%bb%a4%e5%ac%a2-the-animation-%e9%a2%84%e5%91%8a%e7%89%87/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/4.jpg","magnet":["C450101EE835445A79E048508037A0415C03629E"]}{"title":"[桜都字幕组][ピンクパイナップル]清楚で真面目な彼女が、最凶ヤリサーに勧誘されたら…? The Animation[先行版]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%b8%85%e6%a5%9a%e3%81%a7%e7%9c%9f%e9%9d%a2%e7%9b%ae%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c944669sample1.jpg","magnet":["24b9010539a1452d20b2f91defcce8131d1b0837"]}{"title":"无责任调查关于黑与白","link":"http://www.llss.cool/wp/all/game/%e6%97%a0%e8%b4%a3%e4%bb%bb%e8%b0%83%e6%9f%a5%e5%85%b3%e4%ba%8e%e9%bb%91%e4%b8%8e%e7%99%bd/","img":"http://llss.cool/wp/wp-content/plugins/wp-polls/images/loading.gif","magnet":null}{"title":"【熟肉】堕落令嬢 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%a0%95%e8%90%bd%e4%bb%a4%e5%ac%a2-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/1-1.jpg","magnet":["dd168a65608a6798ee236e9589427b7383ae4e4c"]}{"title":"精神文明建设之“绅士”养成(2011-2016)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%882011-2016%ef%bc%89/","img":"http://pic1.acg12.net/wp-content/uploads/2017/04/Konachan-305.jpg","magnet":["0D7A3CF0FB67D07B68B1E","0E95DFA2C27D6FA7436E","627B469C144557E20EB1"]}{"title":"[3D合集] StudioFOW作品合集","link":"http://www.llss.cool/wp/all/anime/3d%e5%90%88%e9%9b%86-studiofow%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/maxresdefaul2t.jpg","magnet":["Scarlet_Nights_Ep_01"]}{"title":"[Milky]きみはぐ Vol. 1-2","link":"http://www.llss.cool/wp/all/anime/milky%e3%81%8d%e3%81%bf%e3%81%af%e3%81%90-vol-1-2/","img":"http://wx3.sinaimg.cn/large/006C4Ia4gy1fd1njoyiclj30zk0k0why.jpg","magnet":["7de4ca72f93c4798814fbd8f6550230249090645","bd2ff7798b801a0de4f23bccf4dc77b85f8596f6"]}{"title":"ヤれる子!電車エッチ #01「純情そうな○学生」V2","link":"http://www.llss.cool/wp/all/anime/%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%ef%bc%81%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-%ef%bc%8301%e3%80%8c%e7%b4%94%e6%83%85%e3%81%9d%e3%81%86%e3%81%aa%e2%97%8b%e5%ad%a6%e7%94%9f%e3%80%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f9qt1aw1wdj20qo0f0q4h.jpg","magnet":["D1F630BCA8C501E0EB9D4D3B1A9A29BC6A5042BE","F2E5946D21512CA15D7A75490DA260CEBD28123A"]}{"title":"[首发][夜桜汉化组][151010][Studio Fow]Queen of the Jungle(豹女:丛林女王)[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e9%a6%96%e5%8f%91%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84151010studio-fowqueen-of-the-jungle%ef%bc%88%e8%b1%b9%e5%a5%b3%ef%bc%9a%e4%b8%9b%e6%9e%97%e5%a5%b3%e7%8e%8b%ef%bc%89flash-game/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/239220695b87bbfe7cd3408ce32c9e4e98a31145.jpg","magnet":["2F34741BBA8B019C4829","842D23918B4DC2BAD2F0"]}{"title":"【生肉】ずっと好きだった 1[柚木N’] 【严格的说不是NTR】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%9a%e3%81%a3%e3%81%a8%e5%a5%bd%e3%81%8d%e3%81%a0%e3%81%a3%e3%81%9f-1%e6%9f%9a%e6%9c%a8n-%e3%80%90%e4%b8%a5%e6%a0%bc%e7%9a%84%e8%af%b4%e4%b8%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c946727sample5.jpg","magnet":["766f805f7768850a4ecbae8fd42d1df726824edf","3ecc70caf1e5baee6f44b19eb9b50f4dfd111fe8","87efa21a9e8a5d114e51c2f18f934d66413a5118","8ad8030c331152647c5058e50907113699da02e6"]}{"title":"【樱都、脸肿】ずっと好きだった 1[柚木N’] 【严格的说不是NTR】 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%9a%e3%81%a3%e3%81%a8%e5%a5%bd%e3%81%8d%e3%81%a0%e3%81%a3%e3%81%9f-1%e6%9f%9a%e6%9c%a8n-%e3%80%90%e4%b8%a5%e6%a0%bc%e7%9a%84%e8%af%b4%e4%b8%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c946727sample1.jpg","magnet":["B3C9F56C9D7D01ECFB705F5EE8504EBE5121A0A7","db1f80d1ed1a074b6fea85c780388e5e494afcf4"]}{"title":"[生肉]OVA 冥刻學園 受胎編 #1「お願いします……先生の精液で、私たちを助けて欲しいんです」[先行版]","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89ova-%e5%86%a5%e5%88%bb%e5%ad%b8%e5%9c%92-%e5%8f%97%e8%83%8e%e7%b7%a8-%ef%bc%831%e3%80%8c%e3%81%8a%e9%a1%98%e3%81%84%e3%81%97%e3%81%be%e3%81%99%e5%85%88%e7%94%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/1-4.jpg","magnet":["9cdcf2bcbe0e5257945c10674d1aa623c483886d"]}{"title":"[生肉]ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 夕焼け空に天使降臨! セラのおっぱい、自由にしてね 編[先行版]","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90%e3%83%88%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/6.jpg","magnet":["b0329faca019c480e1c3068ccdde00ad83f64e05"]}{"title":"[GANTZ/杀戮都市][漫画1-37+2则特别篇+番外篇+EPUB+人设资料][真人+CG+动漫]","link":"http://www.llss.cool/wp/all/comic/gantz%e6%9d%80%e6%88%ae%e9%83%bd%e5%b8%82%e6%bc%ab%e7%94%bb1-372%e5%88%99%e7%89%b9%e5%88%ab%e7%af%87%e7%95%aa%e5%a4%96%e7%af%87epub%e4%ba%ba%e8%ae%be%e8%b5%84%e6%96%99%e7%9c%9f%e4%ba%bacg/","img":"http://wx4.sinaimg.cn/large/8c007b5cgy1ff1qjyptfnj21kw0w6b0k.jpg","magnet":["1491423E2CA1B40D5DA5D3E5944FA4D4998244E7","CD94EB40F52AE1DDA1C92480B759D4F7D8817F85","B9A2B0BB2BE0BB6D5CCDEC28EE037CFDCD90806E","96A183ED7525869BE23F93EEFDDCE7EB535D280E","48A065DC2D6B1BB3EEEFC21CC835A88C5F8AD6EA","DB69AE4894BFD195A9383DB3839FB3446A23B708"]}{"title":"[熟肉]OVA 冥刻學園 受胎編 #1「お願いします……先生の精液で、私たちを助けて欲しいんです」","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89ova-%e5%86%a5%e5%88%bb%e5%ad%b8%e5%9c%92-%e5%8f%97%e8%83%8e%e7%b7%a8-%ef%bc%831%e3%80%8c%e3%81%8a%e9%a1%98%e3%81%84%e3%81%97%e3%81%be%e3%81%99%e5%85%88%e7%94%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/3-2.jpg","magnet":["85F7C9A947AA9BD42CB9D026C4451F99C8690492"]}{"title":"[熟肉]ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 夕焼け空に天使降臨! セラのおっぱい、自由にしてね 編","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90%e3%83%88%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/7.jpg","magnet":["e9aec16e9c399b4a90daf15d41a075dd565986a0"]}{"title":"[生肉]鬼父 Refresh 「小生意気ロマンティックがハマらない」","link":"http://www.llss.cool/wp/all/anime/%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ad%e3%83%9e%e3%83%b3%e3%83%86%e3%82%a3%e3%83%83%e3%82%af%e3%81%8c%e3%83%8f%e3%83%9e%e3%82%89%e3%81%aa%e3%81%84%e3%80%8d/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ezed4t8t76j20zk0k0goj.jpg","magnet":["264B2484DDA9C4445D27D5555D2DFBA11E18EBB3"]}{"title":"[生肉]学園侵触 ×× of the Dead","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e5%ad%a6%e5%9c%92%e4%be%b5%e8%a7%a6-xx-of-the-dead/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c948864sample9.jpg","magnet":["B63A4DD154E85675550D1561191282CC64C506CD"]}{"title":"【生肉】[ピンクパイナップル]清楚で真面目な彼女が、最凶ヤリサーに勧誘されたら…? The Animation[正式版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%b8%85%e6%a5%9a%e3%81%a7%e7%9c%9f%e9%9d%a2%e7%9b%ae%e3%81%aa%e5%bd%bc%e5%a5%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c944669sample1.jpg","magnet":["DCC4C42BD50FF1E118323F3B22259D29F6B1D1ED"]}{"title":"【熟肉】[株式会社虎の穴]ボクとみさき先生","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a0%aa%e5%bc%8f%e4%bc%9a%e7%a4%be%e8%99%8e%e3%81%ae%e7%a9%b4%e3%83%9c%e3%82%af%e3%81%a8%e3%81%bf%e3%81%95%e3%81%8d%e5%85%88%e7%94%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/3-3.jpg","magnet":["0eebac422108fd079652f9c907c4755f924e64b2"]}{"title":"[熟肉]貴方ハ私ノモノ -ドS彼女とドM彼氏- 上巻 しつけ上手な優等生 V2","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e8%b2%b4%e6%96%b9%e3%83%8f%e7%a7%81%e3%83%8e%e3%83%a2%e3%83%8e-%e3%83%89s%e5%bd%bc%e5%a5%b3%e3%81%a8%e3%83%89m%e5%bd%bc%e6%b0%8f-%e4%b8%8a%e5%b7%bb-%e3%81%97%e3%81%a4%e3%81%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/3-1.jpg","magnet":["6E5B10B73852D086E7E8515C8099C5A893579872","EF44EEE5B95167F8DD9E626E9F811BE793D59822"]}{"title":"【熟肉】鬼父 Refresh 「小生意気ロマンティックがハマらない」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ad%e3%83%9e%e3%83%b3%e3%83%86%e3%82%a3%e3%83%83%e3%82%af%e3%81%8c%e3%83%8f%e3%83%9e/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ezed4t8t76j20zk0k0goj.jpg","magnet":["c11d899c9e2c7ff81ef9f89f3eae8b8d3cc3aebc"]}{"title":"【熟肉】学園侵触 ×× of the Dead","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%ad%a6%e5%9c%92%e4%be%b5%e8%a7%a6-xx-of-the-dead/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c948864sample10.jpg","magnet":["7e3eb112a8dcf0e60f34fb44988f820afb00f002"]}{"title":"【熟肉】[ピンクパイナップル]清楚で真面目な彼女が、最凶ヤリサーに勧誘されたら…? The Animation[正式版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%b8%85%e6%a5%9a%e3%81%a7%e7%9c%9f%e9%9d%a2%e7%9b%ae%e3%81%aa%e5%bd%bc%e5%a5%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c944669sample1.jpg","magnet":["7a96899d77408e58849c40205e3044c8cfc09f8f"]}{"title":"2017年4月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/2-2.jpg","magnet":["53136051687fa1539e3e497ee396e88ae266e2ef"]}{"title":"2017年5月里番预告和调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e5%92%8c%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/4.jpg","magnet":null}{"title":"[桜都字幕组][ピンクパイナップル] ヤリモクビーチに修学旅行で!! THE ANIMATION 第3話[先行版]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a4%e3%83%aa%e3%83%a2%e3%82%af%e3%83%93%e3%83%bc%e3%83%81/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f9andvvtezj30jg0auwfz.jpg","magnet":["7A96FC59B4754EA6AFBE3F5A11066A4999D789DE"]}{"title":"【熟肉】第二次裏入学試験 THE ANIMATION【先行版】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%ac%ac%e4%ba%8c%e6%ac%a1%e8%a3%8f%e5%85%a5%e5%ad%a6%e8%a9%a6%e9%a8%93-the-animation%e3%80%90%e5%85%88%e8%a1%8c%e7%89%88%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/2-2.jpg","magnet":["d9aebade4c0d73150cda73bcf87fb893b82db24c"]}{"title":"[夜桜字幕组]2017年4月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b44%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/05/06/Glassthemovie_20170506153610.jpg","magnet":["16E0CF120A2C6B53432439488066577EA15BA708","5451127769624268DF0AAB4DBBB6FC88213BE3CE","D5901385BAE8F0BFE4C67C3C132B4CD0EC6F3C2C","A0F36FE1F60FEC00E5475B21D6FC216A43DE58C8","58D02809123C6E69C6A92C1FBF90C86F90BAB687","7E5199D21B0786D980AE0"]}{"title":"【熟肉】Zトン人外アニメーション A Beautiful Greed Nulu Nulu","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91z%e3%83%88%e3%83%b3%e4%ba%ba%e5%a4%96%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-a-beautiful-greed-nulu-nulu/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c952712sample6.jpg","magnet":["d44b0211b5516287f59f6ccf0e9979d2bb43b2f3"]}{"title":"【生肉】ヤれる子!電車エッチ #02「留学生はオタク女子」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%ef%bc%81%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-%ef%bc%8302%e3%80%8c%e7%95%99%e5%ad%a6%e7%94%9f%e3%81%af%e3%82%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1fa2an6k8gwj20qo0f00u6.jpg","magnet":["E781C9A832D8922458C3032B10EB59C68A1448F5"]}{"title":"【生肉】レジデンス 上巻 ~闇の中の想像~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%8a%e5%b7%bb-%ef%bd%9e%e9%97%87%e3%81%ae%e4%b8%ad%e3%81%ae%e6%83%b3%e5%83%8f%ef%bd%9e/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1ffj4h267cjj31hc0u0e81.jpg","magnet":["EB7961C2F8C42F0AC3CD02D03C4BF3FBD894F25D"]}{"title":"【熟肉】レジデンス 上巻 ~闇の中の想像~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%8a%e5%b7%bb-%ef%bd%9e%e9%97%87%e3%81%ae%e4%b8%ad%e3%81%ae%e6%83%b3%e5%83%8f%ef%bd%9e/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1ffj4fqij4jj31hc0u0qv5.jpg","magnet":["5400f01144e22649d305e2394ec85484c0dd701b"]}{"title":"【熟肉】ヤれる子!電車エッチ #02「留学生はオタク女子」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%ef%bc%81%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-%ef%bc%8302%e3%80%8c%e7%95%99%e5%ad%a6%e7%94%9f%e3%81%af%e3%82%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1fa2ar3xlupj20qo0f0ac4.jpg","magnet":["3F1ECD3E3092D470F5B7540FA0CC873350A53A2A"]}{"title":"[PIXY] りんかん倶楽部 第1~4話 (重制版)","link":"http://www.llss.cool/wp/all/anime/pixy-%e3%82%8a%e3%82%93%e3%81%8b%e3%82%93%e5%80%b6%e6%a5%bd%e9%83%a8-%e7%ac%ac1%ef%bd%9e4%e8%a9%b1-%e9%87%8d%e5%88%b6%e7%89%88/","img":"http://wx2.sinaimg.cn/mw690/6978d217gy1ffosfzotwij20z50k4ark.jpg","magnet":["34293D433A52D54B295F872575F9B864FBD8CCAE","74D666CC775F118B0AF9CE2085F6E1789FE316D1","80EFBCBDF1BA1D08D5F4855017A69225D2F66F7D","7B3E24EA3430455CD5B73C7D5B8D74F549F8C065","9332BDF45B1401B8C3A399BA6C4EDCE5F560A019","5C3DF96025E5196458330BE7592FB5C61AB2DA67"]}{"title":"【熟肉】冥刻學園 受胎編 #2 「お兄ちゃんに中出しされて、私……とても嬉しかったよ」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%86%a5%e5%88%bb%e5%ad%b8%e5%9c%92-%e5%8f%97%e8%83%8e%e7%b7%a8-%ef%bc%832-%e3%80%8c%e3%81%8a%e5%85%84%e3%81%a1%e3%82%83%e3%82%93%e3%81%ab%e4%b8%ad%e5%87%ba/","img":"http://wx2.sinaimg.cn/mw690/006GutMaly1ffz5vucue1j31hc0u0u0x.jpg","magnet":["e481d0340e7271e5fb70e589031d91882f6ccfaa"]}{"title":"【生肉】自宅警備員 ~2ndミッション ナマイキ美X次女・由紀~編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-%ef%bd%9e2nd%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%83%8a%e3%83%9e%e3%82%a4%e3%82%ad%e7%be%8ex%e6%ac%a1/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/2.jpg","magnet":["494B3DCAABC54C2F3F932687E1CE14ADCDB7DCDF"]}{"title":"【生肉】転生剣奴の子作り闘技場(ハーレムコロッセオ)「甲冑巨乳エルフ・デュランタ~孕み孕まれ白濁流し」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c949948sample2.jpg","magnet":["54D655C2110B6F7321A4F2E372F129748CF56E3E"]}{"title":"【生肉】[ピンクパイナップル] ヤリモクビーチに修学旅行で!! THE ANIMATION 第3話[正式版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a4%e3%83%aa%e3%83%a2%e3%82%af%e3%83%93%e3%83%bc%e3%83%81%e3%81%ab/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/9.png","magnet":["95287BEA4C64D115AA37DADF4FE12129F6233871"]}{"title":"【熟肉】[桜都字幕组][Pink Pineapple] ヤリモクビーチに修学旅行で!! THE ANIMATION 第3話","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84pink-pineapple-%e3%83%a4%e3%83%aa%e3%83%a2%e3%82%af%e3%83%93%e3%83%bc%e3%83%81%e3%81%ab%e4%bf%ae%e5%ad%a6%e6%97%85/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/1-2.jpg","magnet":["3595B93CB1D58E5236A36D649A4EEF0E6A238422"]}{"title":"【熟肉】[桜都字幕组] [PoRO]転生剣奴の子作り闘技场(ハーレムコロッセオ)“甲胄巨乳エルフ·デュランタ〜孕み孕まれ白浊流し”","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84-poro%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%9c%ba%ef%bc%88/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0fgq4h42j31hc0u0na8.jpg","magnet":["A6A1F36619C752EA3057C71E88B42BE868D9A46F"]}{"title":"【熟肉】[桜都字幕组] [铃木みら乃petit]自宅警备员二ミッションナマイキ美乳次女·由纪〜编","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84-%e9%93%83%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83petit%e8%87%aa%e5%ae%85%e8%ad%a6%e5%a4%87%e5%91%98%e4%ba%8c%e3%83%9f/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0fw6m0msj31hc0u0qv5.jpg","magnet":["6B62E0E6533EF5364BE893BE6B88B31AF3FD0E84"]}{"title":"2017年5月新里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b45%e6%9c%88%e6%96%b0%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1ffj3gyzu6zj31hc0u0gxr.jpg","magnet":["8260284beec623bc8aa034a0fe45f6d27a3d525d"]}{"title":"2017年6月里番预告和调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e5%92%8c%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c949711sample13.jpg","magnet":null}{"title":"【夜桜】2017年5月3D作品合集","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e3%80%912017%e5%b9%b45%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"https://imghost.io/images/2017/06/03/THEMOVIE_20170603151230.jpg","magnet":["A2F211AB37298CD1F724F58F3101AE6875383A06","C8EA4588EEBEA5141ECD76B73E492FF6C6708DAC","83BF1950F9F1042511E2371635C677EECD346803","EC28D3CAFB292C440E178733239A511D1E8C93F8","DA257E55F5CF76FD2CE3CBFDD418EA519D403C73","C3E7744674367A3B5FD4216FF66069F4EBE063F2"]}{"title":"【熟肉】妻が温泉でサークル仲間のX便器になったのですが… Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%a6%bb%e3%81%8c%e6%b8%a9%e6%b3%89%e3%81%a7%e3%82%b5%e3%83%bc%e3%82%af%e3%83%ab%e4%bb%b2%e9%96%93%e3%81%aex%e4%be%bf%e5%99%a8%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fgant6ccrxj31hc0u0qem.jpg","magnet":["b8762bd1b0071c772ed9b4d296c28e11dd78c268","AB796691CA7225669C555A89E3C637B95E64A171"]}{"title":"【熟肉】魔獣浄化少女ウテア soul.4 シスターズ","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a2-soul-4-%e3%82%b7%e3%82%b9%e3%82%bf%e3%83%bc%e3%82%ba/","img":"http://wx4.sinaimg.cn/mw690/8c007b5cly1fdsiv65r2pj20k00b9q3r.jpg","magnet":["1a2c9aebbfb94afa2e20a7eaa38b48c28ac050bc","5A395D1B971C27123EB455F52B7DFDE655D57F7A"]}{"title":"【樱都、脸肿】[QueenBee]ずっと好きだった2[柚木N’]【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91queenbee%e3%81%9a%e3%81%a3%e3%81%a8%e5%a5%bd%e3%81%8d%e3%81%a0%e3%81%a3%e3%81%9f2%ef%bc%bb%e6%9f%9a%e6%9c%a8n%ef%bc%bd/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1fgvmmty0roj31hc0u0npd.jpg","magnet":["458a0b23f63fb198c85c6fb94e2b4e6aa092a6bf","TPZ763VVEDNOQUKP76YEXEGFXDF6XX54"]}{"title":"【夜桜字幕组】Nami Grand line Collector’s Edition 伟大航道","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91nami-grand-line-collectors-edition-%e4%bc%9f%e5%a4%a7%e8%88%aa%e9%81%93/","img":"http://llss.cool/wp/wp-content/uploads/2017/06/tumblr_orne3ktsXQ1w5wpbao2_1280.jpg","magnet":["DC27FB5BA14947E253AFED237368B65573739498"]}{"title":"【夜桜字幕组】「今夜、母と妊活します。・弐」前編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e3%80%8c%e4%bb%8a%e5%a4%9c%e3%80%81%e6%af%8d%e3%81%a8%e5%a6%8a%e6%b4%bb%e3%81%97%e3%81%be%e3%81%99%e3%80%82%e3%83%bb%e5%bc%90%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/06/ninkatu2_01_20170623211601.jpg","magnet":["977F3748BC5DA247B64AD63A4C00AE1AD399B92B","Fow]Beastly_Bacchanalia["]}{"title":"[夜桜字幕组]2017年6月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b46%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/06/23/opiumud-015NamiGrandlineCollectorsEdition_20170623212923.jpg","magnet":["977F3748BC5DA247B64AD63A4C00AE1AD399B92B","3D4434FC9703ECECEFCFC343CC6AD6F355533235","6A52B76AEF3E0CEB54085DFE52C055573289D253","DC27FB5BA14947E253AFED237368B65573739498","6417672A0AA9470A39A7F4305AF736ABE6B0D083","E3AE1AB04B1D7AB79FF86A1293D7768B7A251A71","62EABB8F3A765013D85C19DB"]}{"title":"[熟肉]OVA バカだけどチンチンしゃぶるのだけはじょうずなちーちゃん #1 ちーちゃん、ほんとに勉強頑張れるの?","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89ova-%e3%83%90%e3%82%ab%e3%81%a0%e3%81%91%e3%81%a9%e3%83%81%e3%83%b3%e3%83%81%e3%83%b3%e3%81%97%e3%82%83%e3%81%b6%e3%82%8b%e3%81%ae%e3%81%a0%e3%81%91%e3%81%af%e3%81%98%e3%82%87/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c949711sample13.jpg","magnet":["f7a18ffe6d372a5c1b227d215dd8faf2c4b965db"]}{"title":"[熟肉][PoRO petit] らぶ2Quad 「妹巫女痴漢・ほのか~羞じらいねだる桃尻電車」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro-petit-%e3%82%89%e3%81%b62quad-%e3%80%8c%e5%a6%b9%e5%b7%ab%e5%a5%b3%e7%97%b4%e6%bc%a2%e3%83%bb%e3%81%bb%e3%81%ae%e3%81%8b%ef%bd%9e%e7%be%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c675614package.jpg","magnet":["dac36e87ec2fb21fbdedc68076885596f2c611d4"]}{"title":"[熟肉][Collaboration Works petit] メンヘラ歩理のヤまないおねだり ~ヘッドホンははずせない~ 1st","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89collaboration-works-petit-%e3%83%a1%e3%83%b3%e3%83%98%e3%83%a9%e6%ad%a9%e7%90%86%e3%81%ae%e3%83%a4%e3%81%be%e3%81%aa%e3%81%84%e3%81%8a%e3%81%ad%e3%81%a0%e3%82%8a-%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/44.jpg","magnet":["7ea98c7fbfff690d0207c6f7eda9d0e329614559"]}{"title":"[熟肉][ピンクパイナップル] 妻みぐい3 THE ANIMATION 第二章","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%a6%bb%e3%81%bf%e3%81%90%e3%81%843-the-animation-%e7%ac%ac%e4%ba%8c%e7%ab%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/22.jpg","magnet":["c52fb66500b5a1e4f982056ff77b0952930a4505"]}{"title":"2017年6月里番合集 V2","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/33.jpg","magnet":["7633d42aca3b4f7e3dd5b5bc5ca05aa5d4bb1008","XUVGTM7S7AKL6BJ3MUVTTRQ7QNS6YU3J","PP3MT7TCKE7M4D6TNK62TZWLZYPY3ZHK"]}{"title":"2017年7月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3-1.jpg","magnet":null}{"title":"[生肉]虜ノ鎖~処女たちを穢す淫らな楔~ 上巻 奪われた日常","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e8%99%9c%e3%83%8e%e9%8e%96%ef%bd%9e%e5%87%a6%e5%a5%b3%e3%81%9f%e3%81%a1%e3%82%92%e7%a9%a2%e3%81%99%e6%b7%ab%e3%82%89%e3%81%aa%e6%a5%94%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e5%a5%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3-1.jpg","magnet":["BB07E11C911B08905A9AE679D673C5839D16F162","9B7CE0582A2018B5818AC38E28743FBC3FBB53D7","CD42371C0E095B92A95DC0BE5ED55C1587CC7D98"]}{"title":"[熟肉][メリー・ジェーン]魂インサート 上巻女体へのファーストコンタクト","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%ad%82%e3%82%a4%e3%83%b3%e3%82%b5%e3%83%bc%e3%83%88-%e4%b8%8a%e5%b7%bb%e5%a5%b3%e4%bd%93%e3%81%b8/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3-2.jpg","magnet":["6df2d7765aef007db4b0bc1f6b74491f93cb3b31"]}{"title":"[熟肉]虜ノ鎖~処女たちを穢す淫らな楔~ 上巻 奪われた日常","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e8%99%9c%e3%83%8e%e9%8e%96%ef%bd%9e%e5%87%a6%e5%a5%b3%e3%81%9f%e3%81%a1%e3%82%92%e7%a9%a2%e3%81%99%e6%b7%ab%e3%82%89%e3%81%aa%e6%a5%94%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e5%a5%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-1.jpg","magnet":["1380a50fbaad8763499ec9a677e5a7807285f3a1"]}{"title":"【熟肉】マヨヒガのお姉さん THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%9e%e3%83%a8%e3%83%92%e3%82%ac%e3%81%ae%e3%81%8a%e5%a7%89%e3%81%95%e3%82%93-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/9.jpg","magnet":["e73563515f30c3bb18a5f2a0f8c0b46e8c4181d7"]}{"title":"【熟肉】SWAMP STAMP AnimeEdition","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91swamp-stamp-animeedition/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-3.jpg","magnet":["30256893b80e079dc21c7f6eced9eeb178981c6b"]}{"title":"【熟肉】ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 白濁お風呂でお肌スベスベ!ののあとフィリカがエッチっちぃ!? 編 V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90%e3%83%88/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-4.jpg","magnet":["de85a6a64f9a6df38d89a65f09ee1368b54de473","11F9DDE849A0FC1C940AA4291B54F19D43D7BA39","72f5ae71ba88b8fad3ec1b834af04c6689548b97"]}{"title":"[夜桜汉化组][161006][Team Tanuki]精魔サキュバスKAMI ~魔界編~[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84161006team-tanuki%e7%b2%be%e9%ad%94%e3%82%b5%e3%82%ad%e3%83%a5%e3%83%90%e3%82%b9kami-%ef%bd%9e%e9%ad%94%e7%95%8c%e7%b7%a8%ef%bd%9eflash-gamecn/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-5.jpg","magnet":["695230F24200E0BED29D2"]}{"title":"[熟肉]いちごショコラふれーばー1[NAZ]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%81%84%e3%81%a1%e3%81%94%e3%82%b7%e3%83%a7%e3%82%b3%e3%83%a9%e3%81%b5%e3%82%8c%e3%83%bc%e3%81%b0%e3%83%bc1%ef%bc%bbnaz%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/5.jpg","magnet":["f9a40087bc1c3d8d3fa80c739dba7fec05f64b36"]}{"title":"[熟肉]手垢塗れの天使 THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>[先行版]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%89%8b%e5%9e%a2%e5%a1%97%e3%82%8c%e3%81%ae%e5%a4%a9%e4%bd%bf-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a71%e5%90%8d%e6%a7%98%e3%81%ab%e5%a3%b0%e5%84%aa%e3%82%b5%e3%82%a4/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/c957002table2.jpg","magnet":["5e2ba8ac2045405a62352c764147c64986b12527"]}{"title":"[熟肉]OVA バカだけどチンチンしゃぶるのだけはじょうずなちーちゃん #2 しあわせになるもん[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89ova-%e3%83%90%e3%82%ab%e3%81%a0%e3%81%91%e3%81%a9%e3%83%81%e3%83%b3%e3%83%81%e3%83%b3%e3%81%97%e3%82%83%e3%81%b6%e3%82%8b%e3%81%ae%e3%81%a0%e3%81%91%e3%81%af%e3%81%98%e3%82%87-2/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/c951976sample4.jpg","magnet":["8716b119d745809d99265063294da3039122890a"]}{"title":"[熟肉]牝教師4~穢された教壇~「はしたない学園長・優理~窓際ハメる制服露出」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%89%9d%e6%95%99%e5%b8%ab4%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e%e3%80%8c%e3%81%af%e3%81%97%e3%81%9f%e3%81%aa%e3%81%84%e5%ad%a6%e5%9c%92%e9%95%b7%e3%83%bb%e5%84%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/567-1.jpg","magnet":["18e259bdba94e60eef3ea51729c5f2d527ea01ed"]}{"title":"【熟肉】自宅警備員 3rdミッション ホシガリ爆乳人妻・翔子 編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-3rd%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%83%9b%e3%82%b7%e3%82%ac%e3%83%aa%e7%88%86%e4%b9%b3%e4%ba%ba%e5%a6%bb%e3%83%bb%e7%bf%94%e5%ad%90/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/c957561sample3.jpg","magnet":["95b8828d2d53563c9415261f16c0ce4863f41402"]}{"title":"[熟肉]手垢塗れの天使 THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>[正式版]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%89%8b%e5%9e%a2%e5%a1%97%e3%82%8c%e3%81%ae%e5%a4%a9%e4%bd%bf-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a71%e5%90%8d%e6%a7%98%e3%81%ab%e5%a3%b0%e5%84%aa%e3%82%b5%e3%82%a4-2/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fhm2nmu13dj31hc0u0k1v.jpg","magnet":["485c9ea039cb7f06db68fb33c6e4fe229a0b9415"]}{"title":"2017年7月里番合集 V2","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/5.jpg","magnet":["B1CD966010B7F9FEFD1779A0E79CD34436DE938A","F3F914B09EBEFC9C66CB096941D04F88735F6743","e44ff0a783d90d4c0c36f9da1c824ec2725506e3"]}{"title":"[BDMV][アニメ][170726]君の名は(本篇+特典1&2&3)","link":"http://www.llss.cool/wp/all/anime/bdmv%e3%82%a2%e3%83%8b%e3%83%a1170726%e5%90%9b%e3%81%ae%e5%90%8d%e3%81%af%e6%9c%ac%e7%af%87%e7%89%b9%e5%85%b8123/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1faobphdpn9j21kw18th4f.jpg","magnet":["92BFED97DA622E6148548F8E8F11DAB2D26C596A"]}{"title":"[夜桜字幕组]2017年7月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b47%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/07/30/opiumud-017trailerofYorhatroopsexterminationplan-Nierautomata2_20170730162430.jpg","magnet":["E853C1C963962A1CCB896A68FE133B86B2072F42","D9624D1F6D58D1CF713354F7D965C8DEEC7E965F","28AAF2114664861FE1758003665E8B185E267FFD","A9C55C5617611C3DCD2139CAE424A00095F7A654","56E3F5DAB3832BF2ECC3A65F2CBAE11F455A5B29","7C92DC5EBED1B4037735877616B619A658BA6682","B9F9FF7FBFA1D6A4B07CC6483D9DA81D331EC251","71FE0C273454F9F05D5BC0","Fow]Beastly_Bacchanalia["]}{"title":"2017年8月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b48%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c704841table1.jpg","magnet":null}{"title":"【生肉】僕だけのヘンタイカノジョ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e5%83%95%e3%81%a0%e3%81%91%e3%81%ae%e3%83%98%e3%83%b3%e3%82%bf%e3%82%a4%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/2.jpg","magnet":["1825D55C631D111CB954EE924BCC58655914B5D0","B89B3046CAC629997C8C0BE33AB8E760293D7C24","DA4B855AD9DBE68149AF340DE1F7C2ECDB22F182"]}{"title":"【生肉】X妖蟲 蝕 -孕ミ堕チル少女達- Anime Edition V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91x%e5%a6%96%e8%9f%b2-%e8%9d%95-%e5%ad%95%e3%83%9f%e5%a0%95%e3%83%81%e3%83%ab%e5%b0%91%e5%a5%b3%e9%81%94-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c713162table2.jpg","magnet":["F17D739F0BE02C0672E78FB6D9EABFD0C4BFC8A7","7B51A509123635B6A9C6E5C33438F986187DA676","BDEB463BF0B44CC443B6FE21A5D7EFA5BE090496"]}{"title":"【熟肉】僕だけのヘンタイカノジョ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%83%95%e3%81%a0%e3%81%91%e3%81%ae%e3%83%98%e3%83%b3%e3%82%bf%e3%82%a4%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/3.jpg","magnet":["07074e92c9aec5486a5ebda6261398303bcb7dfb","3C6A9AEF465CE694CA1A6D79C1F9CA212F30618C","bcaf8e72eb34950133bad0899406cbf9574bfb97"]}{"title":"【熟肉】X妖蟲 蝕 -孕ミ堕チル少女達- Anime Edition V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91x%e5%a6%96%e8%9f%b2-%e8%9d%95-%e5%ad%95%e3%83%9f%e5%a0%95%e3%83%81%e3%83%ab%e5%b0%91%e5%a5%b3%e9%81%94-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c704841sample2.jpg","magnet":["5CC0F8526ADD975970CDAA12F8961CF905AB986F","0b96c46952fb6dd2dfe7de948b18d93917b7938d"]}{"title":"貴方ハ私ノモノ -ドS彼女とドM彼氏- 下巻 立派なワンコへご褒美を V2","link":"http://www.llss.cool/wp/all/anime/%e8%b2%b4%e6%96%b9%e3%83%8f%e7%a7%81%e3%83%8e%e3%83%a2%e3%83%8e-%e3%83%89s%e5%bd%bc%e5%a5%b3%e3%81%a8%e3%83%89m%e5%bd%bc%e6%b0%8f-%e4%b8%8b%e5%b7%bb-%e7%ab%8b%e6%b4%be%e3%81%aa%e3%83%af%e3%83%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/1.jpg","magnet":["CA83A977EF900224E331522162C1652EE6BB2B62","99daff6cb112eb7dfd4e5ae43535f58c22881261"]}{"title":"【NARUTO合集】同人视频+高清动态CG+每个女角色包括龙套","link":"http://www.llss.cool/wp/all/anime/%e3%80%90naruto%e5%90%88%e9%9b%86%e3%80%9113%e9%83%a8%e5%90%8c%e4%ba%ba%e8%a7%86%e9%a2%91110%e5%bc%a0%e9%ab%98%e6%b8%85%e5%8a%a8%e6%80%81cg%e6%af%8f%e4%b8%aa%e5%a5%b3%e8%a7%92%e8%89%b2%e5%8c%85/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/2-3.jpg","magnet":null}{"title":"【生肉】ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 大和の妄想、大暴走!ののあが悪魔に着替えたら編","link":"http://www.llss.cool/wp/all/anime/%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/1-3.jpg","magnet":["CD71C83F595FE9E2EE6F37147E09E3674FAE4EE3"]}{"title":"【熟肉】ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 大和の妄想、大暴走!ののあが悪魔に着替えたら編 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90-2/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fiuj1xxqtzj31hc0u0k2u.jpg","magnet":["15EA4910707EBD2C6D8666E13347F1D4A1FC3875","6e1a678a29d03aba8248eae03368c823595e2901"]}{"title":"【熟肉】おいでよ!水龍敬ランド #1 はじめての水龍敬ランド","link":"http://www.llss.cool/wp/all/anime/%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81%e6%b0%b4%e9%be%8d%e6%95%ac%e3%83%a9%e3%83%b3%e3%83%89-%ef%bc%831-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%ae%e6%b0%b4%e9%be%8d%e6%95%ac%e3%83%a9/","img":"http://wx3.sinaimg.cn/mw690/006GutMagy1fix4kc7j8qj31hc0u0124.jpg","magnet":["5a6c889d358625df3d8ab324c0b6250dbe7ff89e"]}{"title":"【熟肉】いちごショコラふれーばー2[NAZ]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%84%e3%81%a1%e3%81%94%e3%82%b7%e3%83%a7%e3%82%b3%e3%83%a9%e3%81%b5%e3%82%8c%e3%83%bc%e3%81%b0%e3%83%bc2%ef%bc%bbnaz%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/3-2.jpg","magnet":["44daaad4f97e63500fa2cdd6fbe6e8eab4b662bf"]}{"title":"【熟肉】炎の孕ませおっぱいエロアプリ学園 THE ANIMATION 第1巻","link":"http://www.llss.cool/wp/all/anime/%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e3%81%8a%e3%81%a3%e3%81%b1%e3%81%84%e3%82%a8%e3%83%ad%e3%82%a2%e3%83%97%e3%83%aa%e5%ad%a6%e5%9c%92-the-animation-%e7%ac%ac1%e5%b7%bb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgy1fj6og3pfotj20zk0k0gmx.jpg","magnet":["2f6c58785c71aab1ce218b56082a6e24ab00f441"]}{"title":"【熟肉】メンヘラ歩理のヤまないおねだり~ヘッドホンははずせない~ 2ndシングル.愛しのあの人に女の影!? ずっと私と繋がって編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%b3%e3%83%98%e3%83%a9%e6%ad%a9%e7%90%86%e3%81%ae%e3%83%a4%e3%81%be%e3%81%aa%e3%81%84%e3%81%8a%e3%81%ad%e3%81%a0%e3%82%8a%ef%bd%9e%e3%83%98%e3%83%83%e3%83%89%e3%83%9b%e3%83%b3%e3%81%af/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3.jpg","magnet":["370ee65d9468e0b412921cf6e9a67141c1589162"]}{"title":"【熟肉】おいでよ! 私立ヤリま×り学園「おしめっ娘JK・静流~お漏らし緩む尻穴ビーズ」V2","link":"http://www.llss.cool/wp/all/anime/%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92%e3%80%8c%e3%81%8a%e3%81%97%e3%82%81/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/2-1.jpg","magnet":["01d9ea386f2cbce6a9a5c151c3dd9e37afac26b4"]}{"title":"2017年8月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b48%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx3.sinaimg.cn/mw690/006UmQRjly1fiyrj9h5t5j31hc0u01kx.jpg","magnet":["31c18b50d1158390e42f8c5c8b24c7f950227bca"]}{"title":"[夜桜字幕组]2017年8月3D作品合集[BIG5+GB]已修正","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b48%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/08/28/170828opiumudCivilWarCollectorsEditionBIG5_20170828182649.jpg","magnet":["68DE93A504C47E1F05D9F6D6C19E3D42F209E74E","80D779F7B5467A8023853D64B1B432CE916486D3","E9A11E12F84C38DDB9FCD6822D6BB5C3AF311786","A5CE921F59A27B66A047B04D2CDF8CBEE0719980","1EE6E3B411FC312CDB299DB0AFAEEF86795062BA","727597E6044B615E4900AD45C916061F10E63182","E085B636EF3E8F26DE95","CD2AE150485842BB539A"]}{"title":"2017年9月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b49%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c966199sample1.jpg","magnet":null}{"title":"僕だけのヘンタイカノジョ もっと THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e5%83%95%e3%81%a0%e3%81%91%e3%81%ae%e3%83%98%e3%83%b3%e3%82%bf%e3%82%a4%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-%e3%82%82%e3%81%a3%e3%81%a8-the-animation/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fial8p3970j31hc0u0qv5.jpg","magnet":["fcd57f4aa433aad6afabd44521ea34e9a6398b3b"]}{"title":"【熟肉】レジデンス 中巻 思考の褒美","link":"http://www.llss.cool/wp/all/anime/%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%ad%e5%b7%bb-%e6%80%9d%e8%80%83%e3%81%ae%e8%a4%92%e7%be%8e/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fjcqfkh67vj31hc0u0u0x.jpg","magnet":["6f953ebf4da0ce74e8c9a918d2d0b2f6880d0fd9"]}{"title":"【熟肉】虜ノ鎖~処女たちを穢すらな楔~ 下巻 ケダモノ達の宴","link":"http://www.llss.cool/wp/all/anime/%e8%99%9c%e3%83%8e%e9%8e%96%ef%bd%9e%e5%87%a6%e5%a5%b3%e3%81%9f%e3%81%a1%e3%82%92%e7%a9%a2%e3%81%99%e3%82%89%e3%81%aa%e6%a5%94%ef%bd%9e-%e4%b8%8b%e5%b7%bb-%e3%82%b1%e3%83%80%e3%83%a2%e3%83%8e/","img":"https://wx1.sinaimg.cn/mw690/006UmQRjly1fjdpg2u4b6j31hc0u01i5.jpg","magnet":["7789ce8bdfe24c862b6e97eef9d7d89fd7e6f400"]}{"title":"【熟肉】ヒトヅマライフ ワンタイムギャル 前編","link":"http://www.llss.cool/wp/all/anime/%e3%83%92%e3%83%88%e3%83%85%e3%83%9e%e3%83%a9%e3%82%a4%e3%83%95-%e3%83%af%e3%83%b3%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%ae%e3%83%a3%e3%83%ab-%e5%89%8d%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2017/09/7cf15c224f4a20a4a781d6e69b529822730ed058.jpg","magnet":["b49dd6a2d8c8fe10d1080e00f503227bad963cf3"]}{"title":"[夜桜汉化组][170320][Team Tanuki]魔サキュバスKAMI ~ejaculate or arrive2~[FLASH GAME]","link":"http://www.llss.cool/wp/all/game/%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84170320team-tanuki%e9%ad%94%e3%82%b5%e3%82%ad%e3%83%a5%e3%83%90%e3%82%b9kami-%ef%bd%9eejaculate-or-arrive2%ef%bd%9eflash-game/","img":"http://llss.cool/wp/wp-content/uploads/2017/09/1.jpg","magnet":["A945622E0A6274D7F7535"]}{"title":"【生肉】Implicity I [Higashiyama Sho][東山翔]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91implicity-i-higashiyama-sho%e6%9d%b1%e5%b1%b1%e7%bf%94/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c966199sample5.jpg","magnet":["87038BE1A00251A41BDB1891923E3FF1A53FCC21"]}{"title":"【熟肉】[Queen Bee] Implicity I [東山翔] V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91queen-bee-implicity-i-%e6%9d%b1%e5%b1%b1%e7%bf%94/","img":"http://ww4.sinaimg.cn/large/0060lm7Tly1fjuwg2528rj30zk0k0q5r.jpg","magnet":["3a0b2ef51efa1ef0978a9d658eb3ff5780cdbeb6","2a3416ade84a39524fccedfdb5d4d07843174616"]}{"title":"刀剑神域:序列之争 剧场版 [720P 繁简外挂字幕]","link":"http://www.llss.cool/wp/all/op/%e5%88%80%e5%89%91%e7%a5%9e%e5%9f%9f%ef%bc%9a%e5%ba%8f%e5%88%97%e4%b9%8b%e4%ba%89-%e5%89%a7%e5%9c%ba%e7%89%88-720p-%e7%b9%81%e7%ae%80%e5%a4%96%e6%8c%82%e5%ad%97%e5%b9%95/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1fjxdy589l7j30ly0c8wh3.jpg","magnet":["E26IW3ZBOAC7K233OYXBT2J55TZA3P2C","26bc8b6f217005f56b7b762e19e93decf20dbf42","YOXKKGIKL3MWS3F6M6DAUG57QDCBWIWZ","c3aea5190a5ed9696cbe67860a1bbf80c41b22d9"]}{"title":"【熟肉】おいでよ!水龍敬ランド #2 下半身のアイドル☆ホーニィセントリー","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81%e6%b0%b4%e9%be%8d%e6%95%ac%e3%83%a9%e3%83%b3%e3%83%89-%ef%bc%832-%e4%b8%8b%e5%8d%8a%e8%ba%ab%e3%81%ae%e3%82%a2/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/1-8.jpg","magnet":["6576d70646b7eeaa0d4441b34715845cc27a39d2","2E6B2E10F7B7A162A6DB3185A2BC1AC1EA5C8F93"]}{"title":"【熟肉】自宅警備員 4thミッション インラン母娘とらな性活","link":"http://www.llss.cool/wp/all/anime/%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-4th%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%82%a4%e3%83%b3%e3%83%a9%e3%83%b3%e6%af%8d%e5%a8%98%e3%81%a8%e3%82%89%e3%81%aa%e6%80%a7%e6%b4%bb/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0gl3uj9dj31hc0u0e81.jpg","magnet":["ABDF1E85E0CAFA6A210D2917E18322AF7378EBDC","531BD273C3171B79515395D1FB6F48F2A45536B4"]}{"title":"【熟肉】JKとエロコンビニ店長 エロ可愛ママ姉・麻央~痴撮に見惚れるJKフレンズ V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9b%e3%83%9e%e3%83%9e%e5%a7%89%e3%83%bb/","img":"http://llss.cool/wp/wp-content/uploads/2017/09/1-1.jpg","magnet":["熟E2F43C8E15EE2322D09F00C1613966894EB5D527","生2CE17A0C3198C193F7D80DDD2257B08974F1F464"]}{"title":"【熟肉】オトメ*ドメイン THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%82%aa%e3%83%88%e3%83%a1%ef%bc%8a%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a71%e5%90%8d%e6%a7%98%e3%81%ab%e5%a3%b0/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c964780sample2.jpg","magnet":["熟7PJZGM5LIHNQPPTP64AJDKMV5U64C6LJ","熟C3A1A032183E45662C25C8EA0C2356C34A645709","熟0A1CD4AC7A0318DF793D5D7F1B6E528840B5D28B","生F260F40AC8925A7A176EB78EBABE5164C0F00A36","生2093F8D5104C8B7D838104CE82AD68990286EB92","生81B6E5CD1F49A6AAE898A99E4C8270DB55B1DB21"]}{"title":"【熟肉】熟女志願~KINBAKU~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e7%86%9f%e5%a5%b3%e5%bf%97%e9%a1%98%ef%bd%9ekinbaku%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/10/1.jpg","magnet":["熟2915112ad1655aca031175c49fe7cd3e73782ad2","熟88C2E2C95C8B69E1AC63D5E7A16A9FF29B3F9995","生9BA4C9BB6C05B6E2F48C83D8EC5690D506E296D4"]}{"title":"[夜桜字幕组] 2017年9月3D作品合集 [BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-2017%e5%b9%b49%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-big5gb/","img":"https://imghost.io/images/2017/10/02/FOW-012Mila_Red_Riding_Hood_20171002170612.jpg","magnet":["65F3D2F348665B505D6060B3E9C4E464D16FE9C3","1DFCD567344DA5D5E9979E73164A63EE64CA7543","68FFA461518E5EB2E66B59819FBB959C786D6C98","29321F3C873E74386D95CA8AAE12ED07F0C8FC14","2F7660C0F2D74461B48BEDED7D48870B7CDDEBEF","AC7E66737FD707F26FA5","619AC4F0CA2C591E85AB"]}{"title":"[夜桜字幕组][171003][opiumud]Yoshiwara rose[中文预告]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84171003opiumudyoshiwara-rose%e4%b8%ad%e6%96%87%e9%a2%84%e5%91%8a/","img":"https://imghost.io/images/2017/10/03/171003opiumudYoshiwararose_20171003144627.jpg","magnet":["89DAB0C8C1B636785331AD","][171003][opiumud]Yoshiwara"]}{"title":"2017年10月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b410%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/1-3.jpg","magnet":null}{"title":"【熟肉】ばくあね 弟しぼっちゃうぞ! THE ANIMATION ディレクターズカット版[导演剪辑版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%b0%e3%81%8f%e3%81%82%e3%81%ad-%e5%bc%9f%e3%81%97%e3%81%bc%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%e3%81%9e%ef%bc%81-the-animation-%e3%83%87%e3%82%a3%e3%83%ac/","img":"http://i.tianshi.info/lzkspfF.jpg","magnet":["熟615168C2BCA3DBDD4B8803E8BA9C63473A13153E","熟7D56868C3829E90C0DE840E8BA4AA2B6538D0BD8","生FDBB4EA422D15C89CC2A8D38044B269C7EF6065A"]}{"title":"【熟肉】OVA 妹ビッチに搾られたい #1 妹DE王様ゲーム ~合コンで妹とバッタリで王様ゲームする話~ V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91ova-%e5%a6%b9%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%831-%e5%a6%b9de%e7%8e%8b%e6%a7%98%e3%82%b2%e3%83%bc%e3%83%a0/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2.jpg","magnet":["熟20A822A8D4765186F3AC4EB03D3972600A5C3B26","熟FDD525F8AED517C88CF4DA0D77281A7E4897590A","生6F6E734FBB6F79ED4A7494A82D342BF586D53CBC"]}{"title":"【熟肉】さきゅばみすと・すとーりー ~のんひゅーまあんらいふ~ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%95%e3%81%8d%e3%82%85%e3%81%b0%e3%81%bf%e3%81%99%e3%81%a8%e3%83%bb%e3%81%99%e3%81%a8%e3%83%bc%e3%82%8a%e3%83%bc-%ef%bd%9e%e3%81%ae%e3%82%93%e3%81%b2%e3%82%85/","img":"http://wx2.sinaimg.cn/large/8c007b5cly1fkcfw7rhnkj20zk0k0q4w.jpg","magnet":["熟844EA656422CBF113994B076D2154014A564AEEE","熟20E56B6C0A22319B20568F3AE2363740150EBBC0","生48E175EF5F3127225826401110F9D6AFB6C9EFD2"]}{"title":"【熟肉】キメ恋! 高嶺の華と幼なじみがキマった理由 上巻 魔法の薬で恋の成就を V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%82%ad%e3%83%a1%e6%81%8b%ef%bc%81-%e9%ab%98%e5%b6%ba%e3%81%ae%e8%8f%af%e3%81%a8%e5%b9%bc%e3%81%aa%e3%81%98%e3%81%bf%e3%81%8c%e3%82%ad%e3%83%9e%e3%81%a3%e3%81%9f/","img":"http://wx1.sinaimg.cn/large/8c007b5cly1fkch5lpx2gj20zk0k0di4.jpg","magnet":["熟7e6a295f563369b619493920d2c3bd15f98965b3","生BBA859227833DA1C393444C332EFB89A9F096B6F"]}{"title":"【熟肉】魂インサート 下巻 神様の身体へおじゃまします V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e9%ad%82%e3%82%a4%e3%83%b3%e3%82%b5%e3%83%bc%e3%83%88-%e4%b8%8b%e5%b7%bb-%e7%a5%9e%e6%a7%98%e3%81%ae%e8%ba%ab%e4%bd%93%e3%81%b8%e3%81%8a%e3%81%98%e3%82%83%e3%81%be/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/6-1.jpg","magnet":["熟e01353ea0a74bf9af2975db81e165ffd229ae049","熟0223215F8FF23F06C36BCE095EEC759A9B0A153B","生31768B6C3720274ED1808FDEA0ED63DCEE16F5FF"]}{"title":"2017年9月 作品合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b49%e6%9c%88-%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://wx3.sinaimg.cn/large/8c007b5cly1fkayrbqu9sj216b0ovke1.jpg","magnet":["[170922][QueenBee]Implicity","ZW53NDV6MZGFJ6TYXXOY77J6TV3LLGFK"]}{"title":"【熟肉】龍堂寺士門の阴謀 前編 XINNUTIAO教 +特典","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e9%be%8d%e5%a0%82%e5%af%ba%e5%a3%ab%e9%96%80%e3%81%ae%e9%98%b4%e8%ac%80-%e5%89%8d%e7%b7%a8-xinnutiao%e6%95%99/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c895900table1.jpg","magnet":["熟B2388D2BCC0C93DC8769D92E08728A2B99D9751D","熟E51656ADB8580F23BD71E88FE04B725FDBAAB45B","熟WI4I2K6MBSJ5ZB3J3EXAQ4UKFOM5S5I5","生A162E2FC3F4EFC709C52D08942A4B7E91B082624"]}{"title":"魔穗字幕组合集阶段性整理","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84%e5%90%88%e9%9b%86%e9%98%b6%e6%ae%b5%e6%80%a7%e6%95%b4%e7%90%86/","img":"http://wx3.sinaimg.cn/large/beb104ebgy1fkmnza2lthj20zk0m8b29.jpg","magnet":["AA14091FDBB46FFDDDD1AA7E1F147532040E4403","A770F9B9D4F34CCCC2CDFD02F5A41680ACA2A692","FA666B208A3FD2898D980CD70040171635AE5A2F","51FB8FCED0B18FFC093D7644B6A97BDB3B2D4AF3","3440CB9E9BF1B4CC54B8A83299850D7F1E4440C4","2FE052117FC20B5ADADA550821024A12DF3177EC","71CA9715D95A80A3D62876F7DA61F0AED98E71B5","55443FE2F699387C8BDBA472386AC3A45B801849","78693F3628B7B661E10E539EF73D52B6489E89AA","E2309F7D0B1FE69D681D73B2733A838CF5353A32","475222BDA96F20C84100D7E723F05A580D1D29CA","0FB9358E8177C8ED11C1FC5EDA27355176AB98A6","02F8534C0D1E790F77EE8BF66BE1161154BEF78D","A2100D5968A0E7067EFCC1A04459A6E3FACC9BD8","4962E224E6B777308C094BC919D59D9A35693D66","B9FDF607A5C8CB9E4925E646A5FDFA3ED67E249A","440C9F55CFA484EF6CAD5D8CFA6ABDA9647CB33B","529AC1F3531B5DFDAEB805B5123A31DC44FEB95F","D5C8A839A44F5C753EDD1124BDE3A931C0D67F50","501C11A1C2E5894F7FE94BDAF5FF6E446B0D6A2C","40355BA2B93096EA7D5F97DB2B549492193985F9","E4CFA8B9B728DD1031303781D94D87F3123CC4F9","F27BB09D4AAEBB8F584FB48BCEDC2B5A933D8CFF","8A8B5ED18051874A27FDFE93BA46004B100338DE","C02F679C3C1B0EE0F3022E891C62F622500A1D15","765CA3D6F12DB9391DF4F3E8584400F8FB26F182","1381574C2957C8075DCC81DF9BCD0F1E5D6F4314","7F86F3EC0ED48E0B44398E12CBDF52BF5DD31113","DE2BC11E4395F45420477E1D8EC53FCCCB824675","A865DABBC46BD9B69BE192397A0376D0E9424116","178B193240E377DCC96B33275546E5A79F7F3D38","BE611D1CD8FD9DB2C84F663AC4827AA179D8A928","7D3EBA9DE8C3E64416938EA24E7238419AF9CD84","810ED55B7B22849F224BD139E8185D1112BA404D","F3B70913AD8E74C304A84D3DC9B0752ADCD6E2C5","799672E03C4ED5F8BD2813F27F6BB4F4066CE405","FDECF80407D0C5EFEC2CDDC476DFCD5F8F92A38C","F9F0C6FD15FB519C4380026F2DF5B5E3DD606A09","719FE3916D46FA0528DA6A23FC0A43C255F7666C","EA911D533A4E81F0FFDED8CDD64026D85361A175","1BD2FA36BCC24CC31C58970D88B2B14E873D6490","D407A8DFA30E25316DA5CE6D26600CEADF829C41","63A961B707C2ACAD5BFCDB79C2E3FB4AF5C6E574","1902DB27BBFF598BB29269C6E58B643D3BA27246","AF50532FF65D26652CA57DE77748C7E1C3C83F70","E0977EBEF70441992C75AAAD2AA4F2D899B5903C","432682714D796B942950D49410B0DB5F5B6CEFBD","016FF29ABB2B29666579C6B9477EEABA83D57E18","D91E9EA9987046DCA1E09D030A70DDF2819A7F41","7EF8B9C4F9C31A3F88924630128AFBCBCC6C8BA8","EAA7E8502177EDA5488FBA7ACA6EFF9BD0946883","0633D32668B1C56544F8A1F3EB12E7D78083FCB3","199091B9C8E891BF82355634D61036E2CFA09DD6","2B894F662D916C3DD40D2892A9BC920DCEFBD49C","762F82884A1E6F3C41DB7B8D49663C44A8DE8C27","70B40AAF44A784C88EAAEF69EC3F6EFED7627D93","A041D99A447A28D048D9C961435C07EFCED6BB27","74C06FE6540C59A26287F822EB8759E1B24FD2A2","91BCBEBD5B480B005764567ACD49B682DD57FF36","080766DEC27D27AA5A7673255AB6D6E944511614","976B6A188A12C6DEDDDC4315AF334EA6C1F5D32F","C7C7778361BD81FF207BF61E53C6B55A7C7D4301","E1BA15718AD355C269B960A939B1DA513F6A8355","5F539F51AE627BDB9BEA96868FA55EEA8D3864CE","F464280B9F11DC7042342F21A4B2640435DBEE59","F7686C86C54EEFA94AD7C668173EB25D1B050035","3BB2C249D2D92687725911E552A366C9A3B39798","BD2A69B3F2F814BF053B652B39C61F8365EC5369","B1CD966010B7F9FEFD1779A0E79CD34436DE938A","640CDB55A84F4AD9E5FA2F148FB2E0B39DB44EC1","7763FE288E5BCD2170DEF6015C63F43389A7AB25","782E02D8C42E6D96A8CE96C394EFC1F7F94E628B","C16B6DBC93DC412328387A0BD88D79232361AE6F","A770F9B9D4F34CCCC2CDFD02F5A41680ACA2A692","782E02D8C42E6D96A8CE96C394EFC1F7F94E628B","FA666B208A3FD2898D980CD70040171635AE5A2F","64850E3915E320591D58DC9792BBD977D1206E62","51FB8FCED0B18FFC093D7644B6A97BDB3B2D4AF3","C39EE6069444CCA2D75ED44387145560CB0A9E3F","3440CB9E9BF1B4CC54B8A83299850D7F1E4440C4","2FE052117FC20B5ADADA550821024A12DF3177EC","71CA9715D95A80A3D62876F7DA61F0AED98E71B5","55443FE2F699387C8BDBA472386AC3A45B801849","78693F3628B7B661E10E539EF73D52B6489E89AA","E2309F7D0B1FE69D681D73B2733A838CF5353A32","475222BDA96F20C84100D7E723F05A580D1D29CA","0FB9358E8177C8ED11C1FC5EDA27355176AB98A6","02F8534C0D1E790F77EE8BF66BE1161154BEF78D","A2100D5968A0E7067EFCC1A04459A6E3FACC9BD8","4962E224E6B777308C094BC919D59D9A35693D66","B9FDF607A5C8CB9E4925E646A5FDFA3ED67E249A","440C9F55CFA484EF6CAD5D8CFA6ABDA9647CB33B","529AC1F3531B5DFDAEB805B5123A31DC44FEB95F","D5C8A839A44F5C753EDD1124BDE3A931C0D67F50","501C11A1C2E5894F7FE94BDAF5FF6E446B0D6A2C","40355BA2B93096EA7D5F97DB2B549492193985F9","E4CFA8B9B728DD1031303781D94D87F3123CC4F9","F27BB09D4AAEBB8F584FB48BCEDC2B5A933D8CFF","8A8B5ED18051874A27FDFE93BA46004B100338DE","C02F679C3C1B0EE0F3022E891C62F622500A1D15","765CA3D6F12DB9391DF4F3E8584400F8FB26F182","1381574C2957C8075DCC81DF9BCD0F1E5D6F4314","7F86F3EC0ED48E0B44398E12CBDF52BF5DD31113","DE2BC11E4395F45420477E1D8EC53FCCCB824675","A865DABBC46BD9B69BE192397A0376D0E9424116","2612CFB2268C84DC6FBECD1BF9EB36E19C7394FA","178B193240E377DCC96B33275546E5A79F7F3D38","76DD886A99D6CF4CE8E270BB38949AC412226923","BE611D1CD8FD9DB2C84F663AC4827AA179D8A928","7D3EBA9DE8C3E64416938EA24E7238419AF9CD84","810ED55B7B22849F224BD139E8185D1112BA404D","F3B70913AD8E74C304A84D3DC9B0752ADCD6E2C5","799672E03C4ED5F8BD2813F27F6BB4F4066CE405","FDECF80407D0C5EFEC2CDDC476DFCD5F8F92A38C","F9F0C6FD15FB519C4380026F2DF5B5E3DD606A09","719FE3916D46FA0528DA6A23FC0A43C255F7666C","EA911D533A4E81F0FFDED8CDD64026D85361A175","1BD2FA36BCC24CC31C58970D88B2B14E873D6490","D407A8DFA30E25316DA5CE6D26600CEADF829C41","63A961B707C2ACAD5BFCDB79C2E3FB4AF5C6E574","1902DB27BBFF598BB29269C6E58B643D3BA27246","AF50532FF65D26652CA57DE77748C7E1C3C83F70","E0977EBEF70441992C75AAAD2AA4F2D899B5903C","432682714D796B942950D49410B0DB5F5B6CEFBD","016FF29ABB2B29666579C6B9477EEABA83D57E18","D91E9EA9987046DCA1E09D030A70DDF2819A7F41","7EF8B9C4F9C31A3F88924630128AFBCBCC6C8BA8","EAA7E8502177EDA5488FBA7ACA6EFF9BD0946883","0633D32668B1C56544F8A1F3EB12E7D78083FCB3","199091B9C8E891BF82355634D61036E2CFA09DD6","2B894F662D916C3DD40D2892A9BC920DCEFBD49C","762F82884A1E6F3C41DB7B8D49663C44A8DE8C27","70B40AAF44A784C88EAAEF69EC3F6EFED7627D93","A041D99A447A28D048D9C961435C07EFCED6BB27","74C06FE6540C59A26287F822EB8759E1B24FD2A2","91BCBEBD5B480B005764567ACD49B682DD57FF36","080766DEC27D27AA5A7673255AB6D6E944511614","976B6A188A12C6DEDDDC4315AF334EA6C1F5D32F","C7C7778361BD81FF207BF61E53C6B55A7C7D4301","E1BA15718AD355C269B960A939B1DA513F6A8355","E926CA8AF17480444D4F06BADA84AA30A2F3170C","E2BE90C968A307AA0C14D8445DB4F202218EC2A9","4DFB42BFF9AFB98F711523232280BA470D6746DE","28B7DFA5874FB89D62BADA4864F439575794BF7B","7BF6C9FE62513ECE0FD36ABDA9E6CBCE1F8DE4EA","F3F914B09EBEFC9C66CB096941D04F88735F6743","A5A974F05F1E291BE4D94B0B3467D24530AF3B45","8DC643F4FC9D438A3B58F9CAC18F0E00CDC12E07"]}{"title":"【熟肉】一求X魂 前編[ごばん]","link":"http://www.llss.cool/wp/all/anime/%e4%b8%80%e6%b1%82x%e9%ad%82-%e5%89%8d%e7%b7%a8%ef%bc%bb%e3%81%94%e3%81%b0%e3%82%93%ef%bc%bd/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/8.jpg","magnet":["熟42de532aa5b634c0817ee5ca46ba9d6bb276170f","熟AFOMKWJCOSFXCEYVSATUOOMAF7GSJRUY","生B48EE454109574B19ED63C416839F7C7CAFBB4AC"]}{"title":"[StudioFOW] 作品合集 (Gallery / Movie)","link":"http://www.llss.cool/wp/all/anime/studiofow-%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-%ef%bc%88gallery-movie%ef%bc%89/","img":"http://wx2.sinaimg.cn/large/d4cf862bly1fkvxt3shj1j210b0gidqt.jpg","magnet":["003]Coliseum_of_Lust","006]Beastly_Bacchanalia","007]Scarlet_Nights_Episode_01","010]The_Royal_Treatment","012]Mila_Red_Riding_Hood","24a29dfdc231a2d86d3b2e035fa747fd6fd1fec6"]}{"title":"【熟肉】気に入った膣にいきなり中出しOKなリゾート島 part2【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e6%b0%97%e3%81%ab%e5%85%a5%e3%81%a3%e3%81%9f%e8%86%a3%e3%81%ab%e3%81%84%e3%81%8d%e3%81%aa%e3%82%8a%e4%b8%ad%e5%87%ba%e3%81%97ok%e3%81%aa%e3%83%aa%e3%82%be%e3%83%bc%e3%83%88%e5%b3%b6-part2/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/eade87003af33a876b755415cd5c10385243b588.png","magnet":["b35a1dc04ff31ec2b032c94af2373ed1120cafbd","D949391F56CC843E85F09D407FA325376E1A2302","3FETSH2WZSCD5BPQTVAH7IZFG5XBUIYC"]}{"title":"【熟肉】転生剣奴の子作り闘技場(ハーレムコロッセオ)「ケモ耳ちっぱい・ライティウス ~ケダモノ迫るマイクロボディ」","link":"http://www.llss.cool/wp/all/anime/%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad%e3%83%83%e3%82%bb%e3%82%aa%ef%bc%89/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fkylnwec5zj21hc0u042w.jpg","magnet":["熟3643CAC217F9458708C45AA77BEAE7E0141AE3EE","生DFA504E985BFB2D9406CF3C7902D9B86D64793B1"]}{"title":"【熟肉】学園侵触 ×× of the Dead 下巻【附前作】 V2","link":"http://www.llss.cool/wp/all/anime/%e5%ad%a6%e5%9c%92%e4%be%b5%e8%a7%a6-xx-of-the-dead-%e4%b8%8b%e5%b7%bb/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fky3l1fwi3j20zk0k0q47.jpg","magnet":["熟D65D39A5987A59358F060CC4402FE6AFEE03B88C","熟8601FDAE40A652BD2085D9A2D71B509688D86D51","生C5A999E8FCC3CCE59DCE2FAEBF0F25FEA75D83CC"]}{"title":"[夜桜汉化组][170426][yosino]《環》简体中文汉化补丁 V1.0[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84170426yosino%e3%80%8a%e7%92%b0%e3%80%8b%e7%ae%80%e4%bd%93%e4%b8%ad%e6%96%87%e6%b1%89%e5%8c%96%e8%a1%a5%e4%b8%81-v1-0flash-gamecn/","img":"https://www.imghost.io/images/2017/10/28/170426yosinoV1.0FLASHGAMECN.png","magnet":["981871B05019819EB5ECEB9"]}{"title":"【熟肉】かぎろひ~勺景~ Another 第一夜 少女との蜜月、その終わり","link":"http://www.llss.cool/wp/all/anime/%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e4%b8%80%e5%a4%9c-%e5%b0%91%e5%a5%b3%e3%81%a8%e3%81%ae%e8%9c%9c%e6%9c%88%e3%80%81%e3%81%9d%e3%81%ae%e7%b5%82/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c968584sample2.jpg","magnet":["熟HX7NKL37FXZ6GVS3Y5OQXGN3V3NUDN2J","熟3DFED52F7F2DF3E3565BC75D0B99BBAEDB41B749","生DC700CC17B4AB17D4A59E0A23C6C7B0E784710F7"]}{"title":"【熟肉】は~とふるママン THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%af%ef%bd%9e%e3%81%a8%e3%81%b5%e3%82%8b%e3%83%9e%e3%83%9e%e3%83%b3-the-animation/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2-2.jpg","magnet":["熟2145f66bd870a666189be9184fb212b2807f3985","熟49055adff2a6677b74a4802be6f1e53e8e57a361","熟672CA6C5BE6675E3DB03298C439A68480B85D831","生2547C2B96D79256957318CDE228C11A5BDF40422"]}{"title":"2017年10月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b410%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fkcf9edihzj20zk0k0wgi.jpg","magnet":["XORAKMKQDWQJK2UHZ4LGORK52CGVX2N5","QCFQALRMPB35BHJKOWVX7VXALQKZTCK4","bba20531501da0956a87cf1667455dd08d5be9bd","808b002e2c7877d09d2a75ab7fd6e05c1599895c"]}{"title":"2017年11月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b411%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c966439sample6.jpg","magnet":null}{"title":"[夜桜字幕组]2017年10月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b410%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/11/03/opiumud-017YorhatroopsexterminationplanCE1080P_20171103131320.jpg","magnet":["89B1CE440617E44D909D9D85E2A1088CC97DBEBF","54745A784505F8CCAE2A944567FBAF8135284FD2","EEEA5CB78257A6015EB278FF5A8CC5C53523F445","44C503A6AFD05EF1193A11B8D432D87A52B00D37","61F84ACDD63D2275C3C8D046EB366F61203CE1F3","F5E8A194BB2606A020D2E"]}{"title":"【熟肉】OVA 妹ビッチに搾られたい #2 妹は生オナホ ~サヤカはお兄ちゃん専用X玩具~【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91ova-%e5%a6%b9%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%832-%e5%a6%b9%e3%81%af%e7%94%9f%e3%82%aa%e3%83%8a%e3%83%9b/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c966439sample5.jpg","magnet":["熟99D03A24888C20E3003C4DD4FDC2A1362E9153D5","熟C51C9F116798603A39455ADA1BCF1977F278A1C3","生37WZYNZADLWL2LTPRAMAVAWENFLIZE6V","生DFED9C37201AECBD2E6F88180A82C469568C93D5"]}{"title":"[リフル] 姪っこのふくらみ ~いつもの中出しごっこ~","link":"http://www.llss.cool/wp/all/anime/%e3%83%aa%e3%83%95%e3%83%ab-%e5%a7%aa%e3%81%a3%e3%81%93%e3%81%ae%e3%81%b5%e3%81%8f%e3%82%89%e3%81%bf-%ef%bd%9e%e3%81%84%e3%81%a4%e3%82%82%e3%81%ae%e4%b8%ad%e5%87%ba%e3%81%97%e3%81%94%e3%81%a3/","img":"http://ww2.sinaimg.cn/large/0060lm7Tly1fl8beldboxj30zk0k00ug.jpg","magnet":["dd6d71013798e7cb3bf4c7fcc0b0b64a3b314611"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【1-5】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/11/1-2.jpg","magnet":["AA32E3B1918F4D03CB672C7F2DAA525ACB54645A","5BCF1CB73A18385F3373B38405BF9ACFC03F212D","41B366977773083E1F1651D98CBA12B3439E5CCF","36104B5ACB6EDFCE5A6FE913886439474038F763","D1CD53F4E0C65CB533947670C21251B48560B31C"]}{"title":"[@OZ] 巨X麻雀天使 NODOKA 孕むわっ!","link":"http://www.llss.cool/wp/all/anime/oz-%e5%b7%a8x%e9%ba%bb%e9%9b%80%e5%a4%a9%e4%bd%bf-nodoka-%e5%ad%95%e3%82%80%e3%82%8f%e3%81%a3/","img":"http://ww1.sinaimg.cn/large/0060lm7Tly1flcu9ml2h9j30zk0k0aet.jpg","magnet":["88d2d2b7fc651ce6334d1360a6a8ffe542be3ab2"]}{"title":"[@OZ] 古書堂奇譚 鷺沢無情","link":"http://www.llss.cool/wp/all/anime/oz-%e5%8f%a4%e6%9b%b8%e5%a0%82%e5%a5%87%e8%ad%9a-%e9%b7%ba%e6%b2%a2%e7%84%a1%e6%83%85/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1flcsuc5tjuj30zk0k0wk1.jpg","magnet":["ce2f570e07744e9711396e12678a483e219abb30"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【06】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-2/","img":"http://hacg.cool/wp/wp-content/uploads/2017/11/5e1c1762f6246b6082e2d37be0f81a4c500fa2ec.jpg","magnet":["33B4F8EF9B96D18B4DD58FF30DD17D507D0B5DF1"]}{"title":"[iLand] キモヲタ教師が、可愛い女生徒に 活指導!!","link":"http://www.llss.cool/wp/all/anime/iland-%e3%82%ad%e3%83%a2%e3%83%b2%e3%82%bf%e6%95%99%e5%b8%ab%e3%81%8c%e3%80%81%e5%8f%af%e6%84%9b%e3%81%84%e5%a5%b3%e7%94%9f%e5%be%92%e3%81%ab-%e6%b4%bb%e6%8c%87%e5%b0%8e/","img":"http://ww2.sinaimg.cn/large/0060lm7Tly1flotlgg7b5j30zk0k0jt8.jpg","magnet":["71e8eafdf6e26a8bf99883bd65e689db7d7a4e15"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【07-8】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-3/","img":"http://hacg.cool/wp/wp-content/uploads/2017/11/c56b1ffd3a7ab69fd352801e5250d280.jpg","magnet":["6782C76AF1DD1C6AD86488D859F7E723F9808CF1","67F00336B7EFDBD78A629D32709A7A8DD49DB30F"]}{"title":"【熟肉】ばくあね2 弟いっぱいしぼっちゃうぞ! THE ANIMATION V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%b0%e3%81%8f%e3%81%82%e3%81%ad2-%e5%bc%9f%e3%81%84%e3%81%a3%e3%81%b1%e3%81%84%e3%81%97%e3%81%bc%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%e3%81%9e%ef%bc%81-the-anim/","img":"http://ww1.sinaimg.cn/large/0060lm7Tly1fm3ri6hkfqj30zk0k0tag.jpg","magnet":["熟CFF9A8BC5E0F22E947E0A191FCB1C450CFD03475","熟14D17F5658FA49AA15A594252D6500E69E1B3E49","熟0708901f3224f6e6e9735a6648166f253cf3813e","生1C923EEF3DCBC2CF4099625DA24862EB1DF5BC25"]}{"title":"【熟肉】Implicity II [東山翔] V2","link":"http://www.llss.cool/wp/all/anime/implicity-ii-%e6%9d%b1%e5%b1%b1%e7%bf%94/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2-3.jpg","magnet":["熟7BD9EE8E99913E89C47AC09324AD8AA7FA74B415","熟FF409E632BCF0C0D92AF880C75A09BD98CFAF927","生996DD2670C20CB53337E1E156B7AB40456403B4C"]}{"title":"【熟肉】小女ラムネ 第3話 ゆかたと花火と夏祭り V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac3%e8%a9%b1%e3%80%80%e3%82%86%e3%81%8b%e3%81%9f%e3%81%a8%e8%8a%b1%e7%81%ab%e3%81%a8%e5%a4%8f%e7%a5%ad%e3%82%8a/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138table2.jpg","magnet":["熟D20EE5870F069C7E9A473C46404C81660668DBA6","熟8274EEB5A044EFAEB8BE0F16DE45CB70B4D2AB84","熟C1C63E3E164232975115153133AF32B55ED70FFF","生5280931283715A14B1CC6B0058A65A05108156D2"]}{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様は幽霊が苦手の巻 V2","link":"http://www.llss.cool/wp/all/anime/%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b%e3%81%8a%e8%a9%b1-%e8%8b%a5%e5%a5%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2-4.jpg","magnet":["熟B3F93FB0F670A5ED3B67C9D8CA503A12569058FC","熟71a3369156b546aea9c11d12a4356b18f9383aa7","生FCEB7BBF27C8AFDFB179DE0F5D2517B96694040E"]}{"title":"【熟肉】かぎろひ~勺景~ Another 第二夜 夕暮れの教室、誘う艶髪 V2","link":"http://www.llss.cool/wp/all/anime/%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e4%ba%8c%e5%a4%9c-%e5%a4%95%e6%9a%ae%e3%82%8c%e3%81%ae%e6%95%99%e5%ae%a4%e3%80%81%e8%aa%98%e3%81%86%e8%89%b6/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c973228sample11.jpg","magnet":["熟5E76BE0E2648EA100059F22D6F8D4E5AEDC27D79","熟5632AB75C8D798C930ED5B3514FA0C81CC2FDF32","生D74DA1977154FB91A58B311E595F105BC33AD796"]}{"title":"【熟肉】転生剣奴の子作り闘技場(ハーレムコロッセオ)「へっぽこ爆x皇女・マルシェ~うな垂れ鎧と強気な剣」V2","link":"http://www.llss.cool/wp/all/anime/%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad%e3%83%83%e3%82%bb%e3%82%aa%ef%bc%89-2/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0fgq4h42j31hc0u0na8.jpg","magnet":["熟ae8e4d85a9a65f9a33cf9a9944d1e7ee7127ff02","熟548278863B1BF2C56DAD0390C8CE33075ADC3AD8","熟1B72D871D0EC88EA2E6848D119B63C27E74FDC93","生BA305304B55F0FBEA4A045E63C4B2B2BB5032B9C"]}{"title":"2017年11月合集 V3 【增魔穗】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b411%e6%9c%88%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/0060lm7Tly1fm3ri6hs5gj30zk0k0q4f.jpg","magnet":["5F9A7F2BBEA0EC968E5E8F567F1DA7C96339C0B6","C2491862D5ED99E42A47949C83C564889AC54A5F","9E2A6B270BF37A54387EFAE10F990667A3D24E55","45b198ed07e9f6814ed5c3713c38df846139ae32","97D85F3EA9296BA65F8E4E108DEC2F86094D4477","b86883f8e2b905bd299275a698c361ee2f1e094a"]}{"title":"2017年12里番预告与期待调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b412%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e6%9c%9f%e5%be%85%e8%b0%83%e6%9f%a5/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/816d1912521c7491f10fb13bc977ac66.jpg","magnet":null}{"title":"[FuenoNe Works] 裏庭の土地神様 后院的土地神","link":"http://www.llss.cool/wp/all/anime/fuenone-works-%e8%a3%8f%e5%ba%ad%e3%81%ae%e5%9c%9f%e5%9c%b0%e7%a5%9e%e6%a7%98-%e5%90%8e%e9%99%a2%e7%9a%84%e5%9c%9f%e5%9c%b0%e7%a5%9e/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1fm1jj6pokoj31hc0tztda.jpg","magnet":["2199cf111ed2574dd2ea2624481d23714ab278a0"]}{"title":"【熟肉】OVA 巨RU大家族催眠 #1 巨RUぞろいの隣人妻 V2","link":"http://www.llss.cool/wp/all/anime/ova-%e5%b7%a8ru%e5%a4%a7%e5%ae%b6%e6%97%8f%e5%82%ac%e7%9c%a0-%ef%bc%831-%e5%b7%a8ru%e3%81%9e%e3%82%8d%e3%81%84%e3%81%ae%e9%9a%a3%e4%ba%ba%e5%a6%bb/","img":"http://wx2.sinaimg.cn/large/8c007b5cly1fm9ltcxz1sj20zk0k00us.jpg","magnet":["熟37EC2B753D562C61C66E5BAEE4083A66D59FCC61","熟330ef77ae78ef4f3ad26e3c3fc93b35f483aae75","生E3A71E50165A66B36165D12A3282002A113A5E8C"]}{"title":"【熟肉】ジュヴナイルポルノグラフィ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%82%b8%e3%83%a5%e3%83%b4%e3%83%8a%e3%82%a4%e3%83%ab%e3%83%9d%e3%83%ab%e3%83%8e%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3-the-animation/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fm9m93z11pj20zk0k00uh.jpg","magnet":["熟8B65E3244B88DF2C14DED05ED4B1E015FB957C06","熟558757BFA1C8FD21557AFA890C329F5B5BA2DC83","生BB1FC6C98D80F11EB2BDFE726B87EAE6D1F469D1"]}{"title":"[Studio F.O.W.] Nier: First [Ass]embly [FOW-013]","link":"http://www.llss.cool/wp/all/anime/studio-f-o-w-nier-first-assembly-fow-013/","img":"http://ww4.sinaimg.cn/large/a15b4afegy1fm2pidh81pj20zk0k0jso.jpg","magnet":["23f822b20eaae22d71de3b8f914323c8a90d0501"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【09】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-4/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/1.jpg","magnet":["274f55658f698914dda731ab8d1cf441269858a3"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【10】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-5/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-1.jpg","magnet":["2509b5cad31a4e55a80e8144dabc8eb25b8cd446"]}{"title":"[夜桜字幕组]2017年11月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b411%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/12/08/boshisoukan_01_20171208192715.jpg","magnet":["5FEF6CA84E14ED78C41DD86889F007C0AACD971F","6E0C05ECDF1C309371F5FE9F7DC9FE8A584B948F","F57774F18EBEC54FCD7911EA5C5F879B06C9F8F9","A35C6243C88D5383CCA24DE24EA06D5E326B18EE","D288AC48989C4F74B54F8FD9859BD51A30637BD8","10E147BD58DAB1AB90FB","246D6F3F889377553AC6"]}{"title":"【熟肉】ヒトヅマライフ ワンタイムギャル 下巻【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%92%e3%83%88%e3%83%85%e3%83%9e%e3%83%a9%e3%82%a4%e3%83%95-%e3%83%af%e3%83%b3%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%ae%e3%83%a3%e3%83%ab-%e4%b8%8b%e5%b7%bb%e3%80%90/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/1-3.jpg","magnet":["b4f6315345acc2672a0638b490f998d8401af2fa"]}{"title":"【熟肉】一求RU魂 後編[ごばん]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e4%b8%80%e6%b1%82ru%e9%ad%82-%e5%be%8c%e7%b7%a8%ef%bc%bb%e3%81%94%e3%81%b0%e3%82%93%ef%bc%bd/","img":"http://wx3.sinaimg.cn/large/8c007b5cly1fmk30ztl72j20np0dbgmp.jpg","magnet":["f0a37f6c7f53798e72c843d46ae05d82c46e1273","E535CFB159539957CF5388D2773AEB81F24B7D79"]}{"title":"[TMA] Faith/Grand Orgasm(Fate/Grand Order)","link":"http://www.llss.cool/wp/all/anime/tma-faith%ef%bc%8fgrand-orgasm%ef%bc%88fategrand-order%ef%bc%89/","img":"https://ws1.sinaimg.cn/large/a15b4afegy1fmggqdu8vtj20jg07uab2.jpg","magnet":["8d76f868885b321b9677eda76b1c88fe0238708f"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【11】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-6/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-3.jpg","magnet":["37ead6be4af05965564f3ced4edc12eb099e674a"]}{"title":"【熟肉】パコマネ わたし、今日から名門野球部のXIN処理係になります… THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%91%e3%82%b3%e3%83%9e%e3%83%8d-%e3%82%8f%e3%81%9f%e3%81%97%e3%80%81%e4%bb%8a%e6%97%a5%e3%81%8b%e3%82%89%e5%90%8d%e9%96%80%e9%87%8e%e7%90%83%e9%83%a8%e3%81%aex/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/1-12.jpg","magnet":["熟1CD229BB12F2559B3FEC9472052FB4A009CD8D97","生F9D6C529445874FD0AB9302E976EF0C4A16B280E"]}{"title":"【熟肉】八尺八話快樂巡り~異形怪奇譚~ THE ANIMATION「八尺様 完結編」「八尺様 夢物語」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e5%85%ab%e5%b0%ba%e5%85%ab%e8%a9%b1%e5%bf%ab%e6%a8%82%e5%b7%a1%e3%82%8a%ef%bd%9e%e7%95%b0%e5%bd%a2%e6%80%aa%e5%a5%87%e8%ad%9a%ef%bd%9e-the-animation%e3%80%8c%e5%85%ab%e5%b0%ba%e6%a7%98-%e5%ae%8c/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/c977015sample5.jpg","magnet":["e43b03731220bb3a0cc6638576a3714ec4d7e1b6"]}{"title":"【熟肉】キメ恋! 高嶺の華とXなじみがキマった理由 下巻 正妻はどっち?【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%82%ad%e3%83%a1%e6%81%8b%ef%bc%81-%e9%ab%98%e5%b6%ba%e3%81%ae%e8%8f%af%e3%81%a8x%e3%81%aa%e3%81%98%e3%81%bf%e3%81%8c%e3%82%ad%e3%83%9e%e3%81%a3%e3%81%9f%e7%90%86/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/c981726sample2.jpg","magnet":["3e44e6e3c21d1ff47873f717dfeecfc12c75fa75"]}{"title":"【熟肉】JKとエロコンビニ店長 エロ可愛近親・母娘姪(まおゆいしー)~憧れ穿たれXX仕置き~【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9b%e8%bf%91%e8%a6%aa%e3%83%bb%e6%af%8d/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/c977590table2.jpg","magnet":["89ec663f876b3030713654a183a18f505ead0c24"]}{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様はお祭りに行きたいの巻【附前作】","link":"http://www.llss.cool/wp/all/anime/%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b%e3%81%8a%e8%a9%b1-%e8%8b%a5-2/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/1-6.jpg","magnet":["44bf58186c4f8b54fa0a9ae3de84f1b34fb79bf0","[collaborationworks]"]}{"title":"【熟肉】おいでよ! 私立ヤリま×り学園 「潔ぽこ会長・ミラ~拗ねX抉る桃Xボール~」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92-%e3%80%8c%e6%bd%94%e3%81%bd%e3%81%93/","img":"http://wx3.sinaimg.cn/large/8c007b5cly1fmtc34vacvj20np0db0tq.jpg","magnet":["722627aeefb8a83139cd79dc81d7b34e912f8baa"]}{"title":"2017年12里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b412%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/c968967sample1.jpg","magnet":["a1ee6eb358add73fe0026dd40fc19f94becefad5"]}{"title":"【表番】巧克力与香子兰/NEKOPARA OVA","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e8%a1%a8%e7%95%aa%e3%80%91%e5%b7%a7%e5%85%8b%e5%8a%9b%e4%b8%8e%e9%a6%99%e5%ad%90%e5%85%b0nekopara-ova/","img":"http://wx2.sinaimg.cn/large/8c007b5cly1fms2fye1djj21yu1fokjl.jpg","magnet":["93A65336E796CB364D2F39E8425B45CE30935FDF"]}{"title":"2018年1月里番预告与期待调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b41%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e6%9c%9f%e5%be%85%e8%b0%83%e6%9f%a5/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-5.jpg","magnet":null}{"title":"[にじいろばんび] 若菜ちゃんの初エッチ","link":"http://www.llss.cool/wp/all/anime/%e3%81%ab%e3%81%98%e3%81%84%e3%82%8d%e3%81%b0%e3%82%93%e3%81%b3-%e8%8b%a5%e8%8f%9c%e3%81%a1%e3%82%83%e3%82%93%e3%81%ae%e5%88%9d%e3%82%a8%e3%83%83%e3%83%81/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1fmy19p9bk1j30zk0k044u.jpg","magnet":["3635c53bbc9fa16be5edb077b1bc2c08cfeac072"]}{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【12】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-7/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/1-2.jpg","magnet":["3e0063909af80f071a73872b540aba4b3b81e36d","4529fa04da6f427762e9e4dbbd4094c93f7198c4"]}{"title":"【熟肉】レジデンス 下巻 ある少女の話【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%8b%e5%b7%bb-%e3%81%82%e3%82%8b%e5%b0%91%e5%a5%b3%e3%81%ae%e8%a9%b1/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/4.jpg","magnet":["49a3b8becaa9db3282c9ca823c868144d6ff4fd8","5b8327ac00417a31398cf7ae77cf6e7a1e43ee2b"]}{"title":"【熟肉】Jewelry THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91jewelry-the-animation/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-4.jpg","magnet":["72e95c9001a4949d0735bc1a169d47315e19ee4d"]}{"title":"[夜桜字幕组]2017年12月3D作品合集介绍[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b412%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86%e4%bb%8b%e7%bb%8dbig5gb/","img":"https://imghost.io/images/2018/01/10/FOW-013FirstAssembly_20180110200244.jpg","magnet":["E91CD7598DFAE6DA9602FA26F4EA53D5D371B369","64828336FA497CA50943FE3B0932516C4BB4486A","808146C99485CCFD544AAE59AD4872B48EB34CFB","6AE53CAB0068EEE1EF6BAC5DD5FDC99600EDCFA9","17BFED01F36154915E71BEF271B1E04741924ADA","B3AF4D38F4D658D6DC56FD67C0FA24951E3D1686","26A09E2F3A3F296445FB9"]}{"title":"【熟肉】OVA 巨RU大家族催眠 #2 町中全ての女を手に入れろ!【附前作】","link":"http://www.llss.cool/wp/all/anime/ova-%e5%b7%a8ru%e5%a4%a7%e5%ae%b6%e6%97%8f%e5%82%ac%e7%9c%a0-%ef%bc%832-%e7%94%ba%e4%b8%ad%e5%85%a8%e3%81%a6%e3%81%ae%e5%a5%b3%e3%82%92%e6%89%8b%e3%81%ab%e5%85%a5%e3%82%8c%e3%82%8d%ef%bc%81/","img":"https://wx1.sinaimg.cn/large/0060lm7Tly1fnvicmhbimj30uu0hcdjb.jpg","magnet":["熟c677eb04f0e72f577c1e49d98368d85b04f6003e","生530EA0221D4940C7A4BFBFDAECF17F6E9DCA0603","生36E5DF18F95DB35FB516DD13259ED9A281B874D2"]}{"title":"[@OZ(アットオズ)] 霊夢封Y 禁断のLJ地獄篇 DL版","link":"http://www.llss.cool/wp/all/anime/oz%ef%bc%88%e3%82%a2%e3%83%83%e3%83%88%e3%82%aa%e3%82%ba%ef%bc%89-%e9%9c%8a%e5%a4%a2%e5%b0%81y-%e7%a6%81%e6%96%ad%e3%81%aelj%e5%9c%b0%e7%8d%84%e7%af%87-dl%e7%89%88/","img":"https://ww3.sinaimg.cn/large/0060lm7Tly1fnvhb10mbcj30zk0k0taq.jpg","magnet":["36cd06055e92730c4bb8b656b50212b4041deedf"]}{"title":"【熟肉】ドSなマイナ会長サマがMノートに支配されました。 ~xみねだるドSなドM~","link":"http://www.llss.cool/wp/all/anime/%e3%83%89s%e3%81%aa%e3%83%9e%e3%82%a4%e3%83%8a%e4%bc%9a%e9%95%b7%e3%82%b5%e3%83%9e%e3%81%8cm%e3%83%8e%e3%83%bc%e3%83%88%e3%81%ab%e6%94%af%e9%85%8d%e3%81%95%e3%82%8c%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/1-6.jpg","magnet":["熟B8BF131B867E733D9760141DBB7C3C16C31B8A18","生7BEA0DE8AE262D2E2D964F0CEC4EC4A124BA074F"]}{"title":"【熟肉】転生剣奴の子づくり闘技場(ハーレムコロッセオ)「へっぽこどS皇女・ルナハソール~お仕置きちびりの嗜xスパン」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e3%81%a5%e3%81%8f%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad%e3%83%83%e3%82%bb%e3%82%aa/","img":"https://ws1.sinaimg.cn/large/659503caly1fnxrmw7dhyj20uu0hcwj9.jpg","magnet":["熟412925352DA29DCB0BD2DEDB2BB4E811D7FD4CA1","生C9C62939736C7EEDA9B9BE8D038718160CA4B780"]}{"title":"【熟肉】かぎろひ~勺景~ Another 第三夜 乱れる淑女、悪意の花踊る[附前作]","link":"http://www.llss.cool/wp/all/anime/%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e4%b8%89%e5%a4%9c-%e4%b9%b1%e3%82%8c%e3%82%8b%e6%b7%91%e5%a5%b3%e3%80%81%e6%82%aa%e6%84%8f%e3%81%ae%e8%8a%b1/","img":"http://llss.cool/wp/wp-content/uploads/2017/12/c981449sample1.jpg","magnet":["熟6BC43BE048F54DF50101B23146546B3261A2B13D","生E9387052409988801560262A314F567FD67749E3"]}{"title":"【熟肉】リアルエロゲシチュエーション! THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%a8%e3%83%ad%e3%82%b2%e3%82%b7%e3%83%81%e3%83%a5%e3%82%a8%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%ef%bc%81-the-animation/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/33.jpg","magnet":["熟029849a1a5ba87d945773effccda599ebdcf5e4f","生92986726ACDAAE35844C0CD363F1D0CDA91AF15C"]}{"title":"2018年1月里番合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b41%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"https://ww4.sinaimg.cn/large/0060lm7Tly1fnqvewtkptj30uu0hcgog.jpg","magnet":["e09b3040402472de51d165c919da7afe14d8f511"]}{"title":"2018年2月里番预告与期待调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/1-7.jpg","magnet":null}{"title":"【熟肉】OVA ようこそ! スケベエルフの森へ #1 救世主様、村中のエルフをませてください","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91ova-%e3%82%88%e3%81%86%e3%81%93%e3%81%9d%ef%bc%81-%e3%82%b9%e3%82%b1%e3%83%99%e3%82%a8%e3%83%ab%e3%83%95%e3%81%ae%e6%a3%ae%e3%81%b8-%ef%bc%831-%e6%95%91%e4%b8%96/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/3-2.jpg","magnet":["熟4D41BF596D9E34DAAA419CD8E7C35EFF1114A3AB","生E85FEE3A3A4A6F54F9AA208EB812AFF17A35FC4A"]}{"title":"【熟肉】ねぇ、…しよ 前編[ピジャ]","link":"http://www.llss.cool/wp/all/anime/%e3%81%ad%e3%81%87%e3%80%81%e3%81%97%e3%82%88-%e5%89%8d%e7%b7%a8%e3%83%94%e3%82%b8%e3%83%a3/","img":"https://ws1.sinaimg.cn/large/659503cagy1fo4rwcm6iwj20uu0hcdjp.jpg","magnet":["熟9ea6facd9a1c85f3c51c8642fda967471cccd1ca","生FE4F7307C7F821E06D0AB4FF8410B779479B86B9"]}{"title":"[梅麻吕]杉本翔子のSexyトレーナー Sexy trainer Shoko Sugimoto","link":"http://www.llss.cool/wp/all/game/%e6%a2%85%e9%ba%bb%e5%90%95%e6%9d%89%e6%9c%ac%e7%bf%94%e5%ad%90%e3%81%aesexy%e3%83%88%e3%83%ac%e3%83%bc%e3%83%8a%e3%83%bc-sexy-trainer-shoko-sugimoto/","img":"http://wx2.sinaimg.cn/mw690/006GutMagy1fo8cbfqqehj31hc0u0e81.jpg","magnet":["37AD13FEE5E981C696732F5E32F3947AB8056976","3876C41C1475656F7E11007DF8056B1C103A4055"]}{"title":"[夜桜字幕组]2018年1月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842018%e5%b9%b41%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2018/02/10/180210opiumudYoshiwararoseBIG5_20180210140433.jpg","magnet":["308835EDC9E690DC647A76DECE79C81E74CE86B5","F536451F14A072B59274DA3781030919C75A1ED4","C6C2858270F9CB1A1199983F6D7E831132022564","28D15D7653BC3D39A223B7CE78CCEF71B244C45F","8F3C44AC2D438A6A1263C666E8CD8CD4FE39DA55","1BC1C989E0C93B69556E11"]}{"title":"【熟肉】Cherry&GAL’s↑↑ Episode1 ハマッちゃうかも!","link":"http://www.llss.cool/wp/all/anime/cherry%ef%bc%86gals%e2%86%91%e2%86%91-episode1-%e3%83%8f%e3%83%9e%e3%83%83%e3%81%a1%e3%82%83%e3%81%86%e3%81%8b%e3%82%82%ef%bc%81/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/3.jpg","magnet":["熟77378a470e51d9794a3f29cec2aca92bcfb0c00c","生332931865A69751D31FFE205501094D196EDC5C9"]}{"title":"【熟肉】エンコ―J●ビッチギャル オジサンとなまパコX活 part.1","link":"http://www.llss.cool/wp/all/anime/%e3%82%a8%e3%83%b3%e3%82%b3%e2%80%95j%e2%97%8f%e3%83%93%e3%83%83%e3%83%81%e3%82%ae%e3%83%a3%e3%83%ab-%e3%82%aa%e3%82%b8%e3%82%b5%e3%83%b3%e3%81%a8%e3%81%aa%e3%81%be%e3%83%91%e3%82%b3x%e6%b4%bb-part-1/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/1-2.jpg","magnet":["熟df78caeefff6d2de7a5fd658012c719137386b82","熟4197B605FB1E5E288CAE5999990A43FA583DDE7B","生69EF38E041076B01F583D3BB3CDB7CD832EEE597"]}{"title":"[Mantis-X] Gloryhole Gals! – Final","link":"http://www.llss.cool/wp/all/anime/mantis-x-gloryhole-gals-final/","img":"http://wx4.sinaimg.cn/mw690/006GutMagy1foakygwso6j31hc0u0e81.jpg","magnet":["ADEDDFC69751E670D29ADF0BC36FD7A53A1FC100"]}{"title":"【熟肉】かぎろひ~勺景~ Another 第四夜 明かされる真実、少女達の声","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e5%9b%9b%e5%a4%9c-%e6%98%8e%e3%81%8b%e3%81%95%e3%82%8c%e3%82%8b%e7%9c%9f/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c985363sample25.jpg","magnet":["熟9fab42db82f535d4818bd812bdea20ad6dc62fd9","生10AF4135969D4E4AF173DD33D1CDE33F73C50B25","生F684C4D66B59844EFA18AC36DC7D69269ED60A8F"]}{"title":"【熟肉】りゆき→パパ活GIRLS!! THE ANIMATION #1「J○×オジサマの感セックスライフ」","link":"http://www.llss.cool/wp/all/anime/%e3%82%8a%e3%82%86%e3%81%8d%e2%86%92%e3%83%91%e3%83%91%e6%b4%bbgirls-the-animation-1%e3%80%8cj%e2%97%8bx%e3%82%aa%e3%82%b8%e3%82%b5%e3%83%9e%e3%81%ae%e6%84%9f%e3%82%bb%e3%83%83%e3%82%af/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c984631sample1.jpg","magnet":["熟8c3b4dc687a80c2dc8ee8c5f0cc6735829511fb8","生F75743D64A67A355508BC9EC16C61B587D1D4403","生7D4C1A221F2270B10896029C1945D4DB8F6272E7"]}{"title":"【熟肉】フリフレ2 妹・菫~背徳の再会","link":"http://www.llss.cool/wp/all/anime/%e3%83%95%e3%83%aa%e3%83%95%e3%83%ac2-%e5%a6%b9%e3%83%bb%e8%8f%ab%ef%bd%9e%e8%83%8c%e5%be%b3%e3%81%ae%e5%86%8d%e4%bc%9a/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c985362sample5.jpg","magnet":["熟ed3938734511d4b4cc36df721197fb9ddf8e2c73","生01F1DD5CF251D97CBE325679229A302E1DB73AA4","生6DD1415197D270DF289A0C09B09B2BF32B7E52E1","生5463EBA2C81DFE80FD26613AF4DF00857DBFB8C7"]}{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様はびしょびしょでアヘアヘの巻","link":"http://www.llss.cool/wp/all/anime/%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b%e3%81%8a%e8%a9%b1-%e8%8b%a5-3/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c985364sample17.jpg","magnet":["熟9ccf922b7374635a06356e92e327bbbd923b56e1","生B86270C660368609560FD9A78C7CDCABC53CA029","生2C3A3358BD012C179D4EEA521C16560724B21C46","[collaborationworks]"]}{"title":"(同人アニメ)[A THIRD DIMENSION] ATD WORKS01 “CHRIS EDITION”+VR (Ver.170202)","link":"http://www.llss.cool/wp/all/anime/%e5%90%8c%e4%ba%ba%e3%82%a2%e3%83%8b%e3%83%a1a-third-dimension-atd-works01-chris-editionvr-ver-170202/","img":"http://wx4.sinaimg.cn/mw690/006GutMagy1foqtcykzjxj31kw1kwe32.jpg","magnet":["86cdbc52f8d03b803de571cfea02b2f3fb26e62a"]}{"title":"2018年2月里番合集介绍","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86%e4%bb%8b%e7%bb%8d/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/4-2.jpg","magnet":["b0e187d152604e29cb39166f708e5e79192334e9"]}{"title":"2018年3月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/c981447sample21.jpg","magnet":null}{"title":"[バニーホール] マジメなに催眠術をかけてセックス大好きビッチにしてみた","link":"http://www.llss.cool/wp/all/anime/%e3%83%90%e3%83%8b%e3%83%bc%e3%83%9b%e3%83%bc%e3%83%ab-%e3%83%9e%e3%82%b8%e3%83%a1%e3%81%aa%e3%81%ab%e5%82%ac%e7%9c%a0%e8%a1%93%e3%82%92%e3%81%8b%e3%81%91%e3%81%a6%e3%82%bb%e3%83%83%e3%82%af/","img":"http://ww1.sinaimg.cn/large/0060lm7Tly1foxlkns9pmj30sg0lc40p.jpg","magnet":["2cb1160087545d1adae1ed9877c957339038e3c7"]}{"title":"【熟肉】OVA ようこそ! スケベエルフの森へ #2 ニンゲンのチ○ポなんかに…負けて、たまるか…っ","link":"http://www.llss.cool/wp/all/anime/ova-%e3%82%88%e3%81%86%e3%81%93%e3%81%9d%ef%bc%81-%e3%82%b9%e3%82%b1%e3%83%99%e3%82%a8%e3%83%ab%e3%83%95%e3%81%ae%e6%a3%ae%e3%81%b8-%ef%bc%832-%e3%83%8b%e3%83%b3%e3%82%b2%e3%83%b3%e3%81%ae%e3%83%81/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/c981447sample30.jpg","magnet":["熟59eda073f3c60ee8b19417d3e1ed1e037368cc00","生6C83E520CBF52AE9CA536BF91C4DEDB46BAEC718"]}{"title":"【熟肉】小女ラムネ 第4話 みんなの夏休み","link":"http://www.llss.cool/wp/all/anime/%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac4%e8%a9%b1-%e3%81%bf%e3%82%93%e3%81%aa%e3%81%ae%e5%a4%8f%e4%bc%91%e3%81%bf/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138table2.jpg","magnet":["熟42c67aaacf3404eb0cc09f9eaf5b88798623e906","生516FB0A0C93BD77671CA67F518031F223F83658A"]}{"title":"【熟肉】[EDGE] Cherry&GAL’s↑↑ Episode2 イチゴ狩り【附前作】","link":"http://www.llss.cool/wp/all/anime/edge-cherry%ef%bc%86gals%e2%86%91%e2%86%91-episode2-%e3%82%a4%e3%83%81%e3%82%b4%e7%8b%a9%e3%82%8a%e3%80%90%e9%99%84%e5%89%8d%e4%bd%9c%e3%80%91/","img":"https://ws1.sinaimg.cn/large/a15b4afegy1fp4lk5tuk6j20zk0k00wi.jpg","magnet":["38154f78a90050c7af54a419c32b0152c686c437"]}{"title":"【熟肉】エンコ―J●ビッチギャル オジサンとなまパコ活 part.2【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%82%a8%e3%83%b3%e3%82%b3%e2%80%95j%e2%97%8f%e3%83%93%e3%83%83%e3%83%81%e3%82%ae%e3%83%a3%e3%83%ab-%e3%82%aa%e3%82%b8%e3%82%b5%e3%83%b3%e3%81%a8%e3%81%aa%e3%81%be%e3%83%91%e3%82%b3%e6%b4%bb-part-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/4-1.jpg","magnet":["a3fea0a6846a95c62f11578b1355d578609fd5e3"]}{"title":"[夜桜字幕组] 2018年2月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-2018%e5%b9%b42%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://ww1.sinaimg.cn/large/005zWjpngy1fp99xvmhfej30zk0k0761.jpg","magnet":["8FB4C041B4017858C4348BFB0EB82F322627C6A5","F20DE08D12C7A193EA12A3EF2C4A4789ABB3337A","99E097293D6FC35BACA01258E917ED0DB1927D53","9F7A8F506FEEB6926490BA36DE340F31F4F3776B","BB95A40345B81E63124E8C3CA4F2CDDCAC2A6FCF","2AFD2736C174DF4AEADBF3DE"]}{"title":"[A THIRD DIMENSION] ~little ballerina~ ヒナ!三部曲 [夜桜字幕组/yozakura.sub]","link":"http://www.llss.cool/wp/all/anime/a-third-dimension-%ef%bd%9elittle-ballerina%ef%bd%9e-%e3%83%92%e3%83%8a%e4%b8%89%e9%83%a8%e6%9b%b2-%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84yozakura-sub/","img":"http://wx3.sinaimg.cn/mw690/006GutMaly1fp83gu1mwhj30sg0k0jxp.jpg","magnet":["58D7251D3E35CBBE3B6335"]}{"title":"【熟肉】一求RU魂 特別編[ごばん]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e4%b8%80%e6%b1%82ru%e9%ad%82-%e7%89%b9%e5%88%a5%e7%b7%a8%e3%81%94%e3%81%b0%e3%82%93/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/1-6.jpg","magnet":["熟a4746be7eb151f0009a18ab09c45afd9f9881b22","生7BD9B6B8411F953B9ED5230B06A7C79718FB7422"]}{"title":"【熟肉】妻ネトリ 輪廻","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/c994838sample4.jpg","magnet":["熟36f06ab31b78bb644d5e1e41d77859f30f244da4","生4C49D78136C7463505D884F659F9BE96697FF7B8"]}{"title":"[オレンジ☆ライス] 魔女とショクシュ魔神","link":"http://www.llss.cool/wp/all/anime/%e3%82%aa%e3%83%ac%e3%83%b3%e3%82%b8%e2%98%86%e3%83%a9%e3%82%a4%e3%82%b9-%e9%ad%94%e5%a5%b3%e3%81%a8%e3%82%b7%e3%83%a7%e3%82%af%e3%82%b7%e3%83%a5%e9%ad%94%e7%a5%9e/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/3-1.jpg","magnet":["456eb95dd3a70740610f628e64eddfd69ce399ee"]}{"title":"【COSPLAY】Fate/grand Order 玛修·基列莱特","link":"http://www.llss.cool/wp/all/anime/%e3%80%90cosplay%e3%80%91fategrand-order-%e9%a9%ac%e4%bf%ae/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/22.jpg","magnet":["2ADFAF7D9AF2749402D3A782FEF917BA1B9E42C1"]}{"title":"【COSPLAY】Fate/grand Order 尼禄·克劳狄乌斯【花嫁】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90cosplay%e3%80%91fategrand-order-%e5%b0%bc%e7%a6%84%c2%b7%e5%85%8b%e5%8a%b3%e7%8b%84%e4%b9%8c%e6%96%af-%e6%96%b0%e5%a8%98/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/12.jpg","magnet":["7b9f0c54886440f3acea95a8c516b4aec46672c3","a1de35e1928ccc08cf493fd0060c93b28b57b5ae","74bd5d2c4390d1df0ceac887f76325672d3497f2"]}{"title":"【熟肉】炎の孕ませおっぱいエロアプリ学園 THE ANIMATION 第2巻【附前作】","link":"http://www.llss.cool/wp/all/anime/%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e3%81%8a%e3%81%a3%e3%81%b1%e3%81%84%e3%82%a8%e3%83%ad%e3%82%a2%e3%83%97%e3%83%aa%e5%ad%a6%e5%9c%92-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/2-5.jpg","magnet":["熟3b9f6640474dbe1e1262affd5b2ddd9408a22a52","生DBFEC4FD1074F0D9C73B0CBC7FD66B93402D384B"]}{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様がメイド服でご奉仕の巻点【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/1-10.jpg","magnet":["熟742f119bcb0d171fbfcc4054e6dc4dd30cf65bf5","生B6838E316EFB03E25D5083A81BFAE23A6F0F4A65"]}{"title":"【熟肉】ドSなマイナ会長サマがMノートに支配されました。~ドSな会長サマの躾け do M【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%83%89s%e3%81%aa%e3%83%9e%e3%82%a4%e3%83%8a%e4%bc%9a%e9%95%b7%e3%82%b5%e3%83%9e%e3%81%8cm%e3%83%8e%e3%83%bc%e3%83%88%e3%81%ab%e6%94%af%e9%85%8d%e3%81%95%e3%82%8c%e3%81%be%e3%81%97%e3%81%9f-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/4-5.jpg","magnet":["熟a52c1dbbdb31b73d9275ca681c061f77f2e2e712","生8960406B274A553AB438218FA5092093EFAB03E3"]}{"title":"【熟肉】催眠☆学園 ~じられ膨れるハジマリの失~","link":"http://www.llss.cool/wp/all/anime/%e5%82%ac%e7%9c%a0%e2%98%86%e5%ad%a6%e5%9c%92-%ef%bd%9e%e3%81%98%e3%82%89%e3%82%8c%e8%86%a8%e3%82%8c%e3%82%8b%e3%83%8f%e3%82%b8%e3%83%9e%e3%83%aa%e3%81%ae%e5%a4%b1%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/3-2.jpg","magnet":["熟72e32667d64cd5c9118293359f1b9a9cf5912c9f","生1AD2411266AD41F1FDF884B9F9DD2AC978D62952"]}{"title":"2018年3月 作品合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b43%e6%9c%88-%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/4.jpg","magnet":["bdb631951889ca1320921115660e29379a7dccc4"]}{"title":"2018年4月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/c986957sample6.jpg","magnet":null}{"title":"【生肉】[ぽんぷりん] ヒトノマネカタ","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%bd%e3%82%93%e3%81%b7%e3%82%8a%e3%82%93-%e3%83%92%e3%83%88%e3%83%8e%e3%83%9e%e3%83%8d%e3%82%ab%e3%82%bf/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-1.jpg","magnet":["219E247706BC53143303BE94015968386B46441E","Fow]Beastly_Bacchanalia["]}{"title":"【熟肉】ねぇ、…しよ 後編[ピジャ]【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%81%ad%e3%81%87%e3%80%81%e3%81%97%e3%82%88-%e5%be%8c%e7%b7%a8%e3%83%94%e3%82%b8%e3%83%a3/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5-1.jpg","magnet":["熟cfca096cd29795a699047488928db21783c2bff2","生126E1476F1F04B1A76F9D97D48EC9C7345AC5BA6"]}{"title":"【熟肉】OVA 裏・受胎島 #1 液って…なんでこんなに…美味しいの…V2","link":"http://www.llss.cool/wp/all/anime/ova-%e8%a3%8f%e3%83%bb%e5%8f%97%e8%83%8e%e5%b3%b6-%ef%bc%831-%e6%b6%b2%e3%81%a3%e3%81%a6%e3%81%aa%e3%82%93%e3%81%a7%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e7%be%8e%e5%91%b3%e3%81%97/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/4.jpg","magnet":["熟3cc7d7dc8013c05c079dd10fffebb1917f614b67","熟201768a9dc1ba7e0bb873c5faca181711a2244e0","生7CBC732978D21ABC065C9FB1CD3CE46B8B8A9E51"]}{"title":"[夜桜字幕组]2018年3月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842018%e5%b9%b43%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2018/04/12/AMCP-008_aruhi_MotionAnime_nontrop_mainMovieWMV_20180412214213.jpg","magnet":["B8E2B8330772AFB85BA0D2C549C64131B5D97B85","D2E259F3100092D1C37273A686F13C9591AE8861","D5D1F01F90C9DFA5EBA80A29C86C7D0B8D486BCC","39DF5B9731353D2C503D39FA9509D3D2582E8C81","30759B4F978FF0CA77B2EAA426E4E38719C83227","CB82D069C2D74350816A","61CB18E522AF28DB2958"]}{"title":"【熟肉】J染5-The Daybreak- ルートA絶望と悪夢の世界で Episode 03【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91j%e6%9f%935-the-daybreak-%e3%83%ab%e3%83%bc%e3%83%88a%e7%b5%b6%e6%9c%9b%e3%81%a8%e6%82%aa%e5%a4%a2%e3%81%ae%e4%b8%96%e7%95%8c%e3%81%a7-episode-03%e3%80%90%e9%99%84/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/6-1.jpg","magnet":["熟c2f7edcf94dd446190f65195f211a66f781d7434","A09B49170E9F28027A4DC6F6ED5D2C6EB17B9F57","生D5C1746E4FFD019BB92D071005B3EBD29BD4F770"]}{"title":"【熟肉】アイドル強制x作2~女を思いのままにる悪魔のスマートフォン~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e5%bc%b7%e5%88%b6x%e4%bd%9c2%ef%bd%9e%e5%a5%b3%e3%82%92%e6%80%9d%e3%81%84%e3%81%ae%e3%81%be%e3%81%be%e3%81%ab%e3%82%8b%e6%82%aa/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-8.jpg","magnet":["熟662150f5d1758ea74b023d9e6d0d43890ff88fe5","生EC9A3679222B84E39F512C4E111795CEA55BD1B3"]}{"title":"J染 系列 YINYUの連鎖 YIN罪都市 SHOU都崩壊 Ball Buster The Daybreak【1-5前作全集】","link":"http://www.llss.cool/wp/all/anime/j%e6%9f%93-%e7%b3%bb%e5%88%97-yinyu%e3%81%ae%e9%80%a3%e9%8e%96-yin%e7%bd%aa%e9%83%bd%e5%b8%82-shou%e9%83%bd%e5%b4%a9%e5%a3%8a-ball-buster-the-daybreak%e3%80%901-5%e5%89%8d%e4%bd%9c%e5%85%a8%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/29381f30e924b899aace544c6f061d950b7bf6d7.jpg","magnet":["6081f5041945a646155faf28afacdefadef04a48"]}{"title":"[TMA]Faith/Grand Orgasm 2","link":"http://www.llss.cool/wp/all/anime/tmafaithgrand-orgasm-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5-3.jpg","magnet":["6D6AD2D891BD530018B8645407532C23266A3601"]}{"title":"【熟肉】龍堂寺士門の陰謀 後編 女子喰えば、喜悦なるなり龍堂寺!【附前作】V5","link":"http://www.llss.cool/wp/all/anime/%e9%be%8d%e5%a0%82%e5%af%ba%e5%a3%ab%e9%96%80%e3%81%ae%e9%99%b0%e8%ac%80-%e5%be%8c%e7%b7%a8-%e5%a5%b3%e5%ad%90%e5%96%b0%e3%81%88%e3%81%b0%e3%80%81%e5%96%9c%e6%82%a6%e3%81%aa%e3%82%8b%e3%81%aa%e3%82%8a/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/2-9.jpg","magnet":["熟571073075bb1ab1a5d5e049c90a390ce68a3470e","熟40B441B2D2AEA0CA57FA723C7A4225602F4843FE","生278e103fa6341a658f613c233b0ee05795d4caba","生26758D5538CCD121D897039A6DAF6F4E87225720","生F57543152872473956A47AB2898AA350E074AB69"]}{"title":"[monoxide.jp] 妖精改造ファクトリー 2","link":"http://www.llss.cool/wp/all/anime/monoxide-jp-%e5%a6%96%e7%b2%be%e6%94%b9%e9%80%a0%e3%83%95%e3%82%a1%e3%82%af%e3%83%88%e3%83%aa%e3%83%bc-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/0060lm7Tly1fqmz44eojzj31aj0ppn31.jpg","magnet":["edd5aee2a392bb26ad007b522234790728a7ddf2","edd5aee2a392bb26ad007b522234790728a7ddf2"]}{"title":"【熟肉】OVA 裏・受胎島 #2 赤ちゃんできるまで抜かないで…【附前作】","link":"http://www.llss.cool/wp/all/anime/ova-%e8%a3%8f%e3%83%bb%e5%8f%97%e8%83%8e%e5%b3%b6-%ef%bc%832-%e8%b5%a4%e3%81%a1%e3%82%83%e3%82%93%e3%81%a7%e3%81%8d%e3%82%8b%e3%81%be%e3%81%a7%e6%8a%9c%e3%81%8b%e3%81%aa%e3%81%84%e3%81%a7/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/2-11.jpg","magnet":["熟6a20c9d01b33729bc7250699497168405f2ada27","b2f30179f051307a4943901d43c1e3480a00440a","生3A68D71DF5E93B4E8C26A32807033FF71F527E68"]}{"title":"【熟肉】俺が姪(かのじょ)を○す理由(わけ) 一日目 彼が彼女を手に入れた日","link":"http://www.llss.cool/wp/all/anime/%e4%bf%ba%e3%81%8c%e5%a7%aa%ef%bc%88%e3%81%8b%e3%81%ae%e3%81%98%e3%82%87%ef%bc%89%e3%82%92%e2%97%8b%e3%81%99%e7%90%86%e7%94%b1%ef%bc%88%e3%82%8f%e3%81%91%ef%bc%89-%e4%b8%80%e6%97%a5%e7%9b%ae-%e5%bd%bc/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/c992513sample5.jpg","magnet":["熟49fd8e0a53a9a886098ce149ebfb739d7ddbe846","生54CA497AFE4009815FDB9401D538F3B21E030918"]}{"title":"【熟肉】教師4 feat.エロ議員センセイ 静歌&初音~ナマイキ読モとお嬢様の邂逅","link":"http://www.llss.cool/wp/all/anime/%e6%95%99%e5%b8%ab4-feat-%e3%82%a8%e3%83%ad%e8%ad%b0%e5%93%a1%e3%82%bb%e3%83%b3%e3%82%bb%e3%82%a4-%e9%9d%99%e6%ad%8c%ef%bc%86%e5%88%9d%e9%9f%b3%ef%bd%9e%e3%83%8a%e3%83%9e%e3%82%a4%e3%82%ad%e8%aa%ad/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-8.jpg","magnet":["熟8b424bfb7a860a15920ca98a633e48be0f1047d6","生125EE1ECF340A4B73AD499776D51FE3D35BBEEA1"]}{"title":"【熟肉】妹ぱらだいす!3 The Animation 上巻","link":"http://www.llss.cool/wp/all/anime/%e5%a6%b9%e3%81%b1%e3%82%89%e3%81%a0%e3%81%84%e3%81%99%ef%bc%813-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-14.jpg","magnet":["熟72d0f6667fd2e83f4358afb01bc70bd375a962ad","生AA92F27E7F86022B51B9237B5F0B1AB9E330007A","818E15B7E6DE429339168BDCC2D48B14AEBBA148"]}{"title":"【熟肉】フリフレ2 ブル妹・菫~溺れるツナガリ~【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%83%95%e3%83%aa%e3%83%95%e3%83%ac2-%e3%83%96%e3%83%ab%e5%a6%b9%e3%83%bb%e8%8f%ab%ef%bd%9e%e6%ba%ba%e3%82%8c%e3%82%8b%e3%83%84%e3%83%8a%e3%82%ac%e3%83%aa%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5.jpg","magnet":["熟d36a9fe98f5d8c725b12c87a5ca6ae0807758137","生BB6B73D8A5349CE07936914F8EAC348170B077F9"]}{"title":"【熟肉】ツンえむ! ~ぎゅっとって指導して~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%84%e3%83%b3%e3%81%88%e3%82%80%ef%bc%81-%ef%bd%9e%e3%81%8e%e3%82%85%e3%81%a3%e3%81%a8%e3%81%a3%e3%81%a6%e6%8c%87%e5%b0%8e%e3%81%97%e3%81%a6%ef%bd%9e-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/c992514sample3.jpg","magnet":["熟ae0e899c5ddd07a7e3ec9399b683dd27cef3449d","生73E52F97FBC6D322C58DA41EE54FFA63714C1396"]}{"title":"2018年4月里番合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e8%ae%a1/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5-2.jpg","magnet":["8c18ba0249ad982a17b41d9a022dbb27c39509b5"]}{"title":"2018年5月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-9.jpg","magnet":null}{"title":"[夜桜字幕组] 2018年4月3D作品合集 [BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-2018%e5%b9%b44%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-big5gb/","img":"http://wx1.sinaimg.cn/mw690/0060lm7Tly1fqzrhegi9xj30zk0k0gq3.jpg","magnet":["DC0ADC70D605D4DEFC6EEC1E86048F9F3DD9678C","4A393D6B1022C9955FEA908CC8C345E67CAA7768","E6976D0D1ACE4836F7E176C24849A7BB6A670B50","C868393A7860D4C79CCEB76BB554964FFC0DB96B","4E80E7DB35DF01975F7FC681613499C3101D96DD","F9CF24119762F343B5ED78"]}{"title":"[せるふぃっしゅ]Lilitales -リリテイルズ- act.1 虜囚の銀騎士","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85lilitales-%e3%83%aa%e3%83%aa%e3%83%86%e3%82%a4%e3%83%ab%e3%82%ba-act-1-%e8%99%9c%e5%9b%9a%e3%81%ae%e9%8a%80%e9%a8%8e%e5%a3%ab/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/4.jpg","magnet":["04526a6d37c23ef7cb1e9b7417ba285ce01d9c99"]}{"title":"【TMAVR-012】Re:エロから始まるVR异世界性活〜イキ戻り2日目SEX编〜","link":"http://www.llss.cool/wp/all/anime/%e3%80%90tmavr-012%e3%80%91re%ef%bc%9a%e3%82%a8%e3%83%ad%e3%81%8b%e3%82%89%e5%a7%8b%e3%81%be%e3%82%8bvr%e5%bc%82%e4%b8%96%e7%95%8c%e6%80%a7%e6%b4%bb%e3%80%9c%e3%82%a4%e3%82%ad%e6%88%bb%e3%82%8a2/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/1-5.jpg","magnet":["fb5b268c49feafd19ccfa7c6d3b04cd84ce15745","b86324b74bb714ec61eb82eecd1ad79e061dcb41"]}{"title":"【熟肉】漆黒のシャガ THE ANIMATION 第二話 「件(くだん)」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%bc%86%e9%bb%92%e3%81%ae%e3%82%b7%e3%83%a3%e3%82%ac-the-animation-%e7%ac%ac%e4%ba%8c%e8%a9%b1-%e3%80%8c%e4%bb%b6%ef%bc%88%e3%81%8f%e3%81%a0%e3%82%93%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/2-16.jpg","magnet":["熟7BVGW3RXSBHW3CTH2U7RN7RGMKWPEGKC","熟2ee2568d782bec84524d0ca1046dec82babdedf3","生e2205d4185355ac09e8f4ad0784766c425044d0f","生21a4f9b356b325a667a20f35edd119c536abd9f0"]}{"title":"【熟肉】放課後の優等生 1","link":"http://www.llss.cool/wp/all/anime/%e6%94%be%e8%aa%b2%e5%be%8c%e3%81%ae%e5%84%aa%e7%ad%89%e7%94%9f-1/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/8.jpg","magnet":["熟b769638f2ad2a9da846447feb961340d08cb0aa6","生0331ef846d381917529ccec54258037281e819ba"]}{"title":"【熟肉】dokidokiりとる大家さん お家賃1突き目 こんなサービスってアリですか!? 『シスター』のコスプレで大興奮の巻","link":"http://www.llss.cool/wp/all/anime/dokidoki%e3%82%8a%e3%81%a8%e3%82%8b%e5%a4%a7%e5%ae%b6%e3%81%95%e3%82%93-%e3%81%8a%e5%ae%b6%e8%b3%831%e7%aa%81%e3%81%8d%e7%9b%ae-%e3%81%93%e3%82%93%e3%81%aa%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%81%a3/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-19.jpg","magnet":["熟WMUGAFECT26OAOJYWSFU3XPEQQIVACBF","生719C2DE1DC7FAD8762F8E60D4D0DA8209D95E544"]}{"title":"【熟肉】催眠☆学園「~強気に漏らすナマイキお嬢~」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e5%82%ac%e7%9c%a0%e2%98%86%e5%ad%a6%e5%9c%92%e3%80%8c%ef%bd%9e%e5%bc%b7%e6%b0%97%e3%81%ab%e6%bc%8f%e3%82%89%e3%81%99%e3%83%8a%e3%83%9e%e3%82%a4%e3%82%ad%e3%81%8a%e5%ac%a2%ef%bd%9e%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-10.jpg","magnet":["熟LVJIBCQSWBXNOTW5VGQLT7JBOZXR4QMJ","生FB1AB91403B0D31F4442BA80A9CAA877EB1C0F28"]}{"title":"【熟肉】俺が姪(かのじょ)を○す理由(わけ) 二日目 彼が彼女をもてあそんだ日【附前作】","link":"http://www.llss.cool/wp/all/anime/%e4%bf%ba%e3%81%8c%e5%a7%aa%ef%bc%88%e3%81%8b%e3%81%ae%e3%81%98%e3%82%87%ef%bc%89%e3%82%92%e2%97%8b%e3%81%99%e7%90%86%e7%94%b1%ef%bc%88%e3%82%8f%e3%81%91%ef%bc%89-%e4%ba%8c%e6%97%a5%e7%9b%ae-%e5%bd%bc/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-17.jpg","magnet":["熟AHAAQFCVJQI6XQU2OSGNXZVQOZWJWSI5","生D6E74C06F6BEE54FC14945D94DC8DC40E0D76219"]}{"title":"2018年5月里番合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/2-9.jpg","magnet":["AHEGMDSVZU772GKMJZLGXRRNGQOXNXUV"]}{"title":"2018年6月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/2-10.jpg","magnet":null}{"title":"【夜桜字幕组】2018年5月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%912018%e5%b9%b45%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2018/05/31/NatuiromikanTheMotionAnime_20180531202515.jpg","magnet":["675BCEB53DDE36C89EE2B1359AD18D5B3F3562B0","DD1DB97D88DFB8BAA7A467FBF06A06A0B45633BE","5B581237641D8BEE665E14E534F0E216C9710FE9","B5DDB28E125ACBCC55C4D5E4ED07EF4AB15E96E2","A424BDBDF816808C65CBEE2D76B3906B62F17663","5F1509BB972E90D197723"]}{"title":"【熟肉】OVA むっつりドスケベ露義母姉妹の本質見抜いてセックス三昧#1","link":"http://www.llss.cool/wp/all/anime/ova-%e3%82%80%e3%81%a3%e3%81%a4%e3%82%8a%e3%83%89%e3%82%b9%e3%82%b1%e3%83%99%e9%9c%b2%e7%be%a9%e6%af%8d%e5%a7%89%e5%a6%b9%e3%81%ae%e6%9c%ac%e8%b3%aa%e8%a6%8b%e6%8a%9c%e3%81%84%e3%81%a6%e3%82%bb/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/1-8.jpg","magnet":["熟eb163d4cf2546be9a10937ce0dbfe1ea7766b461","熟5MLD2THSKRV6TIIJG7HA3P7B5J3WNNDB","8A5B444C7CB4D528389DF4812735E86D0F065B59"]}{"title":"【熟肉】[せるふぃっしゅ]Lilitales -リリテイルズ act.2 蠍ノ贄ニ堕ツ【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85lilitales-%e3%83%aa%e3%83%aa%e3%83%86%e3%82%a4%e3%83%ab%e3%82%ba-act-2-%e8%a0%8d%e3%83%8e%e8%b4%84%e3%83%8b%e5%a0%95%e3%83%84/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/3.jpg","magnet":["熟VIFZ2RAJXF3HPUKF6BQCU3SQWLFN56LE","生32A272A995D4A345E94787B25B43F855761B000D"]}{"title":"【生肉】売スパイラル(モーションコミック版)","link":"http://www.llss.cool/wp/all/anime/%e5%a3%b2%e3%82%b9%e3%83%91%e3%82%a4%e3%83%a9%e3%83%ab%e3%83%a2%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b3%e3%83%9f%e3%83%83%e3%82%af%e7%89%88/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/4-1.jpg","magnet":["4AABACAA894E553279B97BD79AB10D78706B08B5"]}{"title":"【熟肉】都市伝説シリーズ 其の伍 エ呪いのVR【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae%e4%bc%8d-%e3%82%a8%e5%91%aa%e3%81%84%e3%81%aevr/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/2-11.jpg","magnet":["熟N4X4JJ6OX3AJPXHHL4QSN5EQFUXENF5H","生FUTHC757LBHHEJNHC4P7JI2QSRP7WO2J"]}{"title":"【生肉】[せるふぃっしゅ] 濡れ透けJ○ 雨宿りレ×プ","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e6%bf%a1%e3%82%8c%e9%80%8f%e3%81%91j%e2%97%8b-%e9%9b%a8%e5%ae%bf%e3%82%8a%e3%83%acx%e3%83%97/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/2-9.jpg","magnet":["cc35eddaa6f66eb5aba7c47541aca98c3e43c7f1"]}{"title":"そこのお姉さんっ エロアニメに出ちゃいましたよ","link":"http://www.llss.cool/wp/all/anime/%e3%81%9d%e3%81%93%e3%81%ae%e3%81%8a%e5%a7%89%e3%81%95%e3%82%93%e3%81%a3-%e3%82%a8%e3%83%ad%e3%82%a2%e3%83%8b%e3%83%a1%e3%81%ab%e5%87%ba%e3%81%a1%e3%82%83%e3%81%84%e3%81%be%e3%81%97%e3%81%9f%e3%82%88/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/1-11.jpg","magnet":["3b2adbfd029e486736f31f86455f4e87d211617b"]}{"title":"那些年,我们错过的短篇里番之一:Bikini Warriors ビキニ・ウォリアーズ 合集+重制版","link":"http://www.llss.cool/wp/all/anime/bikini-warriors-%e3%83%93%e3%82%ad%e3%83%8b%e3%83%bb%e3%82%a6%e3%82%a9%e3%83%aa%e3%82%a2%e3%83%bc%e3%82%ba-%e5%90%88%e9%9b%86%e9%87%8d%e5%88%b6%e7%89%88/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/1-10.jpg","magnet":["生4D620D4425160149CA030F1C4D76E1DCCE71305E"]}{"title":"【熟肉】【女性向】甘い惩罚〜私は看守専用ペット【01-05】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e7%94%98%e3%81%84%e6%83%a9%e7%bd%9a%e3%80%9c%e7%a7%81%e3%81%af%e7%9c%8b%e5%ae%88%e5%b0%82%e7%94%a8%e3%83%9a%e3%83%83%e3%83%88%e3%80%9001-05%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/1-16.jpg","magnet":["熟744C00CAD0B5B9C915B65A4ADEF66A82E323CF41","熟DBCA88FBAC5818B8BFC905B55DB412B9C3D398E5","熟0E3B6C74500237FE442FD0BFB0362DFAAB5C885D","熟8A09901254B4A65ABA79611A5E03C89486144A2F","熟4AF6D33F9DAD8486B514881A88A8BFA16C7EB51E","0d4b83610ccd80389d31705b53497736ef320d37","8658058f8b3275435f1e58bd8928fb1ca04c0b42","e58ba996dfe78b66068d902c86541cda9f5a91de","e3998bb8427687e852f6751cb59c4b15be72a137","3bae9331ae8207b07c298a58b1fcacf1a0d8a01f"]}{"title":"【熟肉】甘い惩罚〜私は看守専用ペット【06-11】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%94%98%e3%81%84%e6%83%a9%e7%bd%9a%e3%80%9c%e7%a7%81%e3%81%af%e7%9c%8b%e5%ae%88%e5%b0%82%e7%94%a8%e3%83%9a%e3%83%83%e3%83%88%e3%80%9006-11%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/8.jpg","magnet":["熟BBCE7FCDAC4D6EC7D94C4A067039720E8DC849F4","熟95199935DCA9905D1BDD8CCF81C65E5F24D7E1D0","熟5BB100552A5B257D5E09A2B531F3255873283EA7","熟FB27C45415F3D69A5A6FF395429FA2E017F91808","熟AFD13729E6AA55A0AE2C4A9FF4D613E6A028E638","熟8BFE4F2843B753980C9E2ABFFFF8B12F33D54A81","260f9deb6426f99045f36bea689f602b4ceb3031","b48573f8684207ac30a947b1ab6d1909f822dc5f","b3f2c88d31f4e8c124ece9ee7fe8f1f2329e6bad","71886141700fa58cfc1ac84b6b8d8d6f4b106b15","d60d2dd1adff61fd53f9b506b5877121af3e041f","7aa77bee64f12f4414bfc606474d2a0b6f6bba35"]} \ No newline at end of file diff --git a/play/pa/deal-file.js b/play/pa/deal-file.js new file mode 100644 index 0000000..caa4b0f --- /dev/null +++ b/play/pa/deal-file.js @@ -0,0 +1,17 @@ +const fs = require('fs') + +fs.readFile('./magnet.txt', 'utf8', (err, data) => { + const db = data + .slice(1, -1) + .replace(/\}\]\[\{/g, '}___{') + .replace(/\},\{/g, '}___{') + .split('___') + .reverse() + fs.writeFile('db.txt', db.join(''), err => { + if (err) { + console.log(err) + return + } + console.log('success') + }) +}) \ No newline at end of file diff --git a/play/pa/magnet.txt b/play/pa/magnet.txt new file mode 100644 index 0000000..4e31b79 --- /dev/null +++ b/play/pa/magnet.txt @@ -0,0 +1 @@ +[{"title":"【熟肉】甘い惩罚〜私は看守専用ペット【06-11】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%94%98%e3%81%84%e6%83%a9%e7%bd%9a%e3%80%9c%e7%a7%81%e3%81%af%e7%9c%8b%e5%ae%88%e5%b0%82%e7%94%a8%e3%83%9a%e3%83%83%e3%83%88%e3%80%9006-11%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/8.jpg","magnet":["熟BBCE7FCDAC4D6EC7D94C4A067039720E8DC849F4","熟95199935DCA9905D1BDD8CCF81C65E5F24D7E1D0","熟5BB100552A5B257D5E09A2B531F3255873283EA7","熟FB27C45415F3D69A5A6FF395429FA2E017F91808","熟AFD13729E6AA55A0AE2C4A9FF4D613E6A028E638","熟8BFE4F2843B753980C9E2ABFFFF8B12F33D54A81","260f9deb6426f99045f36bea689f602b4ceb3031","b48573f8684207ac30a947b1ab6d1909f822dc5f","b3f2c88d31f4e8c124ece9ee7fe8f1f2329e6bad","71886141700fa58cfc1ac84b6b8d8d6f4b106b15","d60d2dd1adff61fd53f9b506b5877121af3e041f","7aa77bee64f12f4414bfc606474d2a0b6f6bba35"]},{"title":"【熟肉】【女性向】甘い惩罚〜私は看守専用ペット【01-05】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e7%94%98%e3%81%84%e6%83%a9%e7%bd%9a%e3%80%9c%e7%a7%81%e3%81%af%e7%9c%8b%e5%ae%88%e5%b0%82%e7%94%a8%e3%83%9a%e3%83%83%e3%83%88%e3%80%9001-05%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/1-16.jpg","magnet":["熟744C00CAD0B5B9C915B65A4ADEF66A82E323CF41","熟DBCA88FBAC5818B8BFC905B55DB412B9C3D398E5","熟0E3B6C74500237FE442FD0BFB0362DFAAB5C885D","熟8A09901254B4A65ABA79611A5E03C89486144A2F","熟4AF6D33F9DAD8486B514881A88A8BFA16C7EB51E","0d4b83610ccd80389d31705b53497736ef320d37","8658058f8b3275435f1e58bd8928fb1ca04c0b42","e58ba996dfe78b66068d902c86541cda9f5a91de","e3998bb8427687e852f6751cb59c4b15be72a137","3bae9331ae8207b07c298a58b1fcacf1a0d8a01f"]},{"title":"那些年,我们错过的短篇里番之一:Bikini Warriors ビキニ・ウォリアーズ 合集+重制版","link":"http://www.llss.cool/wp/all/anime/bikini-warriors-%e3%83%93%e3%82%ad%e3%83%8b%e3%83%bb%e3%82%a6%e3%82%a9%e3%83%aa%e3%82%a2%e3%83%bc%e3%82%ba-%e5%90%88%e9%9b%86%e9%87%8d%e5%88%b6%e7%89%88/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/1-10.jpg","magnet":["生4D620D4425160149CA030F1C4D76E1DCCE71305E"]},{"title":"そこのお姉さんっ エロアニメに出ちゃいましたよ","link":"http://www.llss.cool/wp/all/anime/%e3%81%9d%e3%81%93%e3%81%ae%e3%81%8a%e5%a7%89%e3%81%95%e3%82%93%e3%81%a3-%e3%82%a8%e3%83%ad%e3%82%a2%e3%83%8b%e3%83%a1%e3%81%ab%e5%87%ba%e3%81%a1%e3%82%83%e3%81%84%e3%81%be%e3%81%97%e3%81%9f%e3%82%88/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/1-11.jpg","magnet":["3b2adbfd029e486736f31f86455f4e87d211617b"]},{"title":"【生肉】[せるふぃっしゅ] 濡れ透けJ○ 雨宿りレ×プ","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e6%bf%a1%e3%82%8c%e9%80%8f%e3%81%91j%e2%97%8b-%e9%9b%a8%e5%ae%bf%e3%82%8a%e3%83%acx%e3%83%97/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/2-9.jpg","magnet":["cc35eddaa6f66eb5aba7c47541aca98c3e43c7f1"]},{"title":"【熟肉】都市伝説シリーズ 其の伍 エ呪いのVR【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae%e4%bc%8d-%e3%82%a8%e5%91%aa%e3%81%84%e3%81%aevr/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/2-11.jpg","magnet":["熟N4X4JJ6OX3AJPXHHL4QSN5EQFUXENF5H","生FUTHC757LBHHEJNHC4P7JI2QSRP7WO2J"]},{"title":"【生肉】売スパイラル(モーションコミック版)","link":"http://www.llss.cool/wp/all/anime/%e5%a3%b2%e3%82%b9%e3%83%91%e3%82%a4%e3%83%a9%e3%83%ab%e3%83%a2%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b3%e3%83%9f%e3%83%83%e3%82%af%e7%89%88/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/4-1.jpg","magnet":["4AABACAA894E553279B97BD79AB10D78706B08B5"]},{"title":"【熟肉】[せるふぃっしゅ]Lilitales -リリテイルズ act.2 蠍ノ贄ニ堕ツ【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85lilitales-%e3%83%aa%e3%83%aa%e3%83%86%e3%82%a4%e3%83%ab%e3%82%ba-act-2-%e8%a0%8d%e3%83%8e%e8%b4%84%e3%83%8b%e5%a0%95%e3%83%84/","img":"http://llss.cool/wp/wp-content/uploads/2018/06/3.jpg","magnet":["熟VIFZ2RAJXF3HPUKF6BQCU3SQWLFN56LE","生32A272A995D4A345E94787B25B43F855761B000D"]},{"title":"【熟肉】OVA むっつりドスケベ露義母姉妹の本質見抜いてセックス三昧#1","link":"http://www.llss.cool/wp/all/anime/ova-%e3%82%80%e3%81%a3%e3%81%a4%e3%82%8a%e3%83%89%e3%82%b9%e3%82%b1%e3%83%99%e9%9c%b2%e7%be%a9%e6%af%8d%e5%a7%89%e5%a6%b9%e3%81%ae%e6%9c%ac%e8%b3%aa%e8%a6%8b%e6%8a%9c%e3%81%84%e3%81%a6%e3%82%bb/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/1-8.jpg","magnet":["熟eb163d4cf2546be9a10937ce0dbfe1ea7766b461","熟5MLD2THSKRV6TIIJG7HA3P7B5J3WNNDB","8A5B444C7CB4D528389DF4812735E86D0F065B59"]}][{"title":"【夜桜字幕组】2018年5月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%912018%e5%b9%b45%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2018/05/31/NatuiromikanTheMotionAnime_20180531202515.jpg","magnet":["675BCEB53DDE36C89EE2B1359AD18D5B3F3562B0","DD1DB97D88DFB8BAA7A467FBF06A06A0B45633BE","5B581237641D8BEE665E14E534F0E216C9710FE9","B5DDB28E125ACBCC55C4D5E4ED07EF4AB15E96E2","A424BDBDF816808C65CBEE2D76B3906B62F17663","5F1509BB972E90D197723"]},{"title":"2018年6月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/2-10.jpg","magnet":null},{"title":"2018年5月里番合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/2-9.jpg","magnet":["AHEGMDSVZU772GKMJZLGXRRNGQOXNXUV"]},{"title":"【熟肉】俺が姪(かのじょ)を○す理由(わけ) 二日目 彼が彼女をもてあそんだ日【附前作】","link":"http://www.llss.cool/wp/all/anime/%e4%bf%ba%e3%81%8c%e5%a7%aa%ef%bc%88%e3%81%8b%e3%81%ae%e3%81%98%e3%82%87%ef%bc%89%e3%82%92%e2%97%8b%e3%81%99%e7%90%86%e7%94%b1%ef%bc%88%e3%82%8f%e3%81%91%ef%bc%89-%e4%ba%8c%e6%97%a5%e7%9b%ae-%e5%bd%bc/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-17.jpg","magnet":["熟AHAAQFCVJQI6XQU2OSGNXZVQOZWJWSI5","生D6E74C06F6BEE54FC14945D94DC8DC40E0D76219"]},{"title":"【熟肉】催眠☆学園「~強気に漏らすナマイキお嬢~」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e5%82%ac%e7%9c%a0%e2%98%86%e5%ad%a6%e5%9c%92%e3%80%8c%ef%bd%9e%e5%bc%b7%e6%b0%97%e3%81%ab%e6%bc%8f%e3%82%89%e3%81%99%e3%83%8a%e3%83%9e%e3%82%a4%e3%82%ad%e3%81%8a%e5%ac%a2%ef%bd%9e%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-10.jpg","magnet":["熟LVJIBCQSWBXNOTW5VGQLT7JBOZXR4QMJ","生FB1AB91403B0D31F4442BA80A9CAA877EB1C0F28"]},{"title":"【熟肉】dokidokiりとる大家さん お家賃1突き目 こんなサービスってアリですか!? 『シスター』のコスプレで大興奮の巻","link":"http://www.llss.cool/wp/all/anime/dokidoki%e3%82%8a%e3%81%a8%e3%82%8b%e5%a4%a7%e5%ae%b6%e3%81%95%e3%82%93-%e3%81%8a%e5%ae%b6%e8%b3%831%e7%aa%81%e3%81%8d%e7%9b%ae-%e3%81%93%e3%82%93%e3%81%aa%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%81%a3/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-19.jpg","magnet":["熟WMUGAFECT26OAOJYWSFU3XPEQQIVACBF","生719C2DE1DC7FAD8762F8E60D4D0DA8209D95E544"]},{"title":"【熟肉】放課後の優等生 1","link":"http://www.llss.cool/wp/all/anime/%e6%94%be%e8%aa%b2%e5%be%8c%e3%81%ae%e5%84%aa%e7%ad%89%e7%94%9f-1/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/8.jpg","magnet":["熟b769638f2ad2a9da846447feb961340d08cb0aa6","生0331ef846d381917529ccec54258037281e819ba"]},{"title":"【熟肉】漆黒のシャガ THE ANIMATION 第二話 「件(くだん)」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%bc%86%e9%bb%92%e3%81%ae%e3%82%b7%e3%83%a3%e3%82%ac-the-animation-%e7%ac%ac%e4%ba%8c%e8%a9%b1-%e3%80%8c%e4%bb%b6%ef%bc%88%e3%81%8f%e3%81%a0%e3%82%93%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/2-16.jpg","magnet":["熟7BVGW3RXSBHW3CTH2U7RN7RGMKWPEGKC","熟2ee2568d782bec84524d0ca1046dec82babdedf3","生e2205d4185355ac09e8f4ad0784766c425044d0f","生21a4f9b356b325a667a20f35edd119c536abd9f0"]},{"title":"【TMAVR-012】Re:エロから始まるVR异世界性活〜イキ戻り2日目SEX编〜","link":"http://www.llss.cool/wp/all/anime/%e3%80%90tmavr-012%e3%80%91re%ef%bc%9a%e3%82%a8%e3%83%ad%e3%81%8b%e3%82%89%e5%a7%8b%e3%81%be%e3%82%8bvr%e5%bc%82%e4%b8%96%e7%95%8c%e6%80%a7%e6%b4%bb%e3%80%9c%e3%82%a4%e3%82%ad%e6%88%bb%e3%82%8a2/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/1-5.jpg","magnet":["fb5b268c49feafd19ccfa7c6d3b04cd84ce15745","b86324b74bb714ec61eb82eecd1ad79e061dcb41"]}][{"title":"[せるふぃっしゅ]Lilitales -リリテイルズ- act.1 虜囚の銀騎士","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85lilitales-%e3%83%aa%e3%83%aa%e3%83%86%e3%82%a4%e3%83%ab%e3%82%ba-act-1-%e8%99%9c%e5%9b%9a%e3%81%ae%e9%8a%80%e9%a8%8e%e5%a3%ab/","img":"http://llss.cool/wp/wp-content/uploads/2018/05/4.jpg","magnet":["04526a6d37c23ef7cb1e9b7417ba285ce01d9c99"]},{"title":"[夜桜字幕组] 2018年4月3D作品合集 [BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-2018%e5%b9%b44%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-big5gb/","img":"http://wx1.sinaimg.cn/mw690/0060lm7Tly1fqzrhegi9xj30zk0k0gq3.jpg","magnet":["DC0ADC70D605D4DEFC6EEC1E86048F9F3DD9678C","4A393D6B1022C9955FEA908CC8C345E67CAA7768","E6976D0D1ACE4836F7E176C24849A7BB6A670B50","C868393A7860D4C79CCEB76BB554964FFC0DB96B","4E80E7DB35DF01975F7FC681613499C3101D96DD","F9CF24119762F343B5ED78"]},{"title":"2018年5月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-9.jpg","magnet":null},{"title":"2018年4月里番合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e8%ae%a1/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5-2.jpg","magnet":["8c18ba0249ad982a17b41d9a022dbb27c39509b5"]},{"title":"【熟肉】ツンえむ! ~ぎゅっとって指導して~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%84%e3%83%b3%e3%81%88%e3%82%80%ef%bc%81-%ef%bd%9e%e3%81%8e%e3%82%85%e3%81%a3%e3%81%a8%e3%81%a3%e3%81%a6%e6%8c%87%e5%b0%8e%e3%81%97%e3%81%a6%ef%bd%9e-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/c992514sample3.jpg","magnet":["熟ae0e899c5ddd07a7e3ec9399b683dd27cef3449d","生73E52F97FBC6D322C58DA41EE54FFA63714C1396"]},{"title":"【熟肉】フリフレ2 ブル妹・菫~溺れるツナガリ~【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%83%95%e3%83%aa%e3%83%95%e3%83%ac2-%e3%83%96%e3%83%ab%e5%a6%b9%e3%83%bb%e8%8f%ab%ef%bd%9e%e6%ba%ba%e3%82%8c%e3%82%8b%e3%83%84%e3%83%8a%e3%82%ac%e3%83%aa%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5.jpg","magnet":["熟d36a9fe98f5d8c725b12c87a5ca6ae0807758137","生BB6B73D8A5349CE07936914F8EAC348170B077F9"]},{"title":"【熟肉】妹ぱらだいす!3 The Animation 上巻","link":"http://www.llss.cool/wp/all/anime/%e5%a6%b9%e3%81%b1%e3%82%89%e3%81%a0%e3%81%84%e3%81%99%ef%bc%813-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-14.jpg","magnet":["熟72d0f6667fd2e83f4358afb01bc70bd375a962ad","生AA92F27E7F86022B51B9237B5F0B1AB9E330007A","818E15B7E6DE429339168BDCC2D48B14AEBBA148"]},{"title":"【熟肉】教師4 feat.エロ議員センセイ 静歌&初音~ナマイキ読モとお嬢様の邂逅","link":"http://www.llss.cool/wp/all/anime/%e6%95%99%e5%b8%ab4-feat-%e3%82%a8%e3%83%ad%e8%ad%b0%e5%93%a1%e3%82%bb%e3%83%b3%e3%82%bb%e3%82%a4-%e9%9d%99%e6%ad%8c%ef%bc%86%e5%88%9d%e9%9f%b3%ef%bd%9e%e3%83%8a%e3%83%9e%e3%82%a4%e3%82%ad%e8%aa%ad/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-8.jpg","magnet":["熟8b424bfb7a860a15920ca98a633e48be0f1047d6","生125EE1ECF340A4B73AD499776D51FE3D35BBEEA1"]},{"title":"【熟肉】俺が姪(かのじょ)を○す理由(わけ) 一日目 彼が彼女を手に入れた日","link":"http://www.llss.cool/wp/all/anime/%e4%bf%ba%e3%81%8c%e5%a7%aa%ef%bc%88%e3%81%8b%e3%81%ae%e3%81%98%e3%82%87%ef%bc%89%e3%82%92%e2%97%8b%e3%81%99%e7%90%86%e7%94%b1%ef%bc%88%e3%82%8f%e3%81%91%ef%bc%89-%e4%b8%80%e6%97%a5%e7%9b%ae-%e5%bd%bc/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/c992513sample5.jpg","magnet":["熟49fd8e0a53a9a886098ce149ebfb739d7ddbe846","生54CA497AFE4009815FDB9401D538F3B21E030918"]}][{"title":"【熟肉】OVA 裏・受胎島 #2 赤ちゃんできるまで抜かないで…【附前作】","link":"http://www.llss.cool/wp/all/anime/ova-%e8%a3%8f%e3%83%bb%e5%8f%97%e8%83%8e%e5%b3%b6-%ef%bc%832-%e8%b5%a4%e3%81%a1%e3%82%83%e3%82%93%e3%81%a7%e3%81%8d%e3%82%8b%e3%81%be%e3%81%a7%e6%8a%9c%e3%81%8b%e3%81%aa%e3%81%84%e3%81%a7/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/2-11.jpg","magnet":["熟6a20c9d01b33729bc7250699497168405f2ada27","b2f30179f051307a4943901d43c1e3480a00440a","生3A68D71DF5E93B4E8C26A32807033FF71F527E68"]},{"title":"[monoxide.jp] 妖精改造ファクトリー 2","link":"http://www.llss.cool/wp/all/anime/monoxide-jp-%e5%a6%96%e7%b2%be%e6%94%b9%e9%80%a0%e3%83%95%e3%82%a1%e3%82%af%e3%83%88%e3%83%aa%e3%83%bc-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/0060lm7Tly1fqmz44eojzj31aj0ppn31.jpg","magnet":["edd5aee2a392bb26ad007b522234790728a7ddf2","edd5aee2a392bb26ad007b522234790728a7ddf2"]},{"title":"【熟肉】龍堂寺士門の陰謀 後編 女子喰えば、喜悦なるなり龍堂寺!【附前作】V5","link":"http://www.llss.cool/wp/all/anime/%e9%be%8d%e5%a0%82%e5%af%ba%e5%a3%ab%e9%96%80%e3%81%ae%e9%99%b0%e8%ac%80-%e5%be%8c%e7%b7%a8-%e5%a5%b3%e5%ad%90%e5%96%b0%e3%81%88%e3%81%b0%e3%80%81%e5%96%9c%e6%82%a6%e3%81%aa%e3%82%8b%e3%81%aa%e3%82%8a/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/2-9.jpg","magnet":["熟571073075bb1ab1a5d5e049c90a390ce68a3470e","熟40B441B2D2AEA0CA57FA723C7A4225602F4843FE","生278e103fa6341a658f613c233b0ee05795d4caba","生26758D5538CCD121D897039A6DAF6F4E87225720","生F57543152872473956A47AB2898AA350E074AB69"]},{"title":"[TMA]Faith/Grand Orgasm 2","link":"http://www.llss.cool/wp/all/anime/tmafaithgrand-orgasm-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5-3.jpg","magnet":["6D6AD2D891BD530018B8645407532C23266A3601"]},{"title":"J染 系列 YINYUの連鎖 YIN罪都市 SHOU都崩壊 Ball Buster The Daybreak【1-5前作全集】","link":"http://www.llss.cool/wp/all/anime/j%e6%9f%93-%e7%b3%bb%e5%88%97-yinyu%e3%81%ae%e9%80%a3%e9%8e%96-yin%e7%bd%aa%e9%83%bd%e5%b8%82-shou%e9%83%bd%e5%b4%a9%e5%a3%8a-ball-buster-the-daybreak%e3%80%901-5%e5%89%8d%e4%bd%9c%e5%85%a8%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/29381f30e924b899aace544c6f061d950b7bf6d7.jpg","magnet":["6081f5041945a646155faf28afacdefadef04a48"]},{"title":"【熟肉】アイドル強制x作2~女を思いのままにる悪魔のスマートフォン~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e5%bc%b7%e5%88%b6x%e4%bd%9c2%ef%bd%9e%e5%a5%b3%e3%82%92%e6%80%9d%e3%81%84%e3%81%ae%e3%81%be%e3%81%be%e3%81%ab%e3%82%8b%e6%82%aa/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/1-8.jpg","magnet":["熟662150f5d1758ea74b023d9e6d0d43890ff88fe5","生EC9A3679222B84E39F512C4E111795CEA55BD1B3"]},{"title":"【熟肉】J染5-The Daybreak- ルートA絶望と悪夢の世界で Episode 03【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91j%e6%9f%935-the-daybreak-%e3%83%ab%e3%83%bc%e3%83%88a%e7%b5%b6%e6%9c%9b%e3%81%a8%e6%82%aa%e5%a4%a2%e3%81%ae%e4%b8%96%e7%95%8c%e3%81%a7-episode-03%e3%80%90%e9%99%84/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/6-1.jpg","magnet":["熟c2f7edcf94dd446190f65195f211a66f781d7434","A09B49170E9F28027A4DC6F6ED5D2C6EB17B9F57","生D5C1746E4FFD019BB92D071005B3EBD29BD4F770"]},{"title":"[夜桜字幕组]2018年3月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842018%e5%b9%b43%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2018/04/12/AMCP-008_aruhi_MotionAnime_nontrop_mainMovieWMV_20180412214213.jpg","magnet":["B8E2B8330772AFB85BA0D2C549C64131B5D97B85","D2E259F3100092D1C37273A686F13C9591AE8861","D5D1F01F90C9DFA5EBA80A29C86C7D0B8D486BCC","39DF5B9731353D2C503D39FA9509D3D2582E8C81","30759B4F978FF0CA77B2EAA426E4E38719C83227","CB82D069C2D74350816A","61CB18E522AF28DB2958"]},{"title":"【熟肉】OVA 裏・受胎島 #1 液って…なんでこんなに…美味しいの…V2","link":"http://www.llss.cool/wp/all/anime/ova-%e8%a3%8f%e3%83%bb%e5%8f%97%e8%83%8e%e5%b3%b6-%ef%bc%831-%e6%b6%b2%e3%81%a3%e3%81%a6%e3%81%aa%e3%82%93%e3%81%a7%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e7%be%8e%e5%91%b3%e3%81%97/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/4.jpg","magnet":["熟3cc7d7dc8013c05c079dd10fffebb1917f614b67","熟201768a9dc1ba7e0bb873c5faca181711a2244e0","生7CBC732978D21ABC065C9FB1CD3CE46B8B8A9E51"]}][{"title":"【熟肉】ねぇ、…しよ 後編[ピジャ]【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%81%ad%e3%81%87%e3%80%81%e3%81%97%e3%82%88-%e5%be%8c%e7%b7%a8%e3%83%94%e3%82%b8%e3%83%a3/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/5-1.jpg","magnet":["熟cfca096cd29795a699047488928db21783c2bff2","生126E1476F1F04B1A76F9D97D48EC9C7345AC5BA6"]},{"title":"【生肉】[ぽんぷりん] ヒトノマネカタ","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%bd%e3%82%93%e3%81%b7%e3%82%8a%e3%82%93-%e3%83%92%e3%83%88%e3%83%8e%e3%83%9e%e3%83%8d%e3%82%ab%e3%82%bf/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/3-1.jpg","magnet":["219E247706BC53143303BE94015968386B46441E","Fow]Beastly_Bacchanalia["]},{"title":"2018年4月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/04/c986957sample6.jpg","magnet":null},{"title":"2018年3月 作品合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b43%e6%9c%88-%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/4.jpg","magnet":["bdb631951889ca1320921115660e29379a7dccc4"]},{"title":"【熟肉】催眠☆学園 ~じられ膨れるハジマリの失~","link":"http://www.llss.cool/wp/all/anime/%e5%82%ac%e7%9c%a0%e2%98%86%e5%ad%a6%e5%9c%92-%ef%bd%9e%e3%81%98%e3%82%89%e3%82%8c%e8%86%a8%e3%82%8c%e3%82%8b%e3%83%8f%e3%82%b8%e3%83%9e%e3%83%aa%e3%81%ae%e5%a4%b1%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/3-2.jpg","magnet":["熟72e32667d64cd5c9118293359f1b9a9cf5912c9f","生1AD2411266AD41F1FDF884B9F9DD2AC978D62952"]},{"title":"【熟肉】ドSなマイナ会長サマがMノートに支配されました。~ドSな会長サマの躾け do M【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%83%89s%e3%81%aa%e3%83%9e%e3%82%a4%e3%83%8a%e4%bc%9a%e9%95%b7%e3%82%b5%e3%83%9e%e3%81%8cm%e3%83%8e%e3%83%bc%e3%83%88%e3%81%ab%e6%94%af%e9%85%8d%e3%81%95%e3%82%8c%e3%81%be%e3%81%97%e3%81%9f-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/4-5.jpg","magnet":["熟a52c1dbbdb31b73d9275ca681c061f77f2e2e712","生8960406B274A553AB438218FA5092093EFAB03E3"]},{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様がメイド服でご奉仕の巻点【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/1-10.jpg","magnet":["熟742f119bcb0d171fbfcc4054e6dc4dd30cf65bf5","生B6838E316EFB03E25D5083A81BFAE23A6F0F4A65"]},{"title":"【熟肉】炎の孕ませおっぱいエロアプリ学園 THE ANIMATION 第2巻【附前作】","link":"http://www.llss.cool/wp/all/anime/%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e3%81%8a%e3%81%a3%e3%81%b1%e3%81%84%e3%82%a8%e3%83%ad%e3%82%a2%e3%83%97%e3%83%aa%e5%ad%a6%e5%9c%92-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/2-5.jpg","magnet":["熟3b9f6640474dbe1e1262affd5b2ddd9408a22a52","生DBFEC4FD1074F0D9C73B0CBC7FD66B93402D384B"]},{"title":"【COSPLAY】Fate/grand Order 尼禄·克劳狄乌斯【花嫁】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90cosplay%e3%80%91fategrand-order-%e5%b0%bc%e7%a6%84%c2%b7%e5%85%8b%e5%8a%b3%e7%8b%84%e4%b9%8c%e6%96%af-%e6%96%b0%e5%a8%98/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/12.jpg","magnet":["7b9f0c54886440f3acea95a8c516b4aec46672c3","a1de35e1928ccc08cf493fd0060c93b28b57b5ae","74bd5d2c4390d1df0ceac887f76325672d3497f2"]}][{"title":"【COSPLAY】Fate/grand Order 玛修·基列莱特","link":"http://www.llss.cool/wp/all/anime/%e3%80%90cosplay%e3%80%91fategrand-order-%e9%a9%ac%e4%bf%ae/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/22.jpg","magnet":["2ADFAF7D9AF2749402D3A782FEF917BA1B9E42C1"]},{"title":"[オレンジ☆ライス] 魔女とショクシュ魔神","link":"http://www.llss.cool/wp/all/anime/%e3%82%aa%e3%83%ac%e3%83%b3%e3%82%b8%e2%98%86%e3%83%a9%e3%82%a4%e3%82%b9-%e9%ad%94%e5%a5%b3%e3%81%a8%e3%82%b7%e3%83%a7%e3%82%af%e3%82%b7%e3%83%a5%e9%ad%94%e7%a5%9e/","img":"http://llss.cool/wp/wp-content/uploads/2018/03/3-1.jpg","magnet":["456eb95dd3a70740610f628e64eddfd69ce399ee"]},{"title":"【熟肉】妻ネトリ 輪廻","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/c994838sample4.jpg","magnet":["熟36f06ab31b78bb644d5e1e41d77859f30f244da4","生4C49D78136C7463505D884F659F9BE96697FF7B8"]},{"title":"【熟肉】一求RU魂 特別編[ごばん]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e4%b8%80%e6%b1%82ru%e9%ad%82-%e7%89%b9%e5%88%a5%e7%b7%a8%e3%81%94%e3%81%b0%e3%82%93/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/1-6.jpg","magnet":["熟a4746be7eb151f0009a18ab09c45afd9f9881b22","生7BD9B6B8411F953B9ED5230B06A7C79718FB7422"]},{"title":"[A THIRD DIMENSION] ~little ballerina~ ヒナ!三部曲 [夜桜字幕组/yozakura.sub]","link":"http://www.llss.cool/wp/all/anime/a-third-dimension-%ef%bd%9elittle-ballerina%ef%bd%9e-%e3%83%92%e3%83%8a%e4%b8%89%e9%83%a8%e6%9b%b2-%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84yozakura-sub/","img":"http://wx3.sinaimg.cn/mw690/006GutMaly1fp83gu1mwhj30sg0k0jxp.jpg","magnet":["58D7251D3E35CBBE3B6335"]},{"title":"[夜桜字幕组] 2018年2月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-2018%e5%b9%b42%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://ww1.sinaimg.cn/large/005zWjpngy1fp99xvmhfej30zk0k0761.jpg","magnet":["8FB4C041B4017858C4348BFB0EB82F322627C6A5","F20DE08D12C7A193EA12A3EF2C4A4789ABB3337A","99E097293D6FC35BACA01258E917ED0DB1927D53","9F7A8F506FEEB6926490BA36DE340F31F4F3776B","BB95A40345B81E63124E8C3CA4F2CDDCAC2A6FCF","2AFD2736C174DF4AEADBF3DE"]},{"title":"【熟肉】エンコ―J●ビッチギャル オジサンとなまパコ活 part.2【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%82%a8%e3%83%b3%e3%82%b3%e2%80%95j%e2%97%8f%e3%83%93%e3%83%83%e3%83%81%e3%82%ae%e3%83%a3%e3%83%ab-%e3%82%aa%e3%82%b8%e3%82%b5%e3%83%b3%e3%81%a8%e3%81%aa%e3%81%be%e3%83%91%e3%82%b3%e6%b4%bb-part-2/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/4-1.jpg","magnet":["a3fea0a6846a95c62f11578b1355d578609fd5e3"]},{"title":"【熟肉】[EDGE] Cherry&GAL’s↑↑ Episode2 イチゴ狩り【附前作】","link":"http://www.llss.cool/wp/all/anime/edge-cherry%ef%bc%86gals%e2%86%91%e2%86%91-episode2-%e3%82%a4%e3%83%81%e3%82%b4%e7%8b%a9%e3%82%8a%e3%80%90%e9%99%84%e5%89%8d%e4%bd%9c%e3%80%91/","img":"https://ws1.sinaimg.cn/large/a15b4afegy1fp4lk5tuk6j20zk0k00wi.jpg","magnet":["38154f78a90050c7af54a419c32b0152c686c437"]},{"title":"【熟肉】小女ラムネ 第4話 みんなの夏休み","link":"http://www.llss.cool/wp/all/anime/%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac4%e8%a9%b1-%e3%81%bf%e3%82%93%e3%81%aa%e3%81%ae%e5%a4%8f%e4%bc%91%e3%81%bf/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138table2.jpg","magnet":["熟42c67aaacf3404eb0cc09f9eaf5b88798623e906","生516FB0A0C93BD77671CA67F518031F223F83658A"]}][{"title":"【熟肉】OVA ようこそ! スケベエルフの森へ #2 ニンゲンのチ○ポなんかに…負けて、たまるか…っ","link":"http://www.llss.cool/wp/all/anime/ova-%e3%82%88%e3%81%86%e3%81%93%e3%81%9d%ef%bc%81-%e3%82%b9%e3%82%b1%e3%83%99%e3%82%a8%e3%83%ab%e3%83%95%e3%81%ae%e6%a3%ae%e3%81%b8-%ef%bc%832-%e3%83%8b%e3%83%b3%e3%82%b2%e3%83%b3%e3%81%ae%e3%83%81/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/c981447sample30.jpg","magnet":["熟59eda073f3c60ee8b19417d3e1ed1e037368cc00","生6C83E520CBF52AE9CA536BF91C4DEDB46BAEC718"]},{"title":"[バニーホール] マジメなに催眠術をかけてセックス大好きビッチにしてみた","link":"http://www.llss.cool/wp/all/anime/%e3%83%90%e3%83%8b%e3%83%bc%e3%83%9b%e3%83%bc%e3%83%ab-%e3%83%9e%e3%82%b8%e3%83%a1%e3%81%aa%e3%81%ab%e5%82%ac%e7%9c%a0%e8%a1%93%e3%82%92%e3%81%8b%e3%81%91%e3%81%a6%e3%82%bb%e3%83%83%e3%82%af/","img":"http://ww1.sinaimg.cn/large/0060lm7Tly1foxlkns9pmj30sg0lc40p.jpg","magnet":["2cb1160087545d1adae1ed9877c957339038e3c7"]},{"title":"2018年3月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/c981447sample21.jpg","magnet":null},{"title":"2018年2月里番合集介绍","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86%e4%bb%8b%e7%bb%8d/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/4-2.jpg","magnet":["b0e187d152604e29cb39166f708e5e79192334e9"]},{"title":"(同人アニメ)[A THIRD DIMENSION] ATD WORKS01 “CHRIS EDITION”+VR (Ver.170202)","link":"http://www.llss.cool/wp/all/anime/%e5%90%8c%e4%ba%ba%e3%82%a2%e3%83%8b%e3%83%a1a-third-dimension-atd-works01-chris-editionvr-ver-170202/","img":"http://wx4.sinaimg.cn/mw690/006GutMagy1foqtcykzjxj31kw1kwe32.jpg","magnet":["86cdbc52f8d03b803de571cfea02b2f3fb26e62a"]},{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様はびしょびしょでアヘアヘの巻","link":"http://www.llss.cool/wp/all/anime/%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b%e3%81%8a%e8%a9%b1-%e8%8b%a5-3/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c985364sample17.jpg","magnet":["熟9ccf922b7374635a06356e92e327bbbd923b56e1","生B86270C660368609560FD9A78C7CDCABC53CA029","生2C3A3358BD012C179D4EEA521C16560724B21C46","[collaborationworks]"]},{"title":"【熟肉】フリフレ2 妹・菫~背徳の再会","link":"http://www.llss.cool/wp/all/anime/%e3%83%95%e3%83%aa%e3%83%95%e3%83%ac2-%e5%a6%b9%e3%83%bb%e8%8f%ab%ef%bd%9e%e8%83%8c%e5%be%b3%e3%81%ae%e5%86%8d%e4%bc%9a/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c985362sample5.jpg","magnet":["熟ed3938734511d4b4cc36df721197fb9ddf8e2c73","生01F1DD5CF251D97CBE325679229A302E1DB73AA4","生6DD1415197D270DF289A0C09B09B2BF32B7E52E1","生5463EBA2C81DFE80FD26613AF4DF00857DBFB8C7"]},{"title":"【熟肉】りゆき→パパ活GIRLS!! THE ANIMATION #1「J○×オジサマの感セックスライフ」","link":"http://www.llss.cool/wp/all/anime/%e3%82%8a%e3%82%86%e3%81%8d%e2%86%92%e3%83%91%e3%83%91%e6%b4%bbgirls-the-animation-1%e3%80%8cj%e2%97%8bx%e3%82%aa%e3%82%b8%e3%82%b5%e3%83%9e%e3%81%ae%e6%84%9f%e3%82%bb%e3%83%83%e3%82%af/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c984631sample1.jpg","magnet":["熟8c3b4dc687a80c2dc8ee8c5f0cc6735829511fb8","生F75743D64A67A355508BC9EC16C61B587D1D4403","生7D4C1A221F2270B10896029C1945D4DB8F6272E7"]},{"title":"【熟肉】かぎろひ~勺景~ Another 第四夜 明かされる真実、少女達の声","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e5%9b%9b%e5%a4%9c-%e6%98%8e%e3%81%8b%e3%81%95%e3%82%8c%e3%82%8b%e7%9c%9f/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/c985363sample25.jpg","magnet":["熟9fab42db82f535d4818bd812bdea20ad6dc62fd9","生10AF4135969D4E4AF173DD33D1CDE33F73C50B25","生F684C4D66B59844EFA18AC36DC7D69269ED60A8F"]}][{"title":"[Mantis-X] Gloryhole Gals! – Final","link":"http://www.llss.cool/wp/all/anime/mantis-x-gloryhole-gals-final/","img":"http://wx4.sinaimg.cn/mw690/006GutMagy1foakygwso6j31hc0u0e81.jpg","magnet":["ADEDDFC69751E670D29ADF0BC36FD7A53A1FC100"]},{"title":"【熟肉】エンコ―J●ビッチギャル オジサンとなまパコX活 part.1","link":"http://www.llss.cool/wp/all/anime/%e3%82%a8%e3%83%b3%e3%82%b3%e2%80%95j%e2%97%8f%e3%83%93%e3%83%83%e3%83%81%e3%82%ae%e3%83%a3%e3%83%ab-%e3%82%aa%e3%82%b8%e3%82%b5%e3%83%b3%e3%81%a8%e3%81%aa%e3%81%be%e3%83%91%e3%82%b3x%e6%b4%bb-part-1/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/1-2.jpg","magnet":["熟df78caeefff6d2de7a5fd658012c719137386b82","熟4197B605FB1E5E288CAE5999990A43FA583DDE7B","生69EF38E041076B01F583D3BB3CDB7CD832EEE597"]},{"title":"【熟肉】Cherry&GAL’s↑↑ Episode1 ハマッちゃうかも!","link":"http://www.llss.cool/wp/all/anime/cherry%ef%bc%86gals%e2%86%91%e2%86%91-episode1-%e3%83%8f%e3%83%9e%e3%83%83%e3%81%a1%e3%82%83%e3%81%86%e3%81%8b%e3%82%82%ef%bc%81/","img":"http://llss.cool/wp/wp-content/uploads/2018/02/3.jpg","magnet":["熟77378a470e51d9794a3f29cec2aca92bcfb0c00c","生332931865A69751D31FFE205501094D196EDC5C9"]},{"title":"[夜桜字幕组]2018年1月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842018%e5%b9%b41%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2018/02/10/180210opiumudYoshiwararoseBIG5_20180210140433.jpg","magnet":["308835EDC9E690DC647A76DECE79C81E74CE86B5","F536451F14A072B59274DA3781030919C75A1ED4","C6C2858270F9CB1A1199983F6D7E831132022564","28D15D7653BC3D39A223B7CE78CCEF71B244C45F","8F3C44AC2D438A6A1263C666E8CD8CD4FE39DA55","1BC1C989E0C93B69556E11"]},{"title":"[梅麻吕]杉本翔子のSexyトレーナー Sexy trainer Shoko Sugimoto","link":"http://www.llss.cool/wp/all/game/%e6%a2%85%e9%ba%bb%e5%90%95%e6%9d%89%e6%9c%ac%e7%bf%94%e5%ad%90%e3%81%aesexy%e3%83%88%e3%83%ac%e3%83%bc%e3%83%8a%e3%83%bc-sexy-trainer-shoko-sugimoto/","img":"http://wx2.sinaimg.cn/mw690/006GutMagy1fo8cbfqqehj31hc0u0e81.jpg","magnet":["37AD13FEE5E981C696732F5E32F3947AB8056976","3876C41C1475656F7E11007DF8056B1C103A4055"]},{"title":"【熟肉】ねぇ、…しよ 前編[ピジャ]","link":"http://www.llss.cool/wp/all/anime/%e3%81%ad%e3%81%87%e3%80%81%e3%81%97%e3%82%88-%e5%89%8d%e7%b7%a8%e3%83%94%e3%82%b8%e3%83%a3/","img":"https://ws1.sinaimg.cn/large/659503cagy1fo4rwcm6iwj20uu0hcdjp.jpg","magnet":["熟9ea6facd9a1c85f3c51c8642fda967471cccd1ca","生FE4F7307C7F821E06D0AB4FF8410B779479B86B9"]},{"title":"【熟肉】OVA ようこそ! スケベエルフの森へ #1 救世主様、村中のエルフをませてください","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91ova-%e3%82%88%e3%81%86%e3%81%93%e3%81%9d%ef%bc%81-%e3%82%b9%e3%82%b1%e3%83%99%e3%82%a8%e3%83%ab%e3%83%95%e3%81%ae%e6%a3%ae%e3%81%b8-%ef%bc%831-%e6%95%91%e4%b8%96/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/3-2.jpg","magnet":["熟4D41BF596D9E34DAAA419CD8E7C35EFF1114A3AB","生E85FEE3A3A4A6F54F9AA208EB812AFF17A35FC4A"]},{"title":"2018年2月里番预告与期待调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/1-7.jpg","magnet":null},{"title":"2018年1月里番合集","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b41%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"https://ww4.sinaimg.cn/large/0060lm7Tly1fnqvewtkptj30uu0hcgog.jpg","magnet":["e09b3040402472de51d165c919da7afe14d8f511"]}][{"title":"【熟肉】リアルエロゲシチュエーション! THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%a8%e3%83%ad%e3%82%b2%e3%82%b7%e3%83%81%e3%83%a5%e3%82%a8%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%ef%bc%81-the-animation/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/33.jpg","magnet":["熟029849a1a5ba87d945773effccda599ebdcf5e4f","生92986726ACDAAE35844C0CD363F1D0CDA91AF15C"]},{"title":"【熟肉】かぎろひ~勺景~ Another 第三夜 乱れる淑女、悪意の花踊る[附前作]","link":"http://www.llss.cool/wp/all/anime/%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e4%b8%89%e5%a4%9c-%e4%b9%b1%e3%82%8c%e3%82%8b%e6%b7%91%e5%a5%b3%e3%80%81%e6%82%aa%e6%84%8f%e3%81%ae%e8%8a%b1/","img":"http://llss.cool/wp/wp-content/uploads/2017/12/c981449sample1.jpg","magnet":["熟6BC43BE048F54DF50101B23146546B3261A2B13D","生E9387052409988801560262A314F567FD67749E3"]},{"title":"【熟肉】転生剣奴の子づくり闘技場(ハーレムコロッセオ)「へっぽこどS皇女・ルナハソール~お仕置きちびりの嗜xスパン」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e3%81%a5%e3%81%8f%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad%e3%83%83%e3%82%bb%e3%82%aa/","img":"https://ws1.sinaimg.cn/large/659503caly1fnxrmw7dhyj20uu0hcwj9.jpg","magnet":["熟412925352DA29DCB0BD2DEDB2BB4E811D7FD4CA1","生C9C62939736C7EEDA9B9BE8D038718160CA4B780"]},{"title":"【熟肉】ドSなマイナ会長サマがMノートに支配されました。 ~xみねだるドSなドM~","link":"http://www.llss.cool/wp/all/anime/%e3%83%89s%e3%81%aa%e3%83%9e%e3%82%a4%e3%83%8a%e4%bc%9a%e9%95%b7%e3%82%b5%e3%83%9e%e3%81%8cm%e3%83%8e%e3%83%bc%e3%83%88%e3%81%ab%e6%94%af%e9%85%8d%e3%81%95%e3%82%8c%e3%81%be%e3%81%97%e3%81%9f%e3%80%82/","img":"http://llss.cool/wp/wp-content/uploads/2018/01/1-6.jpg","magnet":["熟B8BF131B867E733D9760141DBB7C3C16C31B8A18","生7BEA0DE8AE262D2E2D964F0CEC4EC4A124BA074F"]},{"title":"[@OZ(アットオズ)] 霊夢封Y 禁断のLJ地獄篇 DL版","link":"http://www.llss.cool/wp/all/anime/oz%ef%bc%88%e3%82%a2%e3%83%83%e3%83%88%e3%82%aa%e3%82%ba%ef%bc%89-%e9%9c%8a%e5%a4%a2%e5%b0%81y-%e7%a6%81%e6%96%ad%e3%81%aelj%e5%9c%b0%e7%8d%84%e7%af%87-dl%e7%89%88/","img":"https://ww3.sinaimg.cn/large/0060lm7Tly1fnvhb10mbcj30zk0k0taq.jpg","magnet":["36cd06055e92730c4bb8b656b50212b4041deedf"]},{"title":"【熟肉】OVA 巨RU大家族催眠 #2 町中全ての女を手に入れろ!【附前作】","link":"http://www.llss.cool/wp/all/anime/ova-%e5%b7%a8ru%e5%a4%a7%e5%ae%b6%e6%97%8f%e5%82%ac%e7%9c%a0-%ef%bc%832-%e7%94%ba%e4%b8%ad%e5%85%a8%e3%81%a6%e3%81%ae%e5%a5%b3%e3%82%92%e6%89%8b%e3%81%ab%e5%85%a5%e3%82%8c%e3%82%8d%ef%bc%81/","img":"https://wx1.sinaimg.cn/large/0060lm7Tly1fnvicmhbimj30uu0hcdjb.jpg","magnet":["熟c677eb04f0e72f577c1e49d98368d85b04f6003e","生530EA0221D4940C7A4BFBFDAECF17F6E9DCA0603","生36E5DF18F95DB35FB516DD13259ED9A281B874D2"]},{"title":"[夜桜字幕组]2017年12月3D作品合集介绍[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b412%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86%e4%bb%8b%e7%bb%8dbig5gb/","img":"https://imghost.io/images/2018/01/10/FOW-013FirstAssembly_20180110200244.jpg","magnet":["E91CD7598DFAE6DA9602FA26F4EA53D5D371B369","64828336FA497CA50943FE3B0932516C4BB4486A","808146C99485CCFD544AAE59AD4872B48EB34CFB","6AE53CAB0068EEE1EF6BAC5DD5FDC99600EDCFA9","17BFED01F36154915E71BEF271B1E04741924ADA","B3AF4D38F4D658D6DC56FD67C0FA24951E3D1686","26A09E2F3A3F296445FB9"]},{"title":"【熟肉】Jewelry THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91jewelry-the-animation/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-4.jpg","magnet":["72e95c9001a4949d0735bc1a169d47315e19ee4d"]},{"title":"【熟肉】レジデンス 下巻 ある少女の話【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%8b%e5%b7%bb-%e3%81%82%e3%82%8b%e5%b0%91%e5%a5%b3%e3%81%ae%e8%a9%b1/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/4.jpg","magnet":["49a3b8becaa9db3282c9ca823c868144d6ff4fd8","5b8327ac00417a31398cf7ae77cf6e7a1e43ee2b"]}][{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【12】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-7/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/1-2.jpg","magnet":["3e0063909af80f071a73872b540aba4b3b81e36d","4529fa04da6f427762e9e4dbbd4094c93f7198c4"]},{"title":"[にじいろばんび] 若菜ちゃんの初エッチ","link":"http://www.llss.cool/wp/all/anime/%e3%81%ab%e3%81%98%e3%81%84%e3%82%8d%e3%81%b0%e3%82%93%e3%81%b3-%e8%8b%a5%e8%8f%9c%e3%81%a1%e3%82%83%e3%82%93%e3%81%ae%e5%88%9d%e3%82%a8%e3%83%83%e3%83%81/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1fmy19p9bk1j30zk0k044u.jpg","magnet":["3635c53bbc9fa16be5edb077b1bc2c08cfeac072"]},{"title":"2018年1月里番预告与期待调查","link":"http://www.llss.cool/wp/all/anime/2018%e5%b9%b41%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e6%9c%9f%e5%be%85%e8%b0%83%e6%9f%a5/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-5.jpg","magnet":null},{"title":"【表番】巧克力与香子兰/NEKOPARA OVA","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e8%a1%a8%e7%95%aa%e3%80%91%e5%b7%a7%e5%85%8b%e5%8a%9b%e4%b8%8e%e9%a6%99%e5%ad%90%e5%85%b0nekopara-ova/","img":"http://wx2.sinaimg.cn/large/8c007b5cly1fms2fye1djj21yu1fokjl.jpg","magnet":["93A65336E796CB364D2F39E8425B45CE30935FDF"]},{"title":"2017年12里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b412%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/c968967sample1.jpg","magnet":["a1ee6eb358add73fe0026dd40fc19f94becefad5"]},{"title":"【熟肉】おいでよ! 私立ヤリま×り学園 「潔ぽこ会長・ミラ~拗ねX抉る桃Xボール~」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92-%e3%80%8c%e6%bd%94%e3%81%bd%e3%81%93/","img":"http://wx3.sinaimg.cn/large/8c007b5cly1fmtc34vacvj20np0db0tq.jpg","magnet":["722627aeefb8a83139cd79dc81d7b34e912f8baa"]},{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様はお祭りに行きたいの巻【附前作】","link":"http://www.llss.cool/wp/all/anime/%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b%e3%81%8a%e8%a9%b1-%e8%8b%a5-2/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/1-6.jpg","magnet":["44bf58186c4f8b54fa0a9ae3de84f1b34fb79bf0","[collaborationworks]"]},{"title":"【熟肉】JKとエロコンビニ店長 エロ可愛近親・母娘姪(まおゆいしー)~憧れ穿たれXX仕置き~【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9b%e8%bf%91%e8%a6%aa%e3%83%bb%e6%af%8d/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/c977590table2.jpg","magnet":["89ec663f876b3030713654a183a18f505ead0c24"]},{"title":"【熟肉】キメ恋! 高嶺の華とXなじみがキマった理由 下巻 正妻はどっち?【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%82%ad%e3%83%a1%e6%81%8b%ef%bc%81-%e9%ab%98%e5%b6%ba%e3%81%ae%e8%8f%af%e3%81%a8x%e3%81%aa%e3%81%98%e3%81%bf%e3%81%8c%e3%82%ad%e3%83%9e%e3%81%a3%e3%81%9f%e7%90%86/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/c981726sample2.jpg","magnet":["3e44e6e3c21d1ff47873f717dfeecfc12c75fa75"]}][{"title":"【熟肉】八尺八話快樂巡り~異形怪奇譚~ THE ANIMATION「八尺様 完結編」「八尺様 夢物語」【附前作】","link":"http://www.llss.cool/wp/all/anime/%e5%85%ab%e5%b0%ba%e5%85%ab%e8%a9%b1%e5%bf%ab%e6%a8%82%e5%b7%a1%e3%82%8a%ef%bd%9e%e7%95%b0%e5%bd%a2%e6%80%aa%e5%a5%87%e8%ad%9a%ef%bd%9e-the-animation%e3%80%8c%e5%85%ab%e5%b0%ba%e6%a7%98-%e5%ae%8c/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/c977015sample5.jpg","magnet":["e43b03731220bb3a0cc6638576a3714ec4d7e1b6"]},{"title":"【熟肉】パコマネ わたし、今日から名門野球部のXIN処理係になります… THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%91%e3%82%b3%e3%83%9e%e3%83%8d-%e3%82%8f%e3%81%9f%e3%81%97%e3%80%81%e4%bb%8a%e6%97%a5%e3%81%8b%e3%82%89%e5%90%8d%e9%96%80%e9%87%8e%e7%90%83%e9%83%a8%e3%81%aex/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/1-12.jpg","magnet":["熟1CD229BB12F2559B3FEC9472052FB4A009CD8D97","生F9D6C529445874FD0AB9302E976EF0C4A16B280E"]},{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【11】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-6/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-3.jpg","magnet":["37ead6be4af05965564f3ced4edc12eb099e674a"]},{"title":"[TMA] Faith/Grand Orgasm(Fate/Grand Order)","link":"http://www.llss.cool/wp/all/anime/tma-faith%ef%bc%8fgrand-orgasm%ef%bc%88fategrand-order%ef%bc%89/","img":"https://ws1.sinaimg.cn/large/a15b4afegy1fmggqdu8vtj20jg07uab2.jpg","magnet":["8d76f868885b321b9677eda76b1c88fe0238708f"]},{"title":"【熟肉】一求RU魂 後編[ごばん]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e4%b8%80%e6%b1%82ru%e9%ad%82-%e5%be%8c%e7%b7%a8%ef%bc%bb%e3%81%94%e3%81%b0%e3%82%93%ef%bc%bd/","img":"http://wx3.sinaimg.cn/large/8c007b5cly1fmk30ztl72j20np0dbgmp.jpg","magnet":["f0a37f6c7f53798e72c843d46ae05d82c46e1273","E535CFB159539957CF5388D2773AEB81F24B7D79"]},{"title":"【熟肉】ヒトヅマライフ ワンタイムギャル 下巻【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%92%e3%83%88%e3%83%85%e3%83%9e%e3%83%a9%e3%82%a4%e3%83%95-%e3%83%af%e3%83%b3%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%ae%e3%83%a3%e3%83%ab-%e4%b8%8b%e5%b7%bb%e3%80%90/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/1-3.jpg","magnet":["b4f6315345acc2672a0638b490f998d8401af2fa"]},{"title":"[夜桜字幕组]2017年11月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b411%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/12/08/boshisoukan_01_20171208192715.jpg","magnet":["5FEF6CA84E14ED78C41DD86889F007C0AACD971F","6E0C05ECDF1C309371F5FE9F7DC9FE8A584B948F","F57774F18EBEC54FCD7911EA5C5F879B06C9F8F9","A35C6243C88D5383CCA24DE24EA06D5E326B18EE","D288AC48989C4F74B54F8FD9859BD51A30637BD8","10E147BD58DAB1AB90FB","246D6F3F889377553AC6"]},{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【10】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-5/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/2-1.jpg","magnet":["2509b5cad31a4e55a80e8144dabc8eb25b8cd446"]},{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【09】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-4/","img":"http://hacg.dog/wp/wp-content/uploads/2017/12/1.jpg","magnet":["274f55658f698914dda731ab8d1cf441269858a3"]}][{"title":"[Studio F.O.W.] Nier: First [Ass]embly [FOW-013]","link":"http://www.llss.cool/wp/all/anime/studio-f-o-w-nier-first-assembly-fow-013/","img":"http://ww4.sinaimg.cn/large/a15b4afegy1fm2pidh81pj20zk0k0jso.jpg","magnet":["23f822b20eaae22d71de3b8f914323c8a90d0501"]},{"title":"【熟肉】ジュヴナイルポルノグラフィ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%82%b8%e3%83%a5%e3%83%b4%e3%83%8a%e3%82%a4%e3%83%ab%e3%83%9d%e3%83%ab%e3%83%8e%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3-the-animation/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fm9m93z11pj20zk0k00uh.jpg","magnet":["熟8B65E3244B88DF2C14DED05ED4B1E015FB957C06","熟558757BFA1C8FD21557AFA890C329F5B5BA2DC83","生BB1FC6C98D80F11EB2BDFE726B87EAE6D1F469D1"]},{"title":"【熟肉】OVA 巨RU大家族催眠 #1 巨RUぞろいの隣人妻 V2","link":"http://www.llss.cool/wp/all/anime/ova-%e5%b7%a8ru%e5%a4%a7%e5%ae%b6%e6%97%8f%e5%82%ac%e7%9c%a0-%ef%bc%831-%e5%b7%a8ru%e3%81%9e%e3%82%8d%e3%81%84%e3%81%ae%e9%9a%a3%e4%ba%ba%e5%a6%bb/","img":"http://wx2.sinaimg.cn/large/8c007b5cly1fm9ltcxz1sj20zk0k00us.jpg","magnet":["熟37EC2B753D562C61C66E5BAEE4083A66D59FCC61","熟330ef77ae78ef4f3ad26e3c3fc93b35f483aae75","生E3A71E50165A66B36165D12A3282002A113A5E8C"]},{"title":"[FuenoNe Works] 裏庭の土地神様 后院的土地神","link":"http://www.llss.cool/wp/all/anime/fuenone-works-%e8%a3%8f%e5%ba%ad%e3%81%ae%e5%9c%9f%e5%9c%b0%e7%a5%9e%e6%a7%98-%e5%90%8e%e9%99%a2%e7%9a%84%e5%9c%9f%e5%9c%b0%e7%a5%9e/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1fm1jj6pokoj31hc0tztda.jpg","magnet":["2199cf111ed2574dd2ea2624481d23714ab278a0"]},{"title":"2017年12里番预告与期待调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b412%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e6%9c%9f%e5%be%85%e8%b0%83%e6%9f%a5/","img":"http://hacg.dog/wp/wp-content/uploads/2017/11/816d1912521c7491f10fb13bc977ac66.jpg","magnet":null},{"title":"2017年11月合集 V3 【增魔穗】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b411%e6%9c%88%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/0060lm7Tly1fm3ri6hs5gj30zk0k0q4f.jpg","magnet":["5F9A7F2BBEA0EC968E5E8F567F1DA7C96339C0B6","C2491862D5ED99E42A47949C83C564889AC54A5F","9E2A6B270BF37A54387EFAE10F990667A3D24E55","45b198ed07e9f6814ed5c3713c38df846139ae32","97D85F3EA9296BA65F8E4E108DEC2F86094D4477","b86883f8e2b905bd299275a698c361ee2f1e094a"]},{"title":"【熟肉】転生剣奴の子作り闘技場(ハーレムコロッセオ)「へっぽこ爆x皇女・マルシェ~うな垂れ鎧と強気な剣」V2","link":"http://www.llss.cool/wp/all/anime/%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad%e3%83%83%e3%82%bb%e3%82%aa%ef%bc%89-2/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0fgq4h42j31hc0u0na8.jpg","magnet":["熟ae8e4d85a9a65f9a33cf9a9944d1e7ee7127ff02","熟548278863B1BF2C56DAD0390C8CE33075ADC3AD8","熟1B72D871D0EC88EA2E6848D119B63C27E74FDC93","生BA305304B55F0FBEA4A045E63C4B2B2BB5032B9C"]},{"title":"【熟肉】かぎろひ~勺景~ Another 第二夜 夕暮れの教室、誘う艶髪 V2","link":"http://www.llss.cool/wp/all/anime/%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e4%ba%8c%e5%a4%9c-%e5%a4%95%e6%9a%ae%e3%82%8c%e3%81%ae%e6%95%99%e5%ae%a4%e3%80%81%e8%aa%98%e3%81%86%e8%89%b6/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c973228sample11.jpg","magnet":["熟5E76BE0E2648EA100059F22D6F8D4E5AEDC27D79","熟5632AB75C8D798C930ED5B3514FA0C81CC2FDF32","生D74DA1977154FB91A58B311E595F105BC33AD796"]},{"title":"【熟肉】片田舎に嫁いできた○シア娘とHしまくるお話 若奥様は幽霊が苦手の巻 V2","link":"http://www.llss.cool/wp/all/anime/%e7%89%87%e7%94%b0%e8%88%8e%e3%81%ab%e5%ab%81%e3%81%84%e3%81%a7%e3%81%8d%e3%81%9f%e2%97%8b%e3%82%b7%e3%82%a2%e5%a8%98%e3%81%a8h%e3%81%97%e3%81%be%e3%81%8f%e3%82%8b%e3%81%8a%e8%a9%b1-%e8%8b%a5%e5%a5%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2-4.jpg","magnet":["熟B3F93FB0F670A5ED3B67C9D8CA503A12569058FC","熟71a3369156b546aea9c11d12a4356b18f9383aa7","生FCEB7BBF27C8AFDFB179DE0F5D2517B96694040E"]}][{"title":"【熟肉】小女ラムネ 第3話 ゆかたと花火と夏祭り V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac3%e8%a9%b1%e3%80%80%e3%82%86%e3%81%8b%e3%81%9f%e3%81%a8%e8%8a%b1%e7%81%ab%e3%81%a8%e5%a4%8f%e7%a5%ad%e3%82%8a/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138table2.jpg","magnet":["熟D20EE5870F069C7E9A473C46404C81660668DBA6","熟8274EEB5A044EFAEB8BE0F16DE45CB70B4D2AB84","熟C1C63E3E164232975115153133AF32B55ED70FFF","生5280931283715A14B1CC6B0058A65A05108156D2"]},{"title":"【熟肉】Implicity II [東山翔] V2","link":"http://www.llss.cool/wp/all/anime/implicity-ii-%e6%9d%b1%e5%b1%b1%e7%bf%94/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2-3.jpg","magnet":["熟7BD9EE8E99913E89C47AC09324AD8AA7FA74B415","熟FF409E632BCF0C0D92AF880C75A09BD98CFAF927","生996DD2670C20CB53337E1E156B7AB40456403B4C"]},{"title":"【熟肉】ばくあね2 弟いっぱいしぼっちゃうぞ! THE ANIMATION V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%b0%e3%81%8f%e3%81%82%e3%81%ad2-%e5%bc%9f%e3%81%84%e3%81%a3%e3%81%b1%e3%81%84%e3%81%97%e3%81%bc%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%e3%81%9e%ef%bc%81-the-anim/","img":"http://ww1.sinaimg.cn/large/0060lm7Tly1fm3ri6hkfqj30zk0k0tag.jpg","magnet":["熟CFF9A8BC5E0F22E947E0A191FCB1C450CFD03475","熟14D17F5658FA49AA15A594252D6500E69E1B3E49","熟0708901f3224f6e6e9735a6648166f253cf3813e","生1C923EEF3DCBC2CF4099625DA24862EB1DF5BC25"]},{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【07-8】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-3/","img":"http://hacg.cool/wp/wp-content/uploads/2017/11/c56b1ffd3a7ab69fd352801e5250d280.jpg","magnet":["6782C76AF1DD1C6AD86488D859F7E723F9808CF1","67F00336B7EFDBD78A629D32709A7A8DD49DB30F"]},{"title":"[iLand] キモヲタ教師が、可愛い女生徒に 活指導!!","link":"http://www.llss.cool/wp/all/anime/iland-%e3%82%ad%e3%83%a2%e3%83%b2%e3%82%bf%e6%95%99%e5%b8%ab%e3%81%8c%e3%80%81%e5%8f%af%e6%84%9b%e3%81%84%e5%a5%b3%e7%94%9f%e5%be%92%e3%81%ab-%e6%b4%bb%e6%8c%87%e5%b0%8e/","img":"http://ww2.sinaimg.cn/large/0060lm7Tly1flotlgg7b5j30zk0k0jt8.jpg","magnet":["71e8eafdf6e26a8bf99883bd65e689db7d7a4e15"]},{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【06】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5-2/","img":"http://hacg.cool/wp/wp-content/uploads/2017/11/5e1c1762f6246b6082e2d37be0f81a4c500fa2ec.jpg","magnet":["33B4F8EF9B96D18B4DD58FF30DD17D507D0B5DF1"]},{"title":"[@OZ] 古書堂奇譚 鷺沢無情","link":"http://www.llss.cool/wp/all/anime/oz-%e5%8f%a4%e6%9b%b8%e5%a0%82%e5%a5%87%e8%ad%9a-%e9%b7%ba%e6%b2%a2%e7%84%a1%e6%83%85/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1flcsuc5tjuj30zk0k0wk1.jpg","magnet":["ce2f570e07744e9711396e12678a483e219abb30"]},{"title":"[@OZ] 巨X麻雀天使 NODOKA 孕むわっ!","link":"http://www.llss.cool/wp/all/anime/oz-%e5%b7%a8x%e9%ba%bb%e9%9b%80%e5%a4%a9%e4%bd%bf-nodoka-%e5%ad%95%e3%82%80%e3%82%8f%e3%81%a3/","img":"http://ww1.sinaimg.cn/large/0060lm7Tly1flcu9ml2h9j30zk0k0aet.jpg","magnet":["88d2d2b7fc651ce6334d1360a6a8ffe542be3ab2"]},{"title":"【熟肉】相亲对象是自己的学生,强势的问题儿童【1-5】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%9b%b8%e4%ba%b2%e5%af%b9%e8%b1%a1%e6%98%af%e8%87%aa%e5%b7%b1%e7%9a%84%e5%ad%a6%e7%94%9f%ef%bc%8c%e5%bc%ba%e5%8a%bf%e7%9a%84%e9%97%ae%e9%a2%98%e5%84%bf%e7%ab%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/11/1-2.jpg","magnet":["AA32E3B1918F4D03CB672C7F2DAA525ACB54645A","5BCF1CB73A18385F3373B38405BF9ACFC03F212D","41B366977773083E1F1651D98CBA12B3439E5CCF","36104B5ACB6EDFCE5A6FE913886439474038F763","D1CD53F4E0C65CB533947670C21251B48560B31C"]}][{"title":"[リフル] 姪っこのふくらみ ~いつもの中出しごっこ~","link":"http://www.llss.cool/wp/all/anime/%e3%83%aa%e3%83%95%e3%83%ab-%e5%a7%aa%e3%81%a3%e3%81%93%e3%81%ae%e3%81%b5%e3%81%8f%e3%82%89%e3%81%bf-%ef%bd%9e%e3%81%84%e3%81%a4%e3%82%82%e3%81%ae%e4%b8%ad%e5%87%ba%e3%81%97%e3%81%94%e3%81%a3/","img":"http://ww2.sinaimg.cn/large/0060lm7Tly1fl8beldboxj30zk0k00ug.jpg","magnet":["dd6d71013798e7cb3bf4c7fcc0b0b64a3b314611"]},{"title":"【熟肉】OVA 妹ビッチに搾られたい #2 妹は生オナホ ~サヤカはお兄ちゃん専用X玩具~【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91ova-%e5%a6%b9%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%832-%e5%a6%b9%e3%81%af%e7%94%9f%e3%82%aa%e3%83%8a%e3%83%9b/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c966439sample5.jpg","magnet":["熟99D03A24888C20E3003C4DD4FDC2A1362E9153D5","熟C51C9F116798603A39455ADA1BCF1977F278A1C3","生37WZYNZADLWL2LTPRAMAVAWENFLIZE6V","生DFED9C37201AECBD2E6F88180A82C469568C93D5"]},{"title":"[夜桜字幕组]2017年10月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b410%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/11/03/opiumud-017YorhatroopsexterminationplanCE1080P_20171103131320.jpg","magnet":["89B1CE440617E44D909D9D85E2A1088CC97DBEBF","54745A784505F8CCAE2A944567FBAF8135284FD2","EEEA5CB78257A6015EB278FF5A8CC5C53523F445","44C503A6AFD05EF1193A11B8D432D87A52B00D37","61F84ACDD63D2275C3C8D046EB366F61203CE1F3","F5E8A194BB2606A020D2E"]},{"title":"2017年11月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b411%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c966439sample6.jpg","magnet":null},{"title":"2017年10月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b410%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fkcf9edihzj20zk0k0wgi.jpg","magnet":["XORAKMKQDWQJK2UHZ4LGORK52CGVX2N5","QCFQALRMPB35BHJKOWVX7VXALQKZTCK4","bba20531501da0956a87cf1667455dd08d5be9bd","808b002e2c7877d09d2a75ab7fd6e05c1599895c"]},{"title":"【熟肉】は~とふるママン THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%af%ef%bd%9e%e3%81%a8%e3%81%b5%e3%82%8b%e3%83%9e%e3%83%9e%e3%83%b3-the-animation/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2-2.jpg","magnet":["熟2145f66bd870a666189be9184fb212b2807f3985","熟49055adff2a6677b74a4802be6f1e53e8e57a361","熟672CA6C5BE6675E3DB03298C439A68480B85D831","生2547C2B96D79256957318CDE228C11A5BDF40422"]},{"title":"【熟肉】かぎろひ~勺景~ Another 第一夜 少女との蜜月、その終わり","link":"http://www.llss.cool/wp/all/anime/%e3%81%8b%e3%81%8e%e3%82%8d%e3%81%b2%ef%bd%9e%e5%8b%ba%e6%99%af%ef%bd%9e-another-%e7%ac%ac%e4%b8%80%e5%a4%9c-%e5%b0%91%e5%a5%b3%e3%81%a8%e3%81%ae%e8%9c%9c%e6%9c%88%e3%80%81%e3%81%9d%e3%81%ae%e7%b5%82/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c968584sample2.jpg","magnet":["熟HX7NKL37FXZ6GVS3Y5OQXGN3V3NUDN2J","熟3DFED52F7F2DF3E3565BC75D0B99BBAEDB41B749","生DC700CC17B4AB17D4A59E0A23C6C7B0E784710F7"]},{"title":"[夜桜汉化组][170426][yosino]《環》简体中文汉化补丁 V1.0[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84170426yosino%e3%80%8a%e7%92%b0%e3%80%8b%e7%ae%80%e4%bd%93%e4%b8%ad%e6%96%87%e6%b1%89%e5%8c%96%e8%a1%a5%e4%b8%81-v1-0flash-gamecn/","img":"https://www.imghost.io/images/2017/10/28/170426yosinoV1.0FLASHGAMECN.png","magnet":["981871B05019819EB5ECEB9"]},{"title":"【熟肉】学園侵触 ×× of the Dead 下巻【附前作】 V2","link":"http://www.llss.cool/wp/all/anime/%e5%ad%a6%e5%9c%92%e4%be%b5%e8%a7%a6-xx-of-the-dead-%e4%b8%8b%e5%b7%bb/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fky3l1fwi3j20zk0k0q47.jpg","magnet":["熟D65D39A5987A59358F060CC4402FE6AFEE03B88C","熟8601FDAE40A652BD2085D9A2D71B509688D86D51","生C5A999E8FCC3CCE59DCE2FAEBF0F25FEA75D83CC"]}][{"title":"【熟肉】転生剣奴の子作り闘技場(ハーレムコロッセオ)「ケモ耳ちっぱい・ライティウス ~ケダモノ迫るマイクロボディ」","link":"http://www.llss.cool/wp/all/anime/%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad%e3%83%83%e3%82%bb%e3%82%aa%ef%bc%89/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fkylnwec5zj21hc0u042w.jpg","magnet":["熟3643CAC217F9458708C45AA77BEAE7E0141AE3EE","生DFA504E985BFB2D9406CF3C7902D9B86D64793B1"]},{"title":"【熟肉】気に入った膣にいきなり中出しOKなリゾート島 part2【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e6%b0%97%e3%81%ab%e5%85%a5%e3%81%a3%e3%81%9f%e8%86%a3%e3%81%ab%e3%81%84%e3%81%8d%e3%81%aa%e3%82%8a%e4%b8%ad%e5%87%ba%e3%81%97ok%e3%81%aa%e3%83%aa%e3%82%be%e3%83%bc%e3%83%88%e5%b3%b6-part2/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/eade87003af33a876b755415cd5c10385243b588.png","magnet":["b35a1dc04ff31ec2b032c94af2373ed1120cafbd","D949391F56CC843E85F09D407FA325376E1A2302","3FETSH2WZSCD5BPQTVAH7IZFG5XBUIYC"]},{"title":"[StudioFOW] 作品合集 (Gallery / Movie)","link":"http://www.llss.cool/wp/all/anime/studiofow-%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-%ef%bc%88gallery-movie%ef%bc%89/","img":"http://wx2.sinaimg.cn/large/d4cf862bly1fkvxt3shj1j210b0gidqt.jpg","magnet":["003]Coliseum_of_Lust","006]Beastly_Bacchanalia","007]Scarlet_Nights_Episode_01","010]The_Royal_Treatment","012]Mila_Red_Riding_Hood","24a29dfdc231a2d86d3b2e035fa747fd6fd1fec6"]},{"title":"【熟肉】一求X魂 前編[ごばん]","link":"http://www.llss.cool/wp/all/anime/%e4%b8%80%e6%b1%82x%e9%ad%82-%e5%89%8d%e7%b7%a8%ef%bc%bb%e3%81%94%e3%81%b0%e3%82%93%ef%bc%bd/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/8.jpg","magnet":["熟42de532aa5b634c0817ee5ca46ba9d6bb276170f","熟AFOMKWJCOSFXCEYVSATUOOMAF7GSJRUY","生B48EE454109574B19ED63C416839F7C7CAFBB4AC"]},{"title":"魔穗字幕组合集阶段性整理","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84%e5%90%88%e9%9b%86%e9%98%b6%e6%ae%b5%e6%80%a7%e6%95%b4%e7%90%86/","img":"http://wx3.sinaimg.cn/large/beb104ebgy1fkmnza2lthj20zk0m8b29.jpg","magnet":["AA14091FDBB46FFDDDD1AA7E1F147532040E4403","A770F9B9D4F34CCCC2CDFD02F5A41680ACA2A692","FA666B208A3FD2898D980CD70040171635AE5A2F","51FB8FCED0B18FFC093D7644B6A97BDB3B2D4AF3","3440CB9E9BF1B4CC54B8A83299850D7F1E4440C4","2FE052117FC20B5ADADA550821024A12DF3177EC","71CA9715D95A80A3D62876F7DA61F0AED98E71B5","55443FE2F699387C8BDBA472386AC3A45B801849","78693F3628B7B661E10E539EF73D52B6489E89AA","E2309F7D0B1FE69D681D73B2733A838CF5353A32","475222BDA96F20C84100D7E723F05A580D1D29CA","0FB9358E8177C8ED11C1FC5EDA27355176AB98A6","02F8534C0D1E790F77EE8BF66BE1161154BEF78D","A2100D5968A0E7067EFCC1A04459A6E3FACC9BD8","4962E224E6B777308C094BC919D59D9A35693D66","B9FDF607A5C8CB9E4925E646A5FDFA3ED67E249A","440C9F55CFA484EF6CAD5D8CFA6ABDA9647CB33B","529AC1F3531B5DFDAEB805B5123A31DC44FEB95F","D5C8A839A44F5C753EDD1124BDE3A931C0D67F50","501C11A1C2E5894F7FE94BDAF5FF6E446B0D6A2C","40355BA2B93096EA7D5F97DB2B549492193985F9","E4CFA8B9B728DD1031303781D94D87F3123CC4F9","F27BB09D4AAEBB8F584FB48BCEDC2B5A933D8CFF","8A8B5ED18051874A27FDFE93BA46004B100338DE","C02F679C3C1B0EE0F3022E891C62F622500A1D15","765CA3D6F12DB9391DF4F3E8584400F8FB26F182","1381574C2957C8075DCC81DF9BCD0F1E5D6F4314","7F86F3EC0ED48E0B44398E12CBDF52BF5DD31113","DE2BC11E4395F45420477E1D8EC53FCCCB824675","A865DABBC46BD9B69BE192397A0376D0E9424116","178B193240E377DCC96B33275546E5A79F7F3D38","BE611D1CD8FD9DB2C84F663AC4827AA179D8A928","7D3EBA9DE8C3E64416938EA24E7238419AF9CD84","810ED55B7B22849F224BD139E8185D1112BA404D","F3B70913AD8E74C304A84D3DC9B0752ADCD6E2C5","799672E03C4ED5F8BD2813F27F6BB4F4066CE405","FDECF80407D0C5EFEC2CDDC476DFCD5F8F92A38C","F9F0C6FD15FB519C4380026F2DF5B5E3DD606A09","719FE3916D46FA0528DA6A23FC0A43C255F7666C","EA911D533A4E81F0FFDED8CDD64026D85361A175","1BD2FA36BCC24CC31C58970D88B2B14E873D6490","D407A8DFA30E25316DA5CE6D26600CEADF829C41","63A961B707C2ACAD5BFCDB79C2E3FB4AF5C6E574","1902DB27BBFF598BB29269C6E58B643D3BA27246","AF50532FF65D26652CA57DE77748C7E1C3C83F70","E0977EBEF70441992C75AAAD2AA4F2D899B5903C","432682714D796B942950D49410B0DB5F5B6CEFBD","016FF29ABB2B29666579C6B9477EEABA83D57E18","D91E9EA9987046DCA1E09D030A70DDF2819A7F41","7EF8B9C4F9C31A3F88924630128AFBCBCC6C8BA8","EAA7E8502177EDA5488FBA7ACA6EFF9BD0946883","0633D32668B1C56544F8A1F3EB12E7D78083FCB3","199091B9C8E891BF82355634D61036E2CFA09DD6","2B894F662D916C3DD40D2892A9BC920DCEFBD49C","762F82884A1E6F3C41DB7B8D49663C44A8DE8C27","70B40AAF44A784C88EAAEF69EC3F6EFED7627D93","A041D99A447A28D048D9C961435C07EFCED6BB27","74C06FE6540C59A26287F822EB8759E1B24FD2A2","91BCBEBD5B480B005764567ACD49B682DD57FF36","080766DEC27D27AA5A7673255AB6D6E944511614","976B6A188A12C6DEDDDC4315AF334EA6C1F5D32F","C7C7778361BD81FF207BF61E53C6B55A7C7D4301","E1BA15718AD355C269B960A939B1DA513F6A8355","5F539F51AE627BDB9BEA96868FA55EEA8D3864CE","F464280B9F11DC7042342F21A4B2640435DBEE59","F7686C86C54EEFA94AD7C668173EB25D1B050035","3BB2C249D2D92687725911E552A366C9A3B39798","BD2A69B3F2F814BF053B652B39C61F8365EC5369","B1CD966010B7F9FEFD1779A0E79CD34436DE938A","640CDB55A84F4AD9E5FA2F148FB2E0B39DB44EC1","7763FE288E5BCD2170DEF6015C63F43389A7AB25","782E02D8C42E6D96A8CE96C394EFC1F7F94E628B","C16B6DBC93DC412328387A0BD88D79232361AE6F","A770F9B9D4F34CCCC2CDFD02F5A41680ACA2A692","782E02D8C42E6D96A8CE96C394EFC1F7F94E628B","FA666B208A3FD2898D980CD70040171635AE5A2F","64850E3915E320591D58DC9792BBD977D1206E62","51FB8FCED0B18FFC093D7644B6A97BDB3B2D4AF3","C39EE6069444CCA2D75ED44387145560CB0A9E3F","3440CB9E9BF1B4CC54B8A83299850D7F1E4440C4","2FE052117FC20B5ADADA550821024A12DF3177EC","71CA9715D95A80A3D62876F7DA61F0AED98E71B5","55443FE2F699387C8BDBA472386AC3A45B801849","78693F3628B7B661E10E539EF73D52B6489E89AA","E2309F7D0B1FE69D681D73B2733A838CF5353A32","475222BDA96F20C84100D7E723F05A580D1D29CA","0FB9358E8177C8ED11C1FC5EDA27355176AB98A6","02F8534C0D1E790F77EE8BF66BE1161154BEF78D","A2100D5968A0E7067EFCC1A04459A6E3FACC9BD8","4962E224E6B777308C094BC919D59D9A35693D66","B9FDF607A5C8CB9E4925E646A5FDFA3ED67E249A","440C9F55CFA484EF6CAD5D8CFA6ABDA9647CB33B","529AC1F3531B5DFDAEB805B5123A31DC44FEB95F","D5C8A839A44F5C753EDD1124BDE3A931C0D67F50","501C11A1C2E5894F7FE94BDAF5FF6E446B0D6A2C","40355BA2B93096EA7D5F97DB2B549492193985F9","E4CFA8B9B728DD1031303781D94D87F3123CC4F9","F27BB09D4AAEBB8F584FB48BCEDC2B5A933D8CFF","8A8B5ED18051874A27FDFE93BA46004B100338DE","C02F679C3C1B0EE0F3022E891C62F622500A1D15","765CA3D6F12DB9391DF4F3E8584400F8FB26F182","1381574C2957C8075DCC81DF9BCD0F1E5D6F4314","7F86F3EC0ED48E0B44398E12CBDF52BF5DD31113","DE2BC11E4395F45420477E1D8EC53FCCCB824675","A865DABBC46BD9B69BE192397A0376D0E9424116","2612CFB2268C84DC6FBECD1BF9EB36E19C7394FA","178B193240E377DCC96B33275546E5A79F7F3D38","76DD886A99D6CF4CE8E270BB38949AC412226923","BE611D1CD8FD9DB2C84F663AC4827AA179D8A928","7D3EBA9DE8C3E64416938EA24E7238419AF9CD84","810ED55B7B22849F224BD139E8185D1112BA404D","F3B70913AD8E74C304A84D3DC9B0752ADCD6E2C5","799672E03C4ED5F8BD2813F27F6BB4F4066CE405","FDECF80407D0C5EFEC2CDDC476DFCD5F8F92A38C","F9F0C6FD15FB519C4380026F2DF5B5E3DD606A09","719FE3916D46FA0528DA6A23FC0A43C255F7666C","EA911D533A4E81F0FFDED8CDD64026D85361A175","1BD2FA36BCC24CC31C58970D88B2B14E873D6490","D407A8DFA30E25316DA5CE6D26600CEADF829C41","63A961B707C2ACAD5BFCDB79C2E3FB4AF5C6E574","1902DB27BBFF598BB29269C6E58B643D3BA27246","AF50532FF65D26652CA57DE77748C7E1C3C83F70","E0977EBEF70441992C75AAAD2AA4F2D899B5903C","432682714D796B942950D49410B0DB5F5B6CEFBD","016FF29ABB2B29666579C6B9477EEABA83D57E18","D91E9EA9987046DCA1E09D030A70DDF2819A7F41","7EF8B9C4F9C31A3F88924630128AFBCBCC6C8BA8","EAA7E8502177EDA5488FBA7ACA6EFF9BD0946883","0633D32668B1C56544F8A1F3EB12E7D78083FCB3","199091B9C8E891BF82355634D61036E2CFA09DD6","2B894F662D916C3DD40D2892A9BC920DCEFBD49C","762F82884A1E6F3C41DB7B8D49663C44A8DE8C27","70B40AAF44A784C88EAAEF69EC3F6EFED7627D93","A041D99A447A28D048D9C961435C07EFCED6BB27","74C06FE6540C59A26287F822EB8759E1B24FD2A2","91BCBEBD5B480B005764567ACD49B682DD57FF36","080766DEC27D27AA5A7673255AB6D6E944511614","976B6A188A12C6DEDDDC4315AF334EA6C1F5D32F","C7C7778361BD81FF207BF61E53C6B55A7C7D4301","E1BA15718AD355C269B960A939B1DA513F6A8355","E926CA8AF17480444D4F06BADA84AA30A2F3170C","E2BE90C968A307AA0C14D8445DB4F202218EC2A9","4DFB42BFF9AFB98F711523232280BA470D6746DE","28B7DFA5874FB89D62BADA4864F439575794BF7B","7BF6C9FE62513ECE0FD36ABDA9E6CBCE1F8DE4EA","F3F914B09EBEFC9C66CB096941D04F88735F6743","A5A974F05F1E291BE4D94B0B3467D24530AF3B45","8DC643F4FC9D438A3B58F9CAC18F0E00CDC12E07"]},{"title":"【熟肉】龍堂寺士門の阴謀 前編 XINNUTIAO教 +特典","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e9%be%8d%e5%a0%82%e5%af%ba%e5%a3%ab%e9%96%80%e3%81%ae%e9%98%b4%e8%ac%80-%e5%89%8d%e7%b7%a8-xinnutiao%e6%95%99/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/c895900table1.jpg","magnet":["熟B2388D2BCC0C93DC8769D92E08728A2B99D9751D","熟E51656ADB8580F23BD71E88FE04B725FDBAAB45B","熟WI4I2K6MBSJ5ZB3J3EXAQ4UKFOM5S5I5","生A162E2FC3F4EFC709C52D08942A4B7E91B082624"]},{"title":"2017年9月 作品合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b49%e6%9c%88-%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://wx3.sinaimg.cn/large/8c007b5cly1fkayrbqu9sj216b0ovke1.jpg","magnet":["[170922][QueenBee]Implicity","ZW53NDV6MZGFJ6TYXXOY77J6TV3LLGFK"]},{"title":"【熟肉】魂インサート 下巻 神様の身体へおじゃまします V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e9%ad%82%e3%82%a4%e3%83%b3%e3%82%b5%e3%83%bc%e3%83%88-%e4%b8%8b%e5%b7%bb-%e7%a5%9e%e6%a7%98%e3%81%ae%e8%ba%ab%e4%bd%93%e3%81%b8%e3%81%8a%e3%81%98%e3%82%83%e3%81%be/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/6-1.jpg","magnet":["熟e01353ea0a74bf9af2975db81e165ffd229ae049","熟0223215F8FF23F06C36BCE095EEC759A9B0A153B","生31768B6C3720274ED1808FDEA0ED63DCEE16F5FF"]},{"title":"【熟肉】キメ恋! 高嶺の華と幼なじみがキマった理由 上巻 魔法の薬で恋の成就を V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%82%ad%e3%83%a1%e6%81%8b%ef%bc%81-%e9%ab%98%e5%b6%ba%e3%81%ae%e8%8f%af%e3%81%a8%e5%b9%bc%e3%81%aa%e3%81%98%e3%81%bf%e3%81%8c%e3%82%ad%e3%83%9e%e3%81%a3%e3%81%9f/","img":"http://wx1.sinaimg.cn/large/8c007b5cly1fkch5lpx2gj20zk0k0di4.jpg","magnet":["熟7e6a295f563369b619493920d2c3bd15f98965b3","生BBA859227833DA1C393444C332EFB89A9F096B6F"]}][{"title":"【熟肉】さきゅばみすと・すとーりー ~のんひゅーまあんらいふ~ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%95%e3%81%8d%e3%82%85%e3%81%b0%e3%81%bf%e3%81%99%e3%81%a8%e3%83%bb%e3%81%99%e3%81%a8%e3%83%bc%e3%82%8a%e3%83%bc-%ef%bd%9e%e3%81%ae%e3%82%93%e3%81%b2%e3%82%85/","img":"http://wx2.sinaimg.cn/large/8c007b5cly1fkcfw7rhnkj20zk0k0q4w.jpg","magnet":["熟844EA656422CBF113994B076D2154014A564AEEE","熟20E56B6C0A22319B20568F3AE2363740150EBBC0","生48E175EF5F3127225826401110F9D6AFB6C9EFD2"]},{"title":"【熟肉】OVA 妹ビッチに搾られたい #1 妹DE王様ゲーム ~合コンで妹とバッタリで王様ゲームする話~ V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91ova-%e5%a6%b9%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%831-%e5%a6%b9de%e7%8e%8b%e6%a7%98%e3%82%b2%e3%83%bc%e3%83%a0/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/2.jpg","magnet":["熟20A822A8D4765186F3AC4EB03D3972600A5C3B26","熟FDD525F8AED517C88CF4DA0D77281A7E4897590A","生6F6E734FBB6F79ED4A7494A82D342BF586D53CBC"]},{"title":"【熟肉】ばくあね 弟しぼっちゃうぞ! THE ANIMATION ディレクターズカット版[导演剪辑版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%b0%e3%81%8f%e3%81%82%e3%81%ad-%e5%bc%9f%e3%81%97%e3%81%bc%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%e3%81%9e%ef%bc%81-the-animation-%e3%83%87%e3%82%a3%e3%83%ac/","img":"http://i.tianshi.info/lzkspfF.jpg","magnet":["熟615168C2BCA3DBDD4B8803E8BA9C63473A13153E","熟7D56868C3829E90C0DE840E8BA4AA2B6538D0BD8","生FDBB4EA422D15C89CC2A8D38044B269C7EF6065A"]},{"title":"2017年10月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b410%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://hacg.cool/wp/wp-content/uploads/2017/10/1-3.jpg","magnet":null},{"title":"[夜桜字幕组][171003][opiumud]Yoshiwara rose[中文预告]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84171003opiumudyoshiwara-rose%e4%b8%ad%e6%96%87%e9%a2%84%e5%91%8a/","img":"https://imghost.io/images/2017/10/03/171003opiumudYoshiwararose_20171003144627.jpg","magnet":["89DAB0C8C1B636785331AD","][171003][opiumud]Yoshiwara"]},{"title":"[夜桜字幕组] 2017年9月3D作品合集 [BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-2017%e5%b9%b49%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-big5gb/","img":"https://imghost.io/images/2017/10/02/FOW-012Mila_Red_Riding_Hood_20171002170612.jpg","magnet":["65F3D2F348665B505D6060B3E9C4E464D16FE9C3","1DFCD567344DA5D5E9979E73164A63EE64CA7543","68FFA461518E5EB2E66B59819FBB959C786D6C98","29321F3C873E74386D95CA8AAE12ED07F0C8FC14","2F7660C0F2D74461B48BEDED7D48870B7CDDEBEF","AC7E66737FD707F26FA5","619AC4F0CA2C591E85AB"]},{"title":"【熟肉】熟女志願~KINBAKU~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e7%86%9f%e5%a5%b3%e5%bf%97%e9%a1%98%ef%bd%9ekinbaku%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/10/1.jpg","magnet":["熟2915112ad1655aca031175c49fe7cd3e73782ad2","熟88C2E2C95C8B69E1AC63D5E7A16A9FF29B3F9995","生9BA4C9BB6C05B6E2F48C83D8EC5690D506E296D4"]},{"title":"【熟肉】オトメ*ドメイン THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%82%aa%e3%83%88%e3%83%a1%ef%bc%8a%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a71%e5%90%8d%e6%a7%98%e3%81%ab%e5%a3%b0/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c964780sample2.jpg","magnet":["熟7PJZGM5LIHNQPPTP64AJDKMV5U64C6LJ","熟C3A1A032183E45662C25C8EA0C2356C34A645709","熟0A1CD4AC7A0318DF793D5D7F1B6E528840B5D28B","生F260F40AC8925A7A176EB78EBABE5164C0F00A36","生2093F8D5104C8B7D838104CE82AD68990286EB92","生81B6E5CD1F49A6AAE898A99E4C8270DB55B1DB21"]},{"title":"【熟肉】JKとエロコンビニ店長 エロ可愛ママ姉・麻央~痴撮に見惚れるJKフレンズ V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9b%e3%83%9e%e3%83%9e%e5%a7%89%e3%83%bb/","img":"http://llss.cool/wp/wp-content/uploads/2017/09/1-1.jpg","magnet":["熟E2F43C8E15EE2322D09F00C1613966894EB5D527","生2CE17A0C3198C193F7D80DDD2257B08974F1F464"]}][{"title":"【熟肉】自宅警備員 4thミッション インラン母娘とらな性活","link":"http://www.llss.cool/wp/all/anime/%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-4th%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%82%a4%e3%83%b3%e3%83%a9%e3%83%b3%e6%af%8d%e5%a8%98%e3%81%a8%e3%82%89%e3%81%aa%e6%80%a7%e6%b4%bb/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0gl3uj9dj31hc0u0e81.jpg","magnet":["ABDF1E85E0CAFA6A210D2917E18322AF7378EBDC","531BD273C3171B79515395D1FB6F48F2A45536B4"]},{"title":"【熟肉】おいでよ!水龍敬ランド #2 下半身のアイドル☆ホーニィセントリー","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81%e6%b0%b4%e9%be%8d%e6%95%ac%e3%83%a9%e3%83%b3%e3%83%89-%ef%bc%832-%e4%b8%8b%e5%8d%8a%e8%ba%ab%e3%81%ae%e3%82%a2/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/1-8.jpg","magnet":["6576d70646b7eeaa0d4441b34715845cc27a39d2","2E6B2E10F7B7A162A6DB3185A2BC1AC1EA5C8F93"]},{"title":"刀剑神域:序列之争 剧场版 [720P 繁简外挂字幕]","link":"http://www.llss.cool/wp/all/op/%e5%88%80%e5%89%91%e7%a5%9e%e5%9f%9f%ef%bc%9a%e5%ba%8f%e5%88%97%e4%b9%8b%e4%ba%89-%e5%89%a7%e5%9c%ba%e7%89%88-720p-%e7%b9%81%e7%ae%80%e5%a4%96%e6%8c%82%e5%ad%97%e5%b9%95/","img":"http://ww3.sinaimg.cn/large/0060lm7Tly1fjxdy589l7j30ly0c8wh3.jpg","magnet":["E26IW3ZBOAC7K233OYXBT2J55TZA3P2C","26bc8b6f217005f56b7b762e19e93decf20dbf42","YOXKKGIKL3MWS3F6M6DAUG57QDCBWIWZ","c3aea5190a5ed9696cbe67860a1bbf80c41b22d9"]},{"title":"【熟肉】[Queen Bee] Implicity I [東山翔] V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91queen-bee-implicity-i-%e6%9d%b1%e5%b1%b1%e7%bf%94/","img":"http://ww4.sinaimg.cn/large/0060lm7Tly1fjuwg2528rj30zk0k0q5r.jpg","magnet":["3a0b2ef51efa1ef0978a9d658eb3ff5780cdbeb6","2a3416ade84a39524fccedfdb5d4d07843174616"]},{"title":"【生肉】Implicity I [Higashiyama Sho][東山翔]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91implicity-i-higashiyama-sho%e6%9d%b1%e5%b1%b1%e7%bf%94/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c966199sample5.jpg","magnet":["87038BE1A00251A41BDB1891923E3FF1A53FCC21"]},{"title":"[夜桜汉化组][170320][Team Tanuki]魔サキュバスKAMI ~ejaculate or arrive2~[FLASH GAME]","link":"http://www.llss.cool/wp/all/game/%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84170320team-tanuki%e9%ad%94%e3%82%b5%e3%82%ad%e3%83%a5%e3%83%90%e3%82%b9kami-%ef%bd%9eejaculate-or-arrive2%ef%bd%9eflash-game/","img":"http://llss.cool/wp/wp-content/uploads/2017/09/1.jpg","magnet":["A945622E0A6274D7F7535"]},{"title":"【熟肉】ヒトヅマライフ ワンタイムギャル 前編","link":"http://www.llss.cool/wp/all/anime/%e3%83%92%e3%83%88%e3%83%85%e3%83%9e%e3%83%a9%e3%82%a4%e3%83%95-%e3%83%af%e3%83%b3%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%ae%e3%83%a3%e3%83%ab-%e5%89%8d%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2017/09/7cf15c224f4a20a4a781d6e69b529822730ed058.jpg","magnet":["b49dd6a2d8c8fe10d1080e00f503227bad963cf3"]},{"title":"【熟肉】虜ノ鎖~処女たちを穢すらな楔~ 下巻 ケダモノ達の宴","link":"http://www.llss.cool/wp/all/anime/%e8%99%9c%e3%83%8e%e9%8e%96%ef%bd%9e%e5%87%a6%e5%a5%b3%e3%81%9f%e3%81%a1%e3%82%92%e7%a9%a2%e3%81%99%e3%82%89%e3%81%aa%e6%a5%94%ef%bd%9e-%e4%b8%8b%e5%b7%bb-%e3%82%b1%e3%83%80%e3%83%a2%e3%83%8e/","img":"https://wx1.sinaimg.cn/mw690/006UmQRjly1fjdpg2u4b6j31hc0u01i5.jpg","magnet":["7789ce8bdfe24c862b6e97eef9d7d89fd7e6f400"]},{"title":"【熟肉】レジデンス 中巻 思考の褒美","link":"http://www.llss.cool/wp/all/anime/%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%ad%e5%b7%bb-%e6%80%9d%e8%80%83%e3%81%ae%e8%a4%92%e7%be%8e/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fjcqfkh67vj31hc0u0u0x.jpg","magnet":["6f953ebf4da0ce74e8c9a918d2d0b2f6880d0fd9"]}][{"title":"僕だけのヘンタイカノジョ もっと THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e5%83%95%e3%81%a0%e3%81%91%e3%81%ae%e3%83%98%e3%83%b3%e3%82%bf%e3%82%a4%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-%e3%82%82%e3%81%a3%e3%81%a8-the-animation/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fial8p3970j31hc0u0qv5.jpg","magnet":["fcd57f4aa433aad6afabd44521ea34e9a6398b3b"]},{"title":"2017年9月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b49%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c966199sample1.jpg","magnet":null},{"title":"[夜桜字幕组]2017年8月3D作品合集[BIG5+GB]已修正","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b48%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/08/28/170828opiumudCivilWarCollectorsEditionBIG5_20170828182649.jpg","magnet":["68DE93A504C47E1F05D9F6D6C19E3D42F209E74E","80D779F7B5467A8023853D64B1B432CE916486D3","E9A11E12F84C38DDB9FCD6822D6BB5C3AF311786","A5CE921F59A27B66A047B04D2CDF8CBEE0719980","1EE6E3B411FC312CDB299DB0AFAEEF86795062BA","727597E6044B615E4900AD45C916061F10E63182","E085B636EF3E8F26DE95","CD2AE150485842BB539A"]},{"title":"2017年8月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b48%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx3.sinaimg.cn/mw690/006UmQRjly1fiyrj9h5t5j31hc0u01kx.jpg","magnet":["31c18b50d1158390e42f8c5c8b24c7f950227bca"]},{"title":"【熟肉】おいでよ! 私立ヤリま×り学園「おしめっ娘JK・静流~お漏らし緩む尻穴ビーズ」V2","link":"http://www.llss.cool/wp/all/anime/%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92%e3%80%8c%e3%81%8a%e3%81%97%e3%82%81/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/2-1.jpg","magnet":["01d9ea386f2cbce6a9a5c151c3dd9e37afac26b4"]},{"title":"【熟肉】メンヘラ歩理のヤまないおねだり~ヘッドホンははずせない~ 2ndシングル.愛しのあの人に女の影!? ずっと私と繋がって編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%b3%e3%83%98%e3%83%a9%e6%ad%a9%e7%90%86%e3%81%ae%e3%83%a4%e3%81%be%e3%81%aa%e3%81%84%e3%81%8a%e3%81%ad%e3%81%a0%e3%82%8a%ef%bd%9e%e3%83%98%e3%83%83%e3%83%89%e3%83%9b%e3%83%b3%e3%81%af/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3.jpg","magnet":["370ee65d9468e0b412921cf6e9a67141c1589162"]},{"title":"【熟肉】炎の孕ませおっぱいエロアプリ学園 THE ANIMATION 第1巻","link":"http://www.llss.cool/wp/all/anime/%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e3%81%8a%e3%81%a3%e3%81%b1%e3%81%84%e3%82%a8%e3%83%ad%e3%82%a2%e3%83%97%e3%83%aa%e5%ad%a6%e5%9c%92-the-animation-%e7%ac%ac1%e5%b7%bb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgy1fj6og3pfotj20zk0k0gmx.jpg","magnet":["2f6c58785c71aab1ce218b56082a6e24ab00f441"]},{"title":"【熟肉】いちごショコラふれーばー2[NAZ]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%84%e3%81%a1%e3%81%94%e3%82%b7%e3%83%a7%e3%82%b3%e3%83%a9%e3%81%b5%e3%82%8c%e3%83%bc%e3%81%b0%e3%83%bc2%ef%bc%bbnaz%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/3-2.jpg","magnet":["44daaad4f97e63500fa2cdd6fbe6e8eab4b662bf"]},{"title":"【熟肉】おいでよ!水龍敬ランド #1 はじめての水龍敬ランド","link":"http://www.llss.cool/wp/all/anime/%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81%e6%b0%b4%e9%be%8d%e6%95%ac%e3%83%a9%e3%83%b3%e3%83%89-%ef%bc%831-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%ae%e6%b0%b4%e9%be%8d%e6%95%ac%e3%83%a9/","img":"http://wx3.sinaimg.cn/mw690/006GutMagy1fix4kc7j8qj31hc0u0124.jpg","magnet":["5a6c889d358625df3d8ab324c0b6250dbe7ff89e"]}][{"title":"【熟肉】ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 大和の妄想、大暴走!ののあが悪魔に着替えたら編 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90-2/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fiuj1xxqtzj31hc0u0k2u.jpg","magnet":["15EA4910707EBD2C6D8666E13347F1D4A1FC3875","6e1a678a29d03aba8248eae03368c823595e2901"]},{"title":"【生肉】ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 大和の妄想、大暴走!ののあが悪魔に着替えたら編","link":"http://www.llss.cool/wp/all/anime/%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/1-3.jpg","magnet":["CD71C83F595FE9E2EE6F37147E09E3674FAE4EE3"]},{"title":"【NARUTO合集】同人视频+高清动态CG+每个女角色包括龙套","link":"http://www.llss.cool/wp/all/anime/%e3%80%90naruto%e5%90%88%e9%9b%86%e3%80%9113%e9%83%a8%e5%90%8c%e4%ba%ba%e8%a7%86%e9%a2%91110%e5%bc%a0%e9%ab%98%e6%b8%85%e5%8a%a8%e6%80%81cg%e6%af%8f%e4%b8%aa%e5%a5%b3%e8%a7%92%e8%89%b2%e5%8c%85/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/2-3.jpg","magnet":null},{"title":"貴方ハ私ノモノ -ドS彼女とドM彼氏- 下巻 立派なワンコへご褒美を V2","link":"http://www.llss.cool/wp/all/anime/%e8%b2%b4%e6%96%b9%e3%83%8f%e7%a7%81%e3%83%8e%e3%83%a2%e3%83%8e-%e3%83%89s%e5%bd%bc%e5%a5%b3%e3%81%a8%e3%83%89m%e5%bd%bc%e6%b0%8f-%e4%b8%8b%e5%b7%bb-%e7%ab%8b%e6%b4%be%e3%81%aa%e3%83%af%e3%83%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/1.jpg","magnet":["CA83A977EF900224E331522162C1652EE6BB2B62","99daff6cb112eb7dfd4e5ae43535f58c22881261"]},{"title":"【熟肉】X妖蟲 蝕 -孕ミ堕チル少女達- Anime Edition V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91x%e5%a6%96%e8%9f%b2-%e8%9d%95-%e5%ad%95%e3%83%9f%e5%a0%95%e3%83%81%e3%83%ab%e5%b0%91%e5%a5%b3%e9%81%94-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c704841sample2.jpg","magnet":["5CC0F8526ADD975970CDAA12F8961CF905AB986F","0b96c46952fb6dd2dfe7de948b18d93917b7938d"]},{"title":"【熟肉】僕だけのヘンタイカノジョ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%83%95%e3%81%a0%e3%81%91%e3%81%ae%e3%83%98%e3%83%b3%e3%82%bf%e3%82%a4%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/3.jpg","magnet":["07074e92c9aec5486a5ebda6261398303bcb7dfb","3C6A9AEF465CE694CA1A6D79C1F9CA212F30618C","bcaf8e72eb34950133bad0899406cbf9574bfb97"]},{"title":"【生肉】X妖蟲 蝕 -孕ミ堕チル少女達- Anime Edition V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91x%e5%a6%96%e8%9f%b2-%e8%9d%95-%e5%ad%95%e3%83%9f%e5%a0%95%e3%83%81%e3%83%ab%e5%b0%91%e5%a5%b3%e9%81%94-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c713162table2.jpg","magnet":["F17D739F0BE02C0672E78FB6D9EABFD0C4BFC8A7","7B51A509123635B6A9C6E5C33438F986187DA676","BDEB463BF0B44CC443B6FE21A5D7EFA5BE090496"]},{"title":"【生肉】僕だけのヘンタイカノジョ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e5%83%95%e3%81%a0%e3%81%91%e3%81%ae%e3%83%98%e3%83%b3%e3%82%bf%e3%82%a4%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/2.jpg","magnet":["1825D55C631D111CB954EE924BCC58655914B5D0","B89B3046CAC629997C8C0BE33AB8E760293D7C24","DA4B855AD9DBE68149AF340DE1F7C2ECDB22F182"]},{"title":"2017年8月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b48%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/08/c704841table1.jpg","magnet":null}][{"title":"[夜桜字幕组]2017年7月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b47%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/07/30/opiumud-017trailerofYorhatroopsexterminationplan-Nierautomata2_20170730162430.jpg","magnet":["E853C1C963962A1CCB896A68FE133B86B2072F42","D9624D1F6D58D1CF713354F7D965C8DEEC7E965F","28AAF2114664861FE1758003665E8B185E267FFD","A9C55C5617611C3DCD2139CAE424A00095F7A654","56E3F5DAB3832BF2ECC3A65F2CBAE11F455A5B29","7C92DC5EBED1B4037735877616B619A658BA6682","B9F9FF7FBFA1D6A4B07CC6483D9DA81D331EC251","71FE0C273454F9F05D5BC0","Fow]Beastly_Bacchanalia["]},{"title":"[BDMV][アニメ][170726]君の名は(本篇+特典1&2&3)","link":"http://www.llss.cool/wp/all/anime/bdmv%e3%82%a2%e3%83%8b%e3%83%a1170726%e5%90%9b%e3%81%ae%e5%90%8d%e3%81%af%e6%9c%ac%e7%af%87%e7%89%b9%e5%85%b8123/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1faobphdpn9j21kw18th4f.jpg","magnet":["92BFED97DA622E6148548F8E8F11DAB2D26C596A"]},{"title":"2017年7月里番合集 V2","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/5.jpg","magnet":["B1CD966010B7F9FEFD1779A0E79CD34436DE938A","F3F914B09EBEFC9C66CB096941D04F88735F6743","e44ff0a783d90d4c0c36f9da1c824ec2725506e3"]},{"title":"[熟肉]手垢塗れの天使 THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>[正式版]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%89%8b%e5%9e%a2%e5%a1%97%e3%82%8c%e3%81%ae%e5%a4%a9%e4%bd%bf-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a71%e5%90%8d%e6%a7%98%e3%81%ab%e5%a3%b0%e5%84%aa%e3%82%b5%e3%82%a4-2/","img":"http://wx1.sinaimg.cn/mw690/006GutMagy1fhm2nmu13dj31hc0u0k1v.jpg","magnet":["485c9ea039cb7f06db68fb33c6e4fe229a0b9415"]},{"title":"【熟肉】自宅警備員 3rdミッション ホシガリ爆乳人妻・翔子 編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-3rd%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%83%9b%e3%82%b7%e3%82%ac%e3%83%aa%e7%88%86%e4%b9%b3%e4%ba%ba%e5%a6%bb%e3%83%bb%e7%bf%94%e5%ad%90/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/c957561sample3.jpg","magnet":["95b8828d2d53563c9415261f16c0ce4863f41402"]},{"title":"[熟肉]牝教師4~穢された教壇~「はしたない学園長・優理~窓際ハメる制服露出」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%89%9d%e6%95%99%e5%b8%ab4%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e%e3%80%8c%e3%81%af%e3%81%97%e3%81%9f%e3%81%aa%e3%81%84%e5%ad%a6%e5%9c%92%e9%95%b7%e3%83%bb%e5%84%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/567-1.jpg","magnet":["18e259bdba94e60eef3ea51729c5f2d527ea01ed"]},{"title":"[熟肉]OVA バカだけどチンチンしゃぶるのだけはじょうずなちーちゃん #2 しあわせになるもん[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89ova-%e3%83%90%e3%82%ab%e3%81%a0%e3%81%91%e3%81%a9%e3%83%81%e3%83%b3%e3%83%81%e3%83%b3%e3%81%97%e3%82%83%e3%81%b6%e3%82%8b%e3%81%ae%e3%81%a0%e3%81%91%e3%81%af%e3%81%98%e3%82%87-2/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/c951976sample4.jpg","magnet":["8716b119d745809d99265063294da3039122890a"]},{"title":"[熟肉]手垢塗れの天使 THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>[先行版]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%89%8b%e5%9e%a2%e5%a1%97%e3%82%8c%e3%81%ae%e5%a4%a9%e4%bd%bf-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a71%e5%90%8d%e6%a7%98%e3%81%ab%e5%a3%b0%e5%84%aa%e3%82%b5%e3%82%a4/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/c957002table2.jpg","magnet":["5e2ba8ac2045405a62352c764147c64986b12527"]},{"title":"[熟肉]いちごショコラふれーばー1[NAZ]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%81%84%e3%81%a1%e3%81%94%e3%82%b7%e3%83%a7%e3%82%b3%e3%83%a9%e3%81%b5%e3%82%8c%e3%83%bc%e3%81%b0%e3%83%bc1%ef%bc%bbnaz%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/5.jpg","magnet":["f9a40087bc1c3d8d3fa80c739dba7fec05f64b36"]}][{"title":"[夜桜汉化组][161006][Team Tanuki]精魔サキュバスKAMI ~魔界編~[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84161006team-tanuki%e7%b2%be%e9%ad%94%e3%82%b5%e3%82%ad%e3%83%a5%e3%83%90%e3%82%b9kami-%ef%bd%9e%e9%ad%94%e7%95%8c%e7%b7%a8%ef%bd%9eflash-gamecn/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-5.jpg","magnet":["695230F24200E0BED29D2"]},{"title":"【熟肉】ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 白濁お風呂でお肌スベスベ!ののあとフィリカがエッチっちぃ!? 編 V3","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90%e3%83%88/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-4.jpg","magnet":["de85a6a64f9a6df38d89a65f09ee1368b54de473","11F9DDE849A0FC1C940AA4291B54F19D43D7BA39","72f5ae71ba88b8fad3ec1b834af04c6689548b97"]},{"title":"【熟肉】SWAMP STAMP AnimeEdition","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91swamp-stamp-animeedition/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-3.jpg","magnet":["30256893b80e079dc21c7f6eced9eeb178981c6b"]},{"title":"【熟肉】マヨヒガのお姉さん THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%9e%e3%83%a8%e3%83%92%e3%82%ac%e3%81%ae%e3%81%8a%e5%a7%89%e3%81%95%e3%82%93-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/9.jpg","magnet":["e73563515f30c3bb18a5f2a0f8c0b46e8c4181d7"]},{"title":"[熟肉]虜ノ鎖~処女たちを穢す淫らな楔~ 上巻 奪われた日常","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e8%99%9c%e3%83%8e%e9%8e%96%ef%bd%9e%e5%87%a6%e5%a5%b3%e3%81%9f%e3%81%a1%e3%82%92%e7%a9%a2%e3%81%99%e6%b7%ab%e3%82%89%e3%81%aa%e6%a5%94%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e5%a5%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/1-1.jpg","magnet":["1380a50fbaad8763499ec9a677e5a7807285f3a1"]},{"title":"[熟肉][メリー・ジェーン]魂インサート 上巻女体へのファーストコンタクト","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%ad%82%e3%82%a4%e3%83%b3%e3%82%b5%e3%83%bc%e3%83%88-%e4%b8%8a%e5%b7%bb%e5%a5%b3%e4%bd%93%e3%81%b8/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3-2.jpg","magnet":["6df2d7765aef007db4b0bc1f6b74491f93cb3b31"]},{"title":"[生肉]虜ノ鎖~処女たちを穢す淫らな楔~ 上巻 奪われた日常","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e8%99%9c%e3%83%8e%e9%8e%96%ef%bd%9e%e5%87%a6%e5%a5%b3%e3%81%9f%e3%81%a1%e3%82%92%e7%a9%a2%e3%81%99%e6%b7%ab%e3%82%89%e3%81%aa%e6%a5%94%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e5%a5%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3-1.jpg","magnet":["BB07E11C911B08905A9AE679D673C5839D16F162","9B7CE0582A2018B5818AC38E28743FBC3FBB53D7","CD42371C0E095B92A95DC0BE5ED55C1587CC7D98"]},{"title":"2017年7月里番预告与调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e4%b8%8e%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/07/3-1.jpg","magnet":null},{"title":"2017年6月里番合集 V2","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/33.jpg","magnet":["7633d42aca3b4f7e3dd5b5bc5ca05aa5d4bb1008","XUVGTM7S7AKL6BJ3MUVTTRQ7QNS6YU3J","PP3MT7TCKE7M4D6TNK62TZWLZYPY3ZHK"]}][{"title":"[熟肉][ピンクパイナップル] 妻みぐい3 THE ANIMATION 第二章","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%a6%bb%e3%81%bf%e3%81%90%e3%81%843-the-animation-%e7%ac%ac%e4%ba%8c%e7%ab%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/22.jpg","magnet":["c52fb66500b5a1e4f982056ff77b0952930a4505"]},{"title":"[熟肉][Collaboration Works petit] メンヘラ歩理のヤまないおねだり ~ヘッドホンははずせない~ 1st","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89collaboration-works-petit-%e3%83%a1%e3%83%b3%e3%83%98%e3%83%a9%e6%ad%a9%e7%90%86%e3%81%ae%e3%83%a4%e3%81%be%e3%81%aa%e3%81%84%e3%81%8a%e3%81%ad%e3%81%a0%e3%82%8a-%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/44.jpg","magnet":["7ea98c7fbfff690d0207c6f7eda9d0e329614559"]},{"title":"[熟肉][PoRO petit] らぶ2Quad 「妹巫女痴漢・ほのか~羞じらいねだる桃尻電車」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro-petit-%e3%82%89%e3%81%b62quad-%e3%80%8c%e5%a6%b9%e5%b7%ab%e5%a5%b3%e7%97%b4%e6%bc%a2%e3%83%bb%e3%81%bb%e3%81%ae%e3%81%8b%ef%bd%9e%e7%be%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c675614package.jpg","magnet":["dac36e87ec2fb21fbdedc68076885596f2c611d4"]},{"title":"[熟肉]OVA バカだけどチンチンしゃぶるのだけはじょうずなちーちゃん #1 ちーちゃん、ほんとに勉強頑張れるの?","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89ova-%e3%83%90%e3%82%ab%e3%81%a0%e3%81%91%e3%81%a9%e3%83%81%e3%83%b3%e3%83%81%e3%83%b3%e3%81%97%e3%82%83%e3%81%b6%e3%82%8b%e3%81%ae%e3%81%a0%e3%81%91%e3%81%af%e3%81%98%e3%82%87/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c949711sample13.jpg","magnet":["f7a18ffe6d372a5c1b227d215dd8faf2c4b965db"]},{"title":"[夜桜字幕组]2017年6月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b46%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/06/23/opiumud-015NamiGrandlineCollectorsEdition_20170623212923.jpg","magnet":["977F3748BC5DA247B64AD63A4C00AE1AD399B92B","3D4434FC9703ECECEFCFC343CC6AD6F355533235","6A52B76AEF3E0CEB54085DFE52C055573289D253","DC27FB5BA14947E253AFED237368B65573739498","6417672A0AA9470A39A7F4305AF736ABE6B0D083","E3AE1AB04B1D7AB79FF86A1293D7768B7A251A71","62EABB8F3A765013D85C19DB"]},{"title":"【夜桜字幕组】「今夜、母と妊活します。・弐」前編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e3%80%8c%e4%bb%8a%e5%a4%9c%e3%80%81%e6%af%8d%e3%81%a8%e5%a6%8a%e6%b4%bb%e3%81%97%e3%81%be%e3%81%99%e3%80%82%e3%83%bb%e5%bc%90%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/06/ninkatu2_01_20170623211601.jpg","magnet":["977F3748BC5DA247B64AD63A4C00AE1AD399B92B","Fow]Beastly_Bacchanalia["]},{"title":"【夜桜字幕组】Nami Grand line Collector’s Edition 伟大航道","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91nami-grand-line-collectors-edition-%e4%bc%9f%e5%a4%a7%e8%88%aa%e9%81%93/","img":"http://llss.cool/wp/wp-content/uploads/2017/06/tumblr_orne3ktsXQ1w5wpbao2_1280.jpg","magnet":["DC27FB5BA14947E253AFED237368B65573739498"]},{"title":"【樱都、脸肿】[QueenBee]ずっと好きだった2[柚木N’]【附前作】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91queenbee%e3%81%9a%e3%81%a3%e3%81%a8%e5%a5%bd%e3%81%8d%e3%81%a0%e3%81%a3%e3%81%9f2%ef%bc%bb%e6%9f%9a%e6%9c%a8n%ef%bc%bd/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1fgvmmty0roj31hc0u0npd.jpg","magnet":["458a0b23f63fb198c85c6fb94e2b4e6aa092a6bf","TPZ763VVEDNOQUKP76YEXEGFXDF6XX54"]},{"title":"【熟肉】魔獣浄化少女ウテア soul.4 シスターズ","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a2-soul-4-%e3%82%b7%e3%82%b9%e3%82%bf%e3%83%bc%e3%82%ba/","img":"http://wx4.sinaimg.cn/mw690/8c007b5cly1fdsiv65r2pj20k00b9q3r.jpg","magnet":["1a2c9aebbfb94afa2e20a7eaa38b48c28ac050bc","5A395D1B971C27123EB455F52B7DFDE655D57F7A"]}][{"title":"【熟肉】妻が温泉でサークル仲間のX便器になったのですが… Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%a6%bb%e3%81%8c%e6%b8%a9%e6%b3%89%e3%81%a7%e3%82%b5%e3%83%bc%e3%82%af%e3%83%ab%e4%bb%b2%e9%96%93%e3%81%aex%e4%be%bf%e5%99%a8%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fgant6ccrxj31hc0u0qem.jpg","magnet":["b8762bd1b0071c772ed9b4d296c28e11dd78c268","AB796691CA7225669C555A89E3C637B95E64A171"]},{"title":"【夜桜】2017年5月3D作品合集","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%a4%9c%e6%a1%9c%e3%80%912017%e5%b9%b45%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"https://imghost.io/images/2017/06/03/THEMOVIE_20170603151230.jpg","magnet":["A2F211AB37298CD1F724F58F3101AE6875383A06","C8EA4588EEBEA5141ECD76B73E492FF6C6708DAC","83BF1950F9F1042511E2371635C677EECD346803","EC28D3CAFB292C440E178733239A511D1E8C93F8","DA257E55F5CF76FD2CE3CBFDD418EA519D403C73","C3E7744674367A3B5FD4216FF66069F4EBE063F2"]},{"title":"2017年6月里番预告和调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e5%92%8c%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c949711sample13.jpg","magnet":null},{"title":"2017年5月新里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b45%e6%9c%88%e6%96%b0%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1ffj3gyzu6zj31hc0u0gxr.jpg","magnet":["8260284beec623bc8aa034a0fe45f6d27a3d525d"]},{"title":"【熟肉】[桜都字幕组] [铃木みら乃petit]自宅警备员二ミッションナマイキ美乳次女·由纪〜编","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84-%e9%93%83%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83petit%e8%87%aa%e5%ae%85%e8%ad%a6%e5%a4%87%e5%91%98%e4%ba%8c%e3%83%9f/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0fw6m0msj31hc0u0qv5.jpg","magnet":["6B62E0E6533EF5364BE893BE6B88B31AF3FD0E84"]},{"title":"【熟肉】[桜都字幕组] [PoRO]転生剣奴の子作り闘技场(ハーレムコロッセオ)“甲胄巨乳エルフ·デュランタ〜孕み孕まれ白浊流し”","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84-poro%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%9c%ba%ef%bc%88/","img":"http://wx4.sinaimg.cn/mw690/006GutMaly1fg0fgq4h42j31hc0u0na8.jpg","magnet":["A6A1F36619C752EA3057C71E88B42BE868D9A46F"]},{"title":"【熟肉】[桜都字幕组][Pink Pineapple] ヤリモクビーチに修学旅行で!! THE ANIMATION 第3話","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84pink-pineapple-%e3%83%a4%e3%83%aa%e3%83%a2%e3%82%af%e3%83%93%e3%83%bc%e3%83%81%e3%81%ab%e4%bf%ae%e5%ad%a6%e6%97%85/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/1-2.jpg","magnet":["3595B93CB1D58E5236A36D649A4EEF0E6A238422"]},{"title":"【生肉】[ピンクパイナップル] ヤリモクビーチに修学旅行で!! THE ANIMATION 第3話[正式版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a4%e3%83%aa%e3%83%a2%e3%82%af%e3%83%93%e3%83%bc%e3%83%81%e3%81%ab/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/9.png","magnet":["95287BEA4C64D115AA37DADF4FE12129F6233871"]},{"title":"【生肉】転生剣奴の子作り闘技場(ハーレムコロッセオ)「甲冑巨乳エルフ・デュランタ~孕み孕まれ白濁流し」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e8%bb%a2%e7%94%9f%e5%89%a3%e5%a5%b4%e3%81%ae%e5%ad%90%e4%bd%9c%e3%82%8a%e9%97%98%e6%8a%80%e5%a0%b4%ef%bc%88%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%b3%e3%83%ad/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c949948sample2.jpg","magnet":["54D655C2110B6F7321A4F2E372F129748CF56E3E"]}][{"title":"【生肉】自宅警備員 ~2ndミッション ナマイキ美X次女・由紀~編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-%ef%bd%9e2nd%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%83%8a%e3%83%9e%e3%82%a4%e3%82%ad%e7%be%8ex%e6%ac%a1/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/2.jpg","magnet":["494B3DCAABC54C2F3F932687E1CE14ADCDB7DCDF"]},{"title":"【熟肉】冥刻學園 受胎編 #2 「お兄ちゃんに中出しされて、私……とても嬉しかったよ」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%86%a5%e5%88%bb%e5%ad%b8%e5%9c%92-%e5%8f%97%e8%83%8e%e7%b7%a8-%ef%bc%832-%e3%80%8c%e3%81%8a%e5%85%84%e3%81%a1%e3%82%83%e3%82%93%e3%81%ab%e4%b8%ad%e5%87%ba/","img":"http://wx2.sinaimg.cn/mw690/006GutMaly1ffz5vucue1j31hc0u0u0x.jpg","magnet":["e481d0340e7271e5fb70e589031d91882f6ccfaa"]},{"title":"[PIXY] りんかん倶楽部 第1~4話 (重制版)","link":"http://www.llss.cool/wp/all/anime/pixy-%e3%82%8a%e3%82%93%e3%81%8b%e3%82%93%e5%80%b6%e6%a5%bd%e9%83%a8-%e7%ac%ac1%ef%bd%9e4%e8%a9%b1-%e9%87%8d%e5%88%b6%e7%89%88/","img":"http://wx2.sinaimg.cn/mw690/6978d217gy1ffosfzotwij20z50k4ark.jpg","magnet":["34293D433A52D54B295F872575F9B864FBD8CCAE","74D666CC775F118B0AF9CE2085F6E1789FE316D1","80EFBCBDF1BA1D08D5F4855017A69225D2F66F7D","7B3E24EA3430455CD5B73C7D5B8D74F549F8C065","9332BDF45B1401B8C3A399BA6C4EDCE5F560A019","5C3DF96025E5196458330BE7592FB5C61AB2DA67"]},{"title":"【熟肉】ヤれる子!電車エッチ #02「留学生はオタク女子」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%ef%bc%81%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-%ef%bc%8302%e3%80%8c%e7%95%99%e5%ad%a6%e7%94%9f%e3%81%af%e3%82%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1fa2ar3xlupj20qo0f0ac4.jpg","magnet":["3F1ECD3E3092D470F5B7540FA0CC873350A53A2A"]},{"title":"【熟肉】レジデンス 上巻 ~闇の中の想像~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%8a%e5%b7%bb-%ef%bd%9e%e9%97%87%e3%81%ae%e4%b8%ad%e3%81%ae%e6%83%b3%e5%83%8f%ef%bd%9e/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1ffj4fqij4jj31hc0u0qv5.jpg","magnet":["5400f01144e22649d305e2394ec85484c0dd701b"]},{"title":"【生肉】レジデンス 上巻 ~闇の中の想像~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%ac%e3%82%b8%e3%83%87%e3%83%b3%e3%82%b9-%e4%b8%8a%e5%b7%bb-%ef%bd%9e%e9%97%87%e3%81%ae%e4%b8%ad%e3%81%ae%e6%83%b3%e5%83%8f%ef%bd%9e/","img":"http://wx1.sinaimg.cn/mw690/006GutMaly1ffj4h267cjj31hc0u0e81.jpg","magnet":["EB7961C2F8C42F0AC3CD02D03C4BF3FBD894F25D"]},{"title":"【生肉】ヤれる子!電車エッチ #02「留学生はオタク女子」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%ef%bc%81%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-%ef%bc%8302%e3%80%8c%e7%95%99%e5%ad%a6%e7%94%9f%e3%81%af%e3%82%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1fa2an6k8gwj20qo0f00u6.jpg","magnet":["E781C9A832D8922458C3032B10EB59C68A1448F5"]},{"title":"【熟肉】Zトン人外アニメーション A Beautiful Greed Nulu Nulu","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91z%e3%83%88%e3%83%b3%e4%ba%ba%e5%a4%96%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-a-beautiful-greed-nulu-nulu/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/c952712sample6.jpg","magnet":["d44b0211b5516287f59f6ccf0e9979d2bb43b2f3"]},{"title":"[夜桜字幕组]2017年4月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b44%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"https://imghost.io/images/2017/05/06/Glassthemovie_20170506153610.jpg","magnet":["16E0CF120A2C6B53432439488066577EA15BA708","5451127769624268DF0AAB4DBBB6FC88213BE3CE","D5901385BAE8F0BFE4C67C3C132B4CD0EC6F3C2C","A0F36FE1F60FEC00E5475B21D6FC216A43DE58C8","58D02809123C6E69C6A92C1FBF90C86F90BAB687","7E5199D21B0786D980AE0"]}][{"title":"【熟肉】第二次裏入学試験 THE ANIMATION【先行版】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e7%ac%ac%e4%ba%8c%e6%ac%a1%e8%a3%8f%e5%85%a5%e5%ad%a6%e8%a9%a6%e9%a8%93-the-animation%e3%80%90%e5%85%88%e8%a1%8c%e7%89%88%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/2-2.jpg","magnet":["d9aebade4c0d73150cda73bcf87fb893b82db24c"]},{"title":"[桜都字幕组][ピンクパイナップル] ヤリモクビーチに修学旅行で!! THE ANIMATION 第3話[先行版]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a4%e3%83%aa%e3%83%a2%e3%82%af%e3%83%93%e3%83%bc%e3%83%81/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f9andvvtezj30jg0auwfz.jpg","magnet":["7A96FC59B4754EA6AFBE3F5A11066A4999D789DE"]},{"title":"2017年5月里番预告和调查","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e5%92%8c%e8%b0%83%e6%9f%a5/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/4.jpg","magnet":null},{"title":"2017年4月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/2-2.jpg","magnet":["53136051687fa1539e3e497ee396e88ae266e2ef"]},{"title":"【熟肉】[ピンクパイナップル]清楚で真面目な彼女が、最凶ヤリサーに勧誘されたら…? The Animation[正式版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%b8%85%e6%a5%9a%e3%81%a7%e7%9c%9f%e9%9d%a2%e7%9b%ae%e3%81%aa%e5%bd%bc%e5%a5%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c944669sample1.jpg","magnet":["7a96899d77408e58849c40205e3044c8cfc09f8f"]},{"title":"【熟肉】学園侵触 ×× of the Dead","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%ad%a6%e5%9c%92%e4%be%b5%e8%a7%a6-xx-of-the-dead/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c948864sample10.jpg","magnet":["7e3eb112a8dcf0e60f34fb44988f820afb00f002"]},{"title":"【熟肉】鬼父 Refresh 「小生意気ロマンティックがハマらない」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ad%e3%83%9e%e3%83%b3%e3%83%86%e3%82%a3%e3%83%83%e3%82%af%e3%81%8c%e3%83%8f%e3%83%9e/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ezed4t8t76j20zk0k0goj.jpg","magnet":["c11d899c9e2c7ff81ef9f89f3eae8b8d3cc3aebc"]},{"title":"[熟肉]貴方ハ私ノモノ -ドS彼女とドM彼氏- 上巻 しつけ上手な優等生 V2","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e8%b2%b4%e6%96%b9%e3%83%8f%e7%a7%81%e3%83%8e%e3%83%a2%e3%83%8e-%e3%83%89s%e5%bd%bc%e5%a5%b3%e3%81%a8%e3%83%89m%e5%bd%bc%e6%b0%8f-%e4%b8%8a%e5%b7%bb-%e3%81%97%e3%81%a4%e3%81%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/3-1.jpg","magnet":["6E5B10B73852D086E7E8515C8099C5A893579872","EF44EEE5B95167F8DD9E626E9F811BE793D59822"]},{"title":"【熟肉】[株式会社虎の穴]ボクとみさき先生","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a0%aa%e5%bc%8f%e4%bc%9a%e7%a4%be%e8%99%8e%e3%81%ae%e7%a9%b4%e3%83%9c%e3%82%af%e3%81%a8%e3%81%bf%e3%81%95%e3%81%8d%e5%85%88%e7%94%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/3-3.jpg","magnet":["0eebac422108fd079652f9c907c4755f924e64b2"]}][{"title":"【生肉】[ピンクパイナップル]清楚で真面目な彼女が、最凶ヤリサーに勧誘されたら…? The Animation[正式版]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%b8%85%e6%a5%9a%e3%81%a7%e7%9c%9f%e9%9d%a2%e7%9b%ae%e3%81%aa%e5%bd%bc%e5%a5%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c944669sample1.jpg","magnet":["DCC4C42BD50FF1E118323F3B22259D29F6B1D1ED"]},{"title":"[生肉]学園侵触 ×× of the Dead","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e5%ad%a6%e5%9c%92%e4%be%b5%e8%a7%a6-xx-of-the-dead/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c948864sample9.jpg","magnet":["B63A4DD154E85675550D1561191282CC64C506CD"]},{"title":"[生肉]鬼父 Refresh 「小生意気ロマンティックがハマらない」","link":"http://www.llss.cool/wp/all/anime/%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ad%e3%83%9e%e3%83%b3%e3%83%86%e3%82%a3%e3%83%83%e3%82%af%e3%81%8c%e3%83%8f%e3%83%9e%e3%82%89%e3%81%aa%e3%81%84%e3%80%8d/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ezed4t8t76j20zk0k0goj.jpg","magnet":["264B2484DDA9C4445D27D5555D2DFBA11E18EBB3"]},{"title":"[熟肉]ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 夕焼け空に天使降臨! セラのおっぱい、自由にしてね 編","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90%e3%83%88%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/7.jpg","magnet":["e9aec16e9c399b4a90daf15d41a075dd565986a0"]},{"title":"[熟肉]OVA 冥刻學園 受胎編 #1「お願いします……先生の精液で、私たちを助けて欲しいんです」","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89ova-%e5%86%a5%e5%88%bb%e5%ad%b8%e5%9c%92-%e5%8f%97%e8%83%8e%e7%b7%a8-%ef%bc%831%e3%80%8c%e3%81%8a%e9%a1%98%e3%81%84%e3%81%97%e3%81%be%e3%81%99%e5%85%88%e7%94%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/3-2.jpg","magnet":["85F7C9A947AA9BD42CB9D026C4451F99C8690492"]},{"title":"[GANTZ/杀戮都市][漫画1-37+2则特别篇+番外篇+EPUB+人设资料][真人+CG+动漫]","link":"http://www.llss.cool/wp/all/comic/gantz%e6%9d%80%e6%88%ae%e9%83%bd%e5%b8%82%e6%bc%ab%e7%94%bb1-372%e5%88%99%e7%89%b9%e5%88%ab%e7%af%87%e7%95%aa%e5%a4%96%e7%af%87epub%e4%ba%ba%e8%ae%be%e8%b5%84%e6%96%99%e7%9c%9f%e4%ba%bacg/","img":"http://wx4.sinaimg.cn/large/8c007b5cgy1ff1qjyptfnj21kw0w6b0k.jpg","magnet":["1491423E2CA1B40D5DA5D3E5944FA4D4998244E7","CD94EB40F52AE1DDA1C92480B759D4F7D8817F85","B9A2B0BB2BE0BB6D5CCDEC28EE037CFDCD90806E","96A183ED7525869BE23F93EEFDDCE7EB535D280E","48A065DC2D6B1BB3EEEFC21CC835A88C5F8AD6EA","DB69AE4894BFD195A9383DB3839FB3446A23B708"]},{"title":"[生肉]ヌキどきッ!Revolution~天使と悪魔の搾精バトル~ 夕焼け空に天使降臨! セラのおっぱい、自由にしてね 編[先行版]","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%be%e7%b2%be%e3%83%90%e3%83%88%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/6.jpg","magnet":["b0329faca019c480e1c3068ccdde00ad83f64e05"]},{"title":"[生肉]OVA 冥刻學園 受胎編 #1「お願いします……先生の精液で、私たちを助けて欲しいんです」[先行版]","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89ova-%e5%86%a5%e5%88%bb%e5%ad%b8%e5%9c%92-%e5%8f%97%e8%83%8e%e7%b7%a8-%ef%bc%831%e3%80%8c%e3%81%8a%e9%a1%98%e3%81%84%e3%81%97%e3%81%be%e3%81%99%e5%85%88%e7%94%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/1-4.jpg","magnet":["9cdcf2bcbe0e5257945c10674d1aa623c483886d"]},{"title":"【樱都、脸肿】ずっと好きだった 1[柚木N’] 【严格的说不是NTR】 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%9a%e3%81%a3%e3%81%a8%e5%a5%bd%e3%81%8d%e3%81%a0%e3%81%a3%e3%81%9f-1%e6%9f%9a%e6%9c%a8n-%e3%80%90%e4%b8%a5%e6%a0%bc%e7%9a%84%e8%af%b4%e4%b8%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c946727sample1.jpg","magnet":["B3C9F56C9D7D01ECFB705F5EE8504EBE5121A0A7","db1f80d1ed1a074b6fea85c780388e5e494afcf4"]}][{"title":"【生肉】ずっと好きだった 1[柚木N’] 【严格的说不是NTR】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e3%81%9a%e3%81%a3%e3%81%a8%e5%a5%bd%e3%81%8d%e3%81%a0%e3%81%a3%e3%81%9f-1%e6%9f%9a%e6%9c%a8n-%e3%80%90%e4%b8%a5%e6%a0%bc%e7%9a%84%e8%af%b4%e4%b8%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c946727sample5.jpg","magnet":["766f805f7768850a4ecbae8fd42d1df726824edf","3ecc70caf1e5baee6f44b19eb9b50f4dfd111fe8","87efa21a9e8a5d114e51c2f18f934d66413a5118","8ad8030c331152647c5058e50907113699da02e6"]},{"title":"[首发][夜桜汉化组][151010][Studio Fow]Queen of the Jungle(豹女:丛林女王)[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e9%a6%96%e5%8f%91%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84151010studio-fowqueen-of-the-jungle%ef%bc%88%e8%b1%b9%e5%a5%b3%ef%bc%9a%e4%b8%9b%e6%9e%97%e5%a5%b3%e7%8e%8b%ef%bc%89flash-game/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/239220695b87bbfe7cd3408ce32c9e4e98a31145.jpg","magnet":["2F34741BBA8B019C4829","842D23918B4DC2BAD2F0"]},{"title":"ヤれる子!電車エッチ #01「純情そうな○学生」V2","link":"http://www.llss.cool/wp/all/anime/%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%ef%bc%81%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-%ef%bc%8301%e3%80%8c%e7%b4%94%e6%83%85%e3%81%9d%e3%81%86%e3%81%aa%e2%97%8b%e5%ad%a6%e7%94%9f%e3%80%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f9qt1aw1wdj20qo0f0q4h.jpg","magnet":["D1F630BCA8C501E0EB9D4D3B1A9A29BC6A5042BE","F2E5946D21512CA15D7A75490DA260CEBD28123A"]},{"title":"[Milky]きみはぐ Vol. 1-2","link":"http://www.llss.cool/wp/all/anime/milky%e3%81%8d%e3%81%bf%e3%81%af%e3%81%90-vol-1-2/","img":"http://wx3.sinaimg.cn/large/006C4Ia4gy1fd1njoyiclj30zk0k0why.jpg","magnet":["7de4ca72f93c4798814fbd8f6550230249090645","bd2ff7798b801a0de4f23bccf4dc77b85f8596f6"]},{"title":"[3D合集] StudioFOW作品合集","link":"http://www.llss.cool/wp/all/anime/3d%e5%90%88%e9%9b%86-studiofow%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/maxresdefaul2t.jpg","magnet":["Scarlet_Nights_Ep_01"]},{"title":"精神文明建设之“绅士”养成(2011-2016)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%882011-2016%ef%bc%89/","img":"http://pic1.acg12.net/wp-content/uploads/2017/04/Konachan-305.jpg","magnet":["0D7A3CF0FB67D07B68B1E","0E95DFA2C27D6FA7436E","627B469C144557E20EB1"]},{"title":"【熟肉】堕落令嬢 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%a0%95%e8%90%bd%e4%bb%a4%e5%ac%a2-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/1-1.jpg","magnet":["dd168a65608a6798ee236e9589427b7383ae4e4c"]},{"title":"无责任调查关于黑与白","link":"http://www.llss.cool/wp/all/game/%e6%97%a0%e8%b4%a3%e4%bb%bb%e8%b0%83%e6%9f%a5%e5%85%b3%e4%ba%8e%e9%bb%91%e4%b8%8e%e7%99%bd/","img":"http://llss.cool/wp/wp-content/plugins/wp-polls/images/loading.gif","magnet":null},{"title":"[桜都字幕组][ピンクパイナップル]清楚で真面目な彼女が、最凶ヤリサーに勧誘されたら…? The Animation[先行版]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%b8%85%e6%a5%9a%e3%81%a7%e7%9c%9f%e9%9d%a2%e7%9b%ae%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/c944669sample1.jpg","magnet":["24b9010539a1452d20b2f91defcce8131d1b0837"]}][{"title":"【生肉】堕落令嬢 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e5%a0%95%e8%90%bd%e4%bb%a4%e5%ac%a2-the-animation-%e9%a2%84%e5%91%8a%e7%89%87/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/4.jpg","magnet":["C450101EE835445A79E048508037A0415C03629E"]},{"title":"survive作品介绍","link":"http://www.llss.cool/wp/all/comic/survive%e4%bd%9c%e5%93%81%e4%bb%8b%e7%bb%8d/","img":"http://wx3.sinaimg.cn/mw690/bccc2b49gy1fe3kiu6j4ej20fk0bomzy.jpg","magnet":null},{"title":"精神文明建设之“绅士”养成(2006-2010)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%882006-2010%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/cg_img_evcg02.jpg","magnet":["FEA301EF9F829C49C755","77EC0C7CB36F7219ACC0"]},{"title":"2017年3月里番合集 V2【樱都、魔穗】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://wx2.sinaimg.cn/mw690/8c007b5cly1fe7hgqsnplj20zk0k00vf.jpg","magnet":["E2BE90C968A307AA0C14D8445DB4F202218EC2A9","cb8b003d83e5fbde2c81dcf3fc877a656a5ca5bc"]},{"title":"[夜桜字幕组]2017年3月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b43%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/238437973429fa6fab916d1633246922324f36bc.jpg","magnet":["40C42CEBA088A56B4994BBA555C7CD0A03E02CCB","83C8988A6D6C6E6E4B8C90FFECC8D53E840B1834","36CF0B43FCD884C2FD029BFFFD24D5DFEBC79C05","932ECD3D3DC01C510F5A32E12097C2406F3717EB","85454A64934DA0C6284068D00734B1ABCE9DBD88","EAA64383D94B757ED1D210A0D589C9F172DA1B22","4B06852BD07506CC0E27AD35679A5FDBBCB87005","6A94B616F43A5406DE5A260DD4B45370E7223D60","27F63CCD20066F870A8F","AC52566BC26C1E822092"]},{"title":"2017年4月里番预告及期待调查【多图】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e5%8f%8a%e6%9c%9f%e5%be%85%e8%b0%83%e6%9f%a5%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/04/ccc.jpg","magnet":null},{"title":"【熟肉】自宅警備員 1stミッション イイナリ巨乳長女・さやか〜編 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-1st%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%82%a4%e3%82%a4%e3%83%8a%e3%83%aa%e5%b7%a8%e4%b9%b3%e9%95%b7/","img":"http://wx4.sinaimg.cn/mw690/8c007b5cly1fe7fy50getj20zk0k0q4e.jpg","magnet":["AD9B07E498AE6AF9E952CFA5B3CE4545AFB5BB85","0816abe10b2e6f3ddcfdbebb86ea0c310af0ea31","[collaborationworks]"]},{"title":"【熟肉】[Pink Pineapple] えろゼミ ~エッチにヤルきにABC~ THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91pink-pineapple-%e3%81%88%e3%82%8d%e3%82%bc%e3%83%9f-%ef%bd%9e%e3%82%a8%e3%83%83%e3%83%81%e3%81%ab%e3%83%a4%e3%83%ab%e3%81%8d%e3%81%ababc%ef%bd%9e-the-animation/","img":"http://wx4.sinaimg.cn/mw690/8c007b5cly1fe7go4pfq4j20zk0k00ua.jpg","magnet":["72783A935C30B51EFB6B82EB330B4E78D8513E8B","048ec783799d08048ef521c7d2395905e91caf0c"]},{"title":"【熟肉】[PORO][JKとエロコンビニ店長 エロ可愛JK・栞&結衣〜イケないぶら下がり〜] V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9bjk%e3%83%bb%e6%a0%9e%ef%bc%86/","img":"http://wx4.sinaimg.cn/large/8c007b5cly1fe7elix41ij20zk0k0jto.jpg","magnet":["4F50D157358FC39601F4230E359B5E19CEA3408A","407ed6f48788373a505428cf9b29c0a97b468d1e"]}][{"title":"【熟肉】[ばにぃうぉ~か~] OVA 巨X令嬢MC学園 #2 女帝の陥落【附前作】 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91ova-%e5%b7%a8%e4%b9%b3%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%832-%e5%a5%b3%e5%b8%9d%e3%81%ae%e9%99%a5%e8%90%bd%e3%80%90%e9%99%84%e5%89%8d%e4%bd%9c%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/1-9.jpg","magnet":["FCEF8C962DE7DE0CB2F816F7BA9CAA8BC380566E","358136f358261c69e5c90fb0cb765150f1751cb8"]},{"title":"【生肉】JKとエロコンビニ店長 エロ可愛JK・栞&結衣~イケないぶら下がり~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9bjk%e3%83%bb%e6%a0%9e%ef%bc%86%e7%b5%90/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c941546table2.jpg","magnet":["BEFF05A2931B0C6ED23B6218AB7A889B1CB4671F"]},{"title":"【生肉】OVA 巨乳令嬢MC学園 #2 女帝の陥落","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91ova-%e5%b7%a8%e4%b9%b3%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%832-%e5%a5%b3%e5%b8%9d%e3%81%ae%e9%99%a5%e8%90%bd/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/2-3.jpg","magnet":["B67DAD4022EFB77D27CE3D78ED16C24D15DC1D9F"]},{"title":"【生肉】自宅警備員 1stミッション イイナリ巨X長女・さやか~編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e8%87%aa%e5%ae%85%e8%ad%a6%e5%82%99%e5%93%a1-1st%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3-%e3%82%a4%e3%82%a4%e3%83%8a%e3%83%aa%e5%b7%a8x%e9%95%b7%e5%a5%b3/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/5.jpg","magnet":["4995A4A9AA9E5F62B999E3145B729566C58D6B04"]},{"title":"【生肉】えろゼミ ~エッチにヤルきにABC~ THE ANIMATION<抽選で1名様に声優サイン入り台本プレゼント>","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%81%88%e3%82%8d%e3%82%bc%e3%83%9f-%ef%bd%9e%e3%82%a8%e3%83%83%e3%83%81%e3%81%ab%e3%83%a4%e3%83%ab%e3%81%8d%e3%81%ababc%ef%bd%9e-the-animation%ef%bc%9c%e6%8a%bd%e9%81%b8%e3%81%a7/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/4-3.jpg","magnet":["9ECDD85F03E70674D39CD34E696DD95140ADD92D"]},{"title":"2017年3月31日(本周)里番发售预告","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b43%e6%9c%8831%e6%97%a5%ef%bc%88%e6%9c%ac%e5%91%a8%ef%bc%89%e9%87%8c%e7%95%aa%e5%8f%91%e5%94%ae%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/6.jpg","magnet":null},{"title":"[首发][夜桜汉化组][卡特琳娜][Studio Fow]THE GENERAL’S DAUGHTER(杜·克卡奥之女)[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e9%a6%96%e5%8f%91%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84%e5%8d%a1%e7%89%b9%e7%90%b3%e5%a8%9cstudio-fowthe-generals-daughter%ef%bc%88%e6%9d%9c%c2%b7%e5%85%8b%e5%8d%a1%e5%a5%a5/","img":"http://wx2.sinaimg.cn/large/be8e860egy1fdx2m608m2j20zk0k0ngr.jpg","magnet":["UxGrqXijBAP_5JkgiMH9fyTUCSj2","C364D1ABCC9B57271CAAF4"]},{"title":"精神文明建设之“绅士”养成(2001-2005)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%882001-2005%ef%bc%89/","img":"https://static.acg12.com/uploads/2017/01/ba737244760f0bf75e318ef2c7776285.jpg","magnet":["385216FBE8C5716432778"]}][{"title":"[夜桜字幕组][母親による筆おろしが義務化された世界 第二话【附前作】","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e6%af%8d%e8%a6%aa%e3%81%ab%e3%82%88%e3%82%8b%e7%ad%86%e3%81%8a%e3%82%8d%e3%81%97%e3%81%8c%e7%be%a9%e5%8b%99%e5%8c%96%e3%81%95%e3%82%8c%e3%81%9f/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/4-2.jpg","magnet":["0af083317b270b98037e78d6d7d237617892d0e3","][171003][opiumud]Yoshiwara"]},{"title":"From2000To2017触手番合集","link":"http://www.llss.cool/wp/all/anime/from2000to2017%e8%a7%a6%e6%89%8b%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/3961528i.jpg","magnet":["967624FA4DD385C6812747C39409E7A4F9D4E5AD","030b092fe17eb5a8917995321b0b6e994692b5ac","efae9fc47ffb393c0cbf3ac155d72f32939fb182","a221fb0cf378bee01e7f575a336c03f7dc450b60","11b716f96c0d024e2e498b45a0b2a083af6f6f0d","65616AB7E7C1145DFD803CEA1AFBD7A784EA9CD0","4748918542b2f6615bf94dd64c383e8f286440cd","10D8150BED99FEC117A516EBE2DD0D488709F423","c4b1a544ddba16195a520e912a4b0dded9a30d85","d3e1e2fd2d8c1a8d9213fe2dec18800e8c278621","CE1EA577B288A7E484E77C541056C98A15157E73","280D155A4965021271F4F30D6E9ED45F838796C1","a470f82eaa804a8f0f7b5f62a669b279db9a6ee5","817460f4c80f420d563c825e51c7129ca2209547","39838a8a5de28991532be01fde593a6d280c347d","F323AE481049838E32FD690A042FEB86C33F0D7A","68B7A6535016DB33A0D75E3B6D2D27AF63B8F57E","9a7c60f7fe21e8effd50832a617047cdb499ba93","F82A51545E0C9C79BE574CE28930890710AAE609","aa73755df207c997c195f937c61a6aadbb03ed91","b4abe4d207557fbbb690f4303a44c9ad5f0c744d","D3E1E2FD2D8C1A8D9213FE2DEC18800E8C278621","D2E528ACEF84A51B9AAAEFE8C38DF3DA4A7F2203","2E22004A654E9AFA4AAF80F63D5801493D8E37EF","f269879cf9485dd87c4fc3204320175a3f39d3fd","3dc62b309e38539bbefea2af280b5739579c1162","05D4483CE3A2FDC8A1AEAF08CA83FFADECA5C90A","N747N7NYGYULWYQZIBUZFVBBMMFQ6FFS","03c50787e72ce9feca3c979444649629b8ab83a0","B0AC95AD2317E9760EA7ADFE41B4B50F259A1EDE","7900018c3aacb6f133d419d45398f3f4af7d0a06","A540C268A378F3C9D18862EB7D8B2C60CC40BFDF","ad3a12a97ab7046802aae49135bca3347526fbbe","6A4E7F33CC73C8B782E2A6757913873F20218CC2","2358F58E527F9D681D0CFA30217B74FA5357849B","9A6425C5787F0608469140064FF253225742A936","C132DD7F1DD7671B03EA70185BE5675E1DD9156B","a3c0d8c1bdb41462031b9520a164d5282909e24d","2b3ac08e77bf588e25d3dafad440d87ebb8052f"]},{"title":"精神文明建设之“绅士”养成(1995-2000里番作品列表)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%881995-2000%e9%87%8c%e7%95%aa%e4%bd%9c%e5%93%81%e5%88%97%e8%a1%a8%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/3bfc48be01dfeaec48e5745c4d7710ae.jpg","magnet":["A1BF566BFE49E236581E3"]},{"title":"精神文明建设之“绅士”养成(1969-1994里番作品列表)","link":"http://www.llss.cool/wp/all/anime/%e7%b2%be%e7%a5%9e%e6%96%87%e6%98%8e%e5%bb%ba%e8%ae%be%e4%b9%8b%e7%bb%85%e5%a3%ab%e5%85%bb%e6%88%90%ef%bc%881969-1994%e9%87%8c%e7%95%aa%e4%bd%9c%e5%93%81%e5%88%97%e8%a1%a8%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/862c2f712a75d8b73393002f12c0d9b4.jpg","magnet":["27FA88F2BB7DF239AB2D8"]},{"title":"【熟肉】魔獣浄化少女ウテア soul.3 love affair","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a2-soul-3-love-affair/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/5-1.jpg","magnet":["5b47e3efa5275f2ec768853c081cc2fd81b60781"]},{"title":"【生肉】魔獣浄化少女ウテア soul.3 love affair","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a2-soul-3-love-affair/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/4-1.jpg","magnet":["324DE802380DA933278CA951B39AC17B1B16D247"]},{"title":"【最终幻想】コルネオの野望・動画版/蒂法的野望(提取动画)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e6%9c%80%e7%bb%88%e5%b9%bb%e6%83%b3%e3%80%91%e3%82%b3%e3%83%ab%e3%83%8d%e3%82%aa%e3%81%ae%e9%87%8e%e6%9c%9b%e3%83%bb%e5%8b%95%e7%94%bb%e7%89%88%e8%92%82%e6%b3%95%e7%9a%84%e9%87%8e%e6%9c%9b/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/1-2.jpg","magnet":["21C959F2C6E9F36ECAD92F6E5589FE10E44E9B68","77EF8C12C19DC4430092458F04F939D5F80E365A"]},{"title":"【熟肉】一年ぶりの THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e4%b8%80%e5%b9%b4%e3%81%b6%e3%82%8a%e3%81%ae-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c947870sample22.jpg","magnet":["b9e629c88b81916c9c8a0b8fc78ffe2450d3eae9","A8705009C5CFCB27D81181B917368DFA813A7723"]},{"title":"【生肉】一年ぶりの THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91%e4%b8%80%e5%b9%b4%e3%81%b6%e3%82%8a%e3%81%ae-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c947870sample1.jpg","magnet":["4319d73f5ed75643b3cedf2074d78d0dca148fc3"]}][{"title":"2017年3月里番预告和期待调查【多图】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/03/c941546table2.jpg","magnet":null},{"title":"2017年2月里番合集【樱都】【魔穗】【脸肿】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/41913.jpg","magnet":["L5JZ6UNOMJ55XG7KS2DI7JK65KGTQZGO","4E0C016AFB373EDF753BC14E5AB26E67FC21DD91","5ETMVCXROSAEITKPA25NVBFKGCRPGFYM","659fb7326cc54619b8fbc26b30c4ed1e3b2a6b58"]},{"title":"【熟肉】漆黒のシャガ THE ANIMATION 第一話「女郎蜘蛛」V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%bc%86%e9%bb%92%e3%81%ae%e3%82%b7%e3%83%a3%e3%82%ac-the-animation-%e7%ac%ac%e4%b8%80%e8%a9%b1%e3%80%8c%e5%a5%b3%e9%83%8e%e8%9c%98%e8%9b%9b%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c936876sample4.jpg","magnet":["3bb3006c4ac2f91763d96f423fb250cf80391750","a3026ddbfd9f840accc3be00def760db29bd75f3"]},{"title":"【熟肉】おいでよ! 私立ヤリま×り学園「エロ可愛ビッチJK・奈々~しゃぶり責めハメイキ牝堕~」【附前作】 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92%e3%80%8c%e3%82%a8%e3%83%ad%e5%8f%af/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c920297sample4.jpg","magnet":["06D6BB82C00C758CB1995AD60FE8A28FD0E8A809","e8ea5c85678c2a13a5913bb0ad50263e9ffbd848"]},{"title":"【熟肉】アイドル強制操作~女を思いのままに操る悪魔のスマートフォン~ V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e5%bc%b7%e5%88%b6%e6%93%8d%e4%bd%9c%ef%bd%9e%e5%a5%b3%e3%82%92%e6%80%9d%e3%81%84%e3%81%ae%e3%81%be%e3%81%be%e3%81%ab%e6%93%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c937462sample1.jpg","magnet":["8437AFED06899FEA0965D509386E28C7ACDDB961","49554a6e3f92c04cb02361c8a63ab07c60598cb4"]},{"title":"【熟肉】OVA 巨X令嬢MC学園 #1 支配の序章 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91ova-%e5%b7%a8x%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%831-%e6%94%af%e9%85%8d%e3%81%ae%e5%ba%8f%e7%ab%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c935570table2.jpg","magnet":["B39C6774A5818174C271709366586924A6BD643F","B17A3C973B2B20CAC3E58EB6DEC0F6BBFC4E34E0"]},{"title":"【熟肉】ヌキどきッ!revolution~天使と悪魔の搾Xバトル~ 月夜の晩に悪魔参上!フィリカの狙いはダメ男のX液!? 編 V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%bex%e3%83%90%e3%83%88%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/7.jpg","magnet":["7A9666A6AFF80FCDA9BF5A1BF4EB519F35D8682E","82d8ac2569cceee6c3e923ed6ebac3cfa66b0f89"]},{"title":"【熟肉】PINKERTON VOL.3 [Monorino]【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91pinkerton-vol-3-monorino%e3%80%90%e9%99%84%e5%89%8d%e4%bd%9c%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/1-4.jpg","magnet":["87F827C38A030EB4C840411FB2F5FF602A4BE1EF","779eac0ffed0e432d568d73ef3e8a3096f7bf0c9"]},{"title":"【熟肉】対魔忍アサギ3 #02 叶わぬ願い【附前作】V2","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8302-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943981sample11.jpg","magnet":["15903E295E7E97BCA8F4CD233C8CA376A8EABA7A","3D163749A89F160327D09BC4D378FC57EAE19E2B"]}][{"title":"[夜桜字幕组]2017年2月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b42%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://wx3.sinaimg.cn/mw690/be8e860egy1fd1xd1ybzaj20zk0k00ua.jpg","magnet":["8B3AE1FD51BEE9F662C7CF9CA612957FEF68A2F5","E08193763100A7E559049B80D87CBA7FEC4B24C2","61D359F034D96255C970C7B1C1E1A97994B09795","4D18E4133550FC25F5C7D8417A6B3FA0DA8421A6","7E27828860693A07A45BF9A7730E1E2ACB40FB66","548C96B2201BCCC976B5A"]},{"title":"【生肉】アイドル強制操作~女を思いのままに操る悪魔のスマートフォン~","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e5%bc%b7%e5%88%b6%e6%93%8d%e4%bd%9c%ef%bd%9e%e5%a5%b3%e3%82%92%e6%80%9d%e3%81%84%e3%81%ae%e3%81%be%e3%81%be%e3%81%ab%e6%93%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c937462sample1.jpg","magnet":["6B140E06A16FA65A7A610BCEF5F5217141FF2A6F"]},{"title":"【生肉】漆黒のシャガ THE ANIMATION 第一話「女郎蜘蛛」","link":"http://www.llss.cool/wp/all/anime/%e6%bc%86%e9%bb%92%e3%81%ae%e3%82%b7%e3%83%a3%e3%82%ac-the-animation-%e7%ac%ac%e4%b8%80%e8%a9%b1%e3%80%8c%e5%a5%b3%e9%83%8e%e8%9c%98%e8%9b%9b%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/3.jpg","magnet":["9726972324F0A9025E49F353088926882DF2E530"]},{"title":"【生肉】OVA 巨X令嬢MC学園 #1 支配の序章","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91ova-%e5%b7%a8x%e4%bb%a4%e5%ac%a2mc%e5%ad%a6%e5%9c%92-%ef%bc%831-%e6%94%af%e9%85%8d%e3%81%ae%e5%ba%8f%e7%ab%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/4-2-1.jpg","magnet":["A33E18EE75E5F045C110ADF537024CDA0424F5EA"]},{"title":"【生肉】対魔忍アサギ3 #02 叶わぬ願い","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8302-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943981sample29.jpg","magnet":["FD40450C4F64C619A9EC5017AA863CD2067D242B"]},{"title":"【生肉】PINKERTON VOL.3 [Monorino]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91pinkerton-vol-3-monorino/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c939388sample1.jpg","magnet":["31E6F5180308C9D3721F0FB6EA3875016BE59E25"]},{"title":"【生肉】おいでよ! 私立ヤリま×り学園「エロ可愛ビッチJK・奈々~しゃぶり責めハメイキ牝堕~」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a2%84%e5%91%8a%e3%80%91%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92%e3%80%8c%e3%82%a8%e3%83%ad%e5%8f%af/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/5.jpg","magnet":["907978B183B85B549B970708AFA3752956C586C1"]},{"title":"【生肉】ヌキどきッ!revolution~天使と悪魔の搾Xバトル~ 月夜の晩に悪魔参上!フィリカの狙いはダメ男のX液!? 編","link":"http://www.llss.cool/wp/all/anime/%e3%83%8c%e3%82%ad%e3%81%a9%e3%81%8d%e3%83%83%ef%bc%81revolution%ef%bd%9e%e5%a4%a9%e4%bd%bf%e3%81%a8%e6%82%aa%e9%ad%94%e3%81%ae%e6%90%bex%e3%83%90%e3%83%88%e3%83%ab%ef%bd%9e-%e6%9c%88%e5%a4%9c/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/6.jpg","magnet":["2B2F807321F2A5D2FE07648FB29B782255E3F83F"]},{"title":"【魔穗字幕组】2016年作品合集","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%912016%e5%b9%b4%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/10.jpg","magnet":["D418F21A522FF163D754A62A7EFA1323653A78D7"]}][{"title":"[熟肉][せるふぃっしゅ] もんむす・くえすと #2「魅凪・バビロンのXX婦」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%82%82%e3%82%93%e3%82%80%e3%81%99%e3%83%bb%e3%81%8f%e3%81%88%e3%81%99%e3%81%a8-2%e3%80%8c%e9%ad%85%e5%87%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/1.jpg","magnet":["ea819f4a5013db4c322e293db3b88baa3d7f4f46","3968153BE2A421D09F4EC872C9D57061E276A060","c9a34482259da9f6b41277982bdc3e301e040954","025F4A3EEDCC927089884BD6674521ECFF1DAB26"]},{"title":"[首发][夜桜汉化组][111103][I]スク水の黒猫がこんなに喘ぐわけがない(穿死库水的黑猫不可能娇喘成这样)[FLASH GAME][CN]","link":"http://www.llss.cool/wp/all/game/%e9%a6%96%e5%8f%91%e5%a4%9c%e6%a1%9c%e6%b1%89%e5%8c%96%e7%bb%84111103i%e3%82%b9%e3%82%af%e6%b0%b4%e3%81%ae%e9%bb%92%e7%8c%ab%e3%81%8c%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%96%98%e3%81%90/","img":"http://wx3.sinaimg.cn/mw690/be8e860egy1fcq80bz951j20m40gp40s.jpg","magnet":["834A8232A42DEDC4DAD4AA"]},{"title":"[熟肉]催眠クラス~女子全員、知らないうちに妊娠してました~ 後編 【附前作】","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa%e3%81%84%e3%81%86%e3%81%a1%e3%81%ab%e5%a6%8a%e5%a8%a0/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/1-1.jpg","magnet":["27a62b1c737b1f02c38442446db00af5fe54a9ae","77A1890610F414D86147FCA92823352FC370D199","8C8AC50F8BF2320E5DAF3E89CF54A288BCEFB929"]},{"title":"[生肉][せるふぃっしゅ] もんむす・くえすと #2「魅凪・バビロンのXX婦」V2","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%82%82%e3%82%93%e3%82%80%e3%81%99%e3%83%bb%e3%81%8f%e3%81%88%e3%81%99%e3%81%a8-2%e3%80%8c%e9%ad%85%e5%87%aa/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/2.jpg","magnet":["066c19b07bfdbd28ef8c151300808efeb5974606","6445908c49f3947037c1b583b9c78fbf713861f6","AB3B7ADBE574FEC977617A4EFB473E21F4374F65"]},{"title":"[生肉]催眠クラス~女子全員、知らないうちに妊娠してました~ 後編 V2版","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa%e3%81%84%e3%81%86%e3%81%a1%e3%81%ab%e5%a6%8a%e5%a8%a0/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/dsad344.jpg","magnet":["01A557E00A87DE4950D9CD124B2EE6A120BCC370","958060FEA59437DC07414A973F2ED62417A8CD79"]},{"title":"[桜都字幕组]グリーン・アイズ -姉キュン!より- THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%82%b0%e3%83%aa%e3%83%bc%e3%83%b3%e3%83%bb%e3%82%a2%e3%82%a4%e3%82%ba-%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88%e3%82%8a-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943080sample6.jpg","magnet":["30d587dc5856b11f01dd3fd3df69a0a1fa962069"]},{"title":"[桜都字幕组][chippai]桃色望遠鏡 Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e6%a1%83%e8%89%b2%e6%9c%9b%e9%81%a0%e9%8f%a1-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943081sample1.jpg","magnet":["77e19b17081288ee4044c7f54933461ff6183003","3B35C5B142E6C646FD79645E9D958FD82458CECA"]},{"title":"[生肉]桃色望遠鏡 Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e6%a1%83%e8%89%b2%e6%9c%9b%e9%81%a0%e9%8f%a1-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943081table1.jpg","magnet":["CD6EB082A37704E9CDE57458BEE0856D36D8F33A"]},{"title":"[桜都字幕组]小女ラムネ 第2話 ドキドキの撮影タイムと恋のABC","link":"http://www.llss.cool/wp/all/anime/%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac2%e8%a9%b1-%e3%83%89%e3%82%ad%e3%83%89%e3%82%ad%e3%81%ae%e6%92%ae%e5%bd%b1%e3%82%bf%e3%82%a4%e3%83%a0%e3%81%a8%e6%81%8b%e3%81%aeabc/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138table2.jpg","magnet":["8676EAE48F2D24ECBA3F2E6053E95D89E05450FD","B469542007E2D17A82FC914921CC7DDF318B8F3D","6EAC8BABF4A545B21B04A9A9410E073CE93FA821"]}][{"title":"[生肉]グリーン・アイズ -姉キュン!より- THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%82%b0%e3%83%aa%e3%83%bc%e3%83%b3%e3%83%bb%e3%82%a2%e3%82%a4%e3%82%ba-%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88%e3%82%8a-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c943080table2.jpg","magnet":["4B706C1765510ED08ADE9A35F45257C211009B3C"]},{"title":"[桜都字幕组][WHITE BEAR] 新生 ふたなりアイト?ルて?かたま系! 後編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84white-bear-%e6%96%b0%e7%94%9f-%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%82%a2%e3%82%a4%e3%83%88%e3%83%ab%e3%81%a6%e3%81%8b%e3%81%9f%e3%81%be%e7%b3%bb/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/e51463bbgw1f1irid12qnj20go09e77r.jpg","magnet":["C77C021A4A6209582258651CD1D3AE1365DA0E87","DB7F60DB43E4778EF4370417774F46E795A51426"]},{"title":"[生肉]新生 ふたなりアイト?ルて?かたま系! 後編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e6%96%b0%e7%94%9f-%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%a7%e3%81%8b%e3%81%9f%e3%81%be%e7%b3%bb%ef%bc%81-%e5%be%8c%e7%b7%a8-%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/e51463bbgw1f1irid12qnj20go09e77r.jpg","magnet":["F078025691F6590024AA273CD8F484BE1C365DE0"]},{"title":"2017年2月里番预告【多图】","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b42%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2017/02/c927138sample12.jpg","magnet":null},{"title":"各组2017年1月里番合集","link":"http://www.llss.cool/wp/all/anime/2017%e5%b9%b41%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c933485sample9.jpg","magnet":["DCB15B636A4323B7A05E81D06C8DFEC0392239D9","455BCDD06DC3796BDBC82E05C205C1B81E8545CF","E1BA15718AD355C269B960A939B1DA513F6A8355"]},{"title":"[桜都字幕组][せるふぃっしゅ] もんむす・くえすと 1 「外伝・サキュバス幻想(ファンタジー)」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%82%82%e3%82%93%e3%82%80%e3%81%99%e3%83%bb%e3%81%8f%e3%81%88%e3%81%99%e3%81%a8-1/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/2-1.jpg","magnet":["3968153BE2A421D09F4EC872C9D57061E276A060"]},{"title":"[桜都字幕组]PRETTY×CATION 2 THE ANIMATION #2「このさきも、ずっと」","link":"http://www.llss.cool/wp/all/anime/prettyxcation-2-the-animation-%ef%bc%832%e3%80%8c%e3%81%93%e3%81%ae%e3%81%95%e3%81%8d%e3%82%82%e3%80%81%e3%81%9a%e3%81%a3%e3%81%a8%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/567.jpg","magnet":["7696A16A3AAD9E7E20D1C2B9D97B0723F59D4A7B"]},{"title":"[桜都字幕组]牝教師4 ~穢された教壇~ 「聖凛学園長・優理~熟れ晒すめげない媚肉~」","link":"http://www.llss.cool/wp/all/anime/%e7%89%9d%e6%95%99%e5%b8%ab4-%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e-%e3%80%8c%e8%81%96%e5%87%9b%e5%ad%a6%e5%9c%92%e9%95%b7%e3%83%bb%e5%84%aa%e7%90%86%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/568.jpg","magnet":["6B57704FC6F42D73889BA3DD6F9F709BDFA6A3DE","1E308A102B5635F9CB6CA0F039E65F5B5FD27890"]},{"title":"[桜都字幕组][脸肿字幕组]飼育×彼女 天使の結末編","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e7%b5%90%e6%9c%ab%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/0060lm7Tgw1fa81tt6cxdj30uu0hcjuv.jpg","magnet":["F9A4C5E5FCD33EC15A49B9245463EC21A3DC9CA8","3BD90E97A2FB2C7EE1E35D81D2883CAA7A1D977B"]}][{"title":"[桜都字幕组]:僕らのセックス 2 [いのまる][附27日合集]","link":"http://www.llss.cool/wp/all/anime/%e5%83%95%e3%82%89%e3%81%ae%e3%82%bb%e3%83%83%e3%82%af%e3%82%b9-2-%e3%81%84%e3%81%ae%e3%81%be%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/psb.jpg","magnet":["9BBE783897B02CF15B354B19D0D14D20B39BE4CF"]},{"title":"[夜桜字幕组]2017年1月3D作品合集[BIG5+GB][提莫放开我的金克丝]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842017%e5%b9%b41%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb%e6%8f%90%e8%8e%ab%e6%94%be%e5%bc%80%e6%88%91%e7%9a%84%e9%87%91%e5%85%8b%e4%b8%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/pI4ye3i.jpg","magnet":["25DFC3EF28D877BD9C1904AC2AE6EB479AABC1C0","65291A640D710B464532ED77D21FBD51B8907D9B","DEE5D8665D858D662F4C87745127EDFA4E15DC1C","44823463E2E3ED5B96C0574EC95538F908F82165","6917B5F3EC6E88B3FB7A5F29FBB8E2EA2E83339B","9DE72B008D573572AC83CC71870B4A2562FEFD99","A507B9A344E97B2532879F"]},{"title":"[桜都字幕组][Teamおと♂デリ] オトコのコ♂デリバリー","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84team%e3%81%8a%e3%81%a8%e2%99%82%e3%83%87%e3%83%aa-%e3%82%aa%e3%83%88%e3%82%b3%e3%81%ae%e3%82%b3%e2%99%82%e3%83%87%e3%83%aa%e3%83%90%e3%83%aa%e3%83%bc/","img":"http://llss.cool/wp/wp-content/uploads/2017/01/c943202table2.jpg","magnet":["AD543F5EBF0B0736181D17884CDC738E50C0DFD4","[collaborationworks]"]},{"title":"[桜都字幕组][メリージェーン]都市伝説シリーズ 其の肆 メリーちゃんの電話[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae%e8%82%86-%e3%83%a1%e3%83%aa%e3%83%bc%e3%81%a1%e3%82%83%e3%82%93%e3%81%ae%e9%9b%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c934211sample1.jpg","magnet":["F032D4C14542BA95BFFE397EC2256CE3A0605EA4"]},{"title":"[熟肉]サグラレ堕メ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%82%b5%e3%82%b0%e3%83%a9%e3%83%ac%e5%a0%95%e3%83%a1-the-animation/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1fbkmf38ry6j30uu0hc0vw.jpg","magnet":["E1BD33C2F05C6F740D899AE51EBBCAC0BCF0F2E6"]},{"title":"[生肉]サグラレ堕メ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%82%b5%e3%82%b0%e3%83%a9%e3%83%ac%e5%a0%95%e3%83%a1-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/566.jpg","magnet":["464B92720DA668160A3065BB059B391CFE38416B","4328A86C801BA5B5C842D407A88E28FBEA4D7D5E"]},{"title":"[熟肉][メリー・ジェーン]アマカノ 特別編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e7%89%b9%e5%88%a5%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c933485package.jpg","magnet":["858ECAD30B09622F37B5B469149E4450E7E86CCE","FDFDAEE445722AB39918E095FE08667C15DDAEF2"]},{"title":"[生肉][メリー・ジェーン]アマカノ 特別編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e7%89%b9%e5%88%a5%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/c933485sample1.jpg","magnet":["361BCB765094113AF567B3ED26CF287FA924EEB3"]},{"title":"2016年12月里番合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b412%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8dz6h29uej312l0lrgnl.jpg","magnet":["9150B382EE3D301094CCB80B2DACA7BAB1101DAE"]}][{"title":"[熟肉]鬼父 Refresh 「小生意気な肝っ玉」[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%81%aa%e8%82%9d%e3%81%a3%e7%8e%89%e3%80%8d/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1fbadknt8cxj30uu0hcn31.jpg","magnet":["5EA1913B0202A5DE9D405F46ED6DF534B8296DE9","02A7BAEBD298DE332E0CCDD0C80669405063F260"]},{"title":"[熟肉][Collaboration Works]妹とその友人がエロすぎて俺の股間がヤバイ 茶髪ツインテールでユサユサ巨乳!妹の可愛い友人『莉子』編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89collaboration-works%e5%a6%b9%e3%81%a8%e3%81%9d%e3%81%ae%e5%8f%8b%e4%ba%ba%e3%81%8c%e3%82%a8%e3%83%ad%e3%81%99%e3%81%8e%e3%81%a6%e4%bf%ba%e3%81%ae%e8%82%a1%e9%96%93%e3%81%8c/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fbay5be5w9j30uu0hcn17.jpg","magnet":["4E244D97037A48D838C0B801350C4012F40D32C7"]},{"title":"[生肉]鬼父 Refresh 「小生意気な肝っ玉」","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%81%aa%e8%82%9d%e3%81%a3%e7%8e%89%e3%80%8d/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c930296sample1.jpg","magnet":["55A29E85427B7612F6C24714BBDA6AADCD1C300A"]},{"title":"[生肉]妹とその友人がエロすぎて俺の股間がヤバイ 茶髪ツインテールでユサユサ巨乳!?妹の可愛い友人『莉子』 編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e5%a6%b9%e3%81%a8%e3%81%9d%e3%81%ae%e5%8f%8b%e4%ba%ba%e3%81%8c%e3%82%a8%e3%83%ad%e3%81%99%e3%81%8e%e3%81%a6%e4%bf%ba%e3%81%ae%e8%82%a1%e9%96%93%e3%81%8c%e3%83%a4%e3%83%90%e3%82%a4/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/0060lm7Tgw1f9clg791ebj30ur0h7tah.jpg","magnet":["765C8A2290BB1A996906AD78D929B8D082F595C2"]},{"title":"[熟肉][EDGE(エッジ)]フェラハメりっぷす Throat.2 Fella Hame Lips ep.2[附前作]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%83%95%e3%82%a7%e3%83%a9%e3%83%8f%e3%83%a1%e3%82%8a%e3%81%a3%e3%81%b7%e3%81%99-throat-2-fella-hame-lips-ep-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/0060lm7Tgw1fb59grfd0vj30uu0hcadh.jpg","magnet":["0BAC2AFDAD189A149BA38FB9C1A697E67CBDCAD3"]},{"title":"[熟肉][EDGE]催眠クラス~女子全員、知らないうちに妊娠してました~ 前編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%a2%e7%98%ab%e7%a4%be%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fb43dnl73fj30uu0hcdja.jpg","magnet":["E4BAEF8AA3204B1DDB10DA56039B83A2B6E7A8C2"]},{"title":"[生肉][EDGE(エッジ)]フェラハメりっぷす Throat.2 Fella Hame Lips ep.2","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%83%95%e3%82%a7%e3%83%a9%e3%83%8f%e3%83%a1%e3%82%8a%e3%81%a3%e3%81%b7%e3%81%99-throat-2-fella-hame-lips-ep-2/","img":"https://image.sexacg.com/images/2016/12/27/BL3F.jpg","magnet":["0A61E08FBE598D9DACB6EB1726AB992BCBF2E7D8"]},{"title":"[熟肉]対魔忍アサギ3 #01 叶わぬ願い","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%a2%e7%98%ab%e7%a4%be%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8301-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c936877sample10.jpg","magnet":["154C692D497B0B96E84880A37D4F24555B095A7B"]},{"title":"[夜桜字幕组]2016年12月3D作品合集-一大波提莫来袭[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b412%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-%e4%b8%80%e5%a4%a7%e6%b3%a2%e6%8f%90%e8%8e%ab%e6%9d%a5%e8%a2%adbig5gb/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/pI4ye3i.jpg","magnet":["5784E2C1B94A02CE5DAAB1F1541484BE0FCA02DC","B67FD54253E34357CCEAD7B598BF04FAA6F1EA2F","8079D8DDC6570593E985944E5A41583523434130","1F48B67C8F0945E043F1FCEAE5846FAB27AE5542","751306F85B839814C9CBFB4E888EF7BC1DBE19B5","1D7880C567E0BE1CF702F0393DA2B20F6F13AD7F","4732335A1CCC9246E26F14E991B189978F9AE372","9909AB2D86239D03DDDD189CB8B1D8048F65F014","3CA042B1FF954C2969C1879BBA9692EA76FBD3FF","3557163D345D8870DE921EA6020525E87EF285CD","EFB721D55DF5FBF5C67FECADE60E902A9D985A33","065C0A46AF226707C32D16CA89AFFC173366664D","2D60639E56357E2902F0F6DA5FC2BA5A99C8AF3D","C215253A98FB14F6760DE7A","Fow]Beastly_Bacchanalia["]}][{"title":"生肉 [ZIZ] 対魔忍アサギ3 #01 叶わぬ願い – Taimanin Asagi 3 – Episode 1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-ziz-%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae3-%ef%bc%8301-%e5%8f%b6%e3%82%8f%e3%81%ac%e9%a1%98%e3%81%84-taimanin-asagi-3-episode-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c936877sample11.jpg","magnet":["4DB8A0F2854090BFB0CD5562FF7B808B1B855B33"]},{"title":"生肉[EDGE] 催眠クラス~女子全員、知らないうちに妊娠してました~ 前編 – Saimin Class – Episode1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89edge-%e5%82%ac%e7%9c%a0%e3%82%af%e3%83%a9%e3%82%b9%ef%bd%9e%e5%a5%b3%e5%ad%90%e5%85%a8%e5%93%a1%e3%80%81%e7%9f%a5%e3%82%89%e3%81%aa%e3%81%84%e3%81%86%e3%81%a1%e3%81%ab%e5%a6%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/dsad344.jpg","magnet":["E7E503C1407590E68EC3529FA548D3AFEBCDFEED"]},{"title":"[熟肉][ピンクパイナップル] 働くオトナの恋愛事情 THE ANIMATION [episode 01]","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%83%8d%e3%81%8f%e3%82%aa%e3%83%88%e3%83%8a%e3%81%ae%e6%81%8b%e6%84%9b%e4%ba%8b%e6%83%85-the-a/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/CDqH.jpg","magnet":["95798F617F42D5657B1F0761696E088728A7AD05"]},{"title":"[生肉][ピンクパイナップル] 働くオトナの恋愛事情 THE ANIMATION [episode 01]","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%83%8d%e3%81%8f%e3%82%aa%e3%83%88%e3%83%8a%e3%81%ae%e6%81%8b%e6%84%9b%e4%ba%8b%e6%83%85-the-a/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c929109table1.jpg","magnet":["86956ABE7F05049E05009DD773CBD34E6FC8E018"]},{"title":"[桜都字幕组]:[GOLD BEAR]魔将の贄3 後編 ~白濁の海に沈む印褥の隷姫~特典【附初回版+前作】","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%ef%bc%9a%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%be%8c%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e5%8d%b0/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f5a1lqz85ij20zf0jvmyh.jpg","magnet":["36F84315DD0CCE00AE6FB1EE3EFA11FA564BB39F"]},{"title":"生肉:魔将の贄3 後編 ~白濁の海に沈む印褥の隷姫~特典【附初回版】","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%be%8c%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e5%8d%b0%e8%a4%a5%e3%81%ae%e9%9a%b7-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ%E5%9B%BE%E7%89%8720160529213534.png","magnet":["2A33541B6A50565557A54CD7CC341670D59D10CF"]},{"title":"生肉:魔将の贄3 後編 ~白濁の海に沈む印褥の隷姫","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%be%8c%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e5%8d%b0%e8%a4%a5%e3%81%ae%e9%9a%b7/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ%E5%9B%BE%E7%89%8720160529213534.png","magnet":["34431D97EB4813765362336713CE5B57C860E1CD"]},{"title":"[桜都字幕组][メリージェーン]今からアタシ……下巻 セカンドバージンも捧げます[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%a1%e3%83%aa%e3%83%bc%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e4%bb%8a%e3%81%8b%e3%82%89%e3%82%a2%e3%82%bf%e3%82%b7%e4%b8%8b/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1fag8uq7mfqj30uu0hcad6.jpg","magnet":["03FE8208CB923C6159C1D23DDBE2A83A9D14595D","[collaborationworks]"]},{"title":"[桜都字幕组][chippai]少女達の茶道ism THE ANIMATION 二席[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e5%b0%91%e5%a5%b3%e9%81%94%e3%81%ae%e8%8c%b6%e9%81%93ism-the-animation-%e4%ba%8c%e5%b8%ad/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fag8uqpm5yj30uu0hc771.jpg","magnet":["327E5DE4C9528E049C97C57732CF852832B3EB24"]}][{"title":"[桜都字幕组][chippai]えっちな身体測定 Anime Edition","link":"http://www.llss.cool/wp/all/anime/chippai%e3%81%88%e3%81%a3%e3%81%a1%e3%81%aa%e8%ba%ab%e4%bd%93%e6%b8%ac%e5%ae%9a-anime-edition/","img":"https://image.sexacg.com/images/2016/12/04/64jV.jpg","magnet":["795DAEA8A5C8B2F3A8820D388A62290121B5DE1C"]},{"title":"[少女映畫]無名[甲铁城的卡巴内瑞]系列","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab%e7%84%a1%e5%90%8d%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e7%91%9e%e7%b3%bb%e5%88%97/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1faf5wl83doj21kw2dbhdt.jpg","magnet":["C3D26B0DD551C4B41702F0844973B234E72AE791"]},{"title":"[夜桜字幕组]2016年11月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b411%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://llss.cool/wp/wp-content/uploads/2016/12/HpbBnVr.jpg","magnet":["DA81B2F746672F759988E31CAA1BF0ADDE892557","F697B3A1BA0DF4B77456528C05FA0E6B8BFF0C09","EAAA0B9B88A6A36A385742071E5D3245141B5E2F","F9EF784D748E6689D488AC9C2D031955937D5B6A","0539E82F7A7FB7C8BF5E5393C29EF24F5D2AE030","88FA2EEE2731640682D8","77E83973F6EE8DC1AC92"]},{"title":"生肉:[メリー・ジェーン]今からアタシ……下巻 セカンドバージンも捧げます","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e4%bb%8a%e3%81%8b%e3%82%89%e3%82%a2%e3%82%bf%e3%82%b7%e4%b8%8b%e5%b7%bb/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8dz6h29uej312l0lrgnl.jpg","magnet":["75A1711AC384413257846DCE7C93288399C752CE"]},{"title":"生肉:[chippai]ちいさいこ いいよね…えっちな身体測定Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%a1%e3%81%84%e3%81%95%e3%81%84%e3%81%93-%e3%81%84%e3%81%84%e3%82%88%e3%81%ad%e3%81%88%e3%81%a3%e3%81%a1%e3%81%aa%e8%ba%ab%e4%bd%93%e6%b8%ac%e5%ae%9aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c933496sample23.jpg","magnet":["30DCFE9F5C6061E5BD314E11AC83619F68DCC7D4"]},{"title":"生肉:[chippai]少女達の茶道ism THE ANIMATION 二席","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e5%b0%91%e5%a5%b3%e9%81%94%e3%81%ae%e8%8c%b6%e9%81%93ism-the-animation-%e4%ba%8c%e5%b8%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c933495sample1.jpg","magnet":["6CDE0D524C7CA7F8C54187577669DE7F434013D8"]},{"title":"2016年12月里番预告【多图】","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b412%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a%e3%80%90%e5%a4%9a%e5%9b%be%e3%80%91/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8dz6h29uej312l0lrgnl.jpg","magnet":null},{"title":"[Sakurato字幕组]2016年11月合集","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b411%e6%9c%88%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161030220142.jpg","magnet":["7A8623B9D716985FE955DF06E6BF9A1258CA9696"]},{"title":"[桜都字幕组][メリー・ジェーン]都市伝説シリーズ 其の参 八尺さん[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c927151sample17.jpg","magnet":["998C2BB11416A99FF546C8E1F0F4044505C5FD50"]}][{"title":"[桜都字幕组][QueenBee]僕らのセックス1[いのまる]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queenbee%e5%83%95%e3%82%89%e3%81%ae%e3%82%bb%e3%83%83%e3%82%af%e3%82%b91%ef%bc%bb%e3%81%84%e3%81%ae%e3%81%be%e3%82%8b%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161030221500.jpg","magnet":["49CF944900F54C69BAB2A15BEA9BB0D1869A40D3"]},{"title":"[桜都字幕组][ピンクパイナップル]八尺八話快樂巡り(はちしゃくはちわけらくめぐり)~異形怪奇譚~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%85%ab%e5%b0%ba%e5%85%ab%e8%a9%b1%e5%bf%ab%e6%a8%82%e5%b7%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c922421sample2.jpg","magnet":["4A69E44E9C5521EA2929B8869CF140E7C201993B"]},{"title":"[桜都字幕组][ZIZ]OVA 君の魔名はリナ・ウィッチ アイドルのファミリア","link":"http://www.llss.cool/wp/all/anime/zizova-%e5%90%9b%e3%81%ae%e9%ad%94%e5%90%8d%e3%81%af%e3%83%aa%e3%83%8a%e3%83%bb%e3%82%a6%e3%82%a3%e3%83%83%e3%83%81-%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%ae%e3%83%95%e3%82%a1%e3%83%9f%e3%83%aa/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1fa82mxdnxgj30uu0hc78k.jpg","magnet":["3AD764EF6E13FFB44A7F4B91E3E0DD237983296E"]},{"title":"[少女映畫]南小鳥 警官","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab%e5%8d%97%e5%b0%8f%e9%b3%a5-%e8%ad%a6%e5%ae%98/","img":"http://ww4.sinaimg.cn/large/8c007b5cjw1fa70rrsv8ij21kw11xguc.jpg","magnet":["8EEFE9B028F851CC827FEEEB51CBDE2CB0FE0673"]},{"title":"[桜都字幕组][鈴木みら乃]飼育×彼女 天使の変貌編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e5%a4%89%e8%b2%8c-%e7%b7%a8/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1fa81ttfjd8j30uu0hcn1a.jpg","magnet":["F5DF026160942C75BC8C04B6A4C65F80255D3302"]},{"title":"[桜都字幕组][ピンクパイナップル]PRETTY×CATION 2 THE ANIMATION #1 二人の休日[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abprettyxcation-2-the-animation-%ef%bc%831-%e4%ba%8c%e4%ba%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c924006table2.jpg","magnet":["683A344910B48D208F68FC3635E7CB8B6A83E200"]},{"title":"[桜都字幕组][PoRO]JKとエロコンビニ店長 言いなり卑潤JK・結衣~桃尻参発、破瓜弐秒[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e8%a8%80%e3%81%84%e3%81%aa%e3%82%8a%e5%8d%91%e6%bd%a4jk/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c925024sample3.jpg","magnet":["AEEAE68BA50802789FE62DEA1B867D06249BFB06"]},{"title":"生肉: [ピンクパイナップル] 八尺八話快樂巡り ~異形怪奇譚~ THE ANIMATION 第一話 「八尺様」 Hachishaku Hachiwa Keraku Meguri vol.1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a-%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%85%ab%e5%b0%ba%e5%85%ab%e8%a9%b1%e5%bf%ab%e6%a8%82%e5%b7%a1%e3%82%8a-%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c922421sample2.jpg","magnet":["5094B486FD41854BFCEB144D95DDB3D1DC3F3D21"]},{"title":"生肉: [メリー・ジェーン] 都市伝説シリーズ 其の参 八尺さんToshi Densetsu Series vol. 3 NO WATERMARK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a-%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c927151sample17.jpg","magnet":["60F9167B863AB905C9A914F28158E1CD5D8C15AC"]}][{"title":"生肉:[ピンクパイナップル] PRETTYxCATION 2 THE ANIMATION #1「二人の休日」2 NO WATERMARK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-prettyxcation-2-the-animation-%ef%bc%831%e3%80%8c%e4%ba%8c%e4%ba%ba%e3%81%ae%e4%bc%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c924006table2.jpg","magnet":["A0A2AADE7DB4C230CBCB88EED725F6443E90E582"]},{"title":"生肉:[鈴木みら乃 petit] 飼育×彼女 天使の変貌編 Shiiku x Kanojo 3 NO WATERMARK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-petit-%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e5%a4%89%e8%b2%8c%e7%b7%a8-shiiku-x-kanojo-3-no/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c924928sample15.jpg","magnet":["AD5E4F2F3754CDAF507121FAA9FC69C19F7AF5C4"]},{"title":"生肉: [ZIZ] 君の魔名はリナ・ウィッチ アイドルのファミリア – Kimi no Mana wa Rina Witch- Episode","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a-ziz-%e5%90%9b%e3%81%ae%e9%ad%94%e5%90%8d%e3%81%af%e3%83%aa%e3%83%8a%e3%83%bb%e3%82%a6%e3%82%a3%e3%83%83%e3%83%81-%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%ae%e3%83%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c931518table3.jpg","magnet":["3CBC1A26C4D7EC149674C4147C101AEFE9E1538C"]},{"title":"生肉:[PoRO] JKとエロコンビニ店長 言いなり卑潤JK・結衣~桃尻参発、破瓜弐秒◆~ – JK to Ero Konbini Tenchou – Episode 3","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aporo-jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e8%a8%80%e3%81%84%e3%81%aa%e3%82%8a%e5%8d%91%e6%bd%a4jk%e3%83%bb%e7%b5%90/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c925024sample3.jpg","magnet":["79E5BCE5001B4976692B52EA46433CC8F19AD5C0"]},{"title":"[せるふぃっしゅ] ヤれる子!電車エッチ #02 留学生はオタク女子 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-02-%e7%95%99%e5%ad%a6%e7%94%9f%e3%81%af%e3%82%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1fa2an6k8gwj20qo0f00u6.jpg","magnet":["[01]0d30627d7e831dd8629690666ff12e7a815645e9","[02]1ee997734ad91d474cfebde125f1c14af6eba4fb","[CG]f64207776468433bb3c028464f7fbc8087bfeb51"]},{"title":"无名司机个人汉化:[せるふぃっしゅ] ヤれる子!電車エッチ #01 純情そうな〇学生","link":"http://www.llss.cool/wp/all/anime/%e6%97%a0%e5%90%8d%e5%8f%b8%e6%9c%ba%e4%b8%aa%e4%ba%ba%e6%b1%89%e5%8c%96%ef%bc%9a%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%e9%9b%bb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f9qt1aw1wdj20qo0f0q4h.jpg","magnet":["D1F630BCA8C501E0EB9D4D3B1A9A29BC6A5042BE"]},{"title":"[夜桜字幕组]2016年10月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b410%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","magnet":["B6FDF8F9964970DA59ED948836E27BDCDED6A491","134E4D3B20343059D8108158489027EBDFA61724","8D2685B3981156764E6FF06218F4C81119B77CB6","7223A6041C44B61E8376AF7375C3C0B0DA5F429A","FD8956E8A5DBD7421C8BB50D3A1B756ADA280734","24F1F1FD77621A2D8702","43227F8EA04FD1928E7D"]},{"title":"[桜都字幕组][メリー・ジェーン]アマカノ 高社紗雪編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e9%ab%98%e7%a4%be%e7%b4%97%e9%9b%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c923219sample1.jpg","magnet":["601C7BA2C00FDCACD1971B2DD351974C4A02D244"]},{"title":"生肉[メリー・ジェーン]アマカノ 高社紗雪編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e9%ab%98%e7%a4%be%e7%b4%97%e9%9b%aa%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/11/c923219sample2.jpg","magnet":["21A2C17CAA42D11D6804125D2F928572044A33B8"]}][{"title":"[少女映畫] 命运石之门-牧瀨紅莉棲","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e5%91%bd%e8%bf%90%e7%9f%b3%e4%b9%8b%e9%97%a8-%e7%89%a7%e7%80%a8%e7%b4%85%e8%8e%89%e6%a3%b2/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f9s0kdkct8j21kw11xwlp.jpg","magnet":["1f87bf336463436d93ff00079022784e82034f2b"]},{"title":"[せるふぃっしゅ] ヤれる子!電車エッチ #01 純情そうな〇学生","link":"http://www.llss.cool/wp/all/anime/%e3%81%9b%e3%82%8b%e3%81%b5%e3%81%83%e3%81%a3%e3%81%97%e3%82%85-%e3%83%a4%e3%82%8c%e3%82%8b%e5%ad%90%e9%9b%bb%e8%bb%8a%e3%82%a8%e3%83%83%e3%83%81-01-%e7%b4%94%e6%83%85%e3%81%9d%e3%81%86%e3%81%aa/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f9qt1aw1wdj20qo0f0q4h.jpg","magnet":["[MOV]0d30627d7e831dd8629690666ff12e7a815645e9","[CG]f64207776468433bb3c028464f7fbc8087bfeb51"]},{"title":"[少女映畫] 時崎狂三 插畫靈裝","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e6%99%82%e5%b4%8e%e7%8b%82%e4%b8%89-%e6%8f%92%e7%95%ab%e9%9d%88%e8%a3%9d/","img":"http://ww4.sinaimg.cn/large/8c007b5cjw1f9phosfh8ij21kw2db4mp.jpg","magnet":["3ECEC89E5CE34A18513FC62D5FBD049CF2A9F9CD"]},{"title":"[みポZ] とりま、行為。5 (1-5合集)","link":"http://www.llss.cool/wp/all/anime/%e3%81%bf%e3%83%9dz-%e3%81%a8%e3%82%8a%e3%81%be%e3%80%81%e8%a1%8c%e7%82%ba%e3%80%825-1-5%e5%90%88%e9%9b%86/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f9ny0n5emfj20fk0bomz5.jpg","magnet":["[5]86bed7a75b0c722e617dcf5920fa87242fd05782","[4]b0b65daf19325bf78eda156f79f066c2fac6335c","173ff3969078b2e54ace6e8aedc971643e24934c"]},{"title":"【脸肿字幕组】[chippai]せいかつ指導!! Anime Edition ― しの・みかん・れん ―[附前作]","link":"http://www.llss.cool/wp/all/anime/chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e-anime-edition-%e2%80%95-%e3%81%97%e3%81%ae%e3%83%bb%e3%81%bf%e3%81%8b%e3%82%93%e3%83%bb%e3%82%8c%e3%82%93-%e2%80%95%e9%99%84%e5%89%8d/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1f9k11a3heyj30uu0hc79n.jpg","magnet":["A0E00C02C33461D7E58EA21E1BB1F8B45D9E3070"]},{"title":"更正:[桜都字幕组][脸肿字幕组][BOOTLEG]飯塚先輩×ブレザー ―姉キュン!より― THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84bootleg%e9%a3%af%e5%a1%9a%e5%85%88%e8%bc%a9x%e3%83%96%e3%83%ac%e3%82%b6%e3%83%bc-%e2%80%95%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f9jxfchwc7j30uu0hcn0z.jpg","magnet":["8ACA371D2456059764E0D8E0A39611D17817EEE3","DC516E64D9FB27B2500E6B38D5AD7882EB102B26"]},{"title":"[桜都字幕组][chippai]せいかつ指導!! Anime Edition ― しの・みかん・れん","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e%ef%bc%81%ef%bc%81-anime-edition-%e2%80%95-%e3%81%97%e3%81%ae%e3%83%bb%e3%81%bf%e3%81%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c927917sample16.jpg","magnet":["A0E00C02C33461D7E58EA21E1BB1F8B45D9E3070"]},{"title":"生肉:[chippai]せいかつ指導!! Anime Edition ― しの・みかん・れん","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e%ef%bc%81%ef%bc%81-anime-edition-%e2%80%95-%e3%81%97%e3%81%ae%e3%83%bb%e3%81%bf%e3%81%8b%e3%82%93%e3%83%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c927917sample16.jpg","magnet":["5EC517871CF9DBF50CF3A7421F719A6032B8A0F7"]},{"title":"生肉:[BOOTLEG]飯塚先輩×ブレザー ―姉キュン!より― THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9abootleg%e9%a3%af%e5%a1%9a%e5%85%88%e8%bc%a9x%e3%83%96%e3%83%ac%e3%82%b6%e3%83%bc-%e2%80%95%e5%a7%89%e3%82%ad%e3%83%a5%e3%83%b3%ef%bc%81%e3%82%88%e3%82%8a%e2%80%95-the/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ%E5%9B%BE%E7%89%8720161030220142.jpg","magnet":["81D494D6DB659DF94DBE95C021F5D0328515C268"]}][{"title":"[少女映畫] 忍野忍","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e5%bf%8d%e9%87%8e%e5%bf%8d/","img":"http://ww4.sinaimg.cn/large/8c007b5cjw1f9ges0njhij21kw11xtko.jpg","magnet":["247DE55E2E940D27772FE5B1EBE90AA5F6D067EC","247DE55E2E940D27772FE5B1EBE90AA5F6D067EC"]},{"title":"[少女映畫] 佐倉千代","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e4%bd%90%e5%80%89%e5%8d%83%e4%bb%a3/","img":"http://ww1.sinaimg.cn/large/8c007b5cjw1f9etx8vu9uj21kw11xgsk.jpg","magnet":["76E2ECCDAD1A3C10921019D5394C468478B7C3D7"]},{"title":"[少女映畫] 時崎狂三","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e6%99%82%e5%b4%8e%e7%8b%82%e4%b8%89/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f9bscum3kwj21kw11xdoo.jpg","magnet":["445d34cee5c9c3c476d9fff64e896a2238701659"]},{"title":"2016年11月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b411%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161030220142.jpg","magnet":null},{"title":"2016年10月里番合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b410%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c923794table3.jpg","magnet":["4B79EE6456CD9A5F19D904ECF025496C82EA9C1E"]},{"title":"[桜都字幕组][ピンクパイナップル]ヌーディストビーチに修学旅行で!! THE ANIMATION 第2話[附前作]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%8c%e3%83%bc%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%93-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c919219table2.jpg","magnet":["7012A087A6692F4DAB00B65C330C39E135EF4AA0"]},{"title":"[桜都字幕组][Collaboration Works]妹とその友人がエロすぎて俺の股間がヤバイ 黒髪ロングでぺたんこ胸なツンデレ妹「海羽」編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e5%a6%b9%e3%81%a8%e3%81%9d%e3%81%ae%e5%8f%8b%e4%ba%ba%e3%81%8c%e3%82%a8%e3%83%ad%e3%81%99%e3%81%8e%e3%81%a6%e4%bf%ba%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c920296sample5.jpg","magnet":["3D7451EE8471B04CA6EEE04B0D86A15895C255EA"]},{"title":"[PoRO]おいでよ! 私立ヤリま×り学園 「潔癖会長・ミラ ~ハメ濡らし妄想天下」","link":"http://www.llss.cool/wp/all/anime/poro%e3%81%8a%e3%81%84%e3%81%a7%e3%82%88%ef%bc%81-%e7%a7%81%e7%ab%8b%e3%83%a4%e3%83%aa%e3%81%bex%e3%82%8a%e5%ad%a6%e5%9c%92-%e3%80%8c%e6%bd%94%e7%99%96%e4%bc%9a%e9%95%b7%e3%83%bb%e3%83%9f/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1f99m187qdfj30ut0h8gn0.jpg","magnet":["71A3347555BDD979D7D633E836D26B53215555AD"]},{"title":"【少女映畫】Ayase Eli(绚濑绘理)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab%e3%80%91ayase-eli%e7%bb%9a%e6%bf%91%e7%bb%98%e7%90%86/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f99k64noftj21kw11xn61.jpg","magnet":["6955d76f9ecbc7fe1eea3bd7114c45a100a9b60e"]}][{"title":"[MY PICO/Boku no Pico/ぼくのぴこ][三作合集]","link":"http://www.llss.cool/wp/all/anime/my-picoboku-no-pico%e3%81%bc%e3%81%8f%e3%81%ae%e3%81%b4%e3%81%93%e4%b8%89%e4%bd%9c%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f94wodk2xxj215o0jc45n.jpg","magnet":["7C17F1B2523C585A188B5157AE301087B5BBDAD1"]},{"title":"[少女映畫] 五河琴里","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%95%ab-%e4%ba%94%e6%b2%b3%e7%90%b4%e9%87%8c/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f8xxfe7spzj20zk0npt9x.jpg","magnet":["d137df4c479fb39f0d83eaecae6a57c01e05ad36"]},{"title":"[EDGE]フェラハメりっぷす Throat.1","link":"http://www.llss.cool/wp/all/anime/edge%e3%83%95%e3%82%a7%e3%83%a9%e3%83%8f%e3%83%a1%e3%82%8a%e3%81%a3%e3%81%b7%e3%81%99-throat-1/","img":"https://i.imgur.com/1vJtez5.jpg","magnet":["D4637FA6017BAF9B66B25F469BDDC42AC98CB85A"]},{"title":"[Queen Bee]PINKERTON VOL.2 [モノリノ]","link":"http://www.llss.cool/wp/all/anime/queen-beepinkerton-vol-2-%e3%83%a2%e3%83%8e%e3%83%aa%e3%83%8e/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8ti5oeyfmj30uo0h9jso.jpg","magnet":["ED90A86CCFB4275124F1E6ADBF2A353CF8E1AA51"]},{"title":"【幻樱字幕组】【魔装学园HxH Masou Gakuen HxH】【SP01】【BDrip】【GB_MP4】【1920X1080】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b9%bb%e6%a8%b1%e5%ad%97%e5%b9%95%e7%bb%84%e3%80%91%e3%80%90%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh-masou-gakuen-hxh%e3%80%91%e3%80%90sp01%e3%80%91%e3%80%90bdrip%e3%80%91%e3%80%90gb_mp4/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161012013257.jpg","magnet":["1095C017A8BCE15BAFF84241239F6DCAC7D4A5FA"]},{"title":"[BOOTLEG]コワレモノ:璃沙 PLUS THE ANIMATION[附前作+漫画]","link":"http://www.llss.cool/wp/all/anime/bootleg%e3%82%b3%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e%ef%bc%9a%e7%92%83%e6%b2%99-plus-the-animation%e9%99%84%e5%89%8d%e4%bd%9c%e6%bc%ab%e7%94%bb/","img":"http://ww1.sinaimg.cn/large/0060lm7Tgw1f8nfovez9bj30ur0h83zr.jpg","magnet":["9C64105586809B78D877167764064E4933EB493C"]},{"title":"[chippai]せいかつ指導!! Anime Edition ― あい・さくら・なな ―","link":"http://www.llss.cool/wp/all/anime/chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e-anime-edition-%e2%80%95-%e3%81%82%e3%81%84%e3%83%bb%e3%81%95%e3%81%8f%e3%82%89%e3%83%bb%e3%81%aa%e3%81%aa-%e2%80%95/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f8nfjh7c6xj30uq0h63zl.jpg","magnet":["B208CD4068DD3DC9EB141162C12E7E3B29D582AB"]},{"title":"【生肉】[BOOTLEG]コワレモノ璃沙 PLUS THE ANIMATION – Kowaremono Risa Plus The Animation – Episode 1","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89bootleg%e3%82%b3%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e%e7%92%83%e6%b2%99-plus-the-animation-kowaremono-risa-plus-the-animation-episode-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/c923794table3.jpg","magnet":["5D461E07F09F89DE95DD3D112A16F0B6A8CE1AF5"]},{"title":"[生肉][chippai]せいかつ指導!! Anime Edition ― あい・さくら・なな","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89chippai%e3%81%9b%e3%81%84%e3%81%8b%e3%81%a4%e6%8c%87%e5%b0%8e%ef%bc%81%ef%bc%81-anime-edition-%e2%80%95-%e3%81%82%e3%81%84%e3%83%bb%e3%81%95%e3%81%8f%e3%82%89%e3%83%bb%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/10/QQ图片20161010003057.jpg","magnet":["1302D2D20FE661B84366416D2C4849497C25CC7F"]}][{"title":"[メリー・ジェーン]小女ラムネ 第1話 ちーちゃんと秘密のアルバイト","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e5%b0%8f%e5%a5%b3%e3%83%a9%e3%83%a0%e3%83%8d-%e7%ac%ac1%e8%a9%b1-%e3%81%a1%e3%83%bc%e3%81%a1%e3%82%83%e3%82%93%e3%81%a8/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f8m2332937j30sc0fvq49.jpg","magnet":["74C2AEF5F3FBC38840CCA92D9C8EF9CC763FCDA4"]},{"title":"[夜桜字幕组]2016年9月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b49%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://i.imgur.com/4pKfVvC.jpg","magnet":["71DB5B4C6699483EA99DAEC9BEA65FFD9798268C","99264481F38F5F8902221ECE4D669E02D532A825","6AC1D2C07CCF14111E10435390E4306B2A19A50E","7B2191884864EA9024EB0B04857D2DE84F17A4A5","26A1D4C8F76F66C760B29CB20342B97FF72ADED9","D1739977149E43F82B808"]},{"title":"[メリー・ジェーン]今からアタシ…… 上巻 初めてを捧げます","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e4%bb%8a%e3%81%8b%e3%82%89%e3%82%a2%e3%82%bf%e3%82%b7-%e4%b8%8a%e5%b7%bb-%e5%88%9d%e3%82%81%e3%81%a6/","img":"http://ww3.sinaimg.cn/large/0060lm7Tgw1f8dz6jolguj312m0lqjts.jpg","magnet":["133158B137368B33B3312FBD9BB938BAB196D2D4"]},{"title":"[ピンクパイナップル]妻みぐい3 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%a6%bb%e3%81%bf%e3%81%90%e3%81%843-the-animation/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f8dqk46strj312p0lqq4o.jpg","magnet":["DCFDA5487C5C464149BCFA3EBD10836E07FAF838"]},{"title":"2016年9月 各组作品合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b49%e6%9c%88-%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f8eb4ix1d9j21hc0xc1hc.jpg","magnet":["SG6L5PK3JAFQAV3EKZ5M2SNWQLOVP7ZW"]},{"title":"[PoRO]JKとエロコンビニ店長 ハメ拗ねJK・栞 ~扱いてしゃぶるレジの下[付前作]","link":"http://www.llss.cool/wp/all/anime/porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e3%83%8f%e3%83%a1%e6%8b%97%e3%81%adjk%e3%83%bb%e6%a0%9e-%ef%bd%9e%e6%89%b1%e3%81%84%e3%81%a6%e3%81%97/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1f8cv3930ggj312q0lqgok.jpg","magnet":["6F05D8036D6ABDAD8D3D9988B7A09BA549127AA5"]},{"title":"[鈴木みら乃]飼育×彼女 天使の調教編[付前作]","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e8%aa%bf%e6%95%99%e7%b7%a8%e4%bb%98%e5%89%8d%e4%bd%9c/","img":"http://ww4.sinaimg.cn/large/0060lm7Tgw1f8c6m8xp9uj312r0lrju4.jpg","magnet":["A5D92C442230EC3611E4B62D48DD971C600AA938"]},{"title":"[生肉] [160930] [PoRO] JKとエロコンビニ店長~扱いてしゃぶるレジの下","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-160930-poro-jk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7%ef%bd%9e%e6%89%b1%e3%81%84%e3%81%a6%e3%81%97%e3%82%83%e3%81%b6%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/09/c913264sample1.jpg","magnet":["7U4Q2G4P2UCMZ4XXPOAG5JQLTM3GLPD6"]},{"title":"[生肉][160930][ピンクパイナップル]妻みぐい3","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89160930%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%a6%bb%e3%81%bf%e3%81%90%e3%81%843/","img":"http://llss.cool/wp/wp-content/uploads/2016/09/QQ图片20161001025625.png","magnet":["50031AC3D5F73D4493B4CE7F4FB83332BB6A6E45"]}][{"title":"[生肉][160930][鈴木みら乃]飼育×彼女 天使の調教 編 无水印版","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89160930%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e8%aa%bf%e6%95%99-%e7%b7%a8-%e6%97%a0%e6%b0%b4/","img":"http://llss.cool/wp/wp-content/uploads/2016/09/c913263table1.jpg","magnet":["5281ADE79597AEF117D6430E67E86D8E34267B4D"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][12]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh12/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["71116A01C164153023D1CA789CAB222F19B56496"]},{"title":"[][Yuri Majyo(百合魔女)] -酒吞童子- Cosplay","link":"http://www.llss.cool/wp/all/anime/yuri-majyo%e7%99%be%e5%90%88%e9%ad%94%e5%a5%b3-%e9%85%92%e5%90%9e%e7%ab%a5%e5%ad%90-cosplay/","img":"http://ww1.sinaimg.cn/large/8c007b5cjw1f81e6s997gj20xc0m8aeb.jpg","magnet":["edd5c6234c3f94ad060232485aec0d13c0ee2b45"]},{"title":"[にじいろばんび] えっちなふたりっ娘","link":"http://www.llss.cool/wp/all/anime/%e3%81%ab%e3%81%98%e3%81%84%e3%82%8d%e3%81%b0%e3%82%93%e3%81%b3-%e3%81%88%e3%81%a3%e3%81%a1%e3%81%aa%e3%81%b5%e3%81%9f%e3%82%8a%e3%81%a3%e5%a8%98/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1f872eut7fgj20zk0k00y7.jpg","magnet":["811dc40e4b2dd92677b49a7c8023bee9b09f50c1"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][11][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh11%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["ac1e7c2a5d89a9732c23f6f22855cf1944cfeb62"]},{"title":"[桜都字幕组][ばにぃうぉ~か~]JKビッチに搾られたい #2 ヤリマン彼女","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9ejk%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160819012940.png","magnet":["DC78D40F02891CDD96829ADD27580A689E9FB1EA","][171003][opiumud]Yoshiwara"]},{"title":"[Queen Bee]放課後Initiation VOL.2[附前作]","link":"http://www.llss.cool/wp/all/anime/queen-bee%e6%94%be%e8%aa%b2%e5%be%8cinitiation-vol-2%e9%99%84%e5%89%8d%e4%bd%9c/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f7i01t8m96j312n0lpq79.jpg","magnet":["1287B6FB21D0F1E437934AC52C4A9906BAD12907"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][10][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh10%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["550BFA50B84EA75FBAFD9203C92FD18CCFFBB918"]},{"title":"[少女映画][nonsummerjack (non)]My GOD ANUBIS","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbnonsummerjack-nonmy-god-anubis/","img":"http://ww1.sinaimg.cn/large/8c007b5cgw1f7huvckmnoj21e00xcal7.jpg","magnet":["655FBA026AE13D629A7AA93"]}][{"title":"[桜都字幕组]少女達の茶道ism THE ANIMATION 一席","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e5%b0%91%e5%a5%b3%e9%81%94%e3%81%ae%e8%8c%b6%e9%81%93ism-the-animation-%e4%b8%80%e5%b8%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/unnamed-file.jpg","magnet":["8D9D8CD51CFEB397F321BEDED09E2D005E3E7267"]},{"title":"[桜都字幕组][chippai]300円のおつきあい Anime Edition","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai300%e5%86%86%e3%81%ae%e3%81%8a%e3%81%a4%e3%81%8d%e3%81%82%e3%81%84-anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c923792sample2.jpg","magnet":["84AD3DEAAA953AA18FCCE0779E8888C025A3007D"]},{"title":"[桜都字幕组][QueenBee]放課後Initiation VOL.2[荒井啓]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queenbee%e6%94%be%e8%aa%b2%e5%be%8cinitiation-vol-2%ef%bc%bb%e8%8d%92%e4%ba%95%e5%95%93%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/3ZtQ4Kn.jpg","magnet":["1287B6FB21D0F1E437934AC52C4A9906BAD12907"]},{"title":"[夜桜字幕组]2016年8月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b48%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://www.imghost.eu/images/2016/09/01/_20160901150401.jpg","magnet":["22CD510572BE1760B177AB5FAF19114765DAB084","B2CE83F1223C57CED43CDC6C32F00EAF2DA88375","618A57DB0478D73CDB66C5AFE78F29092E074204","742ED29708BB1510C8A9B45C398726D617A8E3AC","DBAE133440883CB27EBEFA62D043CC9364C4BA11","A0C3042A563A3603A4A3","A8C0FFE082D16B132CED","Fow]Beastly_Bacchanalia["]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][09][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh09%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["472A5093F1EF262FC125C14F372BCA40DCA5CD24"]},{"title":"2016年9月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b49%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c923792sample2.jpg","magnet":null},{"title":"【少女映画】[Sex Syndrome] Sex Syndrome 13 G∀TE ゴスロリ神様ロゥリィ","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-syndrome-sex-syndrome-13-%ef%bd%87%e2%88%80%ef%bd%94%ef%bd%85-%e3%82%b4%e3%82%b9%e3%83%ad%e3%83%aa%e7%a5%9e%e6%a7%98%e3%83%ad%e3%82%a5/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f77mvvs6yyj20zk0npn2a.jpg","magnet":["750a79758ed92b997c6ca348dca5b6fb4497b610"]},{"title":"[桜都字幕组]2016年8月合集","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b48%e6%9c%88%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912703sample1.jpg","magnet":["6101B4C96492AD3D9F8D44973956DC48A6B5C99E"]},{"title":"[桜都字幕组][ピンクパイナップル]円交少女 ~陸上部ゆっきーの場合~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%86%86%e4%ba%a4%e5%b0%91%e5%a5%b3-%ef%bd%9e%e9%99%b8%e4%b8%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c850501package.jpg","magnet":["D3C1B4B1F770C3EF7ACF01F191E4D30503BAC6ED"]}][{"title":"[桜都字幕组][PoRO]真・秘湯めぐり 若女将の慇懃~躊躇い捲る前身頃","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e7%9c%9f%e3%83%bb%e7%a7%98%e6%b9%af%e3%82%81%e3%81%90%e3%82%8a-%e8%8b%a5%e5%a5%b3%e5%b0%86%e3%81%ae%e6%85%87%e6%87%83%ef%bd%9e%e8%ba%8a%e8%ba%87/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160827003351.jpg","magnet":["0D1F2EF9D714827888C3AE409820AE62C04E005B"]},{"title":"生肉:円交少女 ~陸上部ゆっきーの場合~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e5%86%86%e4%ba%a4%e5%b0%91%e5%a5%b3-%ef%bd%9e%e9%99%b8%e4%b8%8a%e9%83%a8%e3%82%86%e3%81%a3%e3%81%8d%e3%83%bc%e3%81%ae%e5%a0%b4%e5%90%88%ef%bd%9e-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c850501package.jpg","magnet":["F58FE63308A7FEDB27F9ED8AACA09C60FFE153D4"]},{"title":"生肉:真・秘湯めぐり 若女将の慇懃~躊躇い捲る前身頃","link":"http://www.llss.cool/wp/all/anime/%e7%9c%9f%e3%83%bb%e7%a7%98%e6%b9%af%e3%82%81%e3%81%90%e3%82%8a-%e8%8b%a5%e5%a5%b3%e5%b0%86%e3%81%ae%e6%85%87%e6%87%83%ef%bd%9e%e8%ba%8a%e8%ba%87%e3%81%84%e6%8d%b2%e3%82%8b%e5%89%8d%e8%ba%ab%e9%a0%83/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160827003351.jpg","magnet":["FD94B300F5B45917025E563F87B4E6997B1A6B0B"]},{"title":"[桜都字幕组][鈴木みら乃]飼育×彼女 天使の拘束 編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e9%a3%bc%e8%82%b2x%e5%bd%bc%e5%a5%b3-%e5%a4%a9%e4%bd%bf%e3%81%ae%e6%8b%98%e6%9d%9f-%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c897846sample11.jpg","magnet":["90BACABA7282E5E8FA80EBA325510AD12B9ABE5C"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][08][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh08%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["20CD7071BE877C274861CCCB5AA3B094CA2BCCDC"]},{"title":"[熟肉][ばにぃうぉ~か~]OVA JKビッチに搾られたい #1 ヤリマンJK","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-jk%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%831-%e3%83%a4%e3%83%aa%e3%83%9e/","img":"http://ww4.sinaimg.cn/large/659503cagw1f70rt0jz7xj20yg0jd0u0.jpg","magnet":["F006EF0DDCB7A8BFF503B099BA00E9CA78073ACF"]},{"title":"生肉:OVA JKビッチに搾られたい #1 ヤリマンJK","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aova-jk%e3%83%93%e3%83%83%e3%83%81%e3%81%ab%e6%90%be%e3%82%89%e3%82%8c%e3%81%9f%e3%81%84-%ef%bc%831-%e3%83%a4%e3%83%aa%e3%83%9e%e3%83%b3jk/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/QQ图片20160819012940.png","magnet":["F006EF0DDCB7A8BFF503B099BA00E9CA78073ACF"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][07][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh07%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/%E9%AD%94%E8%A3%9D%E5%AD%B8%E5%9C%92H%C3%97H.jpg","magnet":["38ab4926f262fe3232c09809fa5a9126830a925a"]},{"title":"[少女映画][Sex Syndrome] 雷姆 Cospaly 3部 合集","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbsex-syndrome-%e9%9b%b7%e5%a7%86-cospaly-3%e9%83%a8-%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1f6sbmmtpp4j20ku0bqq61.jpg","magnet":["9077C10E546DCDAB9987EFA91EE10D487AB8CB72","5037A258381D5128DACD61E908C1C3C5BFC8B76D","889598aa6916aa5a5b62b4d1f27bf09bafba8f6d"]}][{"title":"FLOWERS -Le volume sur autonme-(秋篇)","link":"http://www.llss.cool/wp/all/anime/flowers-le-volume-sur-autonme-%e7%a7%8b%e7%af%87/","img":"http://ww4.sinaimg.cn/mw690/8c007b5cjw1f1wqkqdaslj21hc0xcafj.jpg","magnet":["192123F4FF31D696158D51990EE37767008C15CC","9289f422c409ca07a006da1c2872c9b7fb619ed4"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][06][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh06%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/53EvCBz.jpg","magnet":["64ac42894ed7f36560086913859d86b93d85a250"]},{"title":"[夜桜字幕组]2016年7月3D作品合集","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b47%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://www.imghost.eu/images/2016/08/06/mkv_20160806_224034.976.jpg","magnet":["006]Beastly_Bacchanalia","61CEAACFB738D3C891914EDE74B12D2E7E905CE1","D5817DB905C5A8C2F37F8DAD3C227268A6A8664E","A853369D8388681D5C4F9A7FDB9894295ED75DFB","2D41C07583BFAE990DD85101AF7C066694FBC577","466994DAECAC2790397C0B9EEC0D8B5A384DB015","7E50148B57AB73A0AB698"]},{"title":"[桜都字幕组]:[Animan]Misuzu イケナイコトAnime Edition","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aanimanmisuzu-%e3%82%a4%e3%82%b1%e3%83%8a%e3%82%a4%e3%82%b3%e3%83%88anime-edition-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912703sample1.jpg","magnet":["E47B6474F0538B421FFFB4378305E7B26055C576"]},{"title":"生肉:[Animan]Misuzu イケナイコトAnime Edition","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9aanimanmisuzu-%e3%82%a4%e3%82%b1%e3%83%8a%e3%82%a4%e3%82%b3%e3%83%88anime-edition/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912703sample31.jpg","magnet":["035DF291E758A16D9FFA22A0599CDE6E30366AA7"]},{"title":"生肉:[chippai]なま LO Re ふらちもの THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%aa%e3%81%be-lo-re-%e3%81%b5%e3%82%89%e3%81%a1%e3%82%82%e3%81%ae-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2016/08/c912702table2.jpg","magnet":["6395F353DF9A8F0B2724A81EA7EF9E6DF02DF7D3"]},{"title":"[少女映画][Sex Friend] Sex Friend 24「甲鉄嬢のハメドリ」【甲铁城的卡巴内里】","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbsex-friend-sex-friend-24%e3%80%8c%e7%94%b2%e9%89%84%e5%ac%a2%e3%81%ae%e3%83%8f%e3%83%a1%e3%83%89%e3%83%aa%e3%80%8d%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f6j544cj73j20ku0dwaci.jpg","magnet":["1d2e7e04ff6586fe8411424bfcc3227ea8a68cda"]},{"title":"[@OZ] MIX FIGHT 小悪魔サーバント・バトルリョナ陵辱","link":"http://www.llss.cool/wp/all/anime/oz-mix-fight-%e5%b0%8f%e6%82%aa%e9%ad%94%e3%82%b5%e3%83%bc%e3%83%90%e3%83%b3%e3%83%88%e3%83%bb%e3%83%90%e3%83%88%e3%83%ab%e3%83%aa%e3%83%a7%e3%83%8a%e9%99%b5%e8%be%b1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f6i4w06cnzj20j904vwgh.jpg","magnet":["46e165f70f30b488649212fc1910bdd557862f74"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][05][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh05%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/53EvCBz.jpg","magnet":["77WUDXVG6E5OAFHCRGFZJPRCJZCFEN6B"]}][{"title":"2016年7月 各组作品合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b47%e6%9c%88-%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/8c007b5cjw1f6d2q12yfxj218g0vk4hs.jpg","magnet":["UBA5TGSEPIUNASGZZFQUGXAH57HNNOZH","YYKZRZK34FEBPP6CZIFSXS75SZ7GN2CU"]},{"title":"桜都字幕组[Pink Pineapple] PRETTY×CATION THE ANIMATION#2 姉妹の初恋 PRETTY×CATION THE ANIMATION – Episode 2","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89pink-pineapple-prettyxcation-the-animation%ef%bc%832-%e5%a7%89%e5%a6%b9%e3%81%ae%e5%88%9d%e6%81%8b-prettyxcation-the-animation-episode-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/c903701sample1.jpg","magnet":["E7AA34914AD574F31F98CCBB5351ACBE8DEAFA9D","52A31558CACF4221B683E50C41E878493F1B2B6D","[collaborationworks]"]},{"title":"桜都字幕组 [ZIZ] ボクの弥生さん Boku no Yayoi-San – Episode 1-2【有2集】","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-ziz-%e3%83%9c%e3%82%af%e3%81%ae%e5%bc%a5%e7%94%9f%e3%81%95%e3%82%93-boku-no-yayoi-san-episode-3-4%e3%80%90%e6%9c%892%e9%9b%86%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160730012642.png","magnet":["F51AB4320BAFC923CC64FFF39BAD1D428690269A","D6EE789304F88855D15A783B252AABE817BA6ADF"]},{"title":"桜都字幕组 [PoRO] 黒の教室 「潮ミルクJK搾り~馴染み蔑む授業散姦」","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-poro-%e9%bb%92%e3%81%ae%e6%95%99%e5%ae%a4-%e3%80%8c%e6%bd%ae%e3%83%9f%e3%83%ab%e3%82%afjk%e6%90%be%e3%82%8a%ef%bd%9e%e9%a6%b4%e6%9f%93%e3%81%bf%e8%94%91%e3%82%80%e6%8e%88%e6%a5%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/unnamed-file.png","magnet":["CD8563B39C83B6224A509B8AF70384B372941FC0","BBA363085A7E26D5390317806B93A5559E154A29"]},{"title":"桜都字幕组 [collaborationworks] バカな妹を利口にするのは俺の××だけな件について コスプレ爛漫!! 御津井 芭華◆ 一番好きなのは、お兄ちゃん Baka na Imouto o Rikou ni Suru no","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89-collaborationworks-%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aexx%e3%81%a0%e3%81%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/c903807sample1.jpg","magnet":["FB6CE4F1C54815A89E14DB2C919BBF990CC278D8","06DC67B26FCF474A829394F419E986920DB268FD"]},{"title":"[脸肿字幕组][魔装学园HxH][04][简繁外挂][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e8%84%b8%e8%82%bf%e5%ad%97%e5%b9%95%e7%bb%84%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh04%e7%ae%80%e7%b9%81%e5%a4%96%e6%8c%82avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/53EvCBz.jpg","magnet":["25d5bfaceb7360045b6408f35da882fd9b1a97d3"]},{"title":"[魔装学园HxH][03]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh03/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160718235436.png","magnet":["20b00c5b1009f55a66712dbf50d722d434104132"]},{"title":"[桜都字幕组][Queen Bee]PINKERTON VOL.1[モノリノ]","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queen-beepinkerton-vol-1%ef%bc%bb%e3%83%a2%e3%83%8e%e3%83%aa%e3%83%8e%ef%bc%bd/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160723143615.png","magnet":["AF9C2E77A76F1055598083F68C1F8185967EA59A"]},{"title":"[魔穗字幕组&LittleBakas!][魔装学园HxH][01-02][GB&BIG5][AVC 720P]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84littlebakas%e9%ad%94%e8%a3%85%e5%ad%a6%e5%9b%adhxh02gbbig5avc-720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/c912211package.jpg","magnet":["D496C2E754AE0F10D739DEF78ABE784B63106508","95D3C2463E40E95A17A4C4628158AF36ADC70782"]}][{"title":"[FOW-007]Scarlet Nights Episode 01[中字]【蝙蝠侠同人小丑女哈莉·奎茵】","link":"http://www.llss.cool/wp/all/anime/fow-007scarlet-nights-episode-01%e4%b8%ad%e5%ad%97%e3%80%90%e8%9d%99%e8%9d%a0%e4%be%a0%e5%90%8c%e4%ba%ba%e5%b0%8f%e4%b8%91%e5%a5%b3%e5%93%88%e8%8e%89%c2%b7%e5%a5%8e%e8%8c%b5%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/01_20160716020125.jpg","magnet":["D5817DB905C5A8C2F37F8"]},{"title":"[Studio Fow]Beastly_Bacchanalia[中字]","link":"http://www.llss.cool/wp/all/anime/studio-fowbeastly_bacchanalia%e4%b8%ad%e5%ad%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/FOW-006Beastly_Bacchanalia_20160709154631.jpg","magnet":["61CEAACFB738D3C891914","006]Beastly_Bacchanalia[BIG5","][171003][opiumud]Yoshiwara"]},{"title":"[夜桜]2016年6月3D作品合集[含不知火舞]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c2016%e5%b9%b46%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/QQ图片20160705234307.png","magnet":["97F29B9DF500B349F352FF32F23BA54674E8CFBA","016CB65357EDD1F5F372F5CD9AE391971F15C345","CC9E9D23ECE85D559840834568BEC6A95FC29E3D","A958D59152E2AA360181E45D354D977D5456E360","kamimachi_20160705010814","7A997AA0232009192F68C3FB26B0F0190F334168","EBFF5D92B61BEA2F7DFECBFF99A6021C0C899F27","CC3996DC0590384AF3A8CF"]},{"title":"[脸肿字幕组][chippai] ちっちゃなおなか -恵未ちゃんてさ","link":"http://www.llss.cool/wp/all/anime/%e8%84%b8%e8%82%bf%e5%ad%97%e5%b9%95%e7%bb%84chippai-%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e6%81%b5%e6%9c%aa%e3%81%a1%e3%82%83%e3%82%93%e3%81%a6%e3%81%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c910356sample12-1.jpg","magnet":["FA1D3854FCBA6ACC882E711A17FB2C8829B1D201"]},{"title":"[おてもと屋] 夏のひめごと。/ 凛 -Rin- (字幕)","link":"http://www.llss.cool/wp/all/game/%e3%81%8a%e3%81%a6%e3%82%82%e3%81%a8%e5%b1%8b-%e5%a4%8f%e3%81%ae%e3%81%b2%e3%82%81%e3%81%94%e3%81%a8%e3%80%82-%e5%87%9b-rin-%e5%ad%97%e5%b9%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/07/7TUvFvk.jpg","magnet":["f82c79bc9cd3e05a18c5bcc6db57f955e760506c","10db11d3226a43ba71077d303d7090a9d0438601","194caa65ac1199ea03241d89e2f578e44054fb91"]},{"title":"[EDGE(エッジ)]ドロップアウト ~性処理便器・七条鈴香~","link":"http://www.llss.cool/wp/all/anime/edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%83%89%e3%83%ad%e3%83%83%e3%83%97%e3%82%a2%e3%82%a6%e3%83%88-%ef%bd%9e%e6%80%a7%e5%87%a6%e7%90%86%e4%be%bf%e5%99%a8%e3%83%bb%e4%b8%83%e6%9d%a1/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1f5yvhh75j20zi0jxwfz.jpg","magnet":["1445C7349F55E66AADB75DE968413F92E3B80FEC"]},{"title":"[PoRO]JKとエロコンビニ店長 小生意気蓮っ葉JK・栞~啜り画策ハメ千切り~","link":"http://www.llss.cool/wp/all/anime/porojk%e3%81%a8%e3%82%a8%e3%83%ad%e3%82%b3%e3%83%b3%e3%83%93%e3%83%8b%e5%ba%97%e9%95%b7-%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e8%93%ae%e3%81%a3%e8%91%89jk%e3%83%bb%e6%a0%9e%ef%bd%9e%e5%95%9c%e3%82%8a/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f1doe0eok5j20zf0jw76o.jpg","magnet":["B8B41F73D2C9E24F3E27214B94A0019510631E67"]},{"title":"[PoRO petit ] 狙われた女神天使エンゼルティアー ~守った人間達に裏切られて~ 「憂鬱女教師・涼音 ~護りハメられチェーン肉棒~」(1-4)","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e7%8b%99%e3%82%8f%e3%82%8c%e3%81%9f%e5%a5%b3%e7%a5%9e%e5%a4%a9%e4%bd%bf%e3%82%a8%e3%83%b3%e3%82%bc%e3%83%ab%e3%83%86%e3%82%a3%e3%82%a2%e3%83%bc-%ef%bd%9e%e5%ae%88%e3%81%a3%e3%81%9f/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f1ald4mjwlj20zk0k077m.jpg","magnet":["d1a4af3e74d4fa3a6e2e1b71f27eaa7e5c323a05"]},{"title":"[ばにぃうぉ~か~] 巨乳人妻女教師催眠 #2 奈緒子とゆい (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9e-%e5%b7%a8%e4%b9%b3%e4%ba%ba%e5%a6%bb%e5%a5%b3%e6%95%99%e5%b8%ab%e5%82%ac%e7%9c%a0-2-%e5%a5%88%e7%b7%92%e5%ad%90%e3%81%a8/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f18b32najsj20zk0jx0u3.jpg","magnet":["1e71f6ca5e6ae41ec350fc28b8de0e396ae03a00"]}][{"title":"【少女映画】Sex Friend 18「無◯◯のハメドリ・ワールド」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-friend-18%e3%80%8c%e7%84%a1%e2%97%af%e2%97%af%e3%81%ae%e3%83%8f%e3%83%a1%e3%83%89%e3%83%aa%e3%83%bb%e3%83%af%e3%83%bc%e3%83%ab%e3%83%89/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f172m0jzs1j20j60ardhx.jpg","magnet":["05909FCC429404BD51BEE9E705A0A57665B36359"]},{"title":"【少女映画】Sex Friend 17「ほたるさんの割れ目にうまい棒を入れようとしたがしかし。」","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-friend-17%e3%80%8c%e3%81%bb%e3%81%9f%e3%82%8b%e3%81%95%e3%82%93%e3%81%ae%e5%89%b2%e3%82%8c%e7%9b%ae%e3%81%ab%e3%81%86%e3%81%be%e3%81%84/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f110vnudbzj21bk0qrgpt.jpg","magnet":["04D9538C66FFE7519EB43A388C3CE67C606A442A","48FD16E553B511A61EDD79880175019F113971A2"]},{"title":"[Queen Bee] SECRET JOURNEY VOL.1","link":"http://www.llss.cool/wp/all/anime/queen-bee-secret-journey-vol-1/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f0yzkcyuxnj20jq0b4gpk.jpg","magnet":["8D8FDC1C7A5DA33783A894E4582285D6941B9702"]},{"title":"[メリー・ジェーン] アマカノ 上林聖編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e4%b8%8a%e6%9e%97%e8%81%96%e7%b7%a8/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f0tks7op00j20zg0jydhv.jpg","magnet":["D0E8319C3E0A83A7167E2CA7610E41366E8C878F"]},{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【11-12完】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9011-12%e5%ae%8c%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["1ac4e4f682fb961619c162c411df16cdf9964562","f03e0e77d480e330dbd02dc137334bdfdcfedd72"]},{"title":"[chippai] Aサイズ クラスメイト Anime Edition 1限目继续阅读 →","link":"http://www.llss.cool/wp/all/anime/chippai-a%e3%82%b5%e3%82%a4%e3%82%ba-%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a1%e3%82%a4%e3%83%88-anime-edition-1%e9%99%90%e7%9b%ae/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f0r8ibwi6bj20zi0jxdhp.jpg","magnet":["3F615237FA33B3D40E97D8660094947197C4BAED","3F615237FA33B3D40E97D8660094947197C4BAED"]},{"title":"[夜桜字幕组]2016年6月3D作品合集[BIG5+GB]继续阅读 →","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b46%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f0oatct1cij20m80gogmj.jpg","magnet":["0603E4535CFB2E9762EE0FC40AC79DDA3175F5E6","D2A5910F5C8B0233FFC534FFEA02E01B6FAA4C45","FA78789EE9BDEF3BCF2302CD528F9CD38517339B","7B7DCACCE5B1452697319873110E55E54B87562F","5542C1351C1A55CAF97A3C16D66E4BC4DC4B3916","GB]4bbec30dcaca12517ab84e","][171003][opiumud]Yoshiwara","0603E4535CFB2E9762EE0FC40AC79DDA3175F5E6","D2A5910F5C8B0233FFC534FFEA02E01B6FAA4C45","FA78789EE9BDEF3BCF2302CD528F9CD38517339B","7B7DCACCE5B1452697319873110E55E54B87562F","5542C1351C1A55CAF97A3C16D66E4BC4DC4B3916","GB]4bbec30dcaca12517ab84e"]},{"title":"[ピンクパイナップル] ランス01 光をもとめて THE ANIMATION 第3話「ランス、断つ!!」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a9%e3%83%b3%e3%82%b901-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8%e3%82%81%e3%81%a6-the-animation-%e7%ac%ac3/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f0in2g4axxj20hs0aidk2.jpg","magnet":["527e197ca59e1fd63f1a773cc2ef6c241b41c234"]},{"title":"[ばにぃうぉ~か~]OVA 巨乳人妻女教師催眠#1","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e5%b7%a8%e4%b9%b3%e4%ba%ba%e5%a6%bb%e5%a5%b3%e6%95%99%e5%b8%ab%e5%82%ac%e7%9c%a0%ef%bc%831/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f0fgjo68pzj20hs0a00vg.jpg","magnet":["9af87ec7a807151f513b1bb6b8914cb18cf12901"]}][{"title":"[メリー・ジェーン] 都市伝説シリーズ 其の壱 トイレのHanakoさん","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae%e5%a3%b1-%e3%83%88%e3%82%a4/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f0c3sy4kdxj20zk0k00uy.jpg","magnet":["d1ab6df8972a233251aea07a00087d87da4b8426"]},{"title":"[ZIZ] 対魔忍ユキカゼ #2 凜子、陥落 (1-2)","link":"http://www.llss.cool/wp/all/anime/ziz-%e5%af%be%e9%ad%94%e5%bf%8d%e3%83%a6%e3%82%ad%e3%82%ab%e3%82%bc-2-%e5%87%9c%e5%ad%90%e3%80%81%e9%99%a5%e8%90%bd-%ef%bc%881-2%ef%bc%89/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f00d68k65rj20zk0k076u.jpg","magnet":["[1]319b38808af3f658964ac6bf5e50502382318b8e","[2]183e70720a20f8ee968ed250cae8edda1285aba0"]},{"title":"[fruit] Hな体験は神社でθ","link":"http://www.llss.cool/wp/all/anime/fruit-h%e3%81%aa%e4%bd%93%e9%a8%93%e3%81%af%e7%a5%9e%e7%a4%be%e3%81%a7%ce%b8/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ezy2skua8jj20zk0k0tbp.jpg","magnet":["6d8065bcad4baee02f3b7d3d1f1b7b44bd6dad76"]},{"title":"[マーマレード★スター] と○ぶるだいあり~・ぴーち ムービー版","link":"http://www.llss.cool/wp/all/anime/%e3%83%9e%e3%83%bc%e3%83%9e%e3%83%ac%e3%83%bc%e3%83%89%e2%98%85%e3%82%b9%e3%82%bf%e3%83%bc-%e3%81%a8%e2%97%8b%e3%81%b6%e3%82%8b%e3%81%a0%e3%81%84%e3%81%82%e3%82%8a%ef%bd%9e%e3%83%bb%e3%81%b4/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ezwt04kjhwj20hs0dcdhy.jpg","magnet":["2a20c7cb21689f77ff9f25ce0c66cf994d17b702"]},{"title":"[EDGE] 魔獣浄化少女ウテア(1-2) soul.2 ミズキの鏡 发表于 2016年1月10日 由 多啦H萌","link":"http://www.llss.cool/wp/all/anime/edge-%e9%ad%94%e7%8d%a3%e6%b5%84%e5%8c%96%e5%b0%91%e5%a5%b3%e3%82%a6%e3%83%86%e3%82%a21-2-soul-2-%e3%83%9f%e3%82%ba%e3%82%ad%e3%81%ae%e9%8f%a1-%e5%8f%91%e8%a1%a8%e4%ba%8e-2016%e5%b9%b41%e6%9c%8810/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ezumi3axunj20zl0k278x.jpg","magnet":["2b3ac08e77bf588e25d3dafad440d87ebb8052f1"]},{"title":"[夜桜字幕组]作品合集 [BIG5+GB]【古墓丽影、生化危机等】","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86-big5gb/","img":"http://ww4.sinaimg.cn/mw690/8c007b5cgw1ezse63knvpj20zk0k0dhg.jpg","magnet":["1633f120a712c99fccbb[","GB]9aba3ae5b445820e2d51"]},{"title":"[ピンクパイナップル] 神曲のグリモワール THE ANIMATION 第二章「強欲の魔導書」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%a5%9e%e6%9b%b2%e3%81%ae%e3%82%b0%e3%83%aa%e3%83%a2%e3%83%af%e3%83%bc%e3%83%ab-the-animation-%e7%ac%ac%e4%ba%8c/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezr5ns7gykj20zk0k0jwp.jpg","magnet":["951ec7ea227c4353a12cf14aad71212149c22b80"]},{"title":"[メリー・ジェーン] アノコトイイコト(1-2) 第2話 そうだ妹と練習しよう。","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%82%a2%e3%83%8e%e3%82%b3%e3%83%88%e3%82%a4%e3%82%a4%e3%82%b3%e3%83%88%ef%bc%881-2%ef%bc%89-%e7%ac%ac2%e8%a9%b1-%e3%81%9d/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ezpxruomdyj20o00dcdgi.jpg","magnet":["c1247b2b9a8d7b57ba00f4e549d14330e89a45ae"]},{"title":"[BOOTLEG] コワレモノ:璃沙 THE ANIMATION","link":"http://www.llss.cool/wp/all/comic/bootleg-%e3%82%b3%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e%ef%bc%9a%e7%92%83%e6%b2%99-the-animation/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezld4lx89mj20zk0k0772.jpg","magnet":["d9e4ca6f29481db89b5cc9741b325ecdbc2408e4"]}][{"title":"[Collaboration Works] えろまんが! Hもマンガもステップアップ♪ 描いて描かれてステップアップ!? 綾部はるるを召し上がれ編","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e3%81%88%e3%82%8d%e3%81%be%e3%82%93%e3%81%8c%ef%bc%81-h%e3%82%82%e3%83%9e%e3%83%b3%e3%82%ac%e3%82%82%e3%82%b9%e3%83%86%e3%83%83%e3%83%97%e3%82%a2%e3%83%83%e3%83%97%e2%99%aa/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezhqxvfkghj20zk0k078e.jpg","magnet":["11f77d44d2de9e8feb1b62d360d05fdb8578509d"]},{"title":"2016年7月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c910356sample12-1.jpg","magnet":null},{"title":"[桜都字幕组][GOLD BEAR]魔将の贄3 前編 ~白濁の海に沈む淫辱の隷姫~","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84gold-bear%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e6%b7%ab/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160529213534.png","magnet":["NHFKAZACLSLBOBVYFBY3QXV2ILDV3VKB","[collaborationworks]"]},{"title":"【生肉】[GOLD BEAR]魔将の贄3 前編 ~白濁の海に沈む淫辱の隷姫~+特典","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91gold-bear%e9%ad%94%e5%b0%86%e3%81%ae%e8%b4%843-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ae%e6%b5%b7%e3%81%ab%e6%b2%88%e3%82%80%e6%b7%ab%e8%be%b1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160529213534.png","magnet":null},{"title":"[桜都字幕组][ピンクパイナップル]ランス01 光をもとめて THE ANIMATION 第4話「そして、王道へ…」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%a9%e3%83%b3%e3%82%b901-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c901000sample1.jpg","magnet":["00EB83EBD106CDAC5B68F7FCD2D1B955A8D42294"]},{"title":"[桜都字幕组][PoRO]らぶ2Quad 「妹巫女ぷりん・ほのか~拡げて弾く未開のレッスン」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e3%82%89%e3%81%b62quad-%e3%80%8c%e5%a6%b9%e5%b7%ab%e5%a5%b3%e3%81%b7%e3%82%8a%e3%82%93%e3%83%bb%e3%81%bb%e3%81%ae%e3%81%8b%ef%bd%9e%e6%8b%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c897847table1.jpg","magnet":["FEE2CD0303DECCE7491D54829A07E1A2D136E168","[collaborationworks]"]},{"title":"[桜都字幕组][Collaboration Works]バカな妹を利口にするのは俺の××だけな件について 子猫も大好き!! 御津井 芭華にゃんこな姿でぺろぺろしちゃうぞ編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aex-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c903577table1.jpg","magnet":["704CAAA1223810EC1B42C79AE0B98A190E25A633","[collaborationworks]"]},{"title":"[PoRO petit] 鬼父 Refresh「小生意気変態フレンドのビーチびっち」(1-10)","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e9%ac%bc%e7%88%b6-refresh%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e5%a4%89%e6%85%8b%e3%83%95%e3%83%ac%e3%83%b3%e3%83%89%e3%81%ae%e3%83%93%e3%83%bc%e3%83%81%e3%81%b3%e3%81%a3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ezed3o6gxuj20jq0b4gny.jpg","magnet":["30932493234ece059e3ce0b5eee6a02fabb3c604"]},{"title":"[erozuki] OVA ツンプリ","link":"http://www.llss.cool/wp/all/anime/erozuki-ova-%e3%83%84%e3%83%b3%e3%83%97%e3%83%aa/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ezd0vngaatj20zk0k042g.jpg","magnet":["d0d2eaeae673615d50bd310688b75a135040bdc1"]}][{"title":"[夜桜字幕组]2015年11月3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842015%e5%b9%b411%e6%9c%883d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ez0ks0yqvij20qo0f0gnp.jpg","magnet":["dc75c442463749e9b2eab"]},{"title":"孔中窥得真理之貌 1-13 汉化全集+OVA","link":"http://www.llss.cool/wp/all/comic/%e5%ad%94%e4%b8%ad%e7%aa%a5%e5%be%97%e7%9c%9f%e7%90%86%e4%b9%8b%e8%b2%8c-1-13-%e6%b1%89%e5%8c%96%e5%85%a8%e9%9b%86ova/","img":"http://ww1.sinaimg.cn/mw690/8c007b5cjw1eyz3oxkpbzj21kw28uqmg.jpg","magnet":["3KU63BYD6PY3DHVS2OCZN3DNQCOVMYWE","F2QVE2Q6EQQ7L7KX7XT7FQ6IT7HXUFRU"]},{"title":"[151113][Studio Fow]Kunoichi 2[中字]","link":"http://www.llss.cool/wp/all/anime/151113studio-fowkunoichi-2%e4%b8%ad%e5%ad%97/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eyxb8m5gzcj20zk0k00uc.jpg","magnet":["3f98f8204aed94dff46a5718a41717ff1f17a0cf"]},{"title":"[yosino] 村","link":"http://www.llss.cool/wp/all/anime/yosino-%e6%9d%91/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eyvvo4wwkwj20za0js79z.jpg","magnet":["612ef07a46befa359a98789fea1c1335b986c42c"]},{"title":"[WHITE BEAR] 輪姦媚薬中毒 後編 (1-2) ~逃げ場無し!1428人の生徒全員にSEXされる令嬢沙也香~","link":"http://www.llss.cool/wp/all/anime/white-bear-%e8%bc%aa%e5%a7%a6%e5%aa%9a%e8%96%ac%e4%b8%ad%e6%af%92-%e5%be%8c%e7%b7%a8-1-2-%ef%bd%9e%e9%80%83%e3%81%92%e5%a0%b4%e7%84%a1%e3%81%97%ef%bc%811428%e4%ba%ba%e3%81%ae%e7%94%9f%e5%be%92/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eyus3movohj20zk0k0tbm.jpg","magnet":["b732f4f86099c2585472e631accb3749813152d6"]},{"title":"[メリー・ジェーン ] 闘技場の戦姫~another story~ 上巻 すべてを捧げた戦姫","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e9%97%98%e6%8a%80%e5%a0%b4%e3%81%ae%e6%88%a6%e5%a7%ab%ef%bd%9eanother-story%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e3%81%99%e3%81%b9/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eytkp09zalj20np0dctat.jpg","magnet":["6bcb77ceef07c95bda450a3296ae9ff38d915ee9"]},{"title":"[BOOTLEG] 娘ワレモノ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/bootleg-%e5%a8%98%e3%83%af%e3%83%ac%e3%83%a2%e3%83%8e-the-animation/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eyq65sy462j20zk0k0di5.jpg","magnet":["043dc907c625c20d3f1f6f325dc649448b7c1b2d"]},{"title":"[サークルトリビュート ]奥様は元ヤリマン (1-2)第二巻","link":"http://www.llss.cool/wp/all/anime/%e3%82%b5%e3%83%bc%e3%82%af%e3%83%ab%e3%83%88%e3%83%aa%e3%83%93%e3%83%a5%e3%83%bc%e3%83%88-%e5%a5%a5%e6%a7%98%e3%81%af%e5%85%83%e3%83%a4%e3%83%aa%e3%83%9e%e3%83%b3-%ef%bc%881-2%ef%bc%89%e7%ac%ac/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eynwnp6g13j20jq0b40wo.jpg","magnet":["260f948d820eab8962b432b4719e438b1d336795"]},{"title":"[ピンクパイナップル ] 炎の孕ませもっと!発育っ!身体測定2 THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e3%82%82%e3%81%a3%e3%81%a8%ef%bc%81%e7%99%ba%e8%82%b2%e3%81%a3/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eymmnlrrhnj20zk0k0q75.jpg","magnet":["2c536991a12625440d1bdd0fb013e3791524f507"]}][{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【10】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9010%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["88a9df4284d5f5bf9ba8258bfa0bffc53ed6cd64"]},{"title":"[桜都字幕组][ばにぃうぉ~か~]OVA 恥辱の制服 #2 三人目の獲物 (双语字幕)","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e6%81%a5%e8%be%b1%e3%81%ae%e5%88%b6%e6%9c%8d-2-%e4%b8%89%e4%ba%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/QQ图片20160619001548.png","magnet":["1112D63E7950B393D65BF1D3DBCB6348FB082314"]},{"title":"[桜都字幕组][Queen Bee]放課後Initiation VOL.1","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queen-bee%e6%94%be%e8%aa%b2%e5%be%8cinitiation-vol-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ%E5%9B%BE%E7%89%8720160529213012.png","magnet":["F2B77C37980624D3EC95595498B693B9EB84710D","[collaborationworks]"]},{"title":"[魔人]euphoria (1-5)~地下の戦慄ゲーム、地上のスカトロ地獄。笑う黒幕は……幼なじみ!?編~","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%baeuphoria-1-5%ef%bd%9e%e5%9c%b0%e4%b8%8b%e3%81%ae%e6%88%a6%e6%85%84%e3%82%b2%e3%83%bc%e3%83%a0%e3%80%81%e5%9c%b0%e4%b8%8a%e3%81%ae%e3%82%b9%e3%82%ab%e3%83%88%e3%83%ad%e5%9c%b0/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eykfw3km19j20zk0k0gnx.jpg","magnet":["28d271a9fa3502d4fc16b493ab612ee8bb50c648"]},{"title":"[PoRO] 螺旋遡行のディストピア (1-2) 「絡まり合う触手・美羽 ~搾られ捻るふたなり巨乳~」继续阅读 →","link":"http://www.llss.cool/wp/all/anime/poro-%e8%9e%ba%e6%97%8b%e9%81%a1%e8%a1%8c%e3%81%ae%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%94%e3%82%a2-1-2-%e3%80%8c%e7%b5%a1%e3%81%be%e3%82%8a%e5%90%88%e3%81%86%e8%a7%a6%e6%89%8b%e3%83%bb/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eyguvp7m2jj20zk0k0td1.jpg","magnet":["a3c0d8c1bdb41462031b9520a164d5282909e24d","a3c0d8c1bdb41462031b9520a164d5282909e24d"]},{"title":"[GOLD BEAR]ケダモノ(家族)たちの住む家で (1-2) ~勝 編~ 大嫌いな最低家族と彼女との寝取られ同居生活","link":"http://www.llss.cool/wp/all/anime/gold-bear%e3%82%b1%e3%83%80%e3%83%a2%e3%83%8e%ef%bc%88%e5%ae%b6%e6%97%8f%ef%bc%89%e3%81%9f%e3%81%a1%e3%81%ae%e4%bd%8f%e3%82%80%e5%ae%b6%e3%81%a7-1-2-%ef%bd%9e%e5%8b%9d-%e7%b7%a8%ef%bd%9e-%e5%a4%a7/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ey8ue5wv8sj20zk0k0wh8.jpg","magnet":["c5291f47261c019296354ca24f63e5534579272a"]},{"title":"[メリー・ジェーン]Brandish 第2话 勇者退治しちゃいます (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3brandish-%e7%ac%ac2%e8%af%9d-%e5%8b%87%e8%80%85%e9%80%80%e6%b2%bb%e3%81%97%e3%81%a1%e3%82%83%e3%81%84%e3%81%be%e3%81%99/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/Sk0gP.jpg","magnet":["58b1d398f65ccb51826a6873b8c125863b70fa12"]},{"title":"[メリー・ジェーン] My妹~小悪魔なAカップ~ 下巻 お兄ちゃんに夢中だよ","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-my%e5%a6%b9%ef%bd%9e%e5%b0%8f%e6%82%aa%e9%ad%94%e3%81%aaa%e3%82%ab%e3%83%83%e3%83%97%ef%bd%9e-%e4%b8%8b%e5%b7%bb-%e3%81%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/6SipW.jpg","magnet":["23fd9ac0aee6fb45acc150824e4f0b5815f4fa2a"]},{"title":"[メリー・ジェーン] てにおはっ!(1-2) ~女の子だってホントはえっちだよ?~ 下巻 女友達と、いつでもどこでも","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%a6%e3%81%ab%e3%81%8a%e3%81%af%e3%81%a3%ef%bc%811-2-%ef%bd%9e%e5%a5%b3%e3%81%ae%e5%ad%90%e3%81%a0%e3%81%a3%e3%81%a6/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/mkbSJr5.jpg","magnet":["B3WSTJ6CWYV7BZKKCG3DKBYO3DE2BDND"]}][{"title":"[メリー・ジェーン] 虜ノ契~ 家族のために身体を差し出す姉と妹~下巻 姉妹の絆 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e8%99%9c%e3%83%8e%e5%a5%91%ef%bd%9e-%e5%ae%b6%e6%97%8f%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ab%e8%ba%ab%e4%bd%93%e3%82%92/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/QKbwDBz.jpg","magnet":["4392c6ac15f70cc9abc7f465c96cab2b0bea5ed6","4a9ac5e350357d77d069c6491f1c6740ffe6344e"]},{"title":"[Queen Bee]OVA 生膣ひゃくぱぁせんと!固結びのシンパ くぱぁ(1-3)附漫画","link":"http://www.llss.cool/wp/all/comic/queen-beeova-%e7%94%9f%e8%86%a3%e3%81%b2%e3%82%83%e3%81%8f%e3%81%b1%e3%81%81%e3%81%9b%e3%82%93%e3%81%a8%ef%bc%81%e5%9b%ba%e7%b5%90%e3%81%b3%e3%81%ae%e3%82%b7%e3%83%b3%e3%83%91-%e3%81%8f%e3%81%b1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eykhtxi7ugj20el0a20ty.jpg","magnet":["904b9340a05dba458fc8cd3b97a2f061eb1b8ba1"]},{"title":"[Queen Bee] たゆたゆ #1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%9f%e3%82%86%e3%81%9f%e3%82%86-%ef%bc%831/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/63Fli1i.jpg","magnet":["573a9698d1692113addac4443478be21074ecc4d"]},{"title":"[Queen Bee] 絶頂ロケット 発射1発目","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%b5%b6%e9%a0%82%e3%83%ad%e3%82%b1%e3%83%83%e3%83%88-%e7%99%ba%e5%b0%841%e7%99%ba%e7%9b%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/QQ图片20160619010343.png","magnet":["43120ac7d22072dad6cab19fb5407e4db0f2912c","19798d1ce3606e85b911e584cba79cb7b1636590"]},{"title":"[Queen Bee] たゆたゆ #2 (1-2)","link":"http://www.llss.cool/wp/all/anime/httphacg-lawpwp-contentuploads201606k1ttumu-jpg/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/EKXdatG.jpg","magnet":["c7a08a0c116b20c6f8030a144df9684a94c01b8f"]},{"title":"[Queen Bee] 絶頂ロケット 発射2発目 (1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%b5%b6%e9%a0%82%e3%83%ad%e3%82%b1%e3%83%83%e3%83%88-%e7%99%ba%e5%b0%842%e7%99%ba%e7%9b%ae-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/k1TtUMu.jpg","magnet":["243f54459c5aeb40cba08f5499d5530e48f690ad","08a1f45837611d7b890fd036449713639c00e54e"]},{"title":"[@OZ]舞 リョナ陵辱の輪舞曲(ロンド)[中字]","link":"http://www.llss.cool/wp/all/anime/oz%e8%88%9e-%e3%83%aa%e3%83%a7%e3%83%8a%e9%99%b5%e8%be%b1%e3%81%ae%e8%bc%aa%e8%88%9e%e6%9b%b2%e3%83%ad%e3%83%b3%e3%83%89%e4%b8%ad%e5%ad%97/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1f4zi6wvadgj20q30eo0wi.jpg","magnet":["A65842DB189E26AE618990940"]},{"title":"[seismic] 狼少女といっしょ","link":"http://www.llss.cool/wp/all/game/seismic-%e7%8b%bc%e5%b0%91%e5%a5%b3%e3%81%a8%e3%81%84%e3%81%a3%e3%81%97%e3%82%87/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f4xc1b59kuj20xp0ivdi3.jpg","magnet":["ad3322e328b03d274d4dd40bb6078ceccf7e8189","\\Liru\\Content\\XML\\cut\\"]},{"title":"[中字]極楽看護+ほすぴたる[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e4%b8%ad%e5%ad%97%e6%a5%b5%e6%a5%bd%e7%9c%8b%e8%ad%b7%e3%81%bb%e3%81%99%e3%81%b4%e3%81%9f%e3%82%8bbig5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f4v8bb4pu7j20m80goq3m.jpg","magnet":["2FF32F23BA54674E8CFBA"]}][{"title":"【少女映画】Sex Friend 系列合集 1-18","link":"http://www.llss.cool/wp/all/comic/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91sex-friend-%e7%b3%bb%e5%88%97%e5%90%88%e9%9b%86-1-18/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f4twch9590j20m80go436.jpg","magnet":["05909fcc429404bd51bee9e705a0a57665b36359","04d9538c66ffe7519eb43a388c3ce67c606a442a","f1a42865537a0bb5e56b323f15c490d46517ac11","ef394f0cfdc62b2b1a8a8aa2e445aa1a45eeea51","d8ab45808d6abf5e3f4f79f5b2eea65eead1e19d","6474ec20456b00a193e7792696a705137427132d","f2f293ec6a8599b9f6694b634e2a948234bb3499","720734f6fe732563cf2400b268213f4e2791aca6","ecbd58344e19ff911f758e345882e745956c8026","749c7155c3ba5f5e2ee93f041382be087ca7d83e","e0f1e967637bfbe7d7b6bfa0cfe229ef91e2e466","d925fbb5c1c4c6626b33d75c1971f4ad527ae123","4e127527ffccc5aaf025b62850acfa377a76adfe","609b6a94bb9817ad165de050cca30a8c30e28185","2ebe458a71f48cccbfabb8327b63ae930e67290c","1aea1da84acd1102277eb2a81bde030391af3277","38403af376f62d81ca04a000c16a26a9f490b38e","f298e22509425e493a49d38b8b548b1a6111f449","cd8e01dd5fd1a5960164877f309d62a20a07c19f"]},{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【09】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9009%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":null},{"title":"[EDGE(エッジ)]えなじぃキョーカ!! ヌキサポ編 第2巻[附前作]","link":"http://www.llss.cool/wp/all/anime/edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab%ef%bc%81%ef%bc%81-%e3%83%8c%e3%82%ad%e3%82%b5%e3%83%9d%e7%b7%a8-%e7%ac%ac2/","img":"http://ww2.sinaimg.cn/large/0060lm7Tgw1f4r7nmdjntj30ze0jw764.jpg","magnet":["8193437D8314176A3A60471C4794614EB4A0F6D2"]},{"title":"【生肉】[EDGE](エッジ) えなじぃキョーカ!! ヌキサポ編 第2巻","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%94%9f%e8%82%89%e3%80%91edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89-%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab%ef%bc%81%ef%bc%81-%e3%83%8c%e3%82%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c893656table2.jpg","magnet":["28CEDCDE1B273087FAA1DD50BC25F7AE4FFE27BF"]},{"title":"[Queen Bee] たゆたゆ #3 (1-3)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%9f%e3%82%86%e3%81%9f%e3%82%86-%ef%bc%833-1-3/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/1nqX07p.jpg","magnet":["B23D58CC3CC06573122EC6B3395EE973EC98DCBA"]},{"title":"[Queen Bee] イマコシステム I ~イマコさんとイチナくん~","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%82%a4%e3%83%9e%e3%82%b3%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0-i-%ef%bd%9e%e3%82%a4%e3%83%9e%e3%82%b3%e3%81%95%e3%82%93%e3%81%a8%e3%82%a4%e3%83%81%e3%83%8a%e3%81%8f%e3%82%93%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/6kvW5Be.jpg","magnet":["8dfa9e025b8bfba072d5b925dea9207c915ea5c5"]},{"title":"[Queen Bee] たゆたゆ #4","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%9f%e3%82%86%e3%81%9f%e3%82%86-%ef%bc%834/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/63Fli1i.jpg","magnet":["B23D58CC3CC06573122EC6B3395EE973EC98DCBA"]},{"title":"[Queen Bee]イマコシステム II ~イマコさんと薬物学編~","link":"http://www.llss.cool/wp/all/anime/queen-bee%e3%82%a4%e3%83%9e%e3%82%b3%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0-ii-%ef%bd%9e%e3%82%a4%e3%83%9e%e3%82%b3%e3%81%95%e3%82%93%e3%81%a8%e8%96%ac%e7%89%a9%e5%ad%a6%e7%b7%a8%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/InozTIw.jpg","magnet":["55DF5335D82E9E78EAEA3A478BFE3668C1BA63E36B"]},{"title":"[Queen Bee] こんなに優しくされたの 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%84%aa%e3%81%97%e3%81%8f%e3%81%95%e3%82%8c%e3%81%9f%e3%81%ae-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/P4Xbppx.jpg","magnet":["18991becdb4ee38a2348500f94f2d29e224c1818fc97"]}][{"title":"[Queen Bee] OVA らぶコロン 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-ova-%e3%82%89%e3%81%b6%e3%82%b3%e3%83%ad%e3%83%b3-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/3fUKVDx.jpg","magnet":["15da5j6861a1fe35874ab3c4aea75f4b700b14hcf2d0c"]},{"title":"[Queen Bee]こんなに優しくされたの 2 (1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%84%aa%e3%81%97%e3%81%8f%e3%81%95%e3%82%8c%e3%81%9f%e3%81%ae-2-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/vxSbHsY.jpg","magnet":["80e75f80d04b8809d7e4fb54b5ee690aa253e894"]},{"title":"[メリー・ジェーン] 乳色吐息 上巻 幼なじみに男を刻め","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e4%b9%b3%e8%89%b2%e5%90%90%e6%81%af-%e4%b8%8a%e5%b7%bb-%e5%b9%bc%e3%81%aa%e3%81%98%e3%81%bf%e3%81%ab%e7%94%b7%e3%82%92/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/ID6Vl6H.jpg","magnet":["1C2A9D60CC535350902C1CCF42D2C2B0A4E2E66C"]},{"title":"[Queen Bee] OVA らぶコロン 2","link":"http://www.llss.cool/wp/all/anime/queen-bee-ova-%e3%82%89%e3%81%b6%e3%82%b3%e3%83%ad%e3%83%b3-2/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1em4ymxtkdwj20np0dcdh3.jpg","magnet":["079397a49aa9b5acfe76ad09ffdbb65b9d5526c0"]},{"title":"[Queen Bee] こんなに優しくされたの 3 (1-3)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%93%e3%82%93%e3%81%aa%e3%81%ab%e5%84%aa%e3%81%97%e3%81%8f%e3%81%95%e3%82%8c%e3%81%9f%e3%81%ae-3-1-3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1emoqc2ih3tj20np0dc3zv.jpg","magnet":["4411def87eff5c40c500ba8707bf56b88fe9f357"]},{"title":"[King Bee] OVA およめさまHONEYDAYS 1","link":"http://www.llss.cool/wp/all/anime/king-bee-ova-%e3%81%8a%e3%82%88%e3%82%81%e3%81%95%e3%81%behoneydays-1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1emxwtv2j1yj20np0dcq4d.jpg","magnet":["e4a29292717b3183db8ae20bcf3ed4bb601e47d2"]},{"title":"[Queen Bee] 穴の奥のいい秘部(ところ) 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a9%b4%e3%81%ae%e5%a5%a5%e3%81%ae%e3%81%84%e3%81%84%e7%a7%98%e9%83%a8%ef%bc%88%e3%81%a8%e3%81%93%e3%82%8d%ef%bc%89-1/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1en9jlk0ez8j20np0dcq4i.jpg","magnet":["12a33a9e8447dc5e32f328946d848990d707fc6a"]},{"title":"[熟肉][chippai]なま LO Re なまけもの","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippai%e3%81%aa%e3%81%be-lo-re-%e3%81%aa%e3%81%be%e3%81%91%e3%82%82%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c898731sample5.jpg","magnet":["ABDC87FECD9F584C4354C9CD1DD2DF18BD572F45"]},{"title":"生肉:[chippai]なま LO Re なまけもの(No Watermark)","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9achippai%e3%81%aa%e3%81%be-lo-re-%e3%81%aa%e3%81%be%e3%81%91%e3%82%82%e3%81%aeno-watermark/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c898731sample5.jpg","magnet":["E22FF1DB1391422E6D00C0D089BF3D5C76A8BFDA"]}][{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【08】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9008%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["7d6ee8a766a2927919394db004afd25407c695ae"]},{"title":"[Queen Bee] えろまめ 1","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%88%e3%82%8d%e3%81%be%e3%82%81-1/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1enhqdzv832j20np0dc409.jpg","magnet":["b470bd52f635677e1846c19f4c2f669b764eadcc"]},{"title":"[Queen Bee]ピスはめ! 3 (1-3) OVA 附漫画","link":"http://www.llss.cool/wp/all/comic/queen-bee%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-3-1-3-ova-%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/4bab3bccjw1enhqx0vok2j20bj07qjtd.jpg","magnet":["E1C129B86999C68F83540FB9035596ED9065E924"]},{"title":"[メリー・ジェーン]My妹~小悪魔なAカップ~ 上巻 お兄ちゃんなんて大嫌い!?","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3my%e5%a6%b9%ef%bd%9e%e5%b0%8f%e6%82%aa%e9%ad%94%e3%81%aaa%e3%82%ab%e3%83%83%e3%83%97%ef%bd%9e-%e4%b8%8a%e5%b7%bb-%e3%81%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/c726673sample1.jpg","magnet":["C2FD96F7F7CCAC699AD18BFF661C542776F65D20"]},{"title":"[Queen Bee] OVA ピスはめ! 6(1-6)","link":"http://www.llss.cool/wp/all/anime/queen-bee-ova-%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-6%ef%bc%881-6%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/JX9QdXa.jpg","magnet":["a14aee45fd546f9be313f086522656b32c4c07a2"]},{"title":"[メリー・ジェーン] 乳色吐息 下巻 妹に兄の威厳を見せつけろ","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e4%b9%b3%e8%89%b2%e5%90%90%e6%81%af-%e4%b8%8b%e5%b7%bb-%e5%a6%b9%e3%81%ab%e5%85%84%e3%81%ae%e5%a8%81%e5%8e%b3%e3%82%92/","img":"http://llss.cool/wp/wp-content/uploads/2016/06/fjjSPoc.jpg","magnet":["9053f9d398031c141a4284160aff9f3d7907ef36"]},{"title":"[魔穗字幕组]2016年5月作品合集","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%842016%e5%b9%b45%e6%9c%88%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/2-1.png","magnet":["762F82884A1E6F3C41DB7B8D49663C44A8DE8C27"]},{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【06-07】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9005-07%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["1e2f47df9e7a7d375ba43b7429e9cb65ac3d45c3","bb726e3e02b454dff899376c75e404cce13c469a"]},{"title":"[Queen Bee]OVA ピスはめ! 5 (1-5)","link":"http://www.llss.cool/wp/all/anime/queen-beeova-%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-5-%ef%bc%881-5%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/UoO5a.jpg","magnet":["dddeb25d0ad21fcfd2a402708f65c9058a2cf0b6"]}][{"title":"[Queen Bee] 穴の奥のいい秘部(ところ)(1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a9%b4%e3%81%ae%e5%a5%a5%e3%81%ae%e3%81%84%e3%81%84%e7%a7%98%e9%83%a8%ef%bc%88%e3%81%a8%e3%81%93%e3%82%8d%ef%bc%89%ef%bc%881-2%ef%bc%89/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1epbi8bomr9j20zk0k0774.jpg","magnet":["aa5862b47f58d68db05692a804907913ee9141d9","adc319aa8744a2f7d8e7f589879c6906f33ab8ac","b259f6b3371b3aab80fcfd80ebd6f364b9f1d2de"]},{"title":"[king Bee] およめさまHONEYDAYS(1-2)[TANA]","link":"http://www.llss.cool/wp/all/anime/king-bee-%e3%81%8a%e3%82%88%e3%82%81%e3%81%95%e3%81%behoneydays%ef%bc%881-2%ef%bc%89tana/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eqh5mxl9pmj20dw08g76c.jpg","magnet":["ff2f7ec055fe85c620323d90cd30c6ee2243a5fe","85fb94d08a00c66961f1946d1590468a6b6c35fc","8424f36d21a879522c380d584415d0a6892d4dc2"]},{"title":"[Queen Bee] えろまめ (1-2)","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%88%e3%82%8d%e3%81%be%e3%82%81-1-2/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eqyev2i8i8j20np0dc75e.jpg","magnet":["2116954f58d9066c1eb868271cb3cc3e19fdbd07","ee0a872c86decf5eb6a587eb7924e572180ddc0c"]},{"title":"[Queen Bee] 純愛まにあっく 1 ~Pure Love Maniac~","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%b4%94%e6%84%9b%e3%81%be%e3%81%ab%e3%81%82%e3%81%a3%e3%81%8f-1-%ef%bd%9epure-love-maniac%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1er9xha6tjej20zk0k0wis.jpg","magnet":["b94514b966896d64cf7fa6018af3b0eb4d967146"]},{"title":"[Queen Bee]ふた部!MIX(1-5) ~ふたなりワールド~","link":"http://www.llss.cool/wp/all/anime/queen-bee%e3%81%b5%e3%81%9f%e9%83%a8%ef%bc%81mix%ef%bc%881-5%ef%bc%89-%ef%bd%9e%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%83%af%e3%83%bc%e3%83%ab%e3%83%89%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1etww741d6vj20zk0k079e.jpg","magnet":["53b5596bc69332cde12aa524298024086531af4c"]},{"title":"[Queen Bee] 私が虜になって犯る (1-2) [井雲泰助]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a7%81%e3%81%8c%e8%99%9c%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e7%8a%af%e3%82%8b-1-2-%e4%ba%95%e9%9b%b2%e6%b3%b0%e5%8a%a9/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ey1tg3rl8nj20zk0k0779.jpg","magnet":["89d49802af551864a5a00b149fc882ab6ccc5258"]},{"title":"[メリー・ジェーン] すぽコン!(1-2)~SPORTS WEAR-COMPLEX~ 下巻 決着!?コーチ争奪戦","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%99%e3%81%bd%e3%82%b3%e3%83%b3%ef%bc%811-2%ef%bd%9esports-wear-complex%ef%bd%9e-%e4%b8%8b%e5%b7%bb-%e6%b1%ba%e7%9d%80/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/JBa8dIc.jpg","magnet":["3ebd9a65c124f68283048c819293a8ae0d11820d"]},{"title":"[Queen Bee]ピスはめ! 4 (1-4) OVA 附漫画","link":"http://www.llss.cool/wp/all/comic/queen-bee%e3%83%94%e3%82%b9%e3%81%af%e3%82%81%ef%bc%81-4-1-4-ova-%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/EaF5H.jpg","magnet":["M3AVQVWPRI4T6K644ZOWWCPUJM754NZR"]},{"title":"[メリー・ジェーン] 夜這いする七人の孕女 (1-2) 下巻 当主の花嫁","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%a4%9c%e9%80%99%e3%81%84%e3%81%99%e3%82%8b%e4%b8%83%e4%ba%ba%e3%81%ae%e5%ad%95%e5%a5%b3-1-2-%e4%b8%8b%e5%b7%bb-%e5%bd%93/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eqfz54atopj20vo0ht75r.jpg","magnet":["a9c27d86b726614fa682fa49c89449a88270039f","587e49d6b4708f0d29792d84314ea3643078f97f","ab3ec5248dc7daf6868d876a5956ee134b28b7b4","821347775343a0b1d29f3ed41bcd647844f79ee3"]}][{"title":"2016年6月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b46%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c898731sample5.jpg","magnet":null},{"title":"[桜都字幕组] [メリー・ジェーン]都市伝説シリーズ 其の弐 ェ呪いのビデオ","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84-%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c893080sample6.jpg","magnet":["88FD7FB1E15169108F7D648676BF762C125CE625"]},{"title":"[桜都字幕组][Collaboration Works]バカな妹を利口にするのは俺の××だけな件イスも大好き!芭華下のお口で頬ゃうぞ編","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aex/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c903577sample16.jpg","magnet":["73185B83805ECF3A4E22E33B255ABEC24D132988","[collaborationworks]"]},{"title":"[桜都字幕组][ピンクパイナップル]ヌーディストビーチに修学旅行で!! THE ANIMATION V2","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%8c%e3%83%bc%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%93/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/1-2.jpg","magnet":["3D3775282951C94D0ABCBA658FACAFBA4F636C88"]},{"title":"[桜都字幕组][PoRO]氷堂伊吹~完璧伊吹会長が拘束ドMな理由~「クールドM・伊吹会長の妄迫溜イキ」","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e6%b0%b7%e5%a0%82%e4%bc%8a%e5%90%b9%ef%bd%9e%e5%ae%8c%e7%92%a7%e4%bc%8a%e5%90%b9%e4%bc%9a%e9%95%b7%e3%81%8c%e6%8b%98%e6%9d%9f%e3%83%89m%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160528160947.png","magnet":["04B7EECDC6C01C0F74553DD061D0CA7F6527CD35"]},{"title":"生肉:[PoRO] 氷堂伊吹 ~完璧伊吹会長が拘束ドMな理由~ 「クールドM・伊吹会長の妄迫溜イキ」 初回限定版","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89poro-%e6%b0%b7%e5%a0%82%e4%bc%8a%e5%90%b9-%ef%bd%9e%e5%ae%8c%e7%92%a7%e4%bc%8a%e5%90%b9%e4%bc%9a%e9%95%b7%e3%81%8c%e6%8b%98%e6%9d%9f%e3%83%89m%e3%81%aa%e7%90%86%e7%94%b1%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ图片20160528160947.png","magnet":["B457D8A45476CD88946973EF574C571DD09C9B86","049D9960837F4BA38395AE6D3020BE22B8F8B27E"]},{"title":"生肉:[Collaboration Works] バカな妹を利口にするのは俺の××だけな件について アイスも大好き!! 御津井芭華 下のお口で頬張っちゃうぞ編","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9acollaboration-works-%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae%e3%81%af%e4%bf%ba%e3%81%aexx%e3%81%a0/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c903577sample16.jpg","magnet":["6F77E0ED44817D47735ED8347093134548A38B2E"]},{"title":"生肉:ヌーディストビーチに修学旅行で!! THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%8c%e3%83%bc%e3%83%87%e3%82%a3%e3%82%b9%e3%83%88%e3%83%93%e3%83%bc%e3%83%81%e3%81%ab%e4%bf%ae%e5%ad%a6%e6%97%85%e8%a1%8c%e3%81%a7-the-animation/","img":"http://llss.cool/wp/wp-content/uploads/2017/05/1-2.jpg","magnet":["6310BFCB04CB67CA238BA663F123F66423D09733"]},{"title":"生肉:[メリー・ジェーン]都市伝説シリーズ 其の弐ェ 呪いのビデオ","link":"http://www.llss.cool/wp/all/anime/%e7%94%9f%e8%82%89%ef%bc%9a%e3%83%a1%e3%83%aa%e3%83%bc%ef%bd%a5%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e9%83%bd%e5%b8%82%e4%bc%9d%e8%aa%ac%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-%e5%85%b6%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c893080sample6.jpg","magnet":["F95B104BB14FC6B11CE57E82A8D25887B1DC2CA4"]}][{"title":"[桜都字幕组][ばにぃうぉ~か~]OVA 恥辱の制服 #1 明美と香純(双语字幕)","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e6%81%a5%e8%be%b1%e3%81%ae%e5%88%b6%e6%9c%8d-1-%e6%98%8e%e7%be%8e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c894568sample1.jpg","magnet":["8DD7B4E0108A4E32BD81D1E54A651BE5C86BC652"]},{"title":"[Queen Bee]私は、快楽依存症 2[弥美津ヒロ][附前作]","link":"http://www.llss.cool/wp/all/anime/queen-bee%e7%a7%81%e3%81%af%e3%80%81%e5%bf%ab%e6%a5%bd%e4%be%9d%e5%ad%98%e7%97%87-2%ef%bc%bb%e5%bc%a5%e7%be%8e%e6%b4%a5%e3%83%92%e3%83%ad%ef%bc%bd%e9%99%84%e5%89%8d%e4%bd%9c/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f42evcctuvj20ze0jtdhb.jpg","magnet":["91AA8F072EA99951EF43E436E0F2755AF9E6B45B"]},{"title":"[survive] ムチムチJKといつでも中出しして孕ませOKの学校","link":"http://www.llss.cool/wp/all/anime/survive-%e3%83%a0%e3%83%81%e3%83%a0%e3%83%81jk%e3%81%a8%e3%81%84%e3%81%a4%e3%81%a7%e3%82%82%e4%b8%ad%e5%87%ba%e3%81%97%e3%81%97%e3%81%a6%e5%ad%95%e3%81%be%e3%81%9bok%e3%81%ae%e5%ad%a6%e6%a0%a1/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f3xhu4961ij20m80dw79q.jpg","magnet":["[ANIME]653ee539121c5d05d69c0129cbf2783423064c2a","[CG]dc86d3f6194d7836ba968b1f7df44f9b2190bf71"]},{"title":"疑似新田惠海第二部AV销售","link":"http://www.llss.cool/wp/all/anime/%e7%96%91%e4%bc%bc%e6%96%b0%e7%94%b0%e6%83%a0%e6%b5%b7%e7%ac%ac%e4%ba%8c%e9%83%a8av%e9%94%80%e5%94%ae/","img":"http://ww1.sinaimg.cn/mw690/67aeb6d9gw1f3wztm8eamj20m40dndqf.jpg","magnet":["E193A0B9CD94AFFE8BB542111CB12E6F2B362C48"]},{"title":"[非H]火影忍者疾风传:鼬真传篇~光与暗~","link":"http://www.llss.cool/wp/all/anime/%e9%9d%9eh%e7%81%ab%e5%bd%b1%e5%bf%8d%e8%80%85%e7%96%be%e9%a3%8e%e4%bc%a0%ef%bc%9a%e9%bc%ac%e7%9c%9f%e4%bc%a0%e7%af%87%ef%bd%9e%e5%85%89%e4%b8%8e%e6%9a%97%ef%bd%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/50da81cb39dbb6fda332334a0e24ab18972b3775.jpg","magnet":["e3a1c3e7866f2e42084cdac0c518365ce954feb8"]},{"title":"【非H】极影字幕社【甲铁城的卡巴内里】【05】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e6%9e%81%e5%bd%b1%e5%ad%97%e5%b9%95%e7%a4%be%e3%80%90%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c%e3%80%91%e3%80%9005%e3%80%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["45NWCDRDKN32YXBXGCHIJVTOQY5A56WF"]},{"title":"[メリー・ジェーン] 女子高生の腰つき(1-6) 演劇部編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%a5%b3%e5%ad%90%e9%ab%98%e7%94%9f%e3%81%ae%e8%85%b0%e3%81%a4%e3%81%8d%ef%bc%881-6%ef%bc%89-%e6%bc%94%e5%8a%87%e9%83%a8/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ertlx3bdi8j20zk0k0adr.jpg","magnet":["14e1d5c8633de150ae0a9e8e40139d9023a252be"]},{"title":"[澄空学园&华盟字幕社][非H]甲铁城的卡巴内瑞 第04话 流动的血潮","link":"http://www.llss.cool/wp/all/anime/%e6%be%84%e7%a9%ba%e5%ad%a6%e5%9b%ad%e5%8d%8e%e7%9b%9f%e5%ad%97%e5%b9%95%e7%a4%be%e9%9d%9eh%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e7%91%9e-%e7%ac%ac04%e8%af%9d-%e6%b5%81/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["b7c958f5599c7c7084ffe4ddb3d1d18ecc06f7a7"]},{"title":"[メリー・ジェーン] いいなり!催眠彼女(1-2) ~隷属洗脳・生ハメ性活!!~ 下巻 生意気な妹への処方箋","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%84%e3%81%84%e3%81%aa%e3%82%8a%ef%bc%81%e5%82%ac%e7%9c%a0%e5%bd%bc%e5%a5%b3%ef%bc%881-2%ef%bc%89-%ef%bd%9e%e9%9a%b7/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1es2v670qytj20zk0k0gon.jpg","magnet":["0A1D98AF4D3EE063C7E8F2EF2E2BBF9A2FD11FA8","141AB5FBA47E5B64F5E7627FB1E6C96126A82613","0BC7F8491D25ABA63980CB0FCF276B4C9A89A3E7"]}][{"title":"[@factory-EX]絶頂の彼方EX 愛玩少女は傷つかないEX トモきゅーと!EX トモきゅーと!EX","link":"http://www.llss.cool/wp/all/anime/factory-ex%e7%b5%b6%e9%a0%82%e3%81%ae%e5%bd%bc%e6%96%b9ex-%e6%84%9b%e7%8e%a9%e5%b0%91%e5%a5%b3%e3%81%af%e5%82%b7%e3%81%a4%e3%81%8b%e3%81%aa%e3%81%84ex-%e3%83%88%e3%83%a2%e3%81%8d%e3%82%85%e3%83%bc/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1f3pg72gpx1j20mt0asn0k.jpg","magnet":["12C55CD0F97C4979979A8A4B7DA1369E42136E0E","308E881FB95DC7D1AF16B0873E80276F48538682","B8D57B3132056036C7511BBA5DFF09143A230894","00C3B8C46E95FD9DFCB9EC0B56775B92BCA33B87"]},{"title":"[メリー・ジェーン] 少女教育 雛田麻未編 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%b0%91%e5%a5%b3%e6%95%99%e8%82%b2-%e9%9b%9b%e7%94%b0%e9%ba%bb%e6%9c%aa%e7%b7%a8-1-2/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eu77ui978hj20zk0k0di7.jpg","magnet":["9b68d1a805f1799d7ec179e59e4142bf83dcbe28"]},{"title":"[ピンクパイナップル] 逆転魔女裁判 ~痴女な魔女に裁かれちゃう~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e9%80%86%e8%bb%a2%e9%ad%94%e5%a5%b3%e8%a3%81%e5%88%a4-%ef%bd%9e%e7%97%b4%e5%a5%b3%e3%81%aa%e9%ad%94%e5%a5%b3/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1evn6245cbmj20jg0b4tbd.jpg","magnet":["7BE8361D17CEE3998191CB0CF964AEED10FB0F8B"]},{"title":"[ピンクパイナップル] 学園の生贄――慰み者と化した巨乳不良少女~白濁に侵される褐色&堕肉の狂宴~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%ad%a6%e5%9c%92%e3%81%ae%e7%94%9f%e8%b4%84%e2%80%95%e2%80%95%e6%85%b0%e3%81%bf%e8%80%85%e3%81%a8%e5%8c%96/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eul6xbth2fj20fk09qaco.jpg","magnet":["AA9530C1C919A58882BA973D75FF693E6677E52B"]},{"title":"[ピンクパイナップル] LOVELY×CATION THE ANIMATION #2「初恋の日々、再び」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-lovelyxcation-the-animation-%ef%bc%832%e3%80%8c%e5%88%9d%e6%81%8b%e3%81%ae%e6%97%a5%e3%80%85%e3%80%81%e5%86%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1euhmhpfz97j20zk0k0dj0.jpg","magnet":["3f42b9d1dd6294c563ed96cf5c38cfcb9f762f97"]},{"title":"[ピンクパイナップル]ランス01 光をもとめて THE ANIMATION 第2話「進行!! リーザス中枢」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%a9%e3%83%b3%e3%82%b901-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8%e3%82%81%e3%81%a6-the-animation-%e7%ac%ac2/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1etl79er7a7j20zk0k0acq.jpg","magnet":["1E5325A6CC7A45A12ECC97746DCE57B63191DCC5"]},{"title":"[ピンクパイナップル]聖女「聖女のように清らかで、婦のようにらに…」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e8%81%96%e5%a5%b3%e3%80%8c%e8%81%96%e5%a5%b3%e3%81%ae%e3%82%88%e3%81%86%e3%81%ab%e6%b8%85%e3%82%89%e3%81%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/bvjaViI.jpg","magnet":["169c16c60e906aecff9cb9f0e98138a6bccc11dd"]},{"title":"[ピンクパイナップル] 新・聖ヤリマン学園援交日記 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%96%b0%e3%83%bb%e8%81%96%e3%83%a4%e3%83%aa%e3%83%9e%e3%83%b3%e5%ad%a6%e5%9c%92%e6%8f%b4%e4%ba%a4%e6%97%a5/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/FvzXsco.jpg","magnet":["2b1211e3b13dbd5e4283a25f9d8e119c09c9007739"]},{"title":"[ピンクパイナップル] アラルガンド The Animation","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%82%a2%e3%83%a9%e3%83%ab%e3%82%ac%e3%83%b3%e3%83%89-the-animation/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1esgqjq1o02j20zk0k00wn.jpg","magnet":["414a5793750348c6d3d284caea2e3ec7a99acd4e"]}][{"title":"[ピンクパイナップル]3Ping Lovers!☆一夫二妻の世界へようこそ♪ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab3ping-lovers%ef%bc%81%e2%98%86%e4%b8%80%e5%a4%ab%e4%ba%8c%e5%a6%bb%e3%81%ae%e4%b8%96%e7%95%8c%e3%81%b8%e3%82%88/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1esegywph0tj20zk0k0gqg.jpg","magnet":["96f7239823a46226d6a49635c667885121937f4e"]},{"title":"[ピンクパイナップル] なまイキ ~生粋荘(きっすいそう)へようこそ!~ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%81%aa%e3%81%be%e3%82%a4%e3%82%ad-%ef%bd%9e%e7%94%9f%e7%b2%8b%e8%8d%98%ef%bc%88%e3%81%8d%e3%81%a3%e3%81%99/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ernvlgfrfmj20zl0k241y.jpg","magnet":["b9e56412b3aadd9498c752c07cab366ab86089e7","29]de890552b046cf14f4d4c28be8f55623c0d80b96"]},{"title":"[ピンクパイナップル] 炎の孕ませ乳(パイ)ドルマイ★スター学園Z THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%82%8e%e3%81%ae%e5%ad%95%e3%81%be%e3%81%9b%e4%b9%b3%ef%bc%88%e3%83%91%e3%82%a4%ef%bc%89%e3%83%89%e3%83%ab/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ermp42fpqjj20k10bcdh7.jpg","magnet":["f2b6a6a1076b15e158de7e5274f106a1baeb3918"]},{"title":"[熟肉][桜都字幕组][chippai]LO Reパコ すくすくみずきちゃん THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84chippailo-re%e3%83%91%e3%82%b3-%e3%81%99%e3%81%8f%e3%81%99%e3%81%8f%e3%81%bf%e3%81%9a%e3%81%8d%e3%81%a1%e3%82%83%e3%82%93-the-anima/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/QQ截图20160506222858.png","magnet":["FF7E8849A061F42D84E95A28D94C3C7BE6E15565"]},{"title":"[首发][生肉]Pako Sukusuku Mizuki-chan The Animation / LO Re:パコ すくすくみずきちゃん THE ANIMATION [episode 01]","link":"http://www.llss.cool/wp/all/anime/%e9%a6%96%e5%8f%91%e7%94%9f%e8%82%89pako-sukusuku-mizuki-chan-the-animation-lo-re%ef%bc%9a%e3%83%91%e3%82%b3-%e3%81%99%e3%81%8f%e3%81%99%e3%81%8f%e3%81%bf%e3%81%9a%e3%81%8d%e3%81%a1%e3%82%83/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/c896389table1.jpg","magnet":["FF7E8849A061F42D84E95A28D94C3C7BE6E15565"]},{"title":"THE ANIMATION #1「もうずっと初恋の日々」","link":"http://www.llss.cool/wp/all/anime/the-animation-1%e3%80%8c%e3%82%82%e3%81%86%e3%81%9a%e3%81%a3%e3%81%a8%e5%88%9d%e6%81%8b%e3%81%ae%e6%97%a5%e3%80%85%e3%80%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1er30bj161uj20np0dctaz.jpg","magnet":["67d91e9c299044cad674d67f0b9be926901c36e3","1f07a9fe435c7264d0c92af369bc70a9926e0451","79b3a17beba916a10557049b8d7c205c295ef593","7d28cd5ad178b307635444906a9c2de37ed5aa1d"]},{"title":"[ピンクパイナップル] 初犬+初犬 2 全4集 (HD 720P x264 AAC)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%88%9d%e7%8a%ac%e5%88%9d%e7%8a%ac-2-%e5%85%a84%e9%9b%86-hd-720p-x264-aac/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/zM4AK.jpg","magnet":["F6DAC77B1FAE903253B1CF6B145FBF844DC29C6B"]},{"title":"[ピンクパイナップル] しゃぶらレンタル エッチなおねえさんとのエロエロレンタルお勉強","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%81%97%e3%82%83%e3%81%b6%e3%82%89%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab-%e3%82%a8%e3%83%83%e3%83%81%e3%81%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1epssq7nz12j20nk0dcjt3.jpg","magnet":["5C4C9605420E577D0B83A09FC44271BFE2145972","aa5cb097001c2453e4c5c4dfb0a5048dbfd7a993","65d7c97f4cdaee7bdddf9ab1f53e81eeec56fccf","cc596daab5d63be5a091d555528c1d6520dd1055"]},{"title":"[ピンクパイナップル] 豚の如き山賊に捕らわれて処女を奪われる巨乳姫騎士&女戦士 ~絶対チ●ポなんかに負けたりしない!!~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e8%b1%9a%e3%81%ae%e5%a6%82%e3%81%8d%e5%b1%b1%e8%b3%8a%e3%81%ab%e6%8d%95%e3%82%89%e3%82%8f%e3%82%8c%e3%81%a6/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eovabbniplj20np0dcq6j.jpg","magnet":["69d596c3af4ab00c124ef8a2b74b9b652246db4c","a21ee01fc31b88c53e282ef38f1dda24a54a09c6","a0eb88f98ebcb4cf09461c8c9b207c07a0e25080"]}][{"title":"[ピンクパイナップル] ランス 兰斯01 光をもとめて 第1話「ランス、起つ!!」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%a9%e3%83%b3%e3%82%b9-%e5%85%b0%e6%96%af01-%e5%85%89%e3%82%92%e3%82%82%e3%81%a8%e3%82%81%e3%81%a6-%e7%ac%ac1/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eo5idbip0bj20np0dcjtr.jpg","magnet":["3fbf5e76fb32782e1460ab961c48413b3de9c303","3fbf5e76fb32782e1460ab961c48413b3de9c303"]},{"title":"[ピンクパイナップル] PANDRA―白き欲望 黒の希望―II (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-pandra%e2%80%95%e7%99%bd%e3%81%8d%e6%ac%b2%e6%9c%9b-%e9%bb%92%e3%81%ae%e5%b8%8c%e6%9c%9b%e2%80%95ii-1-2/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1emt9f0jbjsj20hs0a0whq.jpg","magnet":["86edafa6a51ab15119e56f016c04a55deb0edb23"]},{"title":"[ピンクパイナップル] 神曲のグリモワール -PANDRA saga 2nd story-「有角の少女と不思議な本」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%a5%9e%e6%9b%b2%e3%81%ae%e3%82%b0%e3%83%aa%e3%83%a2%e3%83%af%e3%83%bc%e3%83%ab-pandra-saga-2nd-story-%e3%80%8c/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1emt929rskzj20np0dc40f.jpg","magnet":["e15369b06d1cdb4da74510e4ffbac73a242dfdb5"]},{"title":"[ピンクパイナップル] 肉牝R30 ~肉欲に堕ちた牝たち~「もっと、淫らに…してください…」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e8%82%89%e7%89%9dr30-%ef%bd%9e%e8%82%89%e6%ac%b2%e3%81%ab%e5%a0%95%e3%81%a1%e3%81%9f%e7%89%9d%e3%81%9f%e3%81%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/rBSjuRX.jpg","magnet":["c5761ce621014703b931fe1c95b8855b16f759de"]},{"title":"[ピンクパイナップル] ボーイ・ミーツ・ハーレム THE ANIMATION 「南国ハーレム」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%9c%e3%83%bc%e3%82%a4%e3%83%bb%e3%83%9f%e3%83%bc%e3%83%84%e3%83%bb%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0-the-ani/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/eeW15Oh.jpg","magnet":["8ae6088df03b4830c2eabf565c071ac24d25d7ae"]},{"title":"[ピンクパイナップル]フリフレ THE ANIMATION ~制服堕天使の課外授業~","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%95%e3%83%aa%e3%83%95%e3%83%ac-the-animation-%ef%bd%9e%e5%88%b6%e6%9c%8d%e5%a0%95%e5%a4%a9%e4%bd%bf%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/FmY69bX.jpg","magnet":["1be6768ffa38d2c593618dc19226d8af71bf46a3"]},{"title":"[ピンクパイナップル] ばくあね 弟しぼっちゃうぞ!","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%81%b0%e3%81%8f%e3%81%82%e3%81%ad-%e5%bc%9f%e3%81%97%e3%81%bc%e3%81%a3%e3%81%a1%e3%82%83%e3%81%86%e3%81%9e/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/lzkspfF.jpg","magnet":["1ee8074101486b2b1a55a0ef68fb2ec5b42b26b2"]},{"title":"[ピンクパイナップル] 恋愛不要学派「私を調教してみたい?」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%81%8b%e6%84%9b%e4%b8%8d%e8%a6%81%e5%ad%a6%e6%b4%be%e3%80%8c%e7%a7%81%e3%82%92%e8%aa%bf%e6%95%99%e3%81%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/wqeXZaQl.jpg","magnet":["d720991117af30hd552d3df454c478d77tc88aaa1762"]},{"title":"[ピンクパイナップル]ラブesエム THE ANIMATION 「誰にも言えない秘密」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%a9%e3%83%96es%e3%82%a8%e3%83%a0-the-animation-%e3%80%8c%e8%aa%b0%e3%81%ab%e3%82%82%e8%a8%80%e3%81%88%e3%81%aa/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/izOascZ.jpg","magnet":["3a0eaef9e5fba0wedf2308f3f9431f97d2bd68a7f40fa6"]}][{"title":"[ピンクパイナップル] 恋乳ているず THE ANIMATION 「この娘とヤリたい」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%81%8b%e4%b9%b3%e3%81%a6%e3%81%84%e3%82%8b%e3%81%9a-the-animation-%e3%80%8c%e3%81%93%e3%81%ae%e5%a8%98%e3%81%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/e5wcTdT.jpg","magnet":["C300AB8A469C8665DAFAFD5EA854C7CA2ED86FAE"]},{"title":"[ピンクパイナップル]フェラピュア ~御手洗さん家の事情~「朝から晩までしゃぶってあげる」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%95%e3%82%a7%e3%83%a9%e3%83%94%e3%83%a5%e3%82%a2-%ef%bd%9e%e5%be%a1%e6%89%8b%e6%b4%97%e3%81%95%e3%82%93/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/oeVLUhg.jpg","magnet":["24f61ebf479363dc42ad87db7fa38504ee1ab266","6e615202f6abc598bc895865cde297909210bd97"]},{"title":"[ピンクパイナップル] 恋騎士 Purely☆Kiss 第2话「藤守由宇」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%81%8b%e9%a8%8e%e5%a3%ab-purely%e2%98%86kiss-%e7%ac%ac2%e8%af%9d%e3%80%8c%e8%97%a4%e5%ae%88%e7%94%b1%e5%ae%87/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/Gdn7wrC.jpg","magnet":["f6556ca1468b94cf5d18ae857332460eb7a2a696"]},{"title":"[ピンクパイナップル] 椎葉さんのウラの顔。 with イモートリップ","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%a4%8e%e8%91%89%e3%81%95%e3%82%93%e3%81%ae%e3%82%a6%e3%83%a9%e3%81%ae%e9%a1%94%e3%80%82-with-%e3%82%a4%e3%83%a2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/ammYrqy.jpg","magnet":["b1af7d63f96006c4942a025190b2df43acb8bda6"]},{"title":"[ピンクパイナップル] 小悪魔カノジョ THE ANIMATION「汁まみれでトロトロ」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%b0%8f%e6%82%aa%e9%ad%94%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation%e3%80%8c%e6%b1%81%e3%81%be%e3%81%bf/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/cAy6LCp.jpg","magnet":["c5cc601448d5670e2966e074439665f311b76b3b"]},{"title":"[ピンクパイナップル]JUNK LAND「まじめな彼女と…思ってた?」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abjunk-land%e3%80%8c%e3%81%be%e3%81%98%e3%82%81%e3%81%aa%e5%bd%bc%e5%a5%b3%e3%81%a8%e6%80%9d%e3%81%a3%e3%81%a6/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/fIwvNCz.jpg","magnet":["ebc8534dcd036d4aec748c1dba16c565516d82d0"]},{"title":"[ピンクパイナップル] 奴隷兎とアンソニー「Hな欲望、私が全部叶えてあげる」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e5%a5%b4%e9%9a%b7%e5%85%8e%e3%81%a8%e3%82%a2%e3%83%b3%e3%82%bd%e3%83%8b%e3%83%bc%e3%80%8ch%e3%81%aa%e6%ac%b2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/rxkdaeO.jpg","magnet":["ba4356af912f88109550cee6b4d41952155d9320"]},{"title":"[ピンクパイナップル]猥褻ミサイル THE ANIMATION 「うっ、また出ちゃった」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e7%8c%a5%e8%a4%bb%e3%83%9f%e3%82%b5%e3%82%a4%e3%83%ab-the-animation-%e3%80%8c%e3%81%86%e3%81%a3%e3%80%81%e3%81%be/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/4bab3bccgw1eykhwxa05ij204605yjrk.jpg","magnet":["ec8470fb50290048ec6ab99346bb80f88c7798b1"]},{"title":"[ピンクパイナップル]霧谷伯爵家の六姉妹 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e9%9c%a7%e8%b0%b7%e4%bc%af%e7%88%b5%e5%ae%b6%e3%81%ae%e5%85%ad%e5%a7%89%e5%a6%b9-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/zMizz.jpg","magnet":["B3B45A1A17D7CEC3506FE69CC808F8C485AF4D82"]}][{"title":"[ピンクパイナップル] 母娘乱館 THE ANIMATION 「琴音の章」[720P]","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e6%af%8d%e5%a8%98%e4%b9%b1%e9%a4%a8-the-animation-%e3%80%8c%e7%90%b4%e9%9f%b3%e3%81%ae%e7%ab%a0%e3%80%8d720p/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/0541040852FFCE9D6A0A4C4C3D9C1817.jpg","magnet":["070dad62b1b39aec6bb0420517df29b5a5d5882d"]},{"title":"[ピンクパイナップル]ガーデン (1-2) THE ANIMATION Bloom.2「メモリー」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%82%ac%e3%83%bc%e3%83%87%e3%83%b3-1-2-the-animation-bloom-2%e3%80%8c%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%bc/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/6Ej1v.jpg","magnet":["1411b5837e5247cfc4dad57d2a18d9ff7cddfa7d"]},{"title":"【非H】甲铁城的卡巴内里1-3话","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e7%94%b2%e9%93%81%e5%9f%8e%e7%9a%84%e5%8d%a1%e5%b7%b4%e5%86%85%e9%87%8c1-3%e8%af%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/05/123.jpg","magnet":["efa3afe46173dd5ea656fa82189920172e9d9e2c","8efbdb6dbf8f69c2c5467dc3a51fb77b1d3fa0d4","aa7ccfa3eb8cb3cacbd2c061049050b225e13a23"]},{"title":"[熟肉]2016年4月里番合集","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%892016%e5%b9%b44%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/nVCOIu8.jpg","magnet":["JKE7QIJ7PJJ4NOTMUBYKAX2YFJKIA77L","2B894F662D916C3DD40D2892A9BC920DCEFBD49C"]},{"title":"[PoRO]鬼父 化ケーション 「小生意気タヌキぽんぽこぽん」[附前作]","link":"http://www.llss.cool/wp/all/anime/poro%e9%ac%bc%e7%88%b6-%e5%8c%96%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%82%bf%e3%83%8c%e3%82%ad%e3%81%bd%e3%82%93%e3%81%bd%e3%81%93%e3%81%bd/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f3dzfvfvquj20zg0jywkq.jpg","magnet":["C563818DF165DA0AA9C0E48C75A5418661E79B6F"]},{"title":"【熟肉】[桜都字幕组][Collaboration Works]バカな妹を利口にするのは俺の××だけな件について ミルク大好き!! 御津井 芭華編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e7%86%9f%e8%82%89%e3%80%91%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ%E5%9B%BE%E7%89%8720160405004133.png","magnet":["CCC8FBBBDB0D88858B0E997D36731202F63D595A"]},{"title":"[熟肉][桜都字幕组][PoRO]鬼父 化ケーション 「小生意気タヌキぽんぽこぽん」","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84poro%e9%ac%bc%e7%88%b6-%e5%8c%96%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c875820sample11-1.jpg","magnet":["A726029745BA08AD6F00D241D56DE16A2B80A73D"]},{"title":"[熟肉][ピンクパイナップル]こいなか-小田舎で初恋×中出しセクシャルライフ- THE ANIMATION继续阅读 →","link":"http://www.llss.cool/wp/all/anime/%e7%86%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%81%93%e3%81%84%e3%81%aa%e3%81%8b-%e5%b0%8f%e7%94%b0%e8%88%8e%e3%81%a7%e5%88%9d%e6%81%8bx/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f3dxworlq7j212m0lrjx2.jpg","magnet":["9D1240A9C59AA13E408D9D3743F1DE818FE41DA1","9D1240A9C59AA13E408D9D3743F1DE818FE41DA1","9D1240A9C59AA13E408D9D3743F1DE818FE41DA1","9D1240A9C59AA13E408D9D3743F1DE818FE41DA1"]},{"title":"【首发】【生肉】[Collaboration Works]バカな妹を利口にするのは俺の××だけな件について ミルク大好き!! 御津井 芭華編","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a6%96%e5%8f%91%e3%80%91%e3%80%90%e7%94%9f%e8%82%89%e3%80%91collaboration-works%e3%83%90%e3%82%ab%e3%81%aa%e5%a6%b9%e3%82%92%e5%88%a9%e5%8f%a3%e3%81%ab%e3%81%99%e3%82%8b%e3%81%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ%E5%9B%BE%E7%89%8720160405004133.png","magnet":["ZMHVKXWGONWS4DMXYDFTX62WFP5Q6UXF"]}][{"title":"[首发][生肉][ピンクパイナップル]こいなか-小田舎で初恋×中出しセクシャルライフ- THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e9%a6%96%e5%8f%91%e7%94%9f%e8%82%89%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%81%93%e3%81%84%e3%81%aa%e3%81%8b-%e5%b0%8f%e7%94%b0%e8%88%8e%e3%81%a7/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c889479sample3.jpg","magnet":["3Q32VDSUV7MTEYBM33FGKRPI6E6QII2P"]},{"title":"【首发】[生肉][PoRO]鬼父化ケーション 「小生意気タヌキぽんぽこぽん」初回限定版","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%a6%96%e5%8f%91%e3%80%91%e7%94%9f%e8%82%89poro%e9%ac%bc%e7%88%b6%e5%8c%96%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%82%bf%e3%83%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c875820sample11-1.jpg","magnet":["LHO4QVHGQWU534DLMWXNWZ56KZTBAU5O"]},{"title":"[ピンクパイナップル]恋騎士 Purely☆Kiss The Animation 「エルシア=ハーヴェンス」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%81%8b%e9%a8%8e%e5%a3%ab-purely%e2%98%86kiss-the-animation-%e3%80%8c%e3%82%a8%e3%83%ab%e3%82%b7%e3%82%a2%ef%bc%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/1374987398205_Screenshot_2013-07-28-13-34-00.png","magnet":["7b3f09567e279c47ff4389d050a2b836dcb29b3d"]},{"title":"[工口字幕组][ピンクパイナップル] 「早紀先輩、ふたたび…」","link":"http://www.llss.cool/wp/all/anime/%e5%b7%a5%e5%8f%a3%e5%ad%97%e5%b9%95%e7%bb%84%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%80%8c%e6%97%a9%e7%b4%80%e5%85%88%e8%bc%a9%e3%80%81%e3%81%b5/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/e7fd0402-s.jpg","magnet":["46BBEDFCB672D72E7D2B39B334D104B753C5438A"]},{"title":"[ピンクパイナップル]恋糸記念日(1-2)附漫画","link":"http://www.llss.cool/wp/all/comic/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%81%8b%e7%b3%b8%e8%a8%98%e5%bf%b5%e6%97%a5%ef%bc%881-2%ef%bc%89%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/zBer3wB.jpg","magnet":["ad12bd59fa4ff441a93eefcd41ba07138ec8dc6e"]},{"title":"[ピンクパイナップル]ハーレムタイム 「私、赤ちゃんが欲しいですっ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%83%8f%e3%83%bc%e3%83%ac%e3%83%a0%e3%82%bf%e3%82%a4%e3%83%a0-%e3%80%8c%e7%a7%81%e3%80%81%e8%b5%a4%e3%81%a1/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/0u8i9VU.jpg","magnet":["9201763e6107b3e805dab376aa4ad51a3ab4c39b"]},{"title":"[ピンクパイナップル]禁断の病棟 第2话「淫らな診療室へようこそ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e7%a6%81%e6%96%ad%e3%81%ae%e7%97%85%e6%a3%9f-%e7%ac%ac2%e8%af%9d%e3%80%8c%e6%b7%ab%e3%82%89%e3%81%aa%e8%a8%ba/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/4eeH3.jpg","magnet":["953cc188e406c539498adb959eef710f9621a3a6"]},{"title":"[Maho.sub][ピンクパイナップル]恋糸記念日 1「むすんで ひらいて」","link":"http://www.llss.cool/wp/all/anime/maho-sub%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%81%8b%e7%b3%b8%e8%a8%98%e5%bf%b5%e6%97%a5-1%e3%80%8c%e3%82%80%e3%81%99%e3%82%93%e3%81%a7-%e3%81%b2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/cCdrP.jpg","magnet":["43c048e5502dd5f7d456b807c86a05ea567402b2"]},{"title":"[字幕]「ピンクパイナップル」少女×少女×少女 第二幕「酒池肉林」","link":"http://www.llss.cool/wp/all/anime/%e5%ad%97%e5%b9%95%e3%80%8c%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%80%8d%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3-%e7%ac%ac/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/X1MJx.jpg","magnet":["84cccacd6a5f7e9dd2bc1c290e27ab47df06e960"]}][{"title":"[ピンクパイナップル]最終痴漢電車NEXT Molester.2「お前は最高の女だ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%9c%80%e7%b5%82%e7%97%b4%e6%bc%a2%e9%9b%bb%e8%bb%8anext-molester-2%e3%80%8c%e3%81%8a%e5%89%8d%e3%81%af%e6%9c%80/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/ZjUbq.jpg","magnet":["af4412f904aafc8c99484572ed320242cb38a388"]},{"title":"[みさくらなんこつハースニール] 内気ふたなりネトア「みーふゅ」の鬼ヤバ配信事故~公衆便所編~","link":"http://www.llss.cool/wp/all/anime/%e3%81%bf%e3%81%95%e3%81%8f%e3%82%89%e3%81%aa%e3%82%93%e3%81%93%e3%81%a4%e3%83%8f%e3%83%bc%e3%82%b9%e3%83%8b%e3%83%bc%e3%83%ab-%e5%86%85%e6%b0%97%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%83%8d/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f3blz10spqj20zk0k0ae5.jpg","magnet":["09133752a57b356738e3bafab318552565c6e184","d388f760e9b96d84ec3e3e33b99912799e6e6459"]},{"title":"[ピンクパイナップル]禁断の病棟 Desire.1","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e7%a6%81%e6%96%ad%e3%81%ae%e7%97%85%e6%a3%9f-desire-1/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/u9Gd1.jpg","magnet":["61856b85c4737c498eaaab3cc59840e27c3a309a"]},{"title":"[ピンクパイナップル]好きで好きで、すきで Pretty.2「浮空」&「ふたごころ」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%a5%bd%e3%81%8d%e3%81%a7%e5%a5%bd%e3%81%8d%e3%81%a7%e3%80%81%e3%81%99%e3%81%8d%e3%81%a7-pretty-2%e3%80%8c%e6%b5%ae/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/AKKtV.jpg","magnet":["19623416f47452ce9d7778dc79081313515182ff"]},{"title":"[ピンクパイナップル]少女×少女×少女 第一幕「祭子」[720P]","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3x%e5%b0%91%e5%a5%b3-%e7%ac%ac%e4%b8%80%e5%b9%95%e3%80%8c%e7%a5%ad/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/Zpi1b.jpg","magnet":["d41165ee5f082f9f1563680ac05c7ee0db510ce9"]},{"title":"[ピンクパイナップル]武想少女隊ぶれいど☆ブライダーズ THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e6%ad%a6%e6%83%b3%e5%b0%91%e5%a5%b3%e9%9a%8a%e3%81%b6%e3%82%8c%e3%81%84%e3%81%a9%e2%98%86%e3%83%96%e3%83%a9%e3%82%a4/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1exkicxf82mj20qo0b4jyp.jpg","magnet":["c0586d12806208ab1aa584626007d2877d5967a0","c0586d12806208ab1aa584626007d2877d5967a0"]},{"title":"[Collaboration Works]プリーズ・◯◯◯・ミー!~九条さくら編~(1-2)","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%83%97%e3%83%aa%e3%83%bc%e3%82%ba%e3%83%bb%e2%97%af%e2%97%af%e2%97%af%e3%83%bb%e3%83%9f%e3%83%bc%ef%bc%81%ef%bd%9e%e4%b9%9d%e6%9d%a1%e3%81%95%e3%81%8f%e3%82%89%e7%b7%a8/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/GgI5H-1.jpg","magnet":["ade4eed817138b731961cc5d6546d6f64bb7f902","8b73540466c69320a3b9eb050f3937a3ad4261c8"]},{"title":"[Collaboration Works]トロピカルKISS 第3话 by立夏編 (1-3)","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%83%88%e3%83%ad%e3%83%94%e3%82%ab%e3%83%abkiss-%e7%ac%ac3%e8%af%9d-by%e7%ab%8b%e5%a4%8f%e7%b7%a8-%ef%bc%881-3%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/X605oEx.jpg","magnet":["252b26937c267143a26891c65c19738e54c88c75"]}][{"title":"[Collaboration Works]えろげー!~Hもゲームも開発三昧~ み、みんなが見ている前でこんなこと!? 寧々は大人のレディーだもん編","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%81%88%e3%82%8d%e3%81%92%e3%83%bc%ef%bc%81%ef%bd%9eh%e3%82%82%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%82%e9%96%8b%e7%99%ba%e4%b8%89%e6%98%a7%ef%bd%9e-%e3%81%bf%e3%80%81%e3%81%bf/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/51GzzuD.jpg","magnet":["34dab18a2d637293f1ef5e96a37359c9d5446bac","34dab18a2d637293f1ef5e96a37359c9d5446bac"]},{"title":"[Collaboration Works] 真希ちゃんとなう。(1-4)~姉妹で挑む未開の穴。三条探検隊が今日もいく!!編~","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e7%9c%9f%e5%b8%8c%e3%81%a1%e3%82%83%e3%82%93%e3%81%a8%e3%81%aa%e3%81%86%e3%80%82%ef%bc%881-4%ef%bc%89%ef%bd%9e%e5%a7%89%e5%a6%b9%e3%81%a7%e6%8c%91%e3%82%80%e6%9c%aa%e9%96%8b/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1eo7082ipgzj20np0dc0u8.jpg","magnet":["2ba851704feb28ef6fa63fee23cc399586c459b7"]},{"title":"[Collaboration Works] 都合のよいセックスフレンド?(1-4)太陽の下で、あん・あん・あん 露天のお風呂で、ぴゅっ・ぴゅっ・ぴゅっ編","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e9%83%bd%e5%90%88%e3%81%ae%e3%82%88%e3%81%84%e3%82%bb%e3%83%83%e3%82%af%e3%82%b9%e3%83%95%e3%83%ac%e3%83%b3%e3%83%89%ef%bc%9f%ef%bc%881-4%ef%bc%89%e5%a4%aa%e9%99%bd%e3%81%ae/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eou5iag75aj20np0dcjta.jpg","magnet":["6653df0ab3b24658cecb2e5235268780e0ad062a","e529242b1b50e40f97a4efc3a237d64c756f722a","dd1cb7278a2d1c9d89d1ee12f8b221f7cc8bb732"]},{"title":"[Collaboration Works] 喫ハプニング(1-4) ツンツンデレデレSとMのホライゾン。爆乳おバカ令嬢はアブノーマルがお好き!?編","link":"http://www.llss.cool/wp/all/anime/collaboration-works-%e5%96%ab%e3%83%8f%e3%83%97%e3%83%8b%e3%83%b3%e3%82%b01-4-%e3%83%84%e3%83%b3%e3%83%84%e3%83%b3%e3%83%87%e3%83%ac%e3%83%87%e3%83%acs%e3%81%a8m%e3%81%ae%e3%83%9b%e3%83%a9/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evkyhgpy3wj20zk0k00xk.jpg","magnet":["5e1b8c3410a0ec0f0d17f4f012b0c3a1ee6a33af","5e1b8c3410a0ec0f0d17f4f012b0c3a1ee6a33af"]},{"title":"【PoRO】JKと〇行教師4(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90poro%e3%80%91jk%e3%81%a8%e3%80%87%e8%a1%8c%e6%95%99%e5%b8%ab41-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/J4.jpg","magnet":["B50ED05273C8AA79AE7FE2CD8E1C5CED021B9B24","E0C02A2FC8DB81AD61FCDA1298A7EE270FD2316D"]},{"title":"[桜都字幕组][ばにぃうぉ~か~]ましゅまろいもうとさっきゅばす #2 いもうととともだちさっきゅばすといもうとさっきゅばす","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9e%e3%81%be%e3%81%97%e3%82%85%e3%81%be%e3%82%8d%e3%81%84%e3%82%82%e3%81%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/c885519sample12.jpg","magnet":["0A99F3541BC95A10B8C13D8A6A6C973439129A1D"]},{"title":"[PoRO] JKとオーク兵団 第2话","link":"http://www.llss.cool/wp/all/anime/poro-jk%e3%81%a8%e3%82%aa%e3%83%bc%e3%82%af%e5%85%b5%e5%9b%a3-%e7%ac%ac2%e8%af%9d/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/unNvpDU.jpg","magnet":["add23daf97e123aa7eb6de5d36dfd8b950c0519a"]},{"title":"[PoRO]喰ヒ人 ツンデレストッキング・琴音~乱れ尻ハメ乗り2穴~","link":"http://www.llss.cool/wp/all/anime/poro%e5%96%b0%e3%83%92%e4%ba%ba-%e3%83%84%e3%83%b3%e3%83%87%e3%83%ac%e3%82%b9%e3%83%88%e3%83%83%e3%82%ad%e3%83%b3%e3%82%b0%e3%83%bb%e7%90%b4%e9%9f%b3%ef%bd%9e%e4%b9%b1%e3%82%8c%e5%b0%bb%e3%83%8f/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/NXGJgK0.jpg","magnet":["27056f1bbd4c1abcc28d60620e24e6ef3773cf97"]},{"title":"[PoRO]蠱惑の刻 「切ない少女の調べ~儚く濡れる蠱惑の刻~」","link":"http://www.llss.cool/wp/all/anime/poro%e8%a0%b1%e6%83%91%e3%81%ae%e5%88%bb-%e3%80%8c%e5%88%87%e3%81%aa%e3%81%84%e5%b0%91%e5%a5%b3%e3%81%ae%e8%aa%bf%e3%81%b9%ef%bd%9e%e5%84%9a%e3%81%8f%e6%bf%a1%e3%82%8c%e3%82%8b%e8%a0%b1%e6%83%91/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/kaAt0Mh.jpg","magnet":["fadff003d7b1d59b978123682a4ac2da67f3d49a","191c6cd8723fd03fca6761f3b473e3dc0f94a8af"]}][{"title":"[PoRO]町ぐるみの罠~白濁にまみれた肢体~(1-4) 「チビ可愛ゆいの恥辱ジェラ・ハメ馴染む街コン」","link":"http://www.llss.cool/wp/all/anime/poro%e7%94%ba%e3%81%90%e3%82%8b%e3%81%bf%e3%81%ae%e7%bd%a0%ef%bd%9e%e7%99%bd%e6%bf%81%e3%81%ab%e3%81%be%e3%81%bf%e3%82%8c%e3%81%9f%e8%82%a2%e4%bd%93%ef%bd%9e1-4-%e3%80%8c%e3%83%81%e3%83%93/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/fcl2Q7B.jpg","magnet":["fd29846ed806a1488f43bc080e358d2fd1ed1c1a"]},{"title":"[PoRO]狙われた女神天使エンゼルティアー (1-2)「狙われた巨乳無垢・優理 ~護った笑顔に堕とされて~」","link":"http://www.llss.cool/wp/all/anime/poro%e7%8b%99%e3%82%8f%e3%82%8c%e3%81%9f%e5%a5%b3%e7%a5%9e%e5%a4%a9%e4%bd%bf%e3%82%a8%e3%83%b3%e3%82%bc%e3%83%ab%e3%83%86%e3%82%a3%e3%82%a2%e3%83%bc-1-2%e3%80%8c%e7%8b%99%e3%82%8f%e3%82%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/rRPVjZO.jpg","magnet":["5acf61b0702c01ea5f2abaab949cad179b9fb96f"]},{"title":"[PoRO]鬼父 Rebuild Vol.3「小生意気な萌顔ほぃほぃ◆」","link":"http://www.llss.cool/wp/all/anime/poro%e9%ac%bc%e7%88%b6-rebuild-vol-3%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%81%aa%e8%90%8c%e9%a1%94%e3%81%bb%e3%81%83%e3%81%bb%e3%81%83%e2%97%86%e3%80%8d/","img":"http://ww3.sinaimg.cn/large/8c007b5ctw1eno3q1b8yhj20k00b9aal.jpg","magnet":["41649B2378B73CAD34E432D3C7B3FF3FE295979C"]},{"title":"[PoRO] 鬼父2 -harvest-「天然巨乳のハメロス日和」(1-5)","link":"http://www.llss.cool/wp/all/anime/poro-%e9%ac%bc%e7%88%b62-harvest-%e3%80%8c%e5%a4%a9%e7%84%b6%e5%b7%a8%e4%b9%b3%e3%81%ae%e3%83%8f%e3%83%a1%e3%83%ad%e3%82%b9%e6%97%a5%e5%92%8c%e3%80%8d1-5/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eosy5bn5pyj20np0dc0up.jpg","magnet":["1db0759c81543d37facc02cef9f754ea5ee28667"]},{"title":"[PoRO] 館 ~官能奇譚~(1-2)「天然牝奴れ妹・瑠璃 ~躊躇い拡げる卑猥な皺穴」","link":"http://www.llss.cool/wp/all/anime/poro-%e9%a4%a8-%ef%bd%9e%e5%ae%98%e8%83%bd%e5%a5%87%e8%ad%9a%ef%bd%9e%ef%bc%881-2%ef%bc%89%e3%80%8c%e5%a4%a9%e7%84%b6%e7%89%9d%e5%a5%b4%e3%82%8c%e5%a6%b9%e3%83%bb%e7%91%a0%e7%92%83-%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1eprozywk0nj20np0dcac5.jpg","magnet":["f1439eed88889b699133d52bd43d918af0448660","80dd7d13cdecf078af9ce73357095e95faa2c838","0e888303651f19f63b77401ed243a56d6de2a074"]},{"title":"[PoRO] ふくびき!トライアングル(1-3) ~双葉はあたふた~~ 「小悪魔イタズラっ娘の壁ドン哀歌」","link":"http://www.llss.cool/wp/all/anime/poro-%e3%81%b5%e3%81%8f%e3%81%b3%e3%81%8d%ef%bc%81%e3%83%88%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%82%b0%e3%83%ab%ef%bc%881-3%ef%bc%89-%ef%bd%9e%e5%8f%8c%e8%91%89%e3%81%af%e3%81%82%e3%81%9f%e3%81%b5/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1eqnku4u6fcj20np0dc407.jpg","magnet":["8b6576837839cfa16c8cd1ee816edb10fa02fb9a"]},{"title":"[PoRO] 黒の教室 「生意気レオタード・まひる ~勝気な尻穴に穿つ無碍の剛棒」","link":"http://www.llss.cool/wp/all/anime/poro-%e9%bb%92%e3%81%ae%e6%95%99%e5%ae%a4-%e3%80%8c%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ac%e3%82%aa%e3%82%bf%e3%83%bc%e3%83%89%e3%83%bb%e3%81%be%e3%81%b2%e3%82%8b-%ef%bd%9e%e5%8b%9d%e6%b0%97%e3%81%aa/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1esns0w60asj20zk0k0jv9.jpg","magnet":["f9e0a2830806258d556b138c3db6be27496c947a"]},{"title":"[PoRO] あい☆きゃん (1-3) ~はめドル・レイナ ~囁く憎棒に拒み潤う媚肉~","link":"http://www.llss.cool/wp/all/anime/poro-%e3%81%82%e3%81%84%e2%98%86%e3%81%8d%e3%82%83%e3%82%93-1-3-%ef%bd%9e%e3%81%af%e3%82%81%e3%83%89%e3%83%ab%e3%83%bb%e3%83%ac%e3%82%a4%e3%83%8a-%ef%bd%9e%e5%9b%81%e3%81%8f%e6%86%8e%e6%a3%92/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1erj81eusbej20zk0k0n0z.jpg","magnet":["4f30856f7bdc3e15dbcf61ff3978d36c449861f0"]},{"title":"【少女映画】【TMA/CMP】合集 COSQ-001到046 [さとう遥希 《超时空要塞F》、EVA、街头霸王]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91%e3%80%90tmacmp%e3%80%91%e5%90%88%e9%9b%86-cosq-001%e5%88%b0046-%e3%81%95%e3%81%a8%e3%81%86%e9%81%a5%e5%b8%8c-%e3%80%8a%e8%b6%85%e6%97%b6/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/fC7D64Nl.jpg","magnet":["d9de0b082d6b8dc813c83fac96a07d9f1f4401b0","6074b4e0dc2342ae007629bd0ea4ade73c9a813c","5f14b0cae11315987d426adf690496cb3ad8dc42","c9f75facee74771799e3b949f62c32f2ef20c245","6a9c36ab99336e86d0d613a87e2cd8a67d53dca9","B918B9748F4648169C7E68E2A7D02EC0758A6DD3","6902101bca4a31863bc6a6644ebc79be957f56cc","0f0106730d93c5a6b30b54ab860869f67ff21b18","db677f64e6f8f64b256832638dd1e1e45227422a","AAB6CD217DFA78E31C0D585D8A7980EBDF388023","41FCDA42FB78AA97A88B0A8212DB3157A783EC2C","4270125d496d8e3524d4f62352499b92ed1b7fb1","1170547887C3958C478177AE337D49F7F85F09CD","c474e108bd31d279a4ae587e8bf0e69a93c4c747","BA3D85FC5BEE91E8B5155B856639D9B1FAD96633","7df308dcd1ae476a013fc97cbd3752ac379a250a","874dcb94f9a5eabd146f3395b3d13db1c0a013b1","f02b1253b0ec69e57c404c87ba07f984b761baa6","e56da389c6b8226376ffeaf607d6b27588cf9145","06090663375f1df8d13e18b9cc5d37fb7819ae71","09daee98ed80b5d47176c6d00203f19ccecc3451","e1cda56538b8ebca61ab0d60646fe2974ff08c2d","d5459c04505146070f5c2359df0ab4424567b95d","3b6cca714666bae9c830d53967c16fcb03776881","9ce9475e7f6726daad396146e1ad103bbc88cbda","431350c46748081533c9c3f2cebf797d164cb529","193198320a633cc09e79f707dd7cb395b936a35c","7df0cddbae3d84e502846844a9ea1ffd7a528382","f0afaed643aeee21db2115dc4fdb8b816c6de9c1","34c214a5f1f7e20232297e07a03fc1ea5f98e557","0a33a2fc72963081cab45ee3e3ee569ddf2513be","851590f71aca8995911d19095dec486d6a84d682","2af6f843dd87bdb90c3382fe80fd1e2378e3a805","b312a3a03d5e17b94d290c053d843e5ed5791428","2c662a3babd8f2d691ab997dff6bb2ef79ef1282","b5fc76db10f2a00504a38192e12fb3a97feed87f","fd4fbd9050cfcdb762c887043ced0b3c2fb0fbea","54AF08D98A253F1274E78D36F7655B86B414FDBF","01a5ef8e2e2684332cf55ff5d339d40da47f518d","3d80a4f3ed25a6eb4332c935cb31a4b6aee5a493","f08765336f5e76da4bb14434e4f45e743327918c","082df63ec14257baf8e769b34f682b853068a035","57cbf3e81e2a271ce0ed41ce252b403bcd6bde08"]}][{"title":"[PoRO petit] 牝教師4 ~穢された教壇~ 「生意気ドジっ娘女教師・美結~高飛車ハメ堕ち2濁金」","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e7%89%9d%e6%95%99%e5%b8%ab4-%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e-%e3%80%8c%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%89%e3%82%b8%e3%81%a3%e5%a8%98%e5%a5%b3/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1exoxalntbgj20zk0k0n18.jpg","magnet":["b3e65bc0fbd147cc6db2d34c88d14bc433254734"]},{"title":"[ZIZ] 対魔忍アサギ2 #01 改造再び #02 淫謀の始まり","link":"http://www.llss.cool/wp/all/anime/ziz-%e5%af%be%e9%ad%94%e5%bf%8d%e3%82%a2%e3%82%b5%e3%82%ae2-%ef%bc%8301-%e6%94%b9%e9%80%a0%e5%86%8d%e3%81%b3-02-%e6%b7%ab%e8%ac%80%e3%81%ae%e5%a7%8b%e3%81%be%e3%82%8a/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exnzgkx1g2j20zk0k0wh5.jpg","magnet":["e90fc9e29688d6697c0e4e98fb9ca10f2ac2e619"]},{"title":"[WHITE BEAR] 輪姦媚薬中毒 前編 ~逃げ場無し!1428人の生徒全員にSEXされる令嬢沙也香~","link":"http://www.llss.cool/wp/all/anime/white-bear-%e8%bc%aa%e5%a7%a6%e5%aa%9a%e8%96%ac%e4%b8%ad%e6%af%92-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e9%80%83%e3%81%92%e5%a0%b4%e7%84%a1%e3%81%97%ef%bc%811428%e4%ba%ba%e3%81%ae%e7%94%9f%e5%be%92%e5%85%a8/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exi6bnviabj20zk0k0q4s.jpg","magnet":["ee7e29d6ffb38d9949b997a4ae526cc8d0c9805d"]},{"title":"[少女映画][C2.Lab] 03.RIN","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbc2-lab-03-rin/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1exfwokft4tj218f0m8jww.jpg","magnet":["a0397108e192310c465ae55abd7e32c85651ff79"]},{"title":"网球双飞物语ova1-4+PC初回限定1+2+3作 附CG","link":"http://www.llss.cool/wp/all/anime/%e7%bd%91%e7%90%83%e5%8f%8c%e9%a3%9e%e7%89%a9%e8%af%adova1-4pc%e5%88%9d%e5%9b%9e%e9%99%90%e5%ae%9a123%e4%bd%9c-%e9%99%84cg/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/20200000013920144735943295768_s.jpg","magnet":["F20D385D9D44E093320AEA3B0486B7AB12802142","DC35D217118B6F23576F7FDA75822DD8F571E964","FF2C856DA45D6A6F1067BCCA164F1CBBB94BE26B","2A11C30DBD2DBCB4CC40609BB6663EA3553E7767","d7db2c30b3574736802a5c49f4bd22eecbd24849","379299BBB79CA95D8ADD7CC80389B87A85A7191E","379299bbb79ca95d8add7cc80389b87a85a7191e","3294ac438b3249de3549bdb633e4bc38dfe98150","[collaborationworks]"]},{"title":"[ディスカバリー] Unbalance~アンバランス~MENU.1-3","link":"http://www.llss.cool/wp/all/anime/%e3%83%87%e3%82%a3%e3%82%b9%e3%82%ab%e3%83%90%e3%83%aa%e3%83%bc-unbalance%ef%bd%9e%e3%82%a2%e3%83%b3%e3%83%90%e3%83%a9%e3%83%b3%e3%82%b9%ef%bd%9emenu-1-3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exb9988qekj20is081q61.jpg","magnet":["3f45592c98e13c8610e07a36da900010c5e9b4b0"]},{"title":"[りっぷるん] 神待ちサイト ~出逢い編~","link":"http://www.llss.cool/wp/all/game/%e3%82%8a%e3%81%a3%e3%81%b7%e3%82%8b%e3%82%93-%e7%a5%9e%e5%be%85%e3%81%a1%e3%82%b5%e3%82%a4%e3%83%88-%ef%bd%9e%e5%87%ba%e9%80%a2%e3%81%84%e7%b7%a8%ef%bd%9e/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ewymf22hllj20sg0lctbw.jpg","magnet":["8bd5efff90f9cdea23006bd2bd3b2b943aea55b6","Lipplen_KamimachiSite"]},{"title":"[少女映画][TMA] ご注文はこの娘ですか? 请问您要来点姑娘吗?(akb-057)","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bbtma-%e3%81%94%e6%b3%a8%e6%96%87%e3%81%af%e3%81%93%e3%81%ae%e5%a8%98%e3%81%a7%e3%81%99%e3%81%8b-%e8%af%b7%e9%97%ae%e6%82%a8%e8%a6%81%e6%9d%a5%e7%82%b9%e5%a7%91/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ewdu3co64cj20i806uwgi.jpg","magnet":["FB6C3A9D99114267D0C1570CFD4942D2E9D7183A"]},{"title":"[@OZ] ロリビッチ フランドール [字幕]","link":"http://www.llss.cool/wp/all/anime/oz-%e3%83%ad%e3%83%aa%e3%83%93%e3%83%83%e3%83%81-%e3%83%95%e3%83%a9%e3%83%b3%e3%83%89%e3%83%bc%e3%83%ab-%e5%ad%97%e5%b9%95/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eww78wnd00j20fk0bodkm.jpg","magnet":["d0c101c910e1047b408e1fad3213bf6c61665f63","c72c446acf60ff9aa6c951310860a216484fe2f2["]}][{"title":"[Queen Bee] くりぃみぃパイ 1 [emily]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e3%81%8f%e3%82%8a%e3%81%83%e3%81%bf%e3%81%83%e3%83%91%e3%82%a4-1%e3%80%80emily/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ex4coa6dbaj20ci09qmyd.jpg","magnet":["e4a0eba061d77a71b4ab0592b5cc40e1595ec2b2"]},{"title":"『AKB0048』OP&ED「希望について」/NO [email protected][MP3/320K]","link":"http://www.llss.cool/wp/all/anime/%e3%80%8eakb0048%e3%80%8foped%e3%80%8c%e5%b8%8c%e6%9c%9b%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%80%8dno-nameakb48mp3320k-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/YDKjS-1.jpg","magnet":["3bb01d2a9401d1ba7b1b25b9a00973a314234c26"]},{"title":"[メリー・ジェーン] あねよめカルテット 上巻 キャリアウーマンな姉と引きこもりメイド姉","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%81%82%e3%81%ad%e3%82%88%e3%82%81%e3%82%ab%e3%83%ab%e3%83%86%e3%83%83%e3%83%88-%e4%b8%8a%e5%b7%bb-%e3%82%ad%e3%83%a3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ex0w5ogpupj20jq0b375p.jpg","magnet":["3463D5B9C03549BECC82140CAEEB8BD746BEDE66"]},{"title":"ちっちゃなおなか -ナイショですよ","link":"http://www.llss.cool/wp/all/anime/%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e3%83%8a%e3%82%a4%e3%82%b7%e3%83%a7%e3%81%a7%e3%81%99%e3%82%88/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ewtw2ibcelj20zk0k0q59.jpg","magnet":["3ebefbbbfabe695fcd65edee488d29ab64602cd6"]},{"title":"[chippai] ちっちゃなおなか -ナイショですよ。-","link":"http://www.llss.cool/wp/all/anime/chippai-%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e3%83%8a%e3%82%a4%e3%82%b7%e3%83%a7%e3%81%a7%e3%81%99%e3%82%88%e3%80%82/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ewssb83wq1j20zk0k0diu.jpg","magnet":["cf15e49363d3b7985632c7409641ebb444a48857"]},{"title":"[メリー・ジェーン] アノコトイイコト 第1話 こんな胸でも愛されたい!!","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e3%82%a2%e3%83%8e%e3%82%b3%e3%83%88%e3%82%a4%e3%82%a4%e3%82%b3%e3%83%88-%e7%ac%ac1%e8%a9%b1-%e3%81%93%e3%82%93%e3%81%aa/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewpc1djkd4j20dc0k0whd.jpg","magnet":["bc1ba35b430d9d85f320964ed4f94afc484dbf85"]},{"title":"[夜桜字幕组]3D作品合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%843d%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86big5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1et0bm4t9onj20zk0k0q4f.jpg","magnet":["719397E527CACB029C35","F41ADC6270D28E88C233","][171003][opiumud]Yoshiwara"]},{"title":"【非H】[肯普法-皆川瞳美][1-12完]","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e8%82%af%e6%99%ae%e6%b3%95-%e7%9a%86%e5%b7%9d%e7%9e%b3%e7%be%8e1-12%e5%ae%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/img_2.jpg","magnet":["0F2B0838C1D56A670AD5DBCDAEFA49A18122485E"]},{"title":"【非H】少女爱上姐姐2~二人的ELDER~妃宫千早","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e9%9d%9eh%e3%80%91%e5%b0%91%e5%a5%b3%e7%88%b1%e4%b8%8a%e5%a7%90%e5%a7%902%ef%bd%9e%e4%ba%8c%e4%ba%ba%e7%9a%84elder%ef%bd%9e%e5%a6%83%e5%ae%ab%e5%8d%83%e6%97%a9/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/images.jpg","magnet":["501B2B14D02804B0DCDF1968E56C8501FD212EEA"]}][{"title":"2016年5月里番预告","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b45%e6%9c%88%e9%87%8c%e7%95%aa%e9%a2%84%e5%91%8a/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/2-1.png","magnet":null},{"title":"[TMA] 冴えない女優の育てかた","link":"http://www.llss.cool/wp/all/anime/tma-%e5%86%b4%e3%81%88%e3%81%aa%e3%81%84%e5%a5%b3%e5%84%aa%e3%81%ae%e8%82%b2%e3%81%a6%e3%81%8b%e3%81%9f/","img":"http://ww3.sinaimg.cn/large/006fCErsgw1f30wia7mr5j30ai0ey78m.jpg","magnet":["7E5B3AA7CE8D345DA75D1B6EB16D5B81690F0D7C"]},{"title":"[夜桜字幕组] 3D汉化作品 合集[BIG5+GB]","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%84-3d%e6%b1%89%e5%8c%96%e4%bd%9c%e5%93%81-%e5%90%88%e9%9b%86big5gb/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ewn0d74s0aj20zk0k0n0u.jpg","magnet":["GB]1b8d5aaa25f44fe31fe4ba"]},{"title":"[ピンクパイナップル] デーモンバスターズ ~えっちなえっちなデーモン退治~ THE ANIMATION 「ドキドキッ 触手だらけの大決戦 ポロリどころかムフフのフ」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e3%83%87%e3%83%bc%e3%83%a2%e3%83%b3%e3%83%90%e3%82%b9%e3%82%bf%e3%83%bc%e3%82%ba-%ef%bd%9e%e3%81%88%e3%81%a3/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewltsk7kcqj20jq0b4di2.jpg","magnet":["355d72f714a542bbd2b6e7a85124252ad723cd24"]},{"title":"[PoRO petit]狙われた女神天使エンゼルティアー ~守った人間達に裏切られて~ (1-3)「クール女教師・涼音 ~頬張り睨むコスプレ女神~」","link":"http://www.llss.cool/wp/all/anime/poro-petit%e7%8b%99%e3%82%8f%e3%82%8c%e3%81%9f%e5%a5%b3%e7%a5%9e%e5%a4%a9%e4%bd%bf%e3%82%a8%e3%83%b3%e3%82%bc%e3%83%ab%e3%83%86%e3%82%a3%e3%82%a2%e3%83%bc-%ef%bd%9e%e5%ae%88%e3%81%a3%e3%81%9f/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewjkqedx30j20hs0a0401.jpg","magnet":["c47d5a2c3ab97dc3a0021094c425ce15837b6688"]},{"title":"[鈴木みら乃] 学園で時間よ止まれ(1-2)プールを満たす白濁液。スクール水着は浮かばない編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c%ef%bc%881-2%ef%bc%89%e3%83%97%e3%83%bc%e3%83%ab%e3%82%92%e6%ba%80/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1etnl4al4lkj20zk0k0whe.jpg","magnet":["53cd51b3a01d8c227530d782166f98bdd04c03fb"]},{"title":"[鈴木みら乃] 学園で時間よ止まれ(1-3)終わらない復讐劇 止まらない破瓜の血編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c%ef%bc%881-3%ef%bc%89%e7%b5%82%e3%82%8f%e3%82%89%e3%81%aa%e3%81%84/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ewidson9l1j20zk0k0djs.jpg","magnet":["bc8595bb7755bb8ca7d0d37186bb92aebeee9c1a"]},{"title":"[鈴木みら乃] 学園で時間よ止まれ 止まる日菜と動く香奈子。固まる白濁液と流れる破瓜の血編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c-%e6%ad%a2%e3%81%be%e3%82%8b%e6%97%a5%e8%8f%9c%e3%81%a8%e5%8b%95/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1espy42jwtfj20zk0k0gpm.jpg","magnet":["f9acdee420eb53a87d96d72add71b8d6c20ac047"]},{"title":"[spermation] クリムゾンガールズ~痴漢支配~ (1-3) 「第二章 NOZOMI屈服 ChapterII」","link":"http://www.llss.cool/wp/all/anime/spermation-%e3%82%af%e3%83%aa%e3%83%a0%e3%82%be%e3%83%b3%e3%82%ac%e3%83%bc%e3%83%ab%e3%82%ba%ef%bd%9e%e7%97%b4%e6%bc%a2%e6%94%af%e9%85%8d%ef%bd%9e-1-3-%e3%80%8c%e7%ac%ac%e4%ba%8c%e7%ab%a0-nozomi/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ewacidigpwj20zk0k0n0d.jpg","magnet":["16b736a16736ce451e14a811ee05639ebf251d1d"]}][{"title":"[木火土金水] ToROUBる-THEちゅぽちゅぽアニメーション-","link":"http://www.llss.cool/wp/all/anime/%e6%9c%a8%e7%81%ab%e5%9c%9f%e9%87%91%e6%b0%b4-toroub%e3%82%8b-the%e3%81%a1%e3%82%85%e3%81%bd%e3%81%a1%e3%82%85%e3%81%bd%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ew4loo0lkcj20ku0bq795.jpg","magnet":["49fc2eebd6f62b9acf083e82ebdae62929a0e094"]},{"title":"[One Piece] 海贼王NAMI 娜美後悔日誌","link":"http://www.llss.cool/wp/all/game/one-piece-%e6%b5%b7%e8%b4%bc%e7%8e%8bnami-%e5%a8%9c%e7%be%8e%e5%be%8c%e6%82%94%e6%97%a5%e8%aa%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/5ea9KaN.jpg","magnet":["c54a4a2f9a24679c09047c597462593a8c7ea53c"]},{"title":"[SYLD]Moment~花火咲き散る刹那、彼女に起きた事~[中字]","link":"http://www.llss.cool/wp/all/anime/syldmoment%ef%bd%9e%e8%8a%b1%e7%81%ab%e5%92%b2%e3%81%8d%e6%95%a3%e3%82%8b%e5%88%b9%e9%82%a3%e3%80%81%e5%bd%bc%e5%a5%b3%e3%81%ab%e8%b5%b7%e3%81%8d%e3%81%9f%e4%ba%8b%ef%bd%9e%e4%b8%ad%e5%ad%97/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evzu1vr3dij20qo0f0wf8.jpg","magnet":["b3192c843706529b950fedac42afd500845b806c"]},{"title":"[少女映画] 02.RANKO","link":"http://www.llss.cool/wp/all/anime/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb-02-ranko/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evv9hasem4j20rs0dxdlp.jpg","magnet":["C9DC72532ADCC1D48BCF906266F434D381D019EC"]},{"title":"[第6基地(キチロク)] コトリのシリーズ lovelive! 南小鸟系列(1-5)汉化合集","link":"http://www.llss.cool/wp/all/comic/%e7%ac%ac6%e5%9f%ba%e5%9c%b0%e3%82%ad%e3%83%81%e3%83%ad%e3%82%af-%e3%82%b3%e3%83%88%e3%83%aa%e3%81%ae%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba-lovelive-%e5%8d%97%e5%b0%8f%e9%b8%9f%e7%b3%bb%e5%88%971/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1evu4r4um07j20jg0afae3.jpg","magnet":["3b60a5c1eb480120eafc9edfc89cf77004827510"]},{"title":"[@OZ] 妖夢 拘束快 首締め窒息 [中字]","link":"http://www.llss.cool/wp/all/game/oz-%e5%a6%96%e5%a4%a2/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ev88kbmhtlj20zd0jtq93.jpg","magnet":["a727f49aa33e4ac3d6d3d6557feced27c743f2b9[","24E8A0E00B001FF94AED7250528824510A53734E["]},{"title":"[ZIZG-001~004] 対魔忍ムラサキ (実写)系列 COSPLAY 合集","link":"http://www.llss.cool/wp/all/anime/zizg-001004-%e5%af%be%e9%ad%94%e5%bf%8d%e3%83%a0%e3%83%a9%e3%82%b5%e3%82%ad-%ef%bc%88%e5%ae%9f%e5%86%99%ef%bc%89%e7%b3%bb%e5%88%97-cosplay-%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/RpyM1FO-1.jpg","magnet":["475eb87d1349a5100cabcb9ef80f3a677f9c1824","bb4138bd1228420f6012c25bce72fa5992ef47ed","549553de101ef06447ae9fb04472fa3db11308f0","67cdcf452f517354667c2694ac4044728c3fe6a4"]},{"title":"【少女映画】HITMA合集 AKB-001到054 [持续更新] CosPlay系列","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91hitma%e5%90%88%e9%9b%86-akb-001%e5%88%b0054-%e6%8c%81%e7%bb%ad%e6%9b%b4%e6%96%b0-cosplay%e7%b3%bb%e5%88%97/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/923zYHr.jpg","magnet":["73AF55153C216BE0C39ECDA5843EB5B32D1E0674","e00c06aefd0fdc94d9ae1166ec08a1c8b9331500","73AF55153C216BE0C39ECDA5843EB5B32D1E0674","65e3b98913014dd4a20dfe87a895c14b2cc17ca3","9c32c08401d845a33d2a426abf6e3ea5c61461e3","506F4F0BE4D982E2E45711B7FA9BD4B03D3908CF","6CC6261C7953776169F9EDB8DE3FC422CF8ED8C8","c63ca35f411005ceba711ac3c6e9291df5746cbb","04eaa10ea0e8c0516dea2d50f48e0d1406aabeaf","da3f9a545acbb250d436df019c0a5a04d083b447","f6fba37f99cd2b17082142fc98ccdcfead39ace3","GHI6ORJMPUAO6BSZ55TQXKKBPRO7UOR4","f06dcf0caecea18559e2c99dacb4bd4d5e1827c2","CF6B0AE138737E1F0A36E162DECCA21E03A8AA05","0DAAA901479CDD8706247D5BBC4E849936F4734C","10C02C1728B375E5B21450E88B45E943D339C876","311bab261fb721121462649885e14121ae2ef6dd","e7f053dbde952bb66b0ad9c0fb799162fe1da26d","26df1af67f3f856168fe887acd2ab00d7be88285","9bf61b786044c7ddf3ec75b07ffc7d91dd8700e7","6CC6261C7953776169F9EDB8DE3FC422CF8ED8C8","b8e1e515c923f427da7edf2ae08cd44bf8ac37d9","0382e626ac10c93ce2d98b2d5a53d8751f3b2d80","ecd7925097114556394e7f39606ac1207f569751","90FFA6D641AE28D1A206DA16B84825C75907E10A","4da302bb8db039bdcbe1529138c1591759c629bf","c3f53ebd670eeaafbec5b3e7b1d43e3d68511ec2","ea89575ae44b31374b084a89c3de64c15f4d09ee","a593a22e1cee18a04056d75bac99202198ef47c0","a74a45594dc7ef361d81636ca9863866ecb9788b","590b8b4aef3c4f61ddafc772876ffdefc5101293","8aec171e49bf1f0c7514776c757157ca0bc25e55","c878c0bdb3dca0bbfd27598ed8c7bc492ea1d4bf","5ba300bc4c8ab2af63ad0ca6e8fe4a4fc347b5e8","0cd51e267c0a8126b9d7145f35ae9a351c61e0c8","1CED60173A230834E582B4A2C135495E05ED1E0E","09c46eb552ccb54c7ad0408fe33628465268bb19","32fc568c8aabf06f253a5c1e8e86ff54a5150e5b","3b3eec14b84688b7b8bd4f090b903d41acb38ad0","D0E31EDC78C934041A0F51EF427190FAB016808D","2F355CA8610FEA1B24DB6BD0B6DEC85C9D67A835","259500af26b857cfed34d5f8b670f0f816bd7c71","4f3d1f311ad41d7fbac2015223dcd98ab20552f3","36f39e0b103d7c5bd00ed516a95484aca4253041","de65c81a3c52e80673a48e109907304d95bae525","PHYKW6WBJXNY5FIZLTOZQEYTOP5XNJ6C","6db46b606dc69bdc905fe78fbf3921ec4ef626f3","e8542ef6b4f8cebf390666d00b9c4b1b5750a0ae","F74511BA11A7B4E939320437517F42BDF23F84BF","ffb30f6f26e906a3e719546ec0fa87446bceb7fb"]},{"title":"[Milky] メイドさんとボイン魂(1-2)EXTEND THE ANIMATION","link":"http://www.llss.cool/wp/all/anime/milky-%e3%83%a1%e3%82%a4%e3%83%89%e3%81%95%e3%82%93%e3%81%a8%e3%83%9c%e3%82%a4%e3%83%b3%e9%ad%82%ef%bc%881-2%ef%bc%89extend-the-animation/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1euyzt6xz6sj20sg0fdai0.jpg","magnet":["cd6124f88572f8f5057cddd5ff4849cbf497755c"]}][{"title":"ももいろみるく (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%82%82%e3%82%82%e3%81%84%e3%82%8d%e3%81%bf%e3%82%8b%e3%81%8f-%ef%bc%881-2%ef%bc%89/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1euxrc8e347j20zk0k0gpw.jpg","magnet":["07797382e66978e03cd1607485e41bf063609b43"]},{"title":"[少女映画] 物语系列cosplay合集 蝸物語 変物語 忍物語 撫物語 月物語","link":"http://www.llss.cool/wp/all/comic/%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb-%e7%89%a9%e8%af%ad%e7%b3%bb%e5%88%97cosplay%e5%90%88%e9%9b%86-%e8%9d%b8%e7%89%a9%e8%aa%9e-%e5%a4%89%e7%89%a9%e8%aa%9e-%e5%bf%8d%e7%89%a9%e8%aa%9e-%e6%92%ab/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1exyezphj4mj21150as7bw.jpg","magnet":["5b2b9b6723c62c3caa69709ca2d3c3c958c2248d","3ed6902396cce62554a5b1ab026afcf3b4bc33d2","ab61d9fb82cf2bae87cc27c9b201c653d94ab518","f3dc7a78309949acc926a9b17a82a2a7947d8303","bb0e4af838ea5ea6035f65863006165025740919","27567c91600f693e9c58de7651fad12d24a7db58","8e6f5ecd6a303200d4b82413e36099085aa2d710","30071696f9b08559df258","4450f006e92178b7551e2322fb7e72b0efa099b4","a253982c2e1d189d324ddae5c4fae89f8c2171ec"]},{"title":"[ドリームドット] ゆかりのDIKIDOKIサマーバケーション","link":"http://www.llss.cool/wp/all/anime/%e3%83%89%e3%83%aa%e3%83%bc%e3%83%a0%e3%83%89%e3%83%83%e3%83%88-%e3%82%86%e3%81%8b%e3%82%8a%e3%81%aedikidoki%e3%82%b5%e3%83%9e%e3%83%bc%e3%83%90%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exsmkunn9wj21hc0u0tti.jpg","magnet":["f7654b8824277fb2ed45d05b9dafd65cdcf6bd72"]},{"title":"[進撃の巨人] 104期訓練兵団日記 ミ○サ編【進擊的巨人】","link":"http://www.llss.cool/wp/all/anime/%e9%80%b2%e6%92%83%e3%81%ae%e5%b7%a8%e4%ba%ba-104%e6%9c%9f%e8%a8%93%e7%b7%b4%e5%85%b5%e5%9b%a3%e6%97%a5%e8%a8%98-%e3%83%9f%e2%97%8b%e3%82%b5%e7%b7%a8%e3%80%90%e9%80%b2%e6%93%8a%e7%9a%84%e5%b7%a8/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1ey582c26q8j20tn0kadiz.jpg","magnet":["92ff09a3c64db3165bf65ad9aded43f7ac9ceb8f"]},{"title":"2016年3月里番合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b43%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f1n643iizsj20zf0jx76p.jpg","magnet":["F1DA8908596D5A85B048EF64D5AF8C0E7871081B"]},{"title":"[魔人] euphoria (1-4)~『蒔羽梨香』『葵菜月』 蘇る地獄絵図編~","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%ba-euphoria-%ef%bc%881-4%ef%bc%89%ef%bd%9e%e3%80%8e%e8%92%94%e7%be%bd%e6%a2%a8%e9%a6%99%e3%80%8f%e3%80%8e%e8%91%b5%e8%8f%9c%e6%9c%88%e3%80%8f-%e8%98%87%e3%82%8b%e5%9c%b0%e7%8d%84/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1eppd4c3e91j20hs09zabu.jpg","magnet":["7128bb3f354fcca67a6de7e647c8aaddf54f42d5","a6b3f7a969c7f712eacb22db1a4cd772e9455737"]},{"title":"[PashminaA] 彼女がネコミミに着替えたら","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e5%bd%bc%e5%a5%b3%e3%81%8c%e3%83%8d%e3%82%b3%e3%83%9f%e3%83%9f%e3%81%ab%e7%9d%80%e6%9b%bf%e3%81%88%e3%81%9f%e3%82%89/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ets5m4e61mj20go0b4wgj.jpg","magnet":["86cf3c1a4c4bd7f7ac7b7c40b115cf7181b0ae93"]},{"title":"[PashminaA] 異国なレトロ","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e7%95%b0%e5%9b%bd%e3%81%aa%e3%83%ac%e3%83%88%e3%83%ad/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1erp2xydz7sj20zl0k2mzw.jpg","magnet":["565f8e1e48f686eeec33baa90a3a21b12ecaa6d2"]},{"title":"[PashminaA] 恋まぐわい ~忘却の妖狐~","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e6%81%8b%e3%81%be%e3%81%90%e3%82%8f%e3%81%84-%ef%bd%9e%e5%bf%98%e5%8d%b4%e3%81%ae%e5%a6%96%e7%8b%90%ef%bd%9e/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1enxmmshxjvj20np0dcgn1.jpg","magnet":["0db0acfed71cf3588f1ece6247f290f79685b5dd"]}][{"title":"[PashminaA] オトメヒメ","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%82%aa%e3%83%88%e3%83%a1%e3%83%92%e3%83%a1/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1emwrpcr5c6j20np0dcdhc.jpg","magnet":["5d9e6cb245c5165f522547ba456bb52658d6e45d","][171003][opiumud]Yoshiwara"]},{"title":"[鈴木みら乃]凌成敗!~学園美少女制裁秘録~ 若菜と咲と、成敗の終わりと……編 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83%e5%87%8c%e6%88%90%e6%95%97%ef%bc%81%ef%bd%9e%e5%ad%a6%e5%9c%92%e7%be%8e%e5%b0%91%e5%a5%b3%e5%88%b6%e8%a3%81%e7%a7%98%e9%8c%b2%ef%bd%9e-%e8%8b%a5/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/1Vrbdgz.jpg","magnet":["49F22F2EBE51DADB3B72F29460DB3419788E18CB"]},{"title":"[鈴木みら乃] ヤバい!―復讐・闇サイト―(1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e3%83%a4%e3%83%90%e3%81%84%ef%bc%81%e2%80%95%e5%be%a9%e8%ae%90%e3%83%bb%e9%97%87%e3%82%b5%e3%82%a4%e3%83%88%e2%80%95%ef%bc%881-2%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/X48Yeog.jpg","magnet":["5da3015320d5d4d071c58349a3e1188a20cea1f0"]},{"title":"[PoRO]パパラブ 変態仮面っ娘・氷華~パパパンツに恋するツインテール (1-2)","link":"http://www.llss.cool/wp/all/anime/poro%e3%83%91%e3%83%91%e3%83%a9%e3%83%96-%e5%a4%89%e6%85%8b%e4%bb%ae%e9%9d%a2%e3%81%a3%e5%a8%98%e3%83%bb%e6%b0%b7%e8%8f%af%ef%bd%9e%e3%83%91%e3%83%91%e3%83%91%e3%83%b3%e3%83%84%e3%81%ab%e6%81%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/xZ7lECr.jpg","magnet":["ba760ef211e256ff45bef082cbae558ff0577429"]},{"title":"[PoRO]2009-2012高清动漫集合(720P)","link":"http://www.llss.cool/wp/all/anime/poro2009-2012%e9%ab%98%e6%b8%85%e5%8a%a8%e6%bc%ab%e9%9b%86%e5%90%88%ef%bc%88720p%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/gGugWHZ.jpg","magnet":["CC3BAC7585131C1709CE9F9620D5B50550C14C09"]},{"title":"[魔穗字幕组][PoRO]Dark Blue Vol. 1-2","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e7%a9%97%e5%ad%97%e5%b9%95%e7%bb%84porodark-blue-vol-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/8xHH89c.jpg","magnet":["f278a802703110719cedaffd8dbd4cd7f37c9811"]},{"title":"[PoRO]JKとエロ議員センセイ「ドジっ娘メガネ秘書 初音」(1-2)","link":"http://www.llss.cool/wp/all/anime/porojk%e3%81%a8%e3%82%a8%e3%83%ad%e8%ad%b0%e5%93%a1%e3%82%bb%e3%83%b3%e3%82%bb%e3%82%a4%e3%80%8c%e3%83%89%e3%82%b8%e3%81%a3%e5%a8%98%e3%83%a1%e3%82%ac%e3%83%8d%e7%a7%98%e6%9b%b8-%e5%88%9d%e9%9f%b3/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/aEymZ1k.jpg","magnet":["191989d0ff23c4c96a4e2611d257c80e6a35db63"]},{"title":"[桜都字幕组][EDGE(エッジ)]えなじぃキョーカ!!ヌキサポ編 第1巻","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84edge%ef%bc%88%e3%82%a8%e3%83%83%e3%82%b8%ef%bc%89%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab%ef%bc%81%ef%bc%81%e3%83%8c/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ图片20160409184058.png","magnet":["BF550E40533DE1A3DF75B689196128E4834D72CF","6FEA125CB701BE064ADEDA5F336C40E84BCAB98E"]},{"title":"私は, 快楽依存症 [episode 02]","link":"http://www.llss.cool/wp/all/anime/%e7%a7%81%e3%81%af-%e5%bf%ab%e6%a5%bd%e4%be%9d%e5%ad%98%e7%97%87-episode-02/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ图片20160409183530.png","magnet":null}][{"title":"[生肉]琉璃神社首发Energy Kyo-ka!! / えなじぃキョーカ!! [episode 01]附漫画","link":"http://www.llss.cool/wp/all/comic/%e7%90%89%e7%92%83%e7%a5%9e%e7%a4%be%e9%a6%96%e5%8f%91energy-kyo-ka-%e3%81%88%e3%81%aa%e3%81%98%e3%81%83%e3%82%ad%e3%83%a7%e3%83%bc%e3%82%ab-episode-01/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/QQ图片20160409184132.png","magnet":["889D6F8C62AC9FA0DBD11496C3A4F71538B3F47D","F80F767309390FD3A57B05AE4E1D0E59731A207A"]},{"title":"[魔人] 黒獣(クロイヌ)第4集 (1-4) ~クラウディア×セレスティン 義父との関係。女神が堕ちる朝には…編~","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%ba-%e9%bb%92%e7%8d%a3%ef%bc%88%e3%82%af%e3%83%ad%e3%82%a4%e3%83%8c%ef%bc%89%e7%ac%ac4%e9%9b%86-%ef%bc%881-4%ef%bc%89-%ef%bd%9e%e3%82%af%e3%83%a9%e3%82%a6%e3%83%87%e3%82%a3%e3%82%a2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/2dq9CKt.jpg","magnet":["713faeb243c7ee86429db6fdf2a4d33d36d3df37"]},{"title":"[ドールハウス] Support_Girl","link":"http://www.llss.cool/wp/all/anime/%e3%83%89%e3%83%bc%e3%83%ab%e3%83%8f%e3%82%a6%e3%82%b9-support_girl/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/UfPdFKL.jpg","magnet":["0945ab37991908e8e47e28cb1f23b26c76051f1a"]},{"title":"[AniMan] 艶美 その弐 (1-2)","link":"http://www.llss.cool/wp/all/anime/animan-%e8%89%b6%e7%be%8e-%e3%81%9d%e3%81%ae%e5%bc%90-1-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/RPyMFXN.jpg","magnet":["KTGMFKQMXJZGJP6TBXPYEX37S4NNYFG7"]},{"title":"[PashminaA] ふぇちかの!","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%81%b5%e3%81%87%e3%81%a1%e3%81%8b%e3%81%ae%ef%bc%81/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/SoU6li2.jpg","magnet":["ab11f9gf6a0af104ab3cf243s539cd186ecds4f39042e8"]},{"title":"[PashminaA] いただきっ!セーエキ ~吸血鬼のフルコース~","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%81%84%e3%81%9f%e3%81%a0%e3%81%8d%e3%81%a3%ef%bc%81%e3%82%bb%e3%83%bc%e3%82%a8%e3%82%ad-%ef%bd%9e%e5%90%b8%e8%a1%80%e9%ac%bc%e3%81%ae%e3%83%95%e3%83%ab%e3%82%b3%e3%83%bc%e3%82%b9/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/La8aQZ2.jpg","magnet":["75811574c58ec9fc5f22ea643b7e6e20a0521cfa"]},{"title":"[PashminaA]もう挟まずにはいられない ~星にお願いしたらこんなにおっきくなっちゃった!~","link":"http://www.llss.cool/wp/all/anime/pashminaa%e3%82%82%e3%81%86%e6%8c%9f%e3%81%be%e3%81%9a%e3%81%ab%e3%81%af%e3%81%84%e3%82%89%e3%82%8c%e3%81%aa%e3%81%84-%ef%bd%9e%e6%98%9f%e3%81%ab%e3%81%8a%e9%a1%98%e3%81%84%e3%81%97%e3%81%9f/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/Bv5MVaI.jpg","magnet":["d76e9e503fdb13ca779ed1fc63a54b7e0b7551ba"]},{"title":"【最终幻想】尤菲·如月【动画+3D同人游戏】","link":"http://www.llss.cool/wp/all/game/%e3%80%90%e6%9c%80%e7%bb%88%e5%b9%bb%e6%83%b3%e3%80%91%e5%b0%a4%e8%8f%b2%c2%b7%e5%a6%82%e6%9c%88%e3%80%90%e5%8a%a8%e7%94%bb3d%e5%90%8c%e4%ba%ba%e6%b8%b8%e6%88%8f%e3%80%91-2/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/200px-Ffviiyuffie.jpg","magnet":["65226935E5ACEEF223F84DC58C0C0A7D7D366589","C1A94B5E6B11C2D45DB894486885D908331E5BFC"]},{"title":"[PashminaA] アマネェ! ~トモダチンチでこんな事になるなんて!~","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%82%a2%e3%83%9e%e3%83%8d%e3%82%a7%ef%bc%81-%ef%bd%9e%e3%83%88%e3%83%a2%e3%83%80%e3%83%81%e3%83%b3%e3%83%81%e3%81%a7%e3%81%93%e3%82%93%e3%81%aa%e4%ba%8b%e3%81%ab%e3%81%aa%e3%82%8b/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/jRGAkoK.jpg","magnet":["40d511c3c28b571cc3c25d2d7dac58ff7e39c43e"]}][{"title":"[Pashmina] かくしデレ -初×初シンドローム- #3 (1-3)","link":"http://www.llss.cool/wp/all/anime/pashmina-%e3%81%8b%e3%81%8f%e3%81%97%e3%83%87%e3%83%ac-%ef%bc%8d%e5%88%9dx%e5%88%9d%e3%82%b7%e3%83%b3%e3%83%89%e3%83%ad%e3%83%bc%e3%83%a0%ef%bc%8d-%ef%bc%833-%ef%bc%881-3%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/wOqJzQD.jpg","magnet":["923816c3fe99e8cc2745fa780b235f3cc02dde7e"]},{"title":"[Pashmina]かくしデレ #1 附带漫画","link":"http://www.llss.cool/wp/all/comic/pashmina%e3%81%8b%e3%81%8f%e3%81%97%e3%83%87%e3%83%ac-%ef%bc%831-%e9%99%84%e5%b8%a6%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/70Owaga.jpg","magnet":["9722a9a40046087807ac35930eb5d6c7384d26fe"]},{"title":"[Pashmina(パシュミナ)]姉恋 スキ・キライ・ダイスキ。 #1 附 漫画","link":"http://www.llss.cool/wp/all/comic/pashmina%ef%bc%88%e3%83%91%e3%82%b7%e3%83%a5%e3%83%9f%e3%83%8a%ef%bc%89%e5%a7%89%e6%81%8b-%e3%82%b9%e3%82%ad%e3%83%bb%e3%82%ad%e3%83%a9%e3%82%a4%e3%83%bb%e3%83%80%e3%82%a4%e3%82%b9%e3%82%ad%e3%80%82/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/7VZ4Oa1.jpg","magnet":["9914a7fa19974d59c03786fd75170ae0387e0d0e"]},{"title":"金色之暗 同人游戏 附提取动画[マーマレード★スター] とらぶるだいあり~・ごーるど TO LOVE 3D","link":"http://www.llss.cool/wp/all/anime/%e9%87%91%e8%89%b2%e4%b9%8b%e6%9a%97-%e5%90%8c%e4%ba%ba%e6%b8%b8%e6%88%8f-%e9%99%84%e6%8f%90%e5%8f%96%e5%8a%a8%e7%94%bb%e3%83%9e%e3%83%bc%e3%83%9e%e3%83%ac%e3%83%bc%e3%83%89%e2%98%85%e3%82%b9/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/rPRw4.jpg","magnet":["c2ea1dc1ced6c35dd7a3d72bf245bc64a5bf26d6","fd2b240cd2225019876de3d5282552bf5ce92cc5"]},{"title":"青龍君 (1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%9d%92%e9%be%8d%e5%90%9b-%ef%bc%881-2%ef%bc%89/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/LT0id.jpg","magnet":["383F6A86A77E9FE6AB2D6B8D42D2DDE0129FD7FD","3AF8FDDBDF2CF95BA1D6B4810798F7F7CFE9DDE7"]},{"title":"既然有人伸手了 那就发吧 该来的总是会来的","link":"http://www.llss.cool/wp/all/anime/%e6%97%a2%e7%84%b6%e6%9c%89%e4%ba%ba%e4%bc%b8%e6%89%8b%e4%ba%86-%e9%82%a3%e5%b0%b1%e5%8f%91%e5%90%a7-%e8%af%a5%e6%9d%a5%e7%9a%84%e6%80%bb%e6%98%af%e4%bc%9a%e6%9d%a5%e7%9a%84/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/6L75S.jpg","magnet":["4da302bb8db039bdcbe1529138c1591759c629bf"]},{"title":"TMA 制服縞パンポニーテール","link":"http://www.llss.cool/wp/all/anime/tma-%e5%88%b6%e6%9c%8d%e7%b8%9e%e3%83%91%e3%83%b3%e3%83%9d%e3%83%8b%e3%83%bc%e3%83%86%e3%83%bc%e3%83%ab/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/nfPnE.jpg","magnet":["4df04f20ad87ca285677be647fdfbd247ef15d2b","65a370707dca596b264ad384458637abd5f86c70"]},{"title":"TO LOVE 同人动画 3D游戏","link":"http://www.llss.cool/wp/all/anime/to-love-%e5%90%8c%e4%ba%ba%e5%8a%a8%e7%94%bb-3d%e6%b8%b8%e6%88%8f/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/tolove2.jpg","magnet":["243468B4773865D44B63EBDEB4BF6702E41A4F12","714BA698D974267BCB3C97375F4CF2AB7E84827F"]},{"title":"[桜都字幕组][Queen Bee]SECRET JOURNEY(シークレットジャーニー) VOL.2","link":"http://www.llss.cool/wp/all/anime/%e6%a1%9c%e9%83%bd%e5%ad%97%e5%b9%95%e7%bb%84queen-beesecret-journey%ef%bc%88%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%8b%e3%83%bc%ef%bc%89-vol-2/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f2kvx95zshj20zf0jumzs.jpg","magnet":["8F6AEB52695CEE0255D6D6EA73EF463CE7EF2213"]}][{"title":"[桜都字幕组][chippai]Aサイズ クラスメイト Anime Edition 2限目","link":"http://www.llss.cool/wp/all/anime/chippai%e7%ad%94%e3%82%b5%e3%82%a4%e3%82%ba%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a1%e3%82%a4%e3%83%88%e5%8a%a8%e6%bc%ab%e7%89%882%e9%99%90%e7%9b%ae/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f2m2f4r9hxj20ze0jy0ud.jpg","magnet":["3F615237FA33B3D40E97D8660094947197C4BAED","CC9FC3AD4EDCAE32646849B7F24DD50A5A41ABB9","5F02BCC9BC6712CE538E404047759C14F57DE678"]},{"title":"[Queen Bee]SECRET JOURNEY(シークレット·ジャーニー) VOL.2","link":"http://www.llss.cool/wp/all/anime/queen-beesecret-journey%ef%bc%88%e3%82%b7%e3%83%bc%e3%82%af%e3%83%ac%e3%83%83%e3%83%88%c2%b7%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%8b%e3%83%bc%ef%bc%89-vol-2/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f2kvx7oavdj20zc0jx76h.jpg","magnet":["8F6AEB52695CEE0255D6D6EA73EF463CE7EF2213"]},{"title":"[EDGE]少女から娼女へ… #2","link":"http://www.llss.cool/wp/all/anime/edge%e5%b0%91%e5%a5%b3%e3%81%8b%e3%82%89%e5%a8%bc%e5%a5%b3%e3%81%b8-%ef%bc%832/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1ugjsvrrwj20zh0jxwgc.jpg","magnet":["48915DAB2018A5C4D89ECA6AC5C99A00965DAF72"]},{"title":"[メリー・ジェーン]あねよめカルテット 下巻 甘やかし系お姉ちゃんといたずら好きお姉ちゃん","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%81%82%e3%81%ad%e3%82%88%e3%82%81%e3%82%ab%e3%83%ab%e3%83%86%e3%83%83%e3%83%88-%e4%b8%8b%e5%b7%bb-%e7%94%98%e3%82%84/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f2dnsnqfo3j20zi0jv0u2.jpg","magnet":["233AC214631C410608565C16B0E739CB169CABA1"]},{"title":"[PoRO]牝教師4 ~穢された教壇~ 「鉄仮面女教師・マキ ~蔑み漏れる罵り吐息」","link":"http://www.llss.cool/wp/all/anime/poro%e7%89%9d%e6%95%99%e5%b8%ab4-%ef%bd%9e%e7%a9%a2%e3%81%95%e3%82%8c%e3%81%9f%e6%95%99%e5%a3%87%ef%bd%9e-%e3%80%8c%e9%89%84%e4%bb%ae%e9%9d%a2%e5%a5%b3%e6%95%99%e5%b8%ab%e3%83%bb%e3%83%9e%e3%82%ad/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f2dnaoc17kj20zf0jvabm.jpg","magnet":["94A2FADFC28E4C79B5B4C3087CE049FCE2835491"]},{"title":"[ピンクパイナップル]PRETTY×CATION THE ANIMATION #1「初恋、それぞれの距離」","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abprettyxcation-the-animation-%ef%bc%831%e3%80%8c%e5%88%9d%e6%81%8b%e3%80%81%e3%81%9d%e3%82%8c%e3%81%9e%e3%82%8c/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f2bi1pc84qj20zh0jwmya.jpg","magnet":["1B969036397186DB7060CF384F22D5C9D9D3D971"]},{"title":"[Collaboration Works]えろげー!~Hもゲームも開発三昧~ 露天のお風呂でいい気持ち 深夜のお外で肝試し編","link":"http://www.llss.cool/wp/all/anime/collaboration-works%e3%81%88%e3%82%8d%e3%81%92%e3%83%bc%ef%bc%81%ef%bd%9eh%e3%82%82%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%82%e9%96%8b%e7%99%ba%e4%b8%89%e6%98%a7%ef%bd%9e-%e9%9c%b2%e5%a4%a9%e3%81%ae/","img":"http://ww4.sinaimg.cn/large/e51463bbgw1f2cg4w6lgwj20zh0jxju3.jpg","magnet":["88BC0489CF6917C9F1BA1B2C1BDCFCF41667F52C"]},{"title":"2016年3月 各组作品合集","link":"http://www.llss.cool/wp/all/anime/2016%e5%b9%b43%e6%9c%88-%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww3.sinaimg.cn/large/8c007b5cjw1f2cdn32okyj21kw0x6nd6.jpg","magnet":["199091B9C8E891BF82355634D61036E2CFA09DD6","SMYKJR3OWTM5LVHGQABSVOUJ4YR7IXTB"]},{"title":"[EDGE]ドロップアウト ~公衆・渡会静華~","link":"http://www.llss.cool/wp/all/anime/edge%e3%83%89%e3%83%ad%e3%83%83%e3%83%97%e3%82%a2%e3%82%a6%e3%83%88-%ef%bd%9e%e5%85%ac%e8%a1%86%e3%83%bb%e6%b8%a1%e4%bc%9a%e9%9d%99%e8%8f%af%ef%bd%9e/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f2a8kzyybkj20zg0jxmyu.jpg","magnet":["2C474EE7F293E8283F326B2FB03BA39B56DF8A49","Fow]Beastly_Bacchanalia["]}][{"title":"[AniMan] イエナイコト -2nd scene- (1-3)","link":"http://www.llss.cool/wp/all/anime/animan-%e3%82%a4%e3%82%a8%e3%83%8a%e3%82%a4%e3%82%b3%e3%83%88-2nd-scene-1-3/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1f29d7lo2lfj20zk0k0q64.jpg","magnet":["0770141ffb3a4e3265f98679f7288ca876b564de"]},{"title":"[ばにぃうぉ~か~]OVA ましゅまろ☆いもうと☆さっきゅばす☆ #1 ふたりの☆さっきゅばす","link":"http://www.llss.cool/wp/all/anime/%e3%81%b0%e3%81%ab%e3%81%83%e3%81%86%e3%81%89%ef%bd%9e%e3%81%8b%ef%bd%9eova-%e3%81%be%e3%81%97%e3%82%85%e3%81%be%e3%82%8d%e2%98%86%e3%81%84%e3%82%82%e3%81%86%e3%81%a8%e2%98%86%e3%81%95%e3%81%a3/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f23f2ipbbfj20zh0jxtac.jpg","magnet":["4E266AF10B541DB65DDEBCCC6270592C511370A2"]},{"title":"[WHITE BEAR]新生 ふたなりアイドルでかたま系! 前編 ~の宴は超絶MAX~","link":"http://www.llss.cool/wp/all/anime/white-bear%e6%96%b0%e7%94%9f-%e3%81%b5%e3%81%9f%e3%81%aa%e3%82%8a%e3%82%a2%e3%82%a4%e3%83%89%e3%83%ab%e3%81%a7%e3%81%8b%e3%81%9f%e3%81%be%e7%b3%bb%ef%bc%81-%e5%89%8d%e7%b7%a8-%ef%bd%9e%e3%81%ae/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1irfx2kpqj20zk0jy76r.jpg","magnet":["3D74F915554C26ED1A5A19542A525AC3F8B24B37"]},{"title":"[Queen Bee]私は、快楽依存症 1[弥美津ヒロ]","link":"http://www.llss.cool/wp/all/anime/queen-bee%e7%a7%81%e3%81%af%e3%80%81%e5%bf%ab%e6%a5%bd%e4%be%9d%e5%ad%98%e7%97%87-1%ef%bc%bb%e5%bc%a5%e7%be%8e%e6%b4%a5%e3%83%92%e3%83%ad%ef%bc%bd/","img":"http://ww3.sinaimg.cn/large/e51463bbgw1f1kue5gnysj20zh0jvjti.jpg","magnet":["B00CC020A0339433F741EDCB600DCDF860675EB7"]},{"title":"[メリー・ジェーン]アマカノ 星川こはる編","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%ef%bd%a5%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3%e3%82%a2%e3%83%9e%e3%82%ab%e3%83%8e-%e6%98%9f%e5%b7%9d%e3%81%93%e3%81%af%e3%82%8b%e7%b7%a8/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f1n643iizsj20zf0jx76p.jpg","magnet":["EBDA615DE411C6C349B92B08A308125474BBA1FE"]},{"title":"[魔人]euphoria 目指す楽園は神聖なる儀式の先に。救世主の母は……白夜凛音!? 編[附前作]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%baeuphoria-%e7%9b%ae%e6%8c%87%e3%81%99%e6%a5%bd%e5%9c%92%e3%81%af%e7%a5%9e%e8%81%96%e3%81%aa%e3%82%8b%e5%84%80%e5%bc%8f%e3%81%ae%e5%85%88%e3%81%ab%e3%80%82%e6%95%91%e4%b8%96%e4%b8%bb/","img":"http://ww1.sinaimg.cn/large/e51463bbgw1f1m82qcshcj20zh0jymyb.jpg","magnet":["0D787B3AF81663F1CF1FC1EDF397DFE6F012829A"]},{"title":"[ピンクパイナップル]小悪魔カノジョ THE ANIMATION #2 「かたこい」(1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e5%b0%8f%e6%82%aa%e9%ad%94%e3%82%ab%e3%83%8e%e3%82%b8%e3%83%a7-the-animation-2-%e3%80%8c%e3%81%8b%e3%81%9f%e3%81%93/","img":"http://ww2.sinaimg.cn/large/e51463bbgw1f1fc3rtqnsj20zi0jxwg5.jpg","magnet":["9b1348dccc0d76c0fe7bbcdf2db2e982231e75c9"]},{"title":"[EDGE] 少女から娼女へ… #1","link":"http://www.llss.cool/wp/all/anime/edge-%e5%b0%91%e5%a5%b3%e3%81%8b%e3%82%89%e5%a8%bc%e5%a5%b3%e3%81%b8-%ef%bc%831/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1f12pdf2h74j20jg0d2tb0.jpg","magnet":["55F296CD7B25866B99E66E0E28200F7FF77D48F7"]},{"title":"[メリー・ジェーン] 厳格クールな先生がアヘボテオチ!(1-2) 下巻 絶頂漬けの10日間","link":"http://www.llss.cool/wp/all/anime/%e3%83%a1%e3%83%aa%e3%83%bc%e3%83%bb%e3%82%b8%e3%82%a7%e3%83%bc%e3%83%b3-%e5%8e%b3%e6%a0%bc%e3%82%af%e3%83%bc%e3%83%ab%e3%81%aa%e5%85%88%e7%94%9f%e3%81%8c%e3%82%a2%e3%83%98%e3%83%9c%e3%83%86/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1euvg9nzfydj20zk0k0acw.jpg","magnet":["143a3f3c36f4b2ac576dad8164bf6191506a5fed"]}][{"title":"[@OZ] アリスの森 快楽奴隷人形 DL版","link":"http://www.llss.cool/wp/all/anime/oz-%e3%82%a2%e3%83%aa%e3%82%b9%e3%81%ae%e6%a3%ae-%e5%bf%ab%e6%a5%bd%e5%a5%b4%e9%9a%b7%e4%ba%ba%e5%bd%a2-dl%e7%89%88/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1er46j8w9axj20j804vtb7.jpg","magnet":["31291b9cde88d1a908dc81448317687e9c61f62f","77efe296e0b8667ad6d581945d36002492ec9ae4"]},{"title":"[PoRO petit] 鬼父 Refresh 「小生意気ロマンティックが止まらない」(1-9)","link":"http://www.llss.cool/wp/all/anime/poro-petit-%e9%ac%bc%e7%88%b6-refresh-%e3%80%8c%e5%b0%8f%e7%94%9f%e6%84%8f%e6%b0%97%e3%83%ad%e3%83%9e%e3%83%b3%e3%83%86%e3%82%a3%e3%83%83%e3%82%af%e3%81%8c%e6%ad%a2%e3%81%be%e3%82%89%e3%81%aa/","img":"http://ww2.sinaimg.cn/large/4bab3bccgw1ev4qhbtkdfj20zk0k042d.jpg","magnet":["404d1cf190660dfd301e289411cfc3185fcb2c92"]},{"title":"[鈴木みら乃] 学園で時間よ止まれ(1-4) 時間停止の悪夢。惨劇最終章は……“止まらない”編","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-%e5%ad%a6%e5%9c%92%e3%81%a7%e6%99%82%e9%96%93%e3%82%88%e6%ad%a2%e3%81%be%e3%82%8c1-4-%e6%99%82%e9%96%93%e5%81%9c%e6%ad%a2%e3%81%ae%e6%82%aa%e5%a4%a2/","img":"http://ww1.sinaimg.cn/large/4bab3bccgw1exmv58c0oyj20zk0k0n1s.jpg","magnet":["7f5af34eb0b25b5c44159cbd3722e7546a178ddc"]},{"title":"[ピンクパイナップル] 相思相愛ノート (1-2)","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab-%e7%9b%b8%e6%80%9d%e7%9b%b8%e6%84%9b%e3%83%8e%e3%83%bc%e3%83%88-1-2/","magnet":["f0abc22bb202100eaaaea7f612c9c7f252519b1b"]},{"title":"[ピンクパイナップル]あねき… MY SWEET ELDER SISTER コアMIX メガ盛り オカズですよ","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%ab%e3%81%82%e3%81%ad%e3%81%8d-my-sweet-elder-sister-%e3%82%b3%e3%82%a2mix-%e3%83%a1%e3%82%ac%e7%9b%9b%e3%82%8a/","magnet":["e1d9f16959a14fc415c9d3fc779f54a998cf6f75"]},{"title":"[ピンクパイナップル]TSF物语(1-2)[Maho.sub]","link":"http://www.llss.cool/wp/all/anime/%e3%83%94%e3%83%b3%e3%82%af%e3%83%91%e3%82%a4%e3%83%8a%e3%83%83%e3%83%97%e3%83%abtsf%e7%89%a9%e8%af%ad%ef%bc%881-2%ef%bc%89maho-sub/","img":"http://llss.cool/wp/wp-content/uploads/2015/12/8jiHC.jpg","magnet":["D5453A764FDD631018BC13614D06B75D3AD90B42"]},{"title":"[Queen Bee] 私が虜になって犯る 1[井雲泰助]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a7%81%e3%81%8c%e8%99%9c%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e7%8a%af%e3%82%8b-1%e4%ba%95%e9%9b%b2%e6%b3%b0%e5%8a%a9/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1ewbgu2ncrij20zk0k076s.jpg","magnet":["e77b8a59efe09df9631dc2041d053ea10e0d5cd6"]},{"title":"[chippai] ちっちゃなおなか -ひみつのあそび- (1-2)","link":"http://www.llss.cool/wp/all/anime/chippai-%e3%81%a1%e3%81%a3%e3%81%a1%e3%82%83%e3%81%aa%e3%81%8a%e3%81%aa%e3%81%8b-%e3%81%b2%e3%81%bf%e3%81%a4%e3%81%ae%e3%81%82%e3%81%9d%e3%81%b3-1-2/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1extql41cgqj20zk0k0dix.jpg","magnet":["ff7cea0e72af9a275f07d8797e50db833d86e630"]},{"title":"[Queen Bee] 私が虜になって犯る 2 [井雲泰助]","link":"http://www.llss.cool/wp/all/anime/queen-bee-%e7%a7%81%e3%81%8c%e8%99%9c%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%a6%e7%8a%af%e3%82%8b-2-%e4%ba%95%e9%9b%b2%e6%b3%b0%e5%8a%a9/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1ey1tgy382rj20zk0k0q7q.jpg","magnet":["89d49802af551864a5a00b149fc882ab6ccc5258"]}][{"title":"[夜桜字幕组]2015年10月3D合集","link":"http://www.llss.cool/wp/all/anime/%e5%a4%9c%e6%a1%9c%e5%ad%97%e5%b9%95%e7%bb%842015%e5%b9%b410%e6%9c%883d%e5%90%88%e9%9b%86/","img":"http://ww4.sinaimg.cn/large/4bab3bccgw1exw0eamv3dj20m80go0tu.jpg","magnet":["GB]7a7e7810a09884cc56c06e","][171003][opiumud]Yoshiwara"]},{"title":"2015年9月各组作品合集","link":"http://www.llss.cool/wp/all/anime/2015%e5%b9%b49%e6%9c%88%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://ww4.sinaimg.cn/mw690/8c007b5cjw1ewgcr8d1e7j21kw0w87lu.jpg","magnet":["wKgDWlXlSHbTdCZYACEo6P5WxLo810","432682714D796B942950D49410B0DB5F5B6CEFBD","2D10079A5CC81E2C5A40C2DBC174D8431979975F"]},{"title":"2015年8月各组作品合集","link":"http://www.llss.cool/wp/all/anime/2015%e5%b9%b48%e6%9c%88%e5%90%84%e7%bb%84%e4%bd%9c%e5%93%81%e5%90%88%e9%9b%86/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/eJ4kX.jpg","magnet":null},{"title":"2015年7月里番合集","link":"http://www.llss.cool/wp/all/anime/2015%e5%b9%b47%e6%9c%88%e9%87%8c%e7%95%aa%e5%90%88%e9%9b%86/","img":"http://ww3.sinaimg.cn/large/4bab3bccgw1euoeeht08pj20vi0hqk5b.jpg","magnet":["AF50532FF65D26652CA57DE77748C7E1C3C83F70","FC8755B575D9A7F76AC5FCD83F0E1456306C1C4A"]},{"title":"[PoRO]Chu(治癒)してあげちゃう~(1-2)「エロ可愛い区 女教師 優」","link":"http://www.llss.cool/wp/all/anime/porochu%ef%bc%88%e6%b2%bb%e7%99%92%ef%bc%89%e3%81%97%e3%81%a6%e3%81%82%e3%81%92%e3%81%a1%e3%82%83%e3%81%86%ef%bd%9e%ef%bc%881-2%ef%bc%89%e3%80%8c%e3%82%a8%e3%83%ad%e5%8f%af%e6%84%9b%e3%81%84/","magnet":["4c6ec15bcfedc28fa590c2c785b98b8f77e169cc"]},{"title":"[鈴木みら乃] RIN×SEN+Ran→Sem Cross Mix 第2话(1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-rinxsen%ef%bc%8bran%e2%86%92sem-cross-mix-%e7%ac%ac2%e8%af%9d%ef%bc%881-2%ef%bc%89/","magnet":["b36f6a17b5d273136e19dd8216e78be8fa37a0e0"]},{"title":"[鈴木みら乃] Wanna. ~SpartanSex Spermax!!!~ (1-2)","link":"http://www.llss.cool/wp/all/anime/%e9%88%b4%e6%9c%a8%e3%81%bf%e3%82%89%e4%b9%83-wanna-%ef%bd%9espartansex-spermax%ef%bd%9e-1-2/","magnet":["7fc36bcd3962a50dad7a4179e4ea5a97b1120a26"]},{"title":"[PashminaA] フルエルクチビル fuzzy lips 1","link":"http://www.llss.cool/wp/all/anime/pashminaa-%e3%83%95%e3%83%ab%e3%82%a8%e3%83%ab%e3%82%af%e3%83%81%e3%83%93%e3%83%ab-fuzzy-lips-1/","magnet":["aff69777a9569c054114d5788f050b1ea69eef56"]},{"title":"[Pashmina] 純情少女エトセトラ ~ネット▼ラブ~","link":"http://www.llss.cool/wp/all/anime/pashmina-%e7%b4%94%e6%83%85%e5%b0%91%e5%a5%b3%e3%82%a8%e3%83%88%e3%82%bb%e3%83%88%e3%83%a9-%ef%bd%9e%e3%83%8d%e3%83%83%e3%83%88%e2%96%bc%e3%83%a9%e3%83%96%ef%bd%9e/","magnet":["77aadf48f3c59c8624f795a2f80813a08ff5f777"]}][{"title":"[琉璃神社汉化][Pashmina(パシュミナ)]純情少女エトセトラ ~純情少女~(中英字幕)","link":"http://www.llss.cool/wp/all/anime/%e7%90%89%e7%92%83%e7%a5%9e%e7%a4%be%e6%b1%89%e5%8c%96pashmina%ef%bc%88%e3%83%91%e3%82%b7%e3%83%a5%e3%83%9f%e3%83%8a%ef%bc%89%e7%b4%94%e6%83%85%e5%b0%91%e5%a5%b3%e3%82%a8%e3%83%88%e3%82%bb/","magnet":["61e79060e3f87397d2669dbb9a60c52da6bcd5ca"]},{"title":"[Pashmina]かくしデレ -妹チョコH- #2[附第一话]","link":"http://www.llss.cool/wp/all/anime/pashmina%e3%81%8b%e3%81%8f%e3%81%97%e3%83%87%e3%83%ac-%ef%bc%8d%e5%a6%b9%e3%83%81%e3%83%a7%e3%82%b3h%ef%bc%8d-%ef%bc%832%e9%99%84%e7%ac%ac%e4%b8%80%e8%af%9d/","magnet":["f2b404fc435f5cc2850439f609bc0a93926fd221"]},{"title":"[BOOTLEG] [Selen] 借金姉妹 1-2 OVA动画+原作游戏","link":"http://www.llss.cool/wp/all/game/bootleg-selen-%e5%80%9f%e9%87%91%e5%a7%89%e5%a6%b9-1-2-ova%e5%8a%a8%e7%94%bb%e5%8e%9f%e4%bd%9c%e6%b8%b8%e6%88%8f/","magnet":["438ff52dd5d743623c6528a0bddf124100e332bf","ed4b3286d8bd6396ebaa692b14ef4f757e54890a","e08cf6961748e89978638bf7bf9aa51a32fb4e0d","8499c093a116ff5a51292519465c6a59d08056ff"]},{"title":"某科学的超电磁炮S 第2季 01-08 附:第一季1-24合集 [目录]","link":"http://www.llss.cool/wp/all/anime/%e6%9f%90%e7%a7%91%e5%ad%a6%e7%9a%84%e8%b6%85%e7%94%b5%e7%a3%81%e7%82%aes-%e7%ac%ac2%e5%ad%a3-01-08-%e9%99%84%e7%ac%ac%e4%b8%80%e5%ad%a31-24%e5%90%88%e9%9b%86-%e7%9b%ae%e5%bd%95/","magnet":["0a723ae35e95a0a0befbe99ba648a59b8dc39752","7a5e5cb168948a1468cec1cc6523ca91d7bf1b4d","e16024d0b438d569057079e071ee7c26c3108119","1c84ab0b243759f830b260e9cab931ee29a6ba4f","7c6354edc90aa0dba524abb5a6dab5664cf6c189"]},{"title":"[Pashmina]姉恋 スキ キライ ダイスキ。 (1-2)附漫画","link":"http://www.llss.cool/wp/all/comic/pashmina%e5%a7%89%e6%81%8b-%e3%82%b9%e3%82%ad-%e3%82%ad%e3%83%a9%e3%82%a4-%e3%83%80%e3%82%a4%e3%82%b9%e3%82%ad%e3%80%82-%ef%bc%881-2%ef%bc%89%e9%99%84%e6%bc%ab%e7%94%bb/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/7VZ4Oa1.jpg","magnet":["537bc665c9dba08cebb8e0cc43c25dacacc6031e"]},{"title":"【少女映画】[コスプレ一本勝負] 马猴烧酒COS","link":"http://www.llss.cool/wp/all/comic/%e3%80%90%e5%b0%91%e5%a5%b3%e6%98%a0%e7%94%bb%e3%80%91%e3%82%b3%e3%82%b9%e3%83%97%e3%83%ac%e4%b8%80%e6%9c%ac%e5%8b%9d%e8%b2%a0-%e9%a9%ac%e7%8c%b4%e7%83%a7%e9%85%92cos/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/HfWCU.jpg","magnet":["64B327AB052C964A18A102C1AE58198538D2F27B"]},{"title":"[魔人]Euphoria 上卷 ~真中合歓 地獄始動編~[字幕]","link":"http://www.llss.cool/wp/all/anime/%e9%ad%94%e4%ba%baeuphoria-%e4%b8%8a%e5%8d%b7-%ef%bd%9e%e7%9c%9f%e4%b8%ad%e5%90%88%e6%ad%93-%e5%9c%b0%e7%8d%84%e5%a7%8b%e5%8b%95%e7%b7%a8%ef%bd%9e%e5%ad%97%e5%b9%95/","img":"http://llss.cool/wp/wp-content/uploads/2016/04/Kd6gD.jpg","magnet":["73458A4ED41A4A2080602C9177F8BFACCFF8686D"]},{"title":"【K-ON】阿梓喵 的同人小游戏(+动画)","link":"http://www.llss.cool/wp/all/anime/%e3%80%90k-on%e3%80%91%e9%98%bf%e6%a2%93%e5%96%b5-%e7%9a%84%e5%90%8c%e4%ba%ba%e5%b0%8f%e6%b8%b8%e6%88%8f%ef%bc%88%e5%8a%a8%e7%94%bb%ef%bc%89/","magnet":["342327B31F19343E767567D90E47A8362D5ADCBE","XPMediaCenterEdition","29B3F98E7EF8D349671658B1AAD2F6526F70B4F5"]},{"title":"【最终幻想】尤菲·如月【动画+3D同人游戏】","link":"http://www.llss.cool/wp/all/anime/%e3%80%90%e6%9c%80%e7%bb%88%e5%b9%bb%e6%83%b3%e3%80%91%e5%b0%a4%e8%8f%b2%c2%b7%e5%a6%82%e6%9c%88%e3%80%90%e5%8a%a8%e7%94%bb3d%e5%90%8c%e4%ba%ba%e6%b8%b8%e6%88%8f%e3%80%91/","magnet":["65226935E5ACEEF223F84DC58C0C0A7D7D366589","C1A94B5E6B11C2D45DB894486885D908331E5BFC"]}][{"title":"[AT-X] 缘之空 第01-12话 MKV 720p 合集","link":"http://www.llss.cool/wp/all/anime/at-x-%e7%bc%98%e4%b9%8b%e7%a9%ba-%e7%ac%ac01-12%e8%af%9d-mkv-720p-%e5%90%88%e9%9b%86/","magnet":["D73AB5CE10A862D2C145161059FCF6A773E5A15D"]}] \ No newline at end of file diff --git a/play/pa/package-lock.json b/play/pa/package-lock.json new file mode 100644 index 0000000..5db7ab4 --- /dev/null +++ b/play/pa/package-lock.json @@ -0,0 +1,308 @@ +{ + "name": "pa", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "10.3.3", + "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-10.3.3.tgz", + "integrity": "sha1-h5jZ45ry+mBPcV7mprGXllKORsM=" + }, + "async": { + "version": "2.6.1", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz", + "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=", + "requires": { + "lodash": "^4.17.10" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "http://registry.npm.taobao.org/cheerio/download/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.2.tgz", + "integrity": "sha1-3YojVTB1L5iPmghE8/xYnjERElw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz", + "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "eventproxy": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/eventproxy/download/eventproxy-1.0.0.tgz", + "integrity": "sha1-jzhIkIJODAbEDcP1nOJER5OCHZk=", + "requires": { + "debug": "^2.6.8" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/formidable/download/formidable-1.2.1.tgz", + "integrity": "sha1-cPt8oCkO5v+WEJBBX0s989IIJlk=" + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "lodash": { + "version": "4.17.10", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz", + "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=" + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz", + "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.18.tgz", + "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", + "requires": { + "mime-db": "~1.33.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nth-check": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "~1.0.0" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz", + "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=", + "requires": { + "@types/node": "*" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + }, + "qs": { + "version": "6.5.2", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "superagent": { + "version": "3.8.3", + "resolved": "http://registry.npm.taobao.org/superagent/download/superagent-3.8.3.tgz", + "integrity": "sha1-Rg6g29t9WxG8T3jeulZfhqF44Sg=", + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} diff --git a/play/pa/package.json b/play/pa/package.json new file mode 100644 index 0000000..c36c4a1 --- /dev/null +++ b/play/pa/package.json @@ -0,0 +1,17 @@ +{ + "name": "pa", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "async": "^2.6.1", + "cheerio": "^1.0.0-rc.2", + "eventproxy": "^1.0.0", + "superagent": "^3.8.3" + } +} diff --git a/play/pa/promise.js b/play/pa/promise.js new file mode 100644 index 0000000..3f9725d --- /dev/null +++ b/play/pa/promise.js @@ -0,0 +1,15 @@ +const p = () => { + return new Promise((resolve, reject) => { + setTimeout(() => { + reject(false) + console.log('xxxxx') + resolve(true) + console.log('111') + }, 1000); + }) +} +p().then(data => { + console.log(data) +}).catch(err => { + console.log(err) +}) \ No newline at end of file diff --git a/play/spider/package-lock.json b/play/spider/package-lock.json new file mode 100644 index 0000000..b84a185 --- /dev/null +++ b/play/spider/package-lock.json @@ -0,0 +1,2362 @@ +{ + "name": "spider", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/accepts": { + "version": "https://registry.npm.taobao.org/@types/accepts/download/@types/accepts-1.3.4.tgz", + "integrity": "sha1-RnqI+x1bpZSZjurTHAk9d9HL6Z4=", + "dev": true, + "requires": { + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "@types/body-parser": { + "version": "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.16.8.tgz", + "integrity": "sha1-aH7DQUBiSjvsKxqOqSaEeK6PO+M=", + "dev": true, + "requires": { + "@types/express": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.11.0.tgz", + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "@types/cheerio": { + "version": "0.22.6", + "resolved": "http://registry.npm.taobao.org/@types/cheerio/download/@types/cheerio-0.22.6.tgz", + "integrity": "sha1-rYxjCpQu/j/FkWWFeFG1X5XeLVA=", + "dev": true + }, + "@types/connect": { + "version": "https://registry.npm.taobao.org/@types/connect/download/@types/connect-3.4.31.tgz", + "integrity": "sha1-H5LWsRfswFB2xJ7NAk95duUoutk=", + "dev": true, + "requires": { + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "@types/cookies": { + "version": "https://registry.npm.taobao.org/@types/cookies/download/@types/cookies-0.7.1.tgz", + "integrity": "sha1-+fIEvWdn04nuo7h2CeMMCQx3pUA=", + "dev": true, + "requires": { + "@types/connect": "https://registry.npm.taobao.org/@types/connect/download/@types/connect-3.4.31.tgz", + "@types/express": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.11.0.tgz", + "@types/keygrip": "https://registry.npm.taobao.org/@types/keygrip/download/@types/keygrip-1.0.1.tgz", + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "@types/events": { + "version": "https://registry.npm.taobao.org/@types/events/download/@types/events-1.1.0.tgz", + "integrity": "sha1-k7G+kfY8GERQOFJyxHtklv0CjgI=", + "dev": true + }, + "@types/express": { + "version": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.11.0.tgz", + "integrity": "sha1-I01lKAr5F8spBjS3qNa8rCSuy60=", + "dev": true, + "requires": { + "@types/body-parser": "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.16.8.tgz", + "@types/express-serve-static-core": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.11.0.tgz", + "@types/serve-static": "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.1.tgz" + } + }, + "@types/express-serve-static-core": { + "version": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.11.0.tgz", + "integrity": "sha1-qq9HJ3cZHD5W7HqhYANMa1Xr3Vk=", + "dev": true, + "requires": { + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "@types/http-assert": { + "version": "https://registry.npm.taobao.org/@types/http-assert/download/@types/http-assert-1.2.2.tgz", + "integrity": "sha1-F9/lqCGEqImJNdlv4urt030i2aQ=", + "dev": true + }, + "@types/keygrip": { + "version": "https://registry.npm.taobao.org/@types/keygrip/download/@types/keygrip-1.0.1.tgz", + "integrity": "sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg=", + "dev": true + }, + "@types/koa": { + "version": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz", + "integrity": "sha1-MxqS2/75PpehPOlZWvfYR0XCmHQ=", + "dev": true, + "requires": { + "@types/accepts": "https://registry.npm.taobao.org/@types/accepts/download/@types/accepts-1.3.4.tgz", + "@types/cookies": "https://registry.npm.taobao.org/@types/cookies/download/@types/cookies-0.7.1.tgz", + "@types/events": "https://registry.npm.taobao.org/@types/events/download/@types/events-1.1.0.tgz", + "@types/http-assert": "https://registry.npm.taobao.org/@types/http-assert/download/@types/http-assert-1.2.2.tgz", + "@types/keygrip": "https://registry.npm.taobao.org/@types/keygrip/download/@types/keygrip-1.0.1.tgz", + "@types/koa-compose": "https://registry.npm.taobao.org/@types/koa-compose/download/@types/koa-compose-3.2.2.tgz", + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "@types/koa-bodyparser": { + "version": "3.0.26", + "resolved": "http://registry.npm.taobao.org/@types/koa-bodyparser/download/@types/koa-bodyparser-3.0.26.tgz", + "integrity": "sha1-/heTL+Db9SNpvPlK3qXe9Bu2Jpw=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-compose": { + "version": "https://registry.npm.taobao.org/@types/koa-compose/download/@types/koa-compose-3.2.2.tgz", + "integrity": "sha1-3BBuAAu/kqOskA91bfRzRIh+6Ec=", + "dev": true + }, + "@types/koa-json": { + "version": "2.0.18", + "resolved": "http://registry.npm.taobao.org/@types/koa-json/download/@types/koa-json-2.0.18.tgz", + "integrity": "sha1-G+glK95HindNpC4M1wrsg8qUqAo=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-jwt": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/@types/koa-jwt/download/@types/koa-jwt-3.2.2.tgz", + "integrity": "sha1-3UlxHmYH4Rd1aWU5xp8h2hjjcgE=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-logger": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/@types/koa-logger/download/@types/koa-logger-3.1.0.tgz", + "integrity": "sha1-EzrNvFbYe1pVnKslUosIc4Go/A0=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-router": { + "version": "7.0.27", + "resolved": "http://registry.npm.taobao.org/@types/koa-router/download/@types/koa-router-7.0.27.tgz", + "integrity": "sha1-SZPVDLnv38+xHxbHJqSzT4+z4NQ=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-session": { + "version": "3.0.6", + "resolved": "http://registry.npm.taobao.org/@types/koa-session/download/@types/koa-session-3.0.6.tgz", + "integrity": "sha1-5F7gOi6PyvJ3qF92FZl/YA14LFM=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-sslify": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/@types/koa-sslify/download/@types/koa-sslify-2.1.0.tgz", + "integrity": "sha1-VJ8P/tKZ81Uij3cxaMPeVmJVOHY=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa-static": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/@types/koa-static/download/@types/koa-static-3.0.2.tgz", + "integrity": "sha1-7QnYLM3odKDcLVJf+qp96JFXTmI=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/koa2-cors": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/@types/koa2-cors/download/@types/koa2-cors-2.0.1.tgz", + "integrity": "sha1-dqY1ytycEOnSmiCfotsoUp38dlo=", + "dev": true, + "requires": { + "@types/koa": "https://registry.npm.taobao.org/@types/koa/download/@types/koa-2.0.43.tgz" + } + }, + "@types/lodash": { + "version": "4.14.91", + "resolved": "http://registry.npm.taobao.org/@types/lodash/download/@types/lodash-4.14.91.tgz", + "integrity": "sha1-eUYRsoBW0WtUNgWcbYALOdVzzTo=", + "dev": true + }, + "@types/mime": { + "version": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.0.tgz", + "integrity": "sha1-WnMG42fFObn2VDSZ3o3VGfrDeos=", + "dev": true + }, + "@types/node": { + "version": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz", + "integrity": "sha1-g7gQP6miwug9ePcBqap8lTlzmqU=" + }, + "@types/serve-static": { + "version": "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.1.tgz", + "integrity": "sha1-HSgB+mNdJ0zZfU7AfiayG0QSdJI=", + "dev": true, + "requires": { + "@types/express-serve-static-core": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.11.0.tgz", + "@types/mime": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.0.tgz" + } + }, + "@types/superagent": { + "version": "3.5.6", + "resolved": "http://registry.npm.taobao.org/@types/superagent/download/@types/superagent-3.5.6.tgz", + "integrity": "sha1-nPJjLAdbqeYB9qYQqtwjmS0COUw=", + "dev": true, + "requires": { + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64url": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/base64url/download/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz", + "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.3.0", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "http://registry.npm.taobao.org/cheerio/download/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.4", + "parse5": "3.0.3" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-body": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/co-body/download/co-body-5.1.1.tgz", + "integrity": "sha1-2XeB0eM0S6SoIP0YBr3fg0FQUjY=", + "requires": { + "inflation": "2.0.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/configstore/download/configstore-3.1.1.tgz", + "integrity": "sha1-CU7mYquD+tmRdnjeEU+q6o/NypA=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.1.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookiejar": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.1.tgz", + "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" + }, + "cookies": { + "version": "0.7.1", + "resolved": "http://registry.npm.taobao.org/cookies/download/cookies-0.7.1.tgz", + "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=", + "requires": { + "depd": "1.1.1", + "keygrip": "1.0.2" + } + }, + "copy-to": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/copy-to/download/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.5.0", + "resolved": "http://registry.npm.taobao.org/crc/download/crc-3.5.0.tgz", + "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecdsa-sig-formatter": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.9.tgz", + "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", + "requires": { + "base64url": "2.0.0", + "safe-buffer": "5.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "entities": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "error-inject": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "event-stream": { + "version": "3.3.4", + "resolved": "http://registry.npm.taobao.org/event-stream/download/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "eventproxy": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/eventproxy/download/eventproxy-1.0.0.tgz", + "integrity": "sha1-jzhIkIJODAbEDcP1nOJER5OCHZk=", + "requires": { + "debug": "2.6.9" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extglob": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "form-data": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "formidable": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/formidable/download/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/from/download/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "glob-base": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "hoek": { + "version": "2.16.3", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "http-assert": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/http-assert/download/http-assert-1.3.0.tgz", + "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", + "requires": { + "deep-equal": "1.0.1", + "http-errors": "1.6.2" + } + }, + "http-errors": { + "version": "1.6.2", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "humanize-number": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/humanize-number/download/humanize-number-0.0.2.tgz", + "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflation": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-class": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/is-class/download/is-class-0.0.4.tgz", + "integrity": "sha1-4FdFFwW7NOOePjNZjJOpg3KWtzY=" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-function": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.6.tgz", + "integrity": "sha1-nnFlPNFf/zQcecQVFGChMdMen8Q=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-type-of": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/is-type-of/download/is-type-of-1.2.0.tgz", + "integrity": "sha1-tVPLtGIa31tBceiIPzcOem7DiZU=", + "requires": { + "core-util-is": "1.0.2", + "is-class": "0.0.4", + "isstream": "0.1.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/isemail/download/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "joi": { + "version": "6.10.1", + "resolved": "http://registry.npm.taobao.org/joi/download/joi-6.10.1.tgz", + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "requires": { + "hoek": "2.16.3", + "isemail": "1.2.0", + "moment": "2.20.1", + "topo": "1.1.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonwebtoken": { + "version": "7.4.1", + "resolved": "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-7.4.1.tgz", + "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", + "requires": { + "joi": "6.10.1", + "jws": "3.1.4", + "lodash.once": "4.1.1", + "ms": "2.0.0", + "xtend": "4.0.1" + } + }, + "jwa": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/jwa/download/jwa-1.1.5.tgz", + "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", + "requires": { + "base64url": "2.0.0", + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.9", + "safe-buffer": "5.1.1" + } + }, + "jws": { + "version": "3.1.4", + "resolved": "http://registry.npm.taobao.org/jws/download/jws-3.1.4.tgz", + "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", + "requires": { + "base64url": "2.0.0", + "jwa": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "keygrip": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.2.tgz", + "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "koa": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/koa/download/koa-2.4.1.tgz", + "integrity": "sha1-1EnPuXCn6dpXH2me2kC7njLrFIQ=", + "requires": { + "accepts": "1.3.4", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookies": "0.7.1", + "debug": "3.1.0", + "delegates": "1.0.0", + "depd": "1.1.1", + "destroy": "1.0.4", + "error-inject": "1.0.0", + "escape-html": "1.0.3", + "fresh": "0.5.2", + "http-assert": "1.3.0", + "http-errors": "1.6.2", + "is-generator-function": "1.0.6", + "koa-compose": "4.0.0", + "koa-convert": "1.2.0", + "koa-is-json": "1.0.0", + "mime-types": "2.1.17", + "on-finished": "2.3.0", + "only": "0.0.2", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "type-is": "1.6.15", + "vary": "1.1.2" + } + }, + "koa-bodyparser": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-4.2.0.tgz", + "integrity": "sha1-vObgi8Zfhwm20fqpQRx/DYk4qlQ=", + "requires": { + "co-body": "5.1.1", + "copy-to": "2.0.1" + } + }, + "koa-compose": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.0.0.tgz", + "integrity": "sha1-KAClE9nDYe8NY4UrA45Pby1adzw=" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "4.6.0", + "koa-compose": "3.2.1" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "koa-json": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/koa-json/download/koa-json-2.0.2.tgz", + "integrity": "sha1-Nq8U5uofXWRtfESihXAcb4Wk/eQ=", + "requires": { + "koa-is-json": "1.0.0", + "streaming-json-stringify": "3.1.0" + } + }, + "koa-jwt": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/koa-jwt/download/koa-jwt-3.3.0.tgz", + "integrity": "sha1-UsKY332A57jqJ/mqyZFsYVq7mcg=", + "requires": { + "jsonwebtoken": "7.4.1", + "koa-unless": "1.0.0" + } + }, + "koa-logger": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/koa-logger/download/koa-logger-3.1.0.tgz", + "integrity": "sha1-gaNT9BhwEZ1WJg4OZE8E5zGBADk=", + "requires": { + "bytes": "2.5.0", + "chalk": "1.1.3", + "humanize-number": "0.0.2", + "passthrough-counter": "1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "bytes": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-2.5.0.tgz", + "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "koa-router": { + "version": "7.3.0", + "resolved": "http://registry.npm.taobao.org/koa-router/download/koa-router-7.3.0.tgz", + "integrity": "sha1-JB8ESaxc0QcYMamj2AtSH6+2uqE=", + "requires": { + "debug": "3.1.0", + "http-errors": "1.6.2", + "koa-compose": "3.2.1", + "methods": "1.1.2", + "path-to-regexp": "1.7.0", + "urijs": "1.19.0" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-send": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/koa-send/download/koa-send-4.1.2.tgz", + "integrity": "sha1-koYdGExNhFilT5LmcI4JsU1kERw=", + "requires": { + "debug": "2.6.9", + "http-errors": "1.6.2", + "mz": "2.7.0", + "resolve-path": "1.3.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "koa-session": { + "version": "5.5.1", + "resolved": "http://registry.npm.taobao.org/koa-session/download/koa-session-5.5.1.tgz", + "integrity": "sha1-7Ekc1hlQkWyusaEH1igV63l8u6k=", + "requires": { + "crc": "3.5.0", + "debug": "2.6.9", + "is-type-of": "1.2.0", + "uid-safe": "2.1.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "koa-sslify": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/koa-sslify/download/koa-sslify-2.1.2.tgz", + "integrity": "sha1-iUf9U5SdadU5YHgUCXhjwezzjzA=" + }, + "koa-static": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/koa-static/download/koa-static-4.0.2.tgz", + "integrity": "sha1-bNqS2I13Hcqtnw2CXNlKYxyGGho=", + "requires": { + "debug": "2.6.9", + "koa-send": "4.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "koa-unless": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/koa-unless/download/koa-unless-1.0.0.tgz", + "integrity": "sha1-WqVzhLyIJWivyQrASFKj1YZYrus=" + }, + "koa2-cors": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/koa2-cors/download/koa2-cors-2.0.5.tgz", + "integrity": "sha1-NARxLNCS9yjH9y3nBO57kg2Vdlg=" + }, + "latest-version": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "4.0.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.1.0.tgz", + "integrity": "sha1-GbQ2n+SMEW9Twq+VrRAsDjnoXVE=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-stream": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/map-stream/download/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "moment": { + "version": "2.20.1", + "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.20.1.tgz", + "integrity": "sha1-1usaRsvMFKKy+UNBEsH/iQfzE/0=" + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mz": { + "version": "2.7.0", + "resolved": "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "nodemon": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/nodemon/download/nodemon-1.14.1.tgz", + "integrity": "sha1-9DRH2Zz6zFhjFrOLRWo/+0U3kU8=", + "dev": true, + "requires": { + "chokidar": "1.7.0", + "debug": "2.6.9", + "ignore-by-default": "1.0.1", + "minimatch": "3.0.4", + "pstree.remy": "1.1.0", + "touch": "3.1.0", + "undefsafe": "0.0.3", + "update-notifier": "2.3.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "only": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.4.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz", + "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=", + "requires": { + "@types/node": "https://registry.npm.taobao.org/@types/node/download/@types/node-8.5.2.tgz" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "passthrough-counter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/passthrough-counter/download/passthrough-counter-1.0.0.tgz", + "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/ps-tree/download/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "3.3.4" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pstree.remy": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pstree.remy/download/pstree.remy-1.1.0.tgz", + "integrity": "sha1-8q8nJlvT5bMrv8wQ6AusVbp4aIs=", + "dev": true, + "requires": { + "ps-tree": "1.1.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/random-bytes/download/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "raw-body": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/rc/download/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true, + "requires": { + "rc": "1.2.2", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.2" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "resolve-path": { + "version": "1.3.3", + "resolved": "http://registry.npm.taobao.org/resolve-path/download/resolve-path-1.3.3.tgz", + "integrity": "sha1-TYOrpkaMK45jKldeP1Kw+g2+Glw=", + "requires": { + "http-errors": "1.5.1", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "http-errors": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.5.1.tgz", + "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "requires": { + "inherits": "2.0.3", + "setprototypeof": "1.0.2", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.2.tgz", + "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "semver": { + "version": "5.4.1", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "5.4.1" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/split/download/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.4.0.tgz", + "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=" + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/stream-combiner/download/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "streaming-json-stringify": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/streaming-json-stringify/download/streaming-json-stringify-3.1.0.tgz", + "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=", + "requires": { + "json-stringify-safe": "5.0.1", + "readable-stream": "2.3.3" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "superagent": { + "version": "3.8.2", + "resolved": "http://registry.npm.taobao.org/superagent/download/superagent-3.8.2.tgz", + "integrity": "sha1-5KEbnQR/fT7+s7vlNtnsACHRZAM=", + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.1", + "debug": "3.1.0", + "extend": "3.0.1", + "form-data": "2.3.1", + "formidable": "1.1.1", + "methods": "1.1.2", + "mime": "1.6.0", + "qs": "6.5.1", + "readable-stream": "2.3.3" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "topo": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/topo/download/topo-1.1.0.tgz", + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "requires": { + "hoek": "2.16.3" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", + "dev": true, + "requires": { + "nopt": "1.0.10" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typescript": { + "version": "2.6.2", + "resolved": "http://registry.npm.taobao.org/typescript/download/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", + "dev": true + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/uid-safe/download/uid-safe-2.1.5.tgz", + "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=", + "requires": { + "random-bytes": "1.0.0" + } + }, + "undefsafe": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/undefsafe/download/undefsafe-0.0.3.tgz", + "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", + "dev": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "dev": true, + "requires": { + "boxen": "1.3.0", + "chalk": "2.3.0", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + } + }, + "urijs": { + "version": "1.19.0", + "resolved": "http://registry.npm.taobao.org/urijs/download/urijs-1.19.0.tgz", + "integrity": "sha1-2KooTQ50aXA6aYitBFxMv98IraA=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/widest-line/download/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/play/spider/package.json b/play/spider/package.json new file mode 100644 index 0000000..32aa6a8 --- /dev/null +++ b/play/spider/package.json @@ -0,0 +1,50 @@ +{ + "name": "spider", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "dev": "./node_modules/.bin/nodemon ./dist/app.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "async": "^2.6.0", + "cheerio": "^1.0.0-rc.2", + "eventproxy": "^1.0.0", + "koa": "^2.4.1", + "koa-bodyparser": "^4.2.0", + "koa-json": "^2.0.2", + "koa-jwt": "^3.3.0", + "koa-logger": "^3.1.0", + "koa-router": "^7.3.0", + "koa-session": "^5.5.1", + "koa-sslify": "^2.1.2", + "koa-static": "^4.0.2", + "koa2-cors": "^2.0.5", + "lodash": "^4.17.4", + "superagent": "^3.8.2" + }, + "devDependencies": { + "@types/async": "^2.0.45", + "@types/cheerio": "^0.22.6", + "@types/koa": "^2.0.43", + "@types/koa-bodyparser": "^3.0.26", + "@types/koa-json": "^2.0.18", + "@types/koa-jwt": "^3.2.2", + "@types/koa-logger": "^3.1.0", + "@types/koa-router": "^7.0.27", + "@types/koa-session": "^3.0.6", + "@types/koa-sslify": "^2.1.0", + "@types/koa-static": "^3.0.2", + "@types/koa2-cors": "^2.0.1", + "@types/lodash": "^4.14.91", + "@types/superagent": "^3.5.6", + "nodemon": "^1.14.1", + "tslint": "^5.8.0", + "typescript": "^2.6.2" + } +} diff --git a/play/spider/src/app.ts b/play/spider/src/app.ts new file mode 100644 index 0000000..814500a --- /dev/null +++ b/play/spider/src/app.ts @@ -0,0 +1,13 @@ +import * as Koa from 'koa' +import * as bodyParser from 'koa-bodyparser' +import * as logger from 'koa-logger' +import index from './routes/index' + +const app = new Koa() +app.use(bodyParser({ + enableTypes: ['json', 'form', 'text'] +})) +app.use(logger()) +app.use(index.routes()) + +app.listen(3000) diff --git a/play/spider/src/routes/index.ts b/play/spider/src/routes/index.ts new file mode 100644 index 0000000..45f40a3 --- /dev/null +++ b/play/spider/src/routes/index.ts @@ -0,0 +1,79 @@ +import * as async from 'async' +import * as cheerio from 'cheerio' +import * as Router from 'koa-router' +import * as superagent from 'superagent' +import * as url from 'url' +const router = new Router() + +interface Item { + title: string, + href: string +} +const base = 'https://cnodejs.org/' +const urls: string[] = [] +for (let i = 0; i < 30; i++) { + urls.push('http://datasource_' + i) +} +let currentCount = 0 +const fetchUrl = (u: string, callback: (a: any, url: string) => void) => { + const delay = Math.floor((Math.random() * 10000000) % 2000) + currentCount++ + console.log('现在的并发数是:', currentCount, ',正在抓取的是', url, ',耗时' + delay + '毫秒') + setTimeout(() => { + currentCount--; + callback(null, url + ' html content') + }, delay) +} + +router.get('/', async (ctx, next) => { + const items: Item[] = [] + const topicUrl: string[] = [] + try { + const res = await superagent.get(base) + const $ = cheerio.load(res.text) + $('#topic_list .topic_title').each((idx, element) => { + const $element = $(element) + items.push({ + title: $element.attr('title'), + href: $element.attr('href') + }) + topicUrl.push(url.resolve(base, $element.attr('href'))) + }) + // ctx.body = items + + const promises = topicUrl.slice(0, 5).map(async tp => { + const res2 = await superagent.get(tp) + return [tp, res2.text] + }) + const topics = await Promise.all(promises) + let result: Array<{ title: string, href: string, comment1: string}>; + result = topics.map((tp: string[]) => { + const [topic, html] = tp + const $2 = cheerio.load(html) + return ({ + title: $2('.topic_full_title').text().trim(), + href: topic, + comment1: $2('.reply_content').eq(0).text().trim() + }) + }) + + ctx.body = result + } catch (e) { + ctx.body = e + } +}) + +router.get('/async', async (ctx, next) => { + const res = await new Promise(resolve => { + async.mapLimit(urls, 5, (u, callback) => { + fetchUrl(u, callback) + }, (err, result) => { + console.log('final') + resolve(result) + }) + }) + console.log(res) + ctx.body = res +}) + +export default router diff --git a/play/spider/tsconfig.json b/play/spider/tsconfig.json new file mode 100644 index 0000000..53786d9 --- /dev/null +++ b/play/spider/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": true, + "sourceMap": true, + "outDir": "dist", + "baseUrl": ".", + "watch": true, + "paths": { + "*": [ + "node_modules/*", + "src/types/*" + ] + } + }, + "include": [ + "./src/**/*" + ] +} \ No newline at end of file diff --git a/play/spider/tslint.json b/play/spider/tslint.json new file mode 100644 index 0000000..54190f8 --- /dev/null +++ b/play/spider/tslint.json @@ -0,0 +1,16 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "quotemark": [0], + "semicolon": false, + "indent": [0], + "no-console": false, + "arrow-parens": false, + "trailing-comma": false + }, + "rulesDirectory": [] +} \ No newline at end of file diff --git a/play/static-server/app.js b/play/static-server/app.js new file mode 100644 index 0000000..e490d71 --- /dev/null +++ b/play/static-server/app.js @@ -0,0 +1,21 @@ +const http = require('http') +const path = require('path') +const fs = require('fs') +// console.log(__dirname) + +http.createServer((req, res) => { + res.setHeader('Content-Type', 'text/html') + res.statusCode = 200 + + const file = fs.createReadStream('./index.html') + res.setHeader('Content-Type', 'text/html') + res.statusCode = 200 + file.on('open', () => { + file.pipe(res) + }) + file.on('error', (err) => { + res.end('not found') + }) +}).listen(8124) + +console.log('Server running at 8124') \ No newline at end of file diff --git a/play/static-server/index.html b/play/static-server/index.html new file mode 100644 index 0000000..6baf3c0 --- /dev/null +++ b/play/static-server/index.html @@ -0,0 +1,12 @@ + + + + + + + static-server + + + 啦啦啦 + + \ No newline at end of file diff --git a/play/takigen-webo/index.js b/play/takigen-webo/index.js new file mode 100644 index 0000000..18441d8 --- /dev/null +++ b/play/takigen-webo/index.js @@ -0,0 +1,47 @@ +const superagent = require('superagent') +const cheerio = require('cheerio') +const fs = require('fs') + +const readLocalFile = async () => { + try { + const data = fs.readFileSync('./temp.html', 'utf-8') + return data + } catch (error) { + console.log(error) + } +} + +const request = async () => { + const url = + 'http://v.t.sina.com.cn/widget/widget_blog.php?uid=5238762936&height=500&skin=wd_01&showpic=1' + try { + const res = await superagent.get(url) + return res.text + } catch (error) { + console.log(error) + } +} + +const reptile = async text => { + if (!text) { + text = await readLocalFile() + } + const $ = cheerio.load(text) + const fans = /(\d+)/.exec($('.userfans a').text())[1] + const res = $('.wgtCell_con').map((i, el) => { + const _ = cheerio.load(el) + const date = _('.link_d') + const obj = { + content: _('.wgtCell_txt') + .text() + .trim() + .replace(/\s|\n/g, ''), + date: date.text().trim(), + link: date.attr('href') + } + return obj + }) + return { fans, list: res.get() } +} + +reptile() diff --git a/play/takigen-webo/package-lock.json b/play/takigen-webo/package-lock.json new file mode 100644 index 0000000..410dc63 --- /dev/null +++ b/play/takigen-webo/package-lock.json @@ -0,0 +1,2280 @@ +{ + "name": "takigen-webo", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "10.0.0", + "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-10.0.0.tgz", + "integrity": "sha1-xA+OB9zmB9PvJaYmuTpqfNz5eIE=" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/atob/download/atob-2.1.0.tgz", + "integrity": "sha1-qysVDlHXsSK578jXNAwGtsQQdrw=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz", + "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.1", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "http://registry.npm.taobao.org/cheerio/download/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.10", + "parse5": "3.0.3" + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.3.tgz", + "integrity": "sha1-3L1PbLsqVbR5m6ioQKxSfl9LEXY=", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, + "ci-info": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.3.tgz", + "integrity": "sha1-cQGTJkuwXHe4yQ0C9aryIhamZ7I=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz", + "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.2.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + } + }, + "cookiejar": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.1.tgz", + "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "http://registry.npm.taobao.org/event-stream/download/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/formidable/download/formidable-1.2.1.tgz", + "integrity": "sha1-cPt8oCkO5v+WEJBBX0s989IIJlk=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "from": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/from/download/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz", + "integrity": "sha1-JH5BYueGDOu9rzC3dNawrH3P56U=", + "dev": true, + "requires": { + "ci-info": "1.1.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-odd": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-odd/download/is-odd-2.0.0.tgz", + "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + } + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "4.0.1" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz", + "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.2.tgz", + "integrity": "sha1-RSNLLm4vKzPaElYkxGZJKaAiTD8=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.2.0.tgz", + "integrity": "sha1-bWpJ7q1KrilsU7vzoaAIvWyJRps=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/map-stream/download/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz", + "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.18.tgz", + "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.9.tgz", + "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "nodemon": { + "version": "1.17.3", + "resolved": "http://registry.npm.taobao.org/nodemon/download/nodemon-1.17.3.tgz", + "integrity": "sha1-Owu8LuBcy0OxrvFboFxjx7ybhTA=", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "debug": "3.1.0", + "ignore-by-default": "1.0.1", + "minimatch": "3.0.4", + "pstree.remy": "1.1.0", + "semver": "5.5.0", + "supports-color": "5.4.0", + "touch": "3.1.0", + "undefsafe": "2.0.2", + "update-notifier": "2.5.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "1.0.0" + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0", + "semver": "5.5.0" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz", + "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=", + "requires": { + "@types/node": "10.0.0" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/ps-tree/download/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "3.3.4" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pstree.remy": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pstree.remy/download/pstree.remy-1.1.0.tgz", + "integrity": "sha1-8q8nJlvT5bMrv8wQ6AusVbp4aIs=", + "dev": true, + "requires": { + "ps-tree": "1.1.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + }, + "rc": { + "version": "1.2.6", + "resolved": "http://registry.npm.taobao.org/rc/download/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.2.tgz", + "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=", + "dev": true, + "requires": { + "rc": "1.2.6", + "safe-buffer": "5.1.2" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.6" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.1.tgz", + "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "dev": true, + "requires": { + "atob": "2.1.0", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/split/download/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/stream-combiner/download/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "superagent": { + "version": "3.8.2", + "resolved": "http://registry.npm.taobao.org/superagent/download/superagent-3.8.2.tgz", + "integrity": "sha1-5KEbnQR/fT7+s7vlNtnsACHRZAM=", + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.1", + "debug": "3.1.0", + "extend": "3.0.1", + "form-data": "2.3.2", + "formidable": "1.2.1", + "methods": "1.1.2", + "mime": "1.6.0", + "qs": "6.5.1", + "readable-stream": "2.3.6" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz", + "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", + "dev": true, + "requires": { + "nopt": "1.0.10" + } + }, + "undefsafe": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/undefsafe/download/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "dev": true, + "requires": { + "debug": "2.6.9" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.0.4.tgz", + "integrity": "sha1-7iMhugp4bFCXPbBDpQt7y6giNh0=", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz", + "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=", + "dev": true, + "requires": { + "boxen": "1.3.0", + "chalk": "2.4.1", + "configstore": "3.1.2", + "import-lazy": "2.1.0", + "is-ci": "1.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "use": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/use/download/use-3.1.0.tgz", + "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/widest-line/download/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/play/takigen-webo/package.json b/play/takigen-webo/package.json new file mode 100644 index 0000000..79d3a09 --- /dev/null +++ b/play/takigen-webo/package.json @@ -0,0 +1,19 @@ +{ + "name": "takigen-webo", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "./node_modules/.bin/nodemon index.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "cheerio": "^1.0.0-rc.2", + "superagent": "^3.8.2" + }, + "devDependencies": { + "nodemon": "^1.17.3" + } +} diff --git a/play/takigen-webo/temp.html b/play/takigen-webo/temp.html new file mode 100644 index 0000000..fcc7250 --- /dev/null +++ b/play/takigen-webo/temp.html @@ -0,0 +1,249 @@ + + + + + + 微博widget + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + TAKIGEN上海 + +
    +
    +
    TAKIGEN上海
    + +
    +
    + +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +

    我司清明放假时间:4月5日-4月8日休息,4月9日(周一)正常上班,对此造成不便,敬请谅解。 ​ +

    +
    + + 4月4日 10:11 + + +
    +
    +
    +
    +
    +
    +
    +

    因官网更新,我司主页将于3/13-4月初暂停访问,届时可前往www.takigen.co.jp或www.takigen.com进行资料查询,敬请知悉。 ​ +

    +
    + + 3月12日 09:38 + + +
    +
    +
    +
    +
    +
    +
    +

    我司春节休假时间:2月15日至2月21日,2月22日出勤。给您带来的不便,敬请谅解。 ​ +

    +
    + + 2月14日 08:55 + + +
    +
    +
    +
    +
    +
    +
    +

    2017年11月7日-11日在国家会展中心进行的第十九届工博会,TAKIGEN在5.1H馆E162等你 + ​ + +
    + + + +

    +
    + + 2017-11-7 11:00 + + +
    +
    +
    +
    +
    +
    +
    +

    TAKIGEN中文目录第24版已经制作完成啦!! + + + 网址如下: + http://t.cn/RNMUePg 欢迎浏览!! ​ +
    + + + +

    +
    + + 2017-9-1 11:41 + + +
    +
    +
    +
    +
    +
    +
    +

    我司将于9月21日-23日参加位于上海国家会展中心的亚洲智能制造装备产业博览会(FBC上海2017ものづくり商談会),欢迎大家届时前来观展! ​ +

    +
    + + 2017-8-2 13:03 + + +
    +
    +
    +
    +
    +
    +
    +

    上海TAKIGEN的微博 ​ +

    +
    + + 2017-7-19 10:22 + + +
    +
    +
    +
    +
    +
    +
    + 向下 + +
    +
    +
    + + + 登录 + | + 注册 + +
    +
    +
    +
    + +
    +
    + +
    + + + + + \ No newline at end of file diff --git a/play/tcp-server/client.js b/play/tcp-server/client.js new file mode 100644 index 0000000..874376a --- /dev/null +++ b/play/tcp-server/client.js @@ -0,0 +1,22 @@ +const net = require('net') + +const client = new net.Socket() +client.setEncoding('utf8') + +client.connect('8124', 'localhost', () => { + console.log('connected to server') + + client.write('Who needs a browser to communicate?') +}) + +process.stdin.resume() + +process.stdin.on('data', data => { + client.write(data) +}) + +client.on('data', data => { + console.log(data) +}) + +client.on('close', () => console.log('connection is closed')) \ No newline at end of file diff --git a/play/tcp-server/server.js b/play/tcp-server/server.js new file mode 100644 index 0000000..3f6754a --- /dev/null +++ b/play/tcp-server/server.js @@ -0,0 +1,14 @@ +const net = require('net') + +const server = net.createServer(conn => { + console.log('connected') + + conn.on('data', data => { + console.log(`${data} from ${conn.remoteAddress} ${conn.remotePort}`) + conn.write('Repeating:' + data) + }) + + conn.on('close', () => console.log('client closed connection')) +}).listen(8124) + +console.log('listening on port 8124') \ No newline at end of file diff --git a/play/tkwb-server/app.js b/play/tkwb-server/app.js new file mode 100644 index 0000000..3795a76 --- /dev/null +++ b/play/tkwb-server/app.js @@ -0,0 +1,62 @@ +const Koa = require('koa') +const app = new Koa() +const views = require('koa-views') +const json = require('koa-json') +const onerror = require('koa-onerror') +const bodyparser = require('koa-bodyparser') +const logger = require('koa-logger') +const cors = require('koa2-cors') +const index = require('./routes/index') +// const users = require('./routes/users') + +// error handler +onerror(app) + +// middlewares +app.use( + bodyparser({ + enableTypes: ['json', 'form', 'text'] + }) +) +app.use(json()) +app.use(logger()) +app.use(require('koa-static')(__dirname + '/public')) + +app.use( + views(__dirname + '/views', { + extension: 'pug' + }) +) + +app.use( + cors({ + origin(ctx) { + // return ctx.req.headers.origin + return 'https://www.takigen.cn' + }, + exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'], + maxAge: 5, + credentials: true, + allowMethods: ['GET', 'POST', 'DELETE', 'PUT'], + allowHeaders: ['Content-Type', 'Authorization', 'Accept'] + }) +) + +// logger +app.use(async (ctx, next) => { + const start = new Date() + await next() + const ms = new Date() - start + console.log(`${ctx.method} ${ctx.url} - ${ms}ms`) +}) + +// routes +app.use(index.routes(), index.allowedMethods()) +// app.use(users.routes(), users.allowedMethods()) + +// error-handling +app.on('error', (err, ctx) => { + console.error('server error', err, ctx) +}) + +module.exports = app diff --git a/play/tkwb-server/bin/www b/play/tkwb-server/bin/www new file mode 100644 index 0000000..0ab4f6e --- /dev/null +++ b/play/tkwb-server/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('demo:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '24001'); +// app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app.callback()); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/play/tkwb-server/package-lock.json b/play/tkwb-server/package-lock.json new file mode 100644 index 0000000..62c9fea --- /dev/null +++ b/play/tkwb-server/package-lock.json @@ -0,0 +1,3401 @@ +{ + "name": "tkwb-server", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/babel-types": { + "version": "7.0.1", + "resolved": "http://registry.npm.taobao.org/@types/babel-types/download/@types/babel-types-7.0.1.tgz", + "integrity": "sha1-FAXlOWloxDAplLAWHOQFtyuHQlc=" + }, + "@types/babylon": { + "version": "6.16.2", + "resolved": "http://registry.npm.taobao.org/@types/babylon/download/@types/babylon-6.16.2.tgz", + "integrity": "sha1-BizmO2k9mvHCRvWu35KLycMFicg=", + "requires": { + "@types/babel-types": "7.0.1" + } + }, + "@types/node": { + "version": "10.0.0", + "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-10.0.0.tgz", + "integrity": "sha1-xA+OB9zmB9PvJaYmuTpqfNz5eIE=" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "0.2.10", + "resolved": "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "async-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/atob/download/atob-2.1.0.tgz", + "integrity": "sha1-qysVDlHXsSK578jXNAwGtsQQdrw=", + "dev": true + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.5", + "regenerator-runtime": "0.11.1" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz", + "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=", + "dev": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.1", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz", + "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "bytes": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "character-parser": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "1.0.4" + } + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "http://registry.npm.taobao.org/cheerio/download/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.10", + "parse5": "3.0.3" + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.3.tgz", + "integrity": "sha1-3L1PbLsqVbR5m6ioQKxSfl9LEXY=", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, + "ci-info": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/ci-info/download/ci-info-1.1.3.tgz", + "integrity": "sha1-cQGTJkuwXHe4yQ0C9aryIhamZ7I=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "clean-css": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/clean-css/download/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "co-body": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/co-body/download/co-body-4.2.0.tgz", + "integrity": "sha1-dN8g+nMmISXcRUgq8E40LqjbNRU=", + "requires": { + "inflation": "2.0.0", + "qs": "4.0.0", + "raw-body": "2.1.7", + "type-is": "1.6.16" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz", + "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=", + "dev": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.2.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + } + }, + "consolidate": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "requires": { + "bluebird": "3.5.1" + } + }, + "constantinople": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/constantinople/download/constantinople-3.1.2.tgz", + "integrity": "sha1-1F7XJPV9PRBQABen06iJwTga5kc=", + "requires": { + "@types/babel-types": "7.0.1", + "@types/babylon": "6.16.2", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookiejar": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.1.tgz", + "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" + }, + "cookies": { + "version": "0.7.1", + "resolved": "http://registry.npm.taobao.org/cookies/download/cookies-0.7.1.tgz", + "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=", + "requires": { + "depd": "1.1.2", + "keygrip": "1.0.2" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-to": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/copy-to/download/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "core-js": { + "version": "2.5.5", + "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc": { + "version": "3.5.0", + "resolved": "http://registry.npm.taobao.org/crc/download/crc-3.5.0.tgz", + "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/css-what/download/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "dateformat": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/dateformat/download/dateformat-3.0.3.tgz", + "integrity": "sha1-puN0maTZqc+F71hyBE1ikByYia4=" + }, + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "doctypes": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz", + "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "entities": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "error-inject": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz", + "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "event-stream": { + "version": "3.3.4", + "resolved": "http://registry.npm.taobao.org/event-stream/download/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/formidable/download/formidable-1.2.1.tgz", + "integrity": "sha1-cPt8oCkO5v+WEJBBX0s989IIJlk=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/from/download/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "1.3.5" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "http-assert": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/http-assert/download/http-assert-1.3.0.tgz", + "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", + "requires": { + "deep-equal": "1.0.1", + "http-errors": "1.6.3" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "humanize-number": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/humanize-number/download/humanize-number-0.0.2.tgz", + "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflation": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-ci": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-ci/download/is-ci-1.1.0.tgz", + "integrity": "sha1-JH5BYueGDOu9rzC3dNawrH3P56U=", + "dev": true, + "requires": { + "ci-info": "1.1.3" + } + }, + "is-class": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/is-class/download/is-class-0.0.4.tgz", + "integrity": "sha1-4FdFFwW7NOOePjNZjJOpg3KWtzY=" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-expression": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "requires": { + "acorn": "4.0.13", + "object-assign": "4.1.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.7.tgz", + "integrity": "sha1-0hMuUpuwAAp/gHlNS99c1eWBNSI=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-odd": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-odd/download/is-odd-2.0.0.tgz", + "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true + } + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-type-of": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/is-type-of/download/is-type-of-1.2.0.tgz", + "integrity": "sha1-tVPLtGIa31tBceiIPzcOem7DiZU=", + "requires": { + "core-util-is": "1.0.2", + "is-class": "0.0.4", + "isstream": "0.1.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/jstransformer/download/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "2.1.0", + "promise": "7.3.1" + } + }, + "keygrip": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.2.tgz", + "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "koa": { + "version": "2.5.1", + "resolved": "http://registry.npm.taobao.org/koa/download/koa-2.5.1.tgz", + "integrity": "sha1-efi5X41y0E/ppYqNpevW00EQP5w=", + "requires": { + "accepts": "1.3.5", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookies": "0.7.1", + "debug": "2.6.9", + "delegates": "1.0.0", + "depd": "1.1.2", + "destroy": "1.0.4", + "error-inject": "1.0.0", + "escape-html": "1.0.3", + "fresh": "0.5.2", + "http-assert": "1.3.0", + "http-errors": "1.6.3", + "is-generator-function": "1.0.7", + "koa-compose": "4.0.0", + "koa-convert": "1.2.0", + "koa-is-json": "1.0.0", + "mime-types": "2.1.18", + "on-finished": "2.3.0", + "only": "0.0.2", + "parseurl": "1.3.2", + "statuses": "1.5.0", + "type-is": "1.6.16", + "vary": "1.1.2" + } + }, + "koa-bodyparser": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-3.2.0.tgz", + "integrity": "sha1-uRbeF+IDn+gmUEgZc9fClPELVxk=", + "requires": { + "co-body": "4.2.0" + } + }, + "koa-compose": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.0.0.tgz", + "integrity": "sha1-KAClE9nDYe8NY4UrA45Pby1adzw=" + }, + "koa-convert": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz", + "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "requires": { + "co": "4.6.0", + "koa-compose": "3.2.1" + }, + "dependencies": { + "koa-compose": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" + }, + "koa-json": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/koa-json/download/koa-json-2.0.2.tgz", + "integrity": "sha1-Nq8U5uofXWRtfESihXAcb4Wk/eQ=", + "requires": { + "koa-is-json": "1.0.0", + "streaming-json-stringify": "3.1.0" + } + }, + "koa-logger": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/koa-logger/download/koa-logger-2.0.1.tgz", + "integrity": "sha1-PuQvRXxA+01KGaExyAIlBLWyMrg=", + "requires": { + "bytes": "1.0.0", + "chalk": "1.1.3", + "humanize-number": "0.0.2", + "passthrough-counter": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/bytes/download/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + } + } + }, + "koa-onerror": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/koa-onerror/download/koa-onerror-1.3.1.tgz", + "integrity": "sha1-pbVh4ch+8yieQwF0bgE4LyT/viI=", + "requires": { + "copy-to": "2.0.1", + "swig": "1.4.2" + } + }, + "koa-router": { + "version": "7.4.0", + "resolved": "http://registry.npm.taobao.org/koa-router/download/koa-router-7.4.0.tgz", + "integrity": "sha1-ruH3rcAtXLMdfWdGXJ6syCXoxeA=", + "requires": { + "debug": "3.1.0", + "http-errors": "1.6.3", + "koa-compose": "3.2.1", + "methods": "1.1.2", + "path-to-regexp": "1.7.0", + "urijs": "1.19.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + }, + "koa-compose": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz", + "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "requires": { + "any-promise": "1.3.0" + } + } + } + }, + "koa-send": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/koa-send/download/koa-send-3.3.0.tgz", + "integrity": "sha1-WkriRVZGgMbs9geeknX6UXOoYdw=", + "requires": { + "co": "4.6.0", + "debug": "2.6.9", + "mz": "2.7.0", + "resolve-path": "1.4.0" + } + }, + "koa-session": { + "version": "5.8.1", + "resolved": "http://registry.npm.taobao.org/koa-session/download/koa-session-5.8.1.tgz", + "integrity": "sha1-9XtViiDk2nE8wvlr+meUa7QRBUg=", + "requires": { + "crc": "3.5.0", + "debug": "2.6.9", + "is-type-of": "1.2.0", + "pedding": "1.1.0", + "uid-safe": "2.1.5" + } + }, + "koa-static": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/koa-static/download/koa-static-3.0.0.tgz", + "integrity": "sha1-QEQiM9LAs1wiXkUBmcEL+KU55BY=", + "requires": { + "debug": "2.6.9", + "koa-send": "3.3.0" + } + }, + "koa-views": { + "version": "5.2.1", + "resolved": "http://registry.npm.taobao.org/koa-views/download/koa-views-5.2.1.tgz", + "integrity": "sha1-/didu8p9n0fa8fJK1utMuSaPXwE=", + "requires": { + "consolidate": "0.14.5", + "debug": "2.6.9", + "koa-send": "3.3.0", + "mz": "2.7.0" + } + }, + "koa2-cors": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/koa2-cors/download/koa2-cors-2.0.5.tgz", + "integrity": "sha1-NARxLNCS9yjH9y3nBO57kg2Vdlg=" + }, + "latest-version": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "4.0.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lodash": { + "version": "4.17.10", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz", + "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/lodash.isequal/download/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "longest": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.2.tgz", + "integrity": "sha1-RSNLLm4vKzPaElYkxGZJKaAiTD8=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.2.0.tgz", + "integrity": "sha1-bWpJ7q1KrilsU7vzoaAIvWyJRps=", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/map-stream/download/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "methods": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.33.0.tgz", + "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.18.tgz", + "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mz": { + "version": "2.7.0", + "resolved": "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.9.tgz", + "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "nodemailer": { + "version": "4.6.4", + "resolved": "http://registry.npm.taobao.org/nodemailer/download/nodemailer-4.6.4.tgz", + "integrity": "sha1-8NctDGpuxfQ2n6j0v1EnoxuqIBQ=" + }, + "nodemon": { + "version": "1.17.3", + "resolved": "http://registry.npm.taobao.org/nodemon/download/nodemon-1.17.3.tgz", + "integrity": "sha1-Owu8LuBcy0OxrvFboFxjx7ybhTA=", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "debug": "3.1.0", + "ignore-by-default": "1.0.1", + "minimatch": "3.0.4", + "pstree.remy": "1.1.0", + "semver": "5.5.0", + "supports-color": "5.4.0", + "touch": "3.1.0", + "undefsafe": "2.0.2", + "update-notifier": "2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz", + "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "only": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0", + "semver": "5.5.0" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz", + "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=", + "requires": { + "@types/node": "10.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "passthrough-counter": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/passthrough-counter/download/passthrough-counter-1.0.0.tgz", + "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "http://registry.npm.taobao.org/pause-stream/download/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "pedding": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pedding/download/pedding-1.1.0.tgz", + "integrity": "sha1-97E4wojUvVhOraEhX1vZJPHh5mc=" + }, + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=" + }, + "promise": { + "version": "7.3.1", + "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "requires": { + "asap": "2.0.6" + } + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/ps-tree/download/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "3.3.4" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pstree.remy": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/pstree.remy/download/pstree.remy-1.1.0.tgz", + "integrity": "sha1-8q8nJlvT5bMrv8wQ6AusVbp4aIs=", + "dev": true, + "requires": { + "ps-tree": "1.1.0" + } + }, + "pug": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/pug/download/pug-2.0.3.tgz", + "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", + "requires": { + "pug-code-gen": "2.0.1", + "pug-filters": "3.1.0", + "pug-lexer": "4.0.0", + "pug-linker": "3.0.5", + "pug-load": "2.0.11", + "pug-parser": "5.0.0", + "pug-runtime": "2.0.4", + "pug-strip-comments": "1.0.3" + } + }, + "pug-attrs": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/pug-attrs/download/pug-attrs-2.0.3.tgz", + "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", + "requires": { + "constantinople": "3.1.2", + "js-stringify": "1.0.2", + "pug-runtime": "2.0.4" + } + }, + "pug-code-gen": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pug-code-gen/download/pug-code-gen-2.0.1.tgz", + "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", + "requires": { + "constantinople": "3.1.2", + "doctypes": "1.1.0", + "js-stringify": "1.0.2", + "pug-attrs": "2.0.3", + "pug-error": "1.3.2", + "pug-runtime": "2.0.4", + "void-elements": "2.0.1", + "with": "5.1.1" + } + }, + "pug-error": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/pug-error/download/pug-error-1.3.2.tgz", + "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + }, + "pug-filters": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/pug-filters/download/pug-filters-3.1.0.tgz", + "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", + "requires": { + "clean-css": "4.1.11", + "constantinople": "3.1.2", + "jstransformer": "1.0.0", + "pug-error": "1.3.2", + "pug-walk": "1.1.7", + "resolve": "1.7.1", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "pug-lexer": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/pug-lexer/download/pug-lexer-4.0.0.tgz", + "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", + "requires": { + "character-parser": "2.2.0", + "is-expression": "3.0.0", + "pug-error": "1.3.2" + } + }, + "pug-linker": { + "version": "3.0.5", + "resolved": "http://registry.npm.taobao.org/pug-linker/download/pug-linker-3.0.5.tgz", + "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", + "requires": { + "pug-error": "1.3.2", + "pug-walk": "1.1.7" + } + }, + "pug-load": { + "version": "2.0.11", + "resolved": "http://registry.npm.taobao.org/pug-load/download/pug-load-2.0.11.tgz", + "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", + "requires": { + "object-assign": "4.1.1", + "pug-walk": "1.1.7" + } + }, + "pug-parser": { + "version": "5.0.0", + "resolved": "http://registry.npm.taobao.org/pug-parser/download/pug-parser-5.0.0.tgz", + "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", + "requires": { + "pug-error": "1.3.2", + "token-stream": "0.0.1" + } + }, + "pug-runtime": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pug-runtime/download/pug-runtime-2.0.4.tgz", + "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" + }, + "pug-strip-comments": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/pug-strip-comments/download/pug-strip-comments-1.0.3.tgz", + "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", + "requires": { + "pug-error": "1.3.2" + } + }, + "pug-walk": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/pug-walk/download/pug-walk-1.1.7.tgz", + "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" + }, + "qs": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/random-bytes/download/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "raw-body": { + "version": "2.1.7", + "resolved": "http://registry.npm.taobao.org/raw-body/download/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.6", + "resolved": "http://registry.npm.taobao.org/rc/download/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", + "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/readdirp/download/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.2.tgz", + "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=", + "dev": true, + "requires": { + "rc": "1.2.6", + "safe-buffer": "5.1.2" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "1.2.6" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "resolve": { + "version": "1.7.1", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.7.1.tgz", + "integrity": "sha1-qt1lY3T9KYruiVvAJrgpdBhnf9M=", + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/resolve-path/download/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "requires": { + "http-errors": "1.6.3", + "path-is-absolute": "1.0.1" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=", + "dev": true + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "source-map": { + "version": "0.1.34", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": "1.0.1" + } + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.1.tgz", + "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "dev": true, + "requires": { + "atob": "2.1.0", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/split/download/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "http://registry.npm.taobao.org/stream-combiner/download/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "streaming-json-stringify": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/streaming-json-stringify/download/streaming-json-stringify-3.1.0.tgz", + "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=", + "requires": { + "json-stringify-safe": "5.0.1", + "readable-stream": "2.3.6" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "superagent": { + "version": "3.8.2", + "resolved": "http://registry.npm.taobao.org/superagent/download/superagent-3.8.2.tgz", + "integrity": "sha1-5KEbnQR/fT7+s7vlNtnsACHRZAM=", + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.1", + "debug": "3.1.0", + "extend": "3.0.1", + "form-data": "2.3.2", + "formidable": "1.2.1", + "methods": "1.1.2", + "mime": "1.6.0", + "qs": "6.5.1", + "readable-stream": "2.3.6" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "swig": { + "version": "1.4.2", + "resolved": "http://registry.npm.taobao.org/swig/download/swig-1.4.2.tgz", + "integrity": "sha1-QIXKBFM2kQS11IPihBs5t64aq6U=", + "requires": { + "optimist": "0.6.1", + "uglify-js": "2.4.24" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "0.7.0" + } + }, + "thenify": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "token-stream": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + }, + "touch": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", + "dev": true, + "requires": { + "nopt": "1.0.10" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz", + "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "0.2.10", + "source-map": "0.1.34", + "uglify-to-browserify": "1.0.2", + "yargs": "3.5.4" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "http://registry.npm.taobao.org/uid-safe/download/uid-safe-2.1.5.tgz", + "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=", + "requires": { + "random-bytes": "1.0.0" + } + }, + "undefsafe": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/undefsafe/download/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "dev": true, + "requires": { + "debug": "2.6.9" + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/upath/download/upath-1.0.4.tgz", + "integrity": "sha1-7iMhugp4bFCXPbBDpQt7y6giNh0=", + "dev": true + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz", + "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=", + "dev": true, + "requires": { + "boxen": "1.3.0", + "chalk": "2.4.1", + "configstore": "3.1.2", + "import-lazy": "2.1.0", + "is-ci": "1.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.4.1.tgz", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-5.4.0.tgz", + "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "urijs": { + "version": "1.19.1", + "resolved": "http://registry.npm.taobao.org/urijs/download/urijs-1.19.1.tgz", + "integrity": "sha1-Ww/1MMDL3oOG9jQiNbpcpumV0lo=" + }, + "urix": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "use": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/use/download/use-3.1.0.tgz", + "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "vary": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "void-elements": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/widest-line/download/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "dev": true, + "requires": { + "string-width": "2.1.1" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "with": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/with/download/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "requires": { + "acorn": "3.3.0", + "acorn-globals": "3.1.0" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.5.4", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "1.2.1", + "decamelize": "1.2.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + } + } +} diff --git a/play/tkwb-server/package.json b/play/tkwb-server/package.json new file mode 100644 index 0000000..e1ac53f --- /dev/null +++ b/play/tkwb-server/package.json @@ -0,0 +1,34 @@ +{ + "name": "tkwb-server", + "version": "0.1.0", + "private": true, + "scripts": { + "start": "node bin/www", + "dev": "./node_modules/.bin/nodemon bin/www", + "prd": "pm2 start bin/www --name tkwb-server", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + "cheerio": "^1.0.0-rc.2", + "dateformat": "^3.0.3", + "debug": "^2.6.3", + "koa": "^2.2.0", + "koa-bodyparser": "^3.2.0", + "koa-convert": "^1.2.0", + "koa-json": "^2.0.2", + "koa-logger": "^2.0.1", + "koa-onerror": "^1.2.1", + "koa-router": "^7.1.1", + "koa-session": "^5.8.1", + "koa-static": "^3.0.0", + "koa-views": "^5.2.1", + "koa2-cors": "^2.0.5", + "lodash.isequal": "^4.5.0", + "nodemailer": "^4.6.4", + "pug": "^2.0.0-rc.1", + "superagent": "^3.8.2" + }, + "devDependencies": { + "nodemon": "^1.8.1" + } +} diff --git a/play/tkwb-server/public/stylesheets/style.css b/play/tkwb-server/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/play/tkwb-server/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/play/tkwb-server/routes/index.js b/play/tkwb-server/routes/index.js new file mode 100644 index 0000000..4f24b7e --- /dev/null +++ b/play/tkwb-server/routes/index.js @@ -0,0 +1,113 @@ +const router = require('koa-router')() +const superagent = require('superagent') +const cheerio = require('cheerio') +const fs = require('fs') +const nodemailer = require('nodemailer') +const dateformat = require('dateformat') +const isEqual = require('lodash.isequal') + +let json = null +let date = new Date() +const transporter = nodemailer.createTransport({ + host: 'smtp.exmail.qq.com', + port: 465, + secure: true, + auth: { + user: 'zhin@imuntil.com', + pass: 'eVcybJ4QzvjxjzGv' + } +}) +const mailOptions = { + from: 'zhin@imuntil.com', // sender address + to: 'imuntil@qq.com', // list of receivers + subject: 'Hello ✔', // Subject line + text: 'Hello world?' // plain text body +} + +const sendMail = async (content, now) => { + transporter.sendMail( + { + ...mailOptions, + subject: 'TAKIGEN微博更新-' + dateformat(now, 'isoDateTime'), + text: JSON.stringify(content, '', 4) + }, + (err, info) => { + if (err) { + return console.log(err) + } + console.log('success') + } + ) +} + +const readLocalFile = async () => { + try { + const data = fs.readFileSync('../takigen-webo/temp.html', 'utf-8') + return data + } catch (error) { + console.log(error) + } +} + +const request = async () => { + const url = + 'http://v.t.sina.com.cn/widget/widget_blog.php?uid=5238762936&height=500&skin=wd_01&showpic=1' + try { + const res = await superagent.get(url) + return res.text + } catch (error) { + console.log(error) + } +} + +const reptile = async text => { + if (!text) { + // text = await readLocalFile() + return '' + } + const $ = cheerio.load(text) + const fans = /(\d+)/.exec($('.userfans a').text())[1] + const res = $('.wgtCell_con').map((i, el) => { + const _ = cheerio.load(el) + const date = _('.link_d') + const obj = { + content: _('.wgtCell_txt') + .text() + .trim() + .replace(/\s|\n/g, ''), + date: date.text().trim(), + link: date.attr('href') + } + return obj + }) + return { fans, list: res.get().slice(0, 5) } +} + +router.get('/', async (ctx, next) => { + const now = new Date() + /* time 2 hours */ + if (!json || now - date >= 1000 * 60 * 60 * 2) { + console.log('timeout ...........') + const html = await request() + const newJson = await reptile(html) + /* 比较两次的数据,如果不一致则发送邮件 */ + if (!isEqual(newJson, json)) { + sendMail(newJson, now) + json = newJson + } + date = now + } + ctx.body = json +}) + +// router.get('/string', async (ctx, next) => { +// ctx.body = 'koa2 string' +// }) + +// router.get('/json', async (ctx, next) => { +// ctx.body = { +// title: 'koa2 json' +// } +// }) + +module.exports = router diff --git a/play/tkwb-server/routes/users.js b/play/tkwb-server/routes/users.js new file mode 100644 index 0000000..c650166 --- /dev/null +++ b/play/tkwb-server/routes/users.js @@ -0,0 +1,13 @@ +const router = require('koa-router')() + +router.prefix('/users') + +router.get('/', function (ctx, next) { + ctx.body = 'this is a users response!' +}) + +router.get('/bar', function (ctx, next) { + ctx.body = 'this is a users/bar response' +}) + +module.exports = router diff --git a/play/tkwb-server/views/error.pug b/play/tkwb-server/views/error.pug new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/play/tkwb-server/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/play/tkwb-server/views/index.pug b/play/tkwb-server/views/index.pug new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/play/tkwb-server/views/index.pug @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/play/tkwb-server/views/layout.pug b/play/tkwb-server/views/layout.pug new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/play/tkwb-server/views/layout.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/play/zh-cli/bin/zh-hello.js b/play/zh-cli/bin/zh-hello.js new file mode 100644 index 0000000..d25706c --- /dev/null +++ b/play/zh-cli/bin/zh-hello.js @@ -0,0 +1 @@ +console.log('hello, commander') \ No newline at end of file diff --git a/play/zh-cli/bin/zh-init.js b/play/zh-cli/bin/zh-init.js new file mode 100755 index 0000000..0910f74 --- /dev/null +++ b/play/zh-cli/bin/zh-init.js @@ -0,0 +1,119 @@ +#!/usr/bin/env node + +const program = require('commander') +const path = require('path') +const fs = require('fs') +const glob = require('glob') +const inquirer = require('inquirer') +const latestVersion = require('latest-version') +const userHome = require('user-home') +const chalk = require('chalk') +const logSymbols = require('log-symbols') +const download = require('../lib/download') +const generator = require('../lib/generator') + +program.usage('').parse(process.argv) + +const projectName = program.args[0] +if (!projectName) { + program.help() + return +} + +// 遍历当前目录 +const list = glob.sync('*') +let next +let rootName = path.basename(process.cwd()) +// 暂存目录 +const tmp = path.join(userHome, '.vue-templates', 'vue-cli-ts') + +if (list.length) { + // 如果当前目录不为空 + if (list.filter(name => { + const fileName = path.resolve(process.cwd(), path.join('.', name)) + const isDir = fs.statSync(fileName).isDirectory() + return name.indexOf(projectName) !== -1 && isDir + }).length !== 0) { + console.log(`项目${projectName}已经存在`) + return + } + next = Promise.resolve(projectName) +} else if (rootName === projectName) { + next = inquirer.prompt([{ + name: 'buildInCurrent', + message: '当前目录为空,且目录名称和项目名称相同,是否直接在当前目录下创建新项目?', + type: 'confirm', + default: true + }]).then(ans => { + return Promise.resolve(ans.buildInCurrent ? '.' : projectName) + }) +} else { + next = Promise.resolve(projectName) +} + +go() + +function go() { + next + .then(projectRoot => { + if (projectRoot !== '.') { + fs.mkdirSync(projectRoot) + } + return { + name: projectRoot, + root: projectRoot + } + }) + .then(context => { + return inquirer.prompt([{ + name: 'projectName', + message: '项目名称', + default: context.name + }, + { + name: 'projectVersion', + message: '项目版本号', + default: '1.0.0' + }, + { + name: 'projectDescription', + message: '项目简介', + default: `A project named ${context.name}` + } + ]) + .then(answers => { + return latestVersion('vue-cli').then(version => { + answers.supportVueCliVersion = version + return { + ...context, + metadata: { + ...answers + } + } + }) + .catch(err => { + return Promise.reject(err) + }) + }) + }) + .then(context => { + return download(tmp) + .then(target => { + return { + ...context, + download: target + } + }) + }) + .then(context => { + return generator(context.metadata, tmp, context.root) + }) + .then(context => { + console.log(logSymbols.success, chalk.green('创建成功')) + console.log() + console.log(chalk.green('cd ' + context + '\nnpm install\nnpm run dev')) + }) + .catch(err => { + console.log(logSymbols.error, chalk.red(`创建失败:${err.message}`)) + }) +} \ No newline at end of file diff --git a/play/zh-cli/bin/zh.js b/play/zh-cli/bin/zh.js new file mode 100644 index 0000000..a390c9e --- /dev/null +++ b/play/zh-cli/bin/zh.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node + +const program = require('commander') +program.version('1.0.0') + .usage(' [项目名称]') + .command('init', '创建新项目') + .parse(process.argv) \ No newline at end of file diff --git a/play/zh-cli/lib/download.js b/play/zh-cli/lib/download.js new file mode 100644 index 0000000..5fb18df --- /dev/null +++ b/play/zh-cli/lib/download.js @@ -0,0 +1,28 @@ +const path = require('path') +const download = require('download-git-repo') +const ora = require('ora') +const rm = require('rimraf').sync +const exists = require('fs').existsSync + +module.exports = function (target) { + if (exists(target)) { + console.log(`rm ${target}`) + rm(target) + } + return new Promise((resolve, reject) => { + const url = 'imuntil/vue-ts-template#master' + const spinner = ora(`正在下载项目模板,源地址:${url}`) + spinner.start() + download(url, target, { + clone: true + }, err => { + if (err) { + spinner.fail() + reject(err) + } else { + spinner.succeed() + resolve(target) + } + }) + }) +} \ No newline at end of file diff --git a/play/zh-cli/lib/generator.js b/play/zh-cli/lib/generator.js new file mode 100644 index 0000000..e6fd12f --- /dev/null +++ b/play/zh-cli/lib/generator.js @@ -0,0 +1,32 @@ +const MetalSmith = require('metalsmith') +const Handlebars = require('handlebars') +const rm = require('rimraf').sync +const path = require('path') + +module.exports = function (metadata = {}, src, dest = '.') { + if (!src) { + return Promise.reject(new Error(`无效的source: ${src}`)) + } + return new Promise((resolve, reject) => { + MetalSmith(path.resolve(process.cwd())) + .metadata(metadata) + .clean(false) + .source(src) + .destination(dest) + .use((files, metalsmith, done) => { + const meta = metalsmith.metadata() + // Object.keys(files).forEach(filename => { + // const t = files[filename].contents.toString() + // files[filename].contents = new Buffer(Handlebars.compile(t)(meta)) + // }) + const handle = files['package.json'] + const t = handle.contents.toString() + handle.contents = new Buffer(Handlebars.compile(t)(meta)) + done() + }) + .build(err => { + rm(src) + err ? reject(err) : resolve(dest) + }) + }) +} \ No newline at end of file diff --git a/play/zh-cli/package-lock.json b/play/zh-cli/package-lock.json new file mode 100644 index 0000000..ee1b9a6 --- /dev/null +++ b/play/zh-cli/package-lock.json @@ -0,0 +1,1499 @@ +{ + "name": "zh-cli", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "absolute": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/absolute/download/absolute-0.0.1.tgz", + "integrity": "sha1-wigi+H4ck59XmIdQTZwQnEFzgp0=" + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.0.0.tgz", + "integrity": "sha1-7D6LTp+AZPwCw6ybZfHCdb2o75I=" + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-red/download/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "requires": { + "color-convert": "1.9.1" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/ansi-wrap/download/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "argparse": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "async": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + }, + "bl": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/bl/download/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "3.6.0", + "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "requires": { + "base64-js": "0.0.8", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "http://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "optional": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + }, + "caw": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/caw/download/caw-2.0.1.tgz", + "integrity": "sha1-bDygcfwZRyCIPC3F2psHS/x+npU=", + "requires": { + "get-proxy": "2.1.0", + "isurl": "1.0.0", + "tunnel-agent": "0.6.0", + "url-to-options": "1.0.1" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.1.0.tgz", + "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=" + }, + "cli-width": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "optional": true + } + } + }, + "clone": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" + }, + "co": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + }, + "co-from-stream": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/co-from-stream/download/co-from-stream-0.0.0.tgz", + "integrity": "sha1-GlzYztdyY5RglPo58kmaYyl7yvk=", + "requires": { + "co-read": "0.0.1" + } + }, + "co-fs-extra": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/co-fs-extra/download/co-fs-extra-1.2.1.tgz", + "integrity": "sha1-O2rXfPJhRTD2d7HPYmZPW6dWtyI=", + "requires": { + "co-from-stream": "0.0.0", + "fs-extra": "0.26.7", + "thunkify-wrap": "1.0.4" + } + }, + "co-read": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/co-read/download/co-read-0.0.1.tgz", + "integrity": "sha1-+Bs+uKhmdf7FHj2IOn9WToc8k4k=" + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "http://registry.npm.taobao.org/coffee-script/download/coffee-script-1.12.7.tgz", + "integrity": "sha1-wF2uDLeVkdBbMHCoQzqYyaiczFM=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "commander": { + "version": "2.13.0", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.13.0.tgz", + "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "config-chain": { + "version": "1.1.11", + "resolved": "http://registry.npm.taobao.org/config-chain/download/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "optional": true + }, + "decompress": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/decompress/download/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.11", + "make-dir": "1.1.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/decompress-tar/download/decompress-tar-4.1.1.tgz", + "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.5.5" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/decompress-tarbz2/download/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.2.5" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-6.2.0.tgz", + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/decompress-targz/download/decompress-targz-4.1.1.tgz", + "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/decompress-unzip/download/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.9.1" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + } + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "download": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/download/download/download-5.0.3.tgz", + "integrity": "sha1-Y1N/l3+ZJmow64oqL70fILgAD3o=", + "requires": { + "caw": "2.0.1", + "decompress": "4.2.0", + "filenamify": "2.0.0", + "get-stream": "3.0.0", + "got": "6.7.1", + "mkdirp": "0.5.1", + "pify": "2.3.0" + } + }, + "download-git-repo": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/download-git-repo/download/download-git-repo-1.0.2.tgz", + "integrity": "sha1-C5OmIFfkHi8hsaBsleeyY2KxCP8=", + "requires": { + "download": "5.0.3", + "git-clone": "0.1.0", + "rimraf": "2.6.2" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "enable": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/enable/download/enable-1.3.2.tgz", + "integrity": "sha1-nrpoN9FtCYK1n4fYib91REPVKTE=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "requires": { + "once": "1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.0.tgz", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-2.1.0.tgz", + "integrity": "sha1-PQJqIbf5W1cmOH1CAKwWDTcsO0g=", + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/filenamify/download/filenamify-2.0.0.tgz", + "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=", + "requires": { + "filename-reserved-regex": "2.0.0", + "strip-outer": "1.0.0", + "trim-repeated": "1.0.0" + } + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/get-proxy/download/get-proxy-2.1.0.tgz", + "integrity": "sha1-NJ8rTZHUTE1NTpy6KtkBQ/rF75M=", + "requires": { + "npm-conf": "1.1.3" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "git-clone": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/git-clone/download/git-clone-0.1.0.tgz", + "integrity": "sha1-DXYWN3gJOu9/HDAjjyqe8/B6Lrk=" + }, + "glob": { + "version": "7.1.2", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "gray-matter": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/gray-matter/download/gray-matter-2.1.1.tgz", + "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=", + "requires": { + "ansi-red": "0.1.1", + "coffee-script": "1.12.7", + "extend-shallow": "2.0.1", + "js-yaml": "3.10.0", + "toml": "2.3.3" + } + }, + "handlebars": { + "version": "4.0.11", + "resolved": "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "has-generators": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has-generators/download/has-generators-1.0.1.tgz", + "integrity": "sha1-pqLlVIYBGUBILhPiyTeRxEms9Ek=" + }, + "has-symbol-support-x": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/has-symbol-support-x/download/has-symbol-support-x-1.4.1.tgz", + "integrity": "sha1-ZuwuN34MfXzO2wejqE13UQ/xvEw=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/has-to-string-tag-x/download/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha1-oEWrOD17SyASoAFIqwql8pAETU0=", + "requires": { + "has-symbol-support-x": "1.4.1" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" + }, + "inquirer": { + "version": "5.0.0", + "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-5.0.0.tgz", + "integrity": "sha1-Jht3zbU1SVUJ8bkBlxCP+5bALbU=", + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "5.5.6", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "is": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/is/download/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/is-natural-number/download/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-object/download/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isurl": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isurl/download/isurl-1.0.0.tgz", + "integrity": "sha1-sn9PSfPNqj6kSgpbfzRi5u3DnWc=", + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.10.0.tgz", + "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=", + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/klaw/download/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "4.0.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "optional": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "log-symbols": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-2.1.0.tgz", + "integrity": "sha1-81+mDieIMrU43E3dy7R4pF0+O+Y=", + "requires": { + "chalk": "2.3.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + }, + "make-dir": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.1.0.tgz", + "integrity": "sha1-GbQ2n+SMEW9Twq+VrRAsDjnoXVE=", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "metalsmith": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/metalsmith/download/metalsmith-2.3.0.tgz", + "integrity": "sha1-gzr7taKmOF4tmuPZNeOeM+rqUjE=", + "requires": { + "absolute": "0.0.1", + "chalk": "1.1.3", + "clone": "1.0.3", + "co-fs-extra": "1.2.1", + "commander": "2.13.0", + "gray-matter": "2.1.1", + "has-generators": "1.0.1", + "is": "3.2.1", + "is-utf8": "0.2.1", + "recursive-readdir": "2.2.1", + "rimraf": "2.6.2", + "stat-mode": "0.2.2", + "thunkify": "2.1.2", + "unyield": "0.0.1", + "ware": "1.3.0", + "win-fork": "1.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/npm-conf/download/npm-conf-1.1.3.tgz", + "integrity": "sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=", + "requires": { + "config-chain": "1.1.11", + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } + }, + "ora": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/ora/download/ora-1.3.0.tgz", + "integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=", + "requires": { + "chalk": "1.1.3", + "cli-cursor": "2.1.0", + "cli-spinners": "1.1.0", + "log-symbols": "1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "requires": { + "chalk": "1.1.3" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.5.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "rc": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/rc/download/rc-1.2.4.tgz", + "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "recursive-readdir": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/recursive-readdir/download/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "requires": { + "minimatch": "3.0.3" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "requires": { + "rc": "1.2.4", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "1.2.4" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "requires": { + "glob": "7.1.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "2.1.0" + } + }, + "rxjs": { + "version": "5.5.6", + "resolved": "http://registry.npm.taobao.org/rxjs/download/rxjs-5.5.6.tgz", + "integrity": "sha1-4x+5bW/S/x/YS86orpwC0AcXnAI=", + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/seek-bzip/download/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.5.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.5.0.tgz", + "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "source-map": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stat-mode": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/stat-mode/download/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/strip-dirs/download/strip-dirs-2.1.0.tgz", + "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", + "requires": { + "is-natural-number": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "strip-outer": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-outer/download/strip-outer-1.0.0.tgz", + "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + }, + "tar-stream": { + "version": "1.5.5", + "resolved": "http://registry.npm.taobao.org/tar-stream/download/tar-stream-1.5.5.tgz", + "integrity": "sha1-XK2Ed59FyDsfJQjZawnYjHIYr1U=", + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.1", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "thunkify": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/thunkify/download/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, + "thunkify-wrap": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/thunkify-wrap/download/thunkify-wrap-1.0.4.tgz", + "integrity": "sha1-tSvlSN3+/aIOALWMYJZ2K0PdaIA=", + "requires": { + "enable": "1.3.2" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "toml": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/toml/download/toml-2.3.3.tgz", + "integrity": "sha1-jWg9cpV3yyhiMd/HqK/+WNMXKPs=" + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/trim-repeated/download/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "http://registry.npm.taobao.org/unbzip2-stream/download/unbzip2-stream-1.2.5.tgz", + "integrity": "sha1-c6AzpWe7veWWVLGTxE1Ip+T0PEc=", + "requires": { + "buffer": "3.6.0", + "through": "2.3.8" + } + }, + "unyield": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/unyield/download/unyield-0.0.1.tgz", + "integrity": "sha1-FQ5l2kK/d0JEW5WKZOubhdHSsYA=", + "requires": { + "co": "3.1.0" + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/url-to-options/download/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "user-home": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "requires": { + "os-homedir": "1.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "ware": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/ware/download/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "requires": { + "wrap-fn": "0.1.5" + } + }, + "win-fork": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/win-fork/download/win-fork-1.1.1.tgz", + "integrity": "sha1-j1jgZW/KAK3IyGoriePNLWotXl4=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/wrap-fn/download/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "requires": { + "co": "3.1.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + }, + "yauzl": { + "version": "2.9.1", + "resolved": "http://registry.npm.taobao.org/yauzl/download/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/play/zh-cli/package.json b/play/zh-cli/package.json new file mode 100644 index 0000000..34766ca --- /dev/null +++ b/play/zh-cli/package.json @@ -0,0 +1,27 @@ +{ + "name": "zh-cli", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "bin": "./bin/zh-init.js", + "author": "", + "license": "ISC", + "dependencies": { + "chalk": "^2.3.0", + "commander": "^2.13.0", + "download-git-repo": "^1.0.2", + "handlebars": "^4.0.11", + "inquirer": "^5.0.0", + "latest-version": "^3.1.0", + "log-symbols": "^2.1.0", + "metalsmith": "^2.3.0", + "ora": "^1.3.0", + "user-home": "^2.0.0" + }, + "devDependencies": { + "glob": "^7.1.2" + } +} diff --git a/play/zhnt-cli_deprecated/.eslintrc.js b/play/zhnt-cli_deprecated/.eslintrc.js new file mode 100644 index 0000000..5da4583 --- /dev/null +++ b/play/zhnt-cli_deprecated/.eslintrc.js @@ -0,0 +1,28 @@ +module.exports = { + "env": { + "browser": true, + "commonjs": true, + "es6": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [0], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "never" + ], + "no-undef": [0], + "no-console": [0] + } +}; \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/bin/node-cli-demo.js b/play/zhnt-cli_deprecated/bin/node-cli-demo.js new file mode 100644 index 0000000..c864d4a --- /dev/null +++ b/play/zhnt-cli_deprecated/bin/node-cli-demo.js @@ -0,0 +1,11 @@ +#! node + +function isDefined(x) { + return x !== null && x !== undefined +} +const program = require('commander') +const version = require('../package.json') + +program + .version(version) +// . \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/index.js b/play/zhnt-cli_deprecated/index.js new file mode 100644 index 0000000..f91ceb5 --- /dev/null +++ b/play/zhnt-cli_deprecated/index.js @@ -0,0 +1,100 @@ +#!/usr/bin/env node + +const program = require('commander') +const chalk = require('chalk') +const path = require('path') +const exists = require('fs').existsSync +const inquirer = require('inquirer') +const ora = require('ora') +const userHome = require('user-home') +const download = require('download-git-repo') +const tildify = require('tildify') +const logger = require('./lib/logger') +const localPath = require('./lib/local-path') + +const { isLocalPath, getTemplatePath } = localPath + +program + .usage(' [project-name]') + .option('-t --typescript', 'use typescript') + .option('-s --scss', 'use scss') + +/** + * Help + */ +program.on('--help', () => { + console.log(' Examples:') + console.log() + console.log(chalk(' # create a new project default')) + console.log(' $ zhnt init') + console.log() + console.log(chalk(' # create a new project with typescript')) + console.log(' $ zhnt init -t') +}) + +function help() { + program.parse(process.argv) + if (program.args.length < 1) return program.help() +} +help() + +/** + * Settings + */ +console.log(program.args) +let [, template = 'nodejs', rawName] = program.args +console.log('rawName:', rawName) +const inPlace = !rawName || rawName === '.' +const name = inPlace ? path.relative('../', process.cwd()) : rawName +const to = path.resolve(rawName || '.') +console.log('---------------') +console.log(template, name, to) + +// 暂存目录 +const tmp = path.join(userHome, '.vue-templates', template.replace(/\//g, '-')) +console.log(tmp) +if (program.offline) { + console.log(`> Use cached template at ${chalk.yellow(tildify(tmp))}`) + template = tmp +} +/** + * Padding + */ +console.log() +process.on('exit', () => { + console.log() +}) + +if (exists(to)) { + inquirer.prompt([{ + type: 'confirm', + message: inPlace + ? 'Generate project in current directory' + : 'Target directory exists. Continue?', + name: 'ok' + }]).then(answers => { + if (answers.ok) { + run() + } + }).catch(logger.fatal) +} else { + run() +} + +/** + * Check, download and generate the project + */ +function run () { + console.log('run') + if (isLocalPath(template)) { + const templatePath = getTemplatePath(template) + if (exists(templatePath)) { + // x + } + } +} + +// function downloadAndGenerate (template) { +// const spinner = ora('download template') +// spinner.start() +// } \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/lib/generate.js b/play/zhnt-cli_deprecated/lib/generate.js new file mode 100644 index 0000000..0559a2d --- /dev/null +++ b/play/zhnt-cli_deprecated/lib/generate.js @@ -0,0 +1,13 @@ +const chalk = require('chalk') +const Metalsmith = require('metalsmith') +const Handlebars = require('handlebars') +const async = require('async') +const render = require('consolidate').handlebars.render +const path = require('path') +const multimath = require('multimatch') +const getOptions = require('./options') + +module.exports = function generate (name, src, dest, done) { + const opts = getOptions(name, src) + const metalsmith = Metalsmith(path.join(src, 'template')) +} \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/lib/git-user.js b/play/zhnt-cli_deprecated/lib/git-user.js new file mode 100644 index 0000000..8c2f75b --- /dev/null +++ b/play/zhnt-cli_deprecated/lib/git-user.js @@ -0,0 +1,15 @@ +const exec = require('child_process').execSync + +module.exports = () => { + let name + let email + try { + name = exec('git config --get user.name') + email = exec('git config --get user.email') + } catch (e) { + // z + } + name = name && JSON.stringify(name.toString().trim()).slice(1,-1) + email = email && (`< ${email.toString().trim()} >`) + return ( name || '') + (email || '') +} \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/lib/local-path.js b/play/zhnt-cli_deprecated/lib/local-path.js new file mode 100644 index 0000000..aed9c95 --- /dev/null +++ b/play/zhnt-cli_deprecated/lib/local-path.js @@ -0,0 +1,13 @@ +const path = require('path') + +module.exports = { + isLocalPath (templatePath) { + return /^[./]|(^[A-z]:)/.test(templatePath) + }, + + getTemplatePath (templatePath) { + return path.isAbsolute(templatePath) + ? templatePath + : path.normalize(path.join(process.cwd(), templatePath)) + } +} \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/lib/logger.js b/play/zhnt-cli_deprecated/lib/logger.js new file mode 100644 index 0000000..c543071 --- /dev/null +++ b/play/zhnt-cli_deprecated/lib/logger.js @@ -0,0 +1,37 @@ +const chalk = require('chalk') +const format = require('util').format + +/** + * Prefix + */ +const prefix = ' zhnt-cli' +const sep = chalk.gray('.') + +/** + * Log a `message` to the console + * @param {String} message + */ +exports.log = function (...args) { + const msg = format.apply(format, args) + console.log(chalk.white(prefix), sep, msg) +} + +/** + * Log an error `message` to the console an exit + * @param {String} message + */ +exports.fatal = function (...args) { + if (args[0] instanceof Error) args[0] = args[0].message.trim() + const msg = format.apply(format, args) + console.error(chalk.red(prefix), sep, msg) + process.exit(1) +} + +/** + * Log a success `message` to the console and exit + * @param {String} message + */ +exports.success = function (...args) { + const msg = format.apply(format, args) + console.log(chalk.white(prefix), sep, msg) +} \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/lib/options.js b/play/zhnt-cli_deprecated/lib/options.js new file mode 100644 index 0000000..99cdc48 --- /dev/null +++ b/play/zhnt-cli_deprecated/lib/options.js @@ -0,0 +1,77 @@ +const path = require('path') +const metadata = require('read-metadata') +const exists = require('fs').existsSync +const getGitUser = require('./git-user') +const validateName = require('validate-npm-package-name') + +module.exports = function options (name, dir) { + const opts = getMetadata(dir) + + setDefault(opts, 'name', name) + setValidateName(opts) + + const author = getGitUser() + if (author) { + setDefault(opts, 'author', author) + } + return opts +} + +/** + * Gets the metadata from either a meta.js or meta.json file + * @param {String} dir + * @return {Object} + */ +function getMetadata (dir) { + const json = path.join(dir, 'meta.json') + const js = path.join(dir, 'meta.js') + let opts = {} + + if (exists(json)) { + opts = metadata.sync(json) + } else if (exists(js)) { + const req = require(path.resolve(js)) + if (req !== Object(req)) { + throw new Error('meta.js needs to expose an object') + } + opts = req + } + return opts +} + +/** + * 为提示问题设置默认值 + * @param {Object} opts + * @param {String} key + * @param {String} val + */ +function setDefault (opts, key, val) { + console.log('schema:', opts.schema) + if (opts.schema) { + opts.prompts = opts.schema + delete opts.schema + } + const prompts = opts.schema || (opts.prompts = {}) + if (!prompts[key] || typeof prompts[key] !== object) { + prompts[key] = { + 'type': 'string', + 'default': val + } + } else { + prompts[key]['default'] = val + } +} + +function setValidateName (opts) { + const name = opts.prompts.name + const customValidate = name.validate + name.validate = name => { + const its = validateName(name) + if (!its.validForNewPackages) { + const errors = (its.errors || []).concat(its.warnings || []) + return `Sorry, ${errors.join('and')}.` + } + if (typeof customValidate === 'function') return customValidate(name) + return true + } +} \ No newline at end of file diff --git a/play/zhnt-cli_deprecated/package-lock.json b/play/zhnt-cli_deprecated/package-lock.json new file mode 100644 index 0000000..9b1a346 --- /dev/null +++ b/play/zhnt-cli_deprecated/package-lock.json @@ -0,0 +1,2518 @@ +{ + "name": "zhnt-cli", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "absolute": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/absolute/download/absolute-0.0.1.tgz", + "integrity": "sha1-wigi+H4ck59XmIdQTZwQnEFzgp0=" + }, + "acorn": { + "version": "5.2.1", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-5.2.1.tgz", + "integrity": "sha1-MXrHghgmwixwLWYYmrg1lnXxNdc=", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.0.0.tgz", + "integrity": "sha1-7D6LTp+AZPwCw6ybZfHCdb2o75I=" + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-red/download/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "requires": { + "color-convert": "1.9.1" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/ansi-wrap/download/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "argparse": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-differ": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/array-differ/download/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "async": { + "version": "2.6.0", + "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.0.tgz", + "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "requires": { + "lodash": "4.17.4" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + }, + "bl": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/bl/download/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "3.6.0", + "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "requires": { + "base64-js": "0.0.8", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "http://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "optional": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + }, + "caw": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/caw/download/caw-2.0.1.tgz", + "integrity": "sha1-bDygcfwZRyCIPC3F2psHS/x+npU=", + "requires": { + "get-proxy": "2.1.0", + "isurl": "1.0.0", + "tunnel-agent": "0.6.0", + "url-to-options": "1.0.1" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz", + "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "http://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "circular-json": { + "version": "0.3.3", + "resolved": "http://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz", + "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-spinners": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.1.0.tgz", + "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=" + }, + "cli-width": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "optional": true + } + } + }, + "clone": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "co-from-stream": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/co-from-stream/download/co-from-stream-0.0.0.tgz", + "integrity": "sha1-GlzYztdyY5RglPo58kmaYyl7yvk=", + "requires": { + "co-read": "0.0.1" + } + }, + "co-fs-extra": { + "version": "1.2.1", + "resolved": "http://registry.npm.taobao.org/co-fs-extra/download/co-fs-extra-1.2.1.tgz", + "integrity": "sha1-O2rXfPJhRTD2d7HPYmZPW6dWtyI=", + "requires": { + "co-from-stream": "0.0.0", + "fs-extra": "0.26.7", + "thunkify-wrap": "1.0.4" + } + }, + "co-read": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/co-read/download/co-read-0.0.1.tgz", + "integrity": "sha1-+Bs+uKhmdf7FHj2IOn9WToc8k4k=" + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "http://registry.npm.taobao.org/coffee-script/download/coffee-script-1.12.7.tgz", + "integrity": "sha1-wF2uDLeVkdBbMHCoQzqYyaiczFM=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.1.tgz", + "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "commander": { + "version": "2.12.2", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.12.2.tgz", + "integrity": "sha1-D1lGxCftnsDZGka7ne9T5UZQ5VU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "http://registry.npm.taobao.org/config-chain/download/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + } + }, + "consolidate": { + "version": "0.15.0", + "resolved": "http://registry.npm.taobao.org/consolidate/download/consolidate-0.15.0.tgz", + "integrity": "sha1-OXkYkBKX1fZX0KZRSjBQIkWiCYA=", + "requires": { + "bluebird": "3.5.1" + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "optional": true + }, + "decompress": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/decompress/download/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.11", + "make-dir": "1.1.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/decompress-tar/download/decompress-tar-4.1.1.tgz", + "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.5.5" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/decompress-tarbz2/download/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.2.5" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-6.2.0.tgz", + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/decompress-targz/download/decompress-targz-4.1.1.tgz", + "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/decompress-unzip/download/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.9.1" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + } + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "http://registry.npm.taobao.org/del/download/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "doctrine": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-2.0.2.tgz", + "integrity": "sha1-aPls6O/FbMQmUfH6rbTxdSc7AHU=", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "download": { + "version": "5.0.3", + "resolved": "http://registry.npm.taobao.org/download/download/download-5.0.3.tgz", + "integrity": "sha1-Y1N/l3+ZJmow64oqL70fILgAD3o=", + "requires": { + "caw": "2.0.1", + "decompress": "4.2.0", + "filenamify": "2.0.0", + "get-stream": "3.0.0", + "got": "6.7.1", + "mkdirp": "0.5.1", + "pify": "2.3.0" + } + }, + "download-git-repo": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/download-git-repo/download/download-git-repo-1.0.2.tgz", + "integrity": "sha1-C5OmIFfkHi8hsaBsleeyY2KxCP8=", + "requires": { + "download": "5.0.3", + "git-clone": "0.1.0", + "rimraf": "2.6.2" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "enable": { + "version": "1.3.2", + "resolved": "http://registry.npm.taobao.org/enable/download/enable-1.3.2.tgz", + "integrity": "sha1-nrpoN9FtCYK1n4fYib91REPVKTE=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "requires": { + "once": "1.4.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "4.14.0", + "resolved": "http://registry.npm.taobao.org/eslint/download/eslint-4.14.0.tgz", + "integrity": "sha1-lmCXaNHdIzBPq6LZS3/v5aVEeoI=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.0", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.0.2", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.2", + "esquery": "1.0.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.1.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "is-resolvable": "1.0.1", + "js-yaml": "3.10.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "require-uncached": "1.0.3", + "semver": "5.4.1", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + } + }, + "eslint-config-standard": { + "version": "11.0.0-beta.0", + "resolved": "http://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-11.0.0-beta.0.tgz", + "integrity": "sha1-+K/mmAPZXGhaS4OSuHkxiOsDy7M=", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.1.tgz", + "integrity": "sha1-RCJXTN5mqaewmZOO5NUIoZng48w=", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.1.1.tgz", + "integrity": "sha1-q67IJBd2E7ipWymWOeG2+s9HNEk=", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.8.0", + "resolved": "http://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.8.0.tgz", + "integrity": "sha1-+htu8x/LPFAcCYWcG4bx/FuYaJQ=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.1", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "5.2.1", + "resolved": "http://registry.npm.taobao.org/eslint-plugin-node/download/eslint-plugin-node-5.2.1.tgz", + "integrity": "sha1-gN8yU8TXkBBF7If6ZgooTjK9yik=", + "dev": true, + "requires": { + "ignore": "3.3.7", + "minimatch": "3.0.4", + "resolve": "1.5.0", + "semver": "5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "3.6.0", + "resolved": "http://registry.npm.taobao.org/eslint-plugin-promise/download/eslint-plugin-promise-3.6.0.tgz", + "integrity": "sha1-VLdljI9FSBPcKocK/4FS7ElpunU=", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/eslint-plugin-standard/download/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0=", + "dev": true + }, + "espree": { + "version": "3.5.2", + "resolved": "http://registry.npm.taobao.org/espree/download/espree-3.5.2.tgz", + "integrity": "sha1-dWrai5eenc/NswqtjRqTBKkF4co=", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/esprima/download/esprima-4.0.0.tgz", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=" + }, + "esquery": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/esquery/download/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/external-editor/download/external-editor-2.1.0.tgz", + "integrity": "sha1-PQJqIbf5W1cmOH1CAKwWDTcsO0g=", + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/filename-reserved-regex/download/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/filenamify/download/filenamify-2.0.0.tgz", + "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=", + "requires": { + "filename-reserved-regex": "2.0.0", + "strip-outer": "1.0.0", + "trim-repeated": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/get-proxy/download/get-proxy-2.1.0.tgz", + "integrity": "sha1-NJ8rTZHUTE1NTpy6KtkBQ/rF75M=", + "requires": { + "npm-conf": "1.1.3" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "git-clone": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/git-clone/download/git-clone-0.1.0.tgz", + "integrity": "sha1-DXYWN3gJOu9/HDAjjyqe8/B6Lrk=" + }, + "glob": { + "version": "7.1.2", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "globals": { + "version": "11.1.0", + "resolved": "http://registry.npm.taobao.org/globals/download/globals-11.1.0.tgz", + "integrity": "sha1-YyZERX9fDjrnEYBxg3AOvy5GM+Q=", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "http://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "gray-matter": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/gray-matter/download/gray-matter-2.1.1.tgz", + "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=", + "requires": { + "ansi-red": "0.1.1", + "coffee-script": "1.12.7", + "extend-shallow": "2.0.1", + "js-yaml": "3.10.0", + "toml": "2.3.3" + } + }, + "handlebars": { + "version": "4.0.11", + "resolved": "http://registry.npm.taobao.org/handlebars/download/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has/download/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "has-generators": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/has-generators/download/has-generators-1.0.1.tgz", + "integrity": "sha1-pqLlVIYBGUBILhPiyTeRxEms9Ek=" + }, + "has-symbol-support-x": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/has-symbol-support-x/download/has-symbol-support-x-1.4.1.tgz", + "integrity": "sha1-ZuwuN34MfXzO2wejqE13UQ/xvEw=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/has-to-string-tag-x/download/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha1-oEWrOD17SyASoAFIqwql8pAETU0=", + "requires": { + "has-symbol-support-x": "1.4.1" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.5.0.tgz", + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "ignore": { + "version": "3.3.7", + "resolved": "http://registry.npm.taobao.org/ignore/download/ignore-3.3.7.tgz", + "integrity": "sha1-YSKJv7PCIOGGpYEYYY1b6MG6sCE=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" + }, + "inquirer": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/inquirer/download/inquirer-4.0.2.tgz", + "integrity": "sha1-zGeLTLwOGDo1AMxjOVgx7JVqsKM=", + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "is": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/is/download/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/is-natural-number/download/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-object/download/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-resolvable": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.0.1.tgz", + "integrity": "sha1-rMoc022+RLl0uSQyFVWnC6A7HPQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isurl": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isurl/download/isurl-1.0.0.tgz", + "integrity": "sha1-sn9PSfPNqj6kSgpbfzRi5u3DnWc=", + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.10.0.tgz", + "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=", + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "http://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/klaw/download/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "optional": true + }, + "levn": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "http://registry.npm.taobao.org/lodash.cond/download/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.1.tgz", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/make-dir/download/make-dir-1.1.0.tgz", + "integrity": "sha1-GbQ2n+SMEW9Twq+VrRAsDjnoXVE=", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "metalsmith": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/metalsmith/download/metalsmith-2.3.0.tgz", + "integrity": "sha1-gzr7taKmOF4tmuPZNeOeM+rqUjE=", + "requires": { + "absolute": "0.0.1", + "chalk": "1.1.3", + "clone": "1.0.3", + "co-fs-extra": "1.2.1", + "commander": "2.12.2", + "gray-matter": "2.1.1", + "has-generators": "1.0.1", + "is": "3.2.1", + "is-utf8": "0.2.1", + "recursive-readdir": "2.2.1", + "rimraf": "2.6.2", + "stat-mode": "0.2.2", + "thunkify": "2.1.2", + "unyield": "0.0.1", + "ware": "1.3.0", + "win-fork": "1.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multimatch": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/multimatch/download/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/npm-conf/download/npm-conf-1.1.3.tgz", + "integrity": "sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=", + "requires": { + "config-chain": "1.1.11", + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "ora": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/ora/download/ora-1.3.0.tgz", + "integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=", + "requires": { + "chalk": "1.1.3", + "cli-cursor": "2.1.0", + "cli-spinners": "1.1.0", + "log-symbols": "1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-limit": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/p-limit/download/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "http://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz", + "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/progress/download/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "read-metadata": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/read-metadata/download/read-metadata-1.0.0.tgz", + "integrity": "sha1-bfnL5RGE6M630GaLQO5Rkebz2sY=", + "requires": { + "yaml-js": "0.0.8" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "recursive-readdir": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/recursive-readdir/download/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "requires": { + "minimatch": "3.0.3" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "resolve": { + "version": "1.5.0", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.5.0.tgz", + "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "requires": { + "glob": "7.1.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "http://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "http://registry.npm.taobao.org/rx-lite-aggregates/download/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/seek-bzip/download/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "http://registry.npm.taobao.org/commander/download/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.4.1", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz", + "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stat-mode": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/stat-mode/download/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/strip-dirs/download/strip-dirs-2.1.0.tgz", + "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", + "requires": { + "is-natural-number": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strip-outer": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-outer/download/strip-outer-1.0.0.tgz", + "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "table": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/table/download/table-4.0.2.tgz", + "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.0", + "lodash": "4.17.4", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + } + }, + "tar-stream": { + "version": "1.5.5", + "resolved": "http://registry.npm.taobao.org/tar-stream/download/tar-stream-1.5.5.tgz", + "integrity": "sha1-XK2Ed59FyDsfJQjZawnYjHIYr1U=", + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.1", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "thunkify": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/thunkify/download/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" + }, + "thunkify-wrap": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/thunkify-wrap/download/thunkify-wrap-1.0.4.tgz", + "integrity": "sha1-tSvlSN3+/aIOALWMYJZ2K0PdaIA=", + "requires": { + "enable": "1.3.2" + } + }, + "tildify": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/tildify/download/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "requires": { + "os-homedir": "1.0.2" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "toml": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/toml/download/toml-2.3.3.tgz", + "integrity": "sha1-jWg9cpV3yyhiMd/HqK/+WNMXKPs=" + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/trim-repeated/download/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "http://registry.npm.taobao.org/unbzip2-stream/download/unbzip2-stream-1.2.5.tgz", + "integrity": "sha1-c6AzpWe7veWWVLGTxE1Ip+T0PEc=", + "requires": { + "buffer": "3.6.0", + "through": "2.3.8" + } + }, + "unyield": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/unyield/download/unyield-0.0.1.tgz", + "integrity": "sha1-FQ5l2kK/d0JEW5WKZOubhdHSsYA=", + "requires": { + "co": "3.1.0" + }, + "dependencies": { + "co": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/url-to-options/download/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "user-home": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "requires": { + "os-homedir": "1.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "requires": { + "builtins": "1.0.3" + } + }, + "ware": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/ware/download/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "requires": { + "wrap-fn": "0.1.5" + } + }, + "which": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "win-fork": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/win-fork/download/win-fork-1.1.1.tgz", + "integrity": "sha1-j1jgZW/KAK3IyGoriePNLWotXl4=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/wrap-fn/download/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "requires": { + "co": "3.1.0" + }, + "dependencies": { + "co": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/write/download/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yaml-js": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/yaml-js/download/yaml-js-0.0.8.tgz", + "integrity": "sha1-h8+lqWE/SOJgBUINao7g2m/o2uw=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + }, + "yauzl": { + "version": "2.9.1", + "resolved": "http://registry.npm.taobao.org/yauzl/download/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/play/zhnt-cli_deprecated/package.json b/play/zhnt-cli_deprecated/package.json new file mode 100644 index 0000000..03be248 --- /dev/null +++ b/play/zhnt-cli_deprecated/package.json @@ -0,0 +1,40 @@ +{ + "name": "zhnt-cli", + "version": "1.0.0", + "description": "Auto generate project template", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "imuntil@qq.com", + "license": "ISC", + "preferGlobal": true, + "bin": { + "zhnt-init": "./index.js" + }, + "dependencies": { + "async": "^2.6.0", + "chalk": "^2.3.0", + "commander": "^2.12.2", + "consolidate": "^0.15.0", + "download-git-repo": "^1.0.1", + "handlebars": "^4.0.11", + "inquirer": "^4.0.1", + "lodash": "^4.17.4", + "metalsmith": "^2.3.0", + "multimatch": "^2.1.0", + "ora": "^1.3.0", + "read-metadata": "^1.0.0", + "tildify": "^1.2.0", + "user-home": "^2.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "devDependencies": { + "eslint": "^4.14.0", + "eslint-config-standard": "^11.0.0-beta.0", + "eslint-plugin-import": "^2.8.0", + "eslint-plugin-node": "^5.2.1", + "eslint-plugin-promise": "^3.6.0", + "eslint-plugin-standard": "^3.0.1" + } +} diff --git a/play/zinzya/app.js b/play/zinzya/app.js new file mode 100644 index 0000000..37854ea --- /dev/null +++ b/play/zinzya/app.js @@ -0,0 +1,84 @@ +const Koa = require('koa') +const app = new Koa() +const views = require('koa-views') +const json = require('koa-json') +const onerror = require('koa-onerror') +const bodyparser = require('koa-bodyparser') +const logger = require('koa-logger') + +const mongoose = require('mongoose') +const jwt = require('koa-jwt') + +const index = require('./routes/index') +const users = require('./routes/users') +const api = require('./routes/api') + +// 琉璃神社 +const ruri = require('./utils/crawler/ruri') +// 代理ip +const proxy = require('./utils/crawler/proxy') +// 动漫大风堂 +const bangumi = require('./utils/crawler/bangumi') +// 动漫花园 +const dmhy = require('./utils/crawler/dmhyCrawler') +const credentials = require('./utils/credentials') + +/* middle */ +const jwtAuth = require('./middlewares/jwt') +const rfMiddle = require('./middlewares/response-formatter') +const validMiddle = require('./middlewares/request-validate') + +// error handler +onerror(app) + +// middlewares +app.use(bodyparser({ + enableTypes: ['json', 'form', 'text'] +})) +app.keys = ['li-keys'] +app.use(json()) +app.use(logger()) +app.use(require('koa-static')(__dirname + '/public')) + +app.use(views(__dirname + '/views', {extension: 'pug'})) + +// logger +app.use(async(ctx, next) => { + const start = new Date() + await next() + const ms = new Date() - start + console.log(`${ctx.method} ${ctx.url} - ${ms}ms`) +}) + +// routes +app.use(index.routes(), index.allowedMethods()) +app.use(users.routes(), users.allowedMethods()) + +/* 自定义中间件 */ +app.use(rfMiddle()) +app.use(validMiddle) +app.use(jwtAuth) + +app.use(jwt({secret: credentials.cookieSecret}).unless({path: [/^\/shizuku\/user\/[test|login|register]/]})) + +app.use(api.routes(), api.allowedMethods()) + +// error-handling +app.on('error', (err, ctx) => { + console.error('server error', err, ctx) +}); + +/* 连接数据库 */ +mongoose.connect('mongodb://zhin:13140054yyz@106.14.8.246:27017/zinzya', { useNewUrlParser: true }) + +/* 爬虫 */ +/* 神社数据 */ +// ruri.crawlPer2h() +/* ip池 */ +// proxy.fetchIpPool() +/* 番剧列表 */ +// bangumi.runQueue() +// bangumi.forceUpdate() +// dmhy.runQueue() + +module.exports = app diff --git a/play/zinzya/app/controllers/bangumi-controller.js b/play/zinzya/app/controllers/bangumi-controller.js new file mode 100644 index 0000000..61a24f1 --- /dev/null +++ b/play/zinzya/app/controllers/bangumi-controller.js @@ -0,0 +1,209 @@ +const Anime = require('../../models/bangumi') +const jwt = require('jsonwebtoken') +const pick = require('lodash.pick') +const { ApiError, ApiErrorNames } = require('../error/ApiError') +const { ct, PM, credentials, dmhy, daily } = require('../../utils') +const idReg = ct.regs.objectId.reg + +class BangumiController { + /** + * 获取番剧列表 + * GET + * @param {ctx} ctx + */ + static async getList(ctx) { + console.log('获取番剧列表') + let { year } = ctx.params + if (!/^\d{4}$/.test(year)) { + // throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + year = new Date().getFullYear().toString() + } + const bangumi = await Anime.find() + .where('visible') + .equals(true) + .where('date') + .gte(new Date(`${year}-01-01`)) + .lte(new Date(`${year}-12-31`)) + .sort('date') + .select('-visible') + .lean() + .exec() + ctx.body = { + data: { + count: bangumi.length, + year, + result: bangumi + } + } + } + + /** + * 搜索番剧 + * GET + * /shizuku/bangumi/search?name=xx + * @param {*} ctx + */ + static async searchBGMs(ctx) { + console.log('搜索番剧') + const { name } = ctx.query + if (!name || !name.trim()) { + throw new ApiError.ApiErrorNames(MISSING_OR_WRONG_PARAMETERS) + } + const bs = await Anime.find({ name: new RegExp(name) }).exec() + ctx.body = { + data: { + count: bs.length, + result: bs + } + } + } + + /** + * 获取时间范围 + * GET + * /shizuku/bangumi/range + * @param {*} ctx + */ + static async getDateRange(ctx) { + console.log('获取时间范围') + const end = new Date().getFullYear() + const data = [] + for (let i = 1990; i <= end; i++) { + data.push(i + '') + } + ctx.body = { + data + } + } + + /** + * 新增番剧 pm>= lv4 + * POST + * body = {name, date, kantoku?, maker?} + * @param {ctx} ctx + */ + static async addBangumi(ctx) { + console.log('新增番剧') + let { name, date } = ctx.request.body + date = new Date(date) + if (!name || isNaN(date)) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + /* 没有权限 */ + const who = await ct.getCurrentUser(ctx) + if (!who || who.auth < PM.LV4) { + throw new ApiError(ApiErrorNames.PERMISSION_DENIED) + } + const bgm = await Anime.create({ + ...ctx.request.body, + adder: who.id + }) + ctx.body = { + data: bgm + } + } + + /** + * 编辑番剧 pm >= lv4 + * PUT + * /shizuku/bangumi/:bid + * body = {name?, date?, kantoku?, maker?...} + * @param {ctx} ctx + */ + static async modifyBangumi(ctx) { + console.log('编辑番剧') + + const { bid } = ctx.params + const rest = pick(ctx.request.body, [ + 'date', + 'name', + 'kantoku', + 'maker', + 'type' + ]) + if (!bid || !idReg.test(bid) || ct.isEmptyObj(rest)) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + const who = await ct.getCurrentUser(ctx) + if (!who || who.auth < PM.LV4) { + throw new ApiError(ApiErrorNames.PERMISSION_DENIED) + } + + const bgm = await Anime.findById(bid).exec() + for (let [k, v] of Object.entries(rest)) { + if (k === 'date' && isNaN(new Date(v))) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + bgm[k] = v + } + /* 更新编辑人员信息 */ + if (bgm.editor) { + bgm.editor.unshift({ uid: who.id, nick: who.nick }) + bgm.editor = bgm.editor.slice(0, 5) + } else { + bgm.editor = [ + { + id: who.id, + nick: who.nick + } + ] + } + await bgm.save() + ctx.body = {} + } + + /** + * 删除番剧 pm >= lv5 + * DEL + * /shizuku/bangumi/:bid + * @param {ctx} ctx + */ + static async deleteBangumi(ctx) { + console.log('删除番剧(伪)') + const bid = ctx.params.bid + if (!bid || !idReg.test(bid)) { + throw new ApiError(ApiErrorNames.WRONG_ID) + } + await Anime.findByIdAndUpdate(bid, { visible: false }).exec() + ctx.body = {} + } + + /** + * 获取番剧详细,主要为下载磁链 + * GET + * /shizuku/bangumi/detail + * query = [name, page?, type?] + * type 2=>动画 31=》季度全集 7=》raw null => all + * @param {*} ctx + */ + static async fetchDetail(ctx) { + console.log('获取番剧详细') + const { name, page, type } = ctx.query + // if (!name) { + // throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + // } + try { + const res = await dmhy.crawlDmhy(name, type, page) + ctx.body = { + data: res + } + } catch (e) { + ctx.body = { + code: -1, + message: + e.message.indexOf('Timeout') > -1 + ? '爬虫超时了-,-' + : `爬虫犯错了: ${e.message}` + } + } + } + + static async fetchDaily(ctx) { + const res = await daily() + ctx.body = { + data: res + } + } +} + +module.exports = BangumiController diff --git a/play/zinzya/app/controllers/li-controller.js b/play/zinzya/app/controllers/li-controller.js new file mode 100644 index 0000000..27a2acc --- /dev/null +++ b/play/zinzya/app/controllers/li-controller.js @@ -0,0 +1,128 @@ +const Li = require('../../models/li') +const { ct, PM } = require('../../utils') +const { ApiError, ApiErrorNames } = require('../error/ApiError') +const { forceRefresh } = require('../../utils/crawler/ruri') + +class LiController { + static getRange(size, totalPages, page, count) { + let [skip, limit] = [0, size] + if (+page < totalPages) { + skip = count - size * page + } else { + skip = 0 + limit = count % size + } + return [skip, limit] + } + + static async getLis(ctx) { + const who = await ct.getCurrentUser(ctx) + if (!who || who.auth < PM.LV2) { + throw new ApiError(ApiErrorNames.PERMISSION_DENIED) + } + let { page = 1, size = 10 } = ctx.request.query + page = +page + size = +size + + if (!LiController.count) { + LiController.count = await Li.count() + } + + const count = LiController.count + const totalPages = Math.ceil(count / size) + + const [skip, limit] = LiController.getRange(size, totalPages, page, count) + + const list = await Li.find() + .skip(skip) + .limit(limit) + .lean() + .exec() + return { + data: { + total: count, + totalPages, + totalOfCurPage: list.length, + page, + size, + result: list + } + } + } + + /** + * 获取li番列表 + * GET + * /shizuku/li?page={}&size={} + * @param {*} ctx + * @param {*} next + */ + static async getList(ctx, next) { + console.log('获取ruri列表') + const body = await LiController.getLis(ctx) + ctx.body = body + } + + static async forceRefresh(ctx) { + console.log('强制更新Li') + await forceRefresh() + const list = await LiController.getLis(ctx) + ctx.body = list + } + + static async addLi(ctx, next) { + console.log('新增Li') + // const li = await Li.create({title: '111', link: '111', img: '111.png', + // magnet: ['111']}) ctx.body = { data: li.toObject() } + ctx.body = {} + } + + /** + * 搜索 + * GET + * /shizuku/li/search?page={}&size={}&keyword={} + * @param {*} ctx + * @param {*} next + */ + static async searchLi(ctx, next) { + console.log('搜索Li') + const who = await ct.getCurrentUser(ctx) + if (!who || who.auth < PM.LV2) { + throw new ApiError(ApiErrorNames.PERMISSION_DENIED) + } + let { keyword, size = 10, page = 1 } = ctx.query + size = +size + page = +page + if (size <= 0 || page <= 0) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + if (!keyword || !keyword.trim()) { + const body = await LiController.getLis(ctx) + ctx.body = body + return + } + const title = new RegExp(keyword, 'i') + const count = await Li.find({ title }).count() + const totalPages = await Math.ceil(count / size) + const [skip, limit] = LiController.getRange(size, totalPages, page, count) + const li = await Li.find({ title }) + .skip(skip) + .limit(limit) + .lean() + .exec() + ctx.body = { + data: { + total: count, + totalPages, + totalOfCurPage: li.length, + page, + size, + result: li + } + } + } +} + +LiController.count = 0 + +module.exports = LiController diff --git a/play/zinzya/app/controllers/user-controller.js b/play/zinzya/app/controllers/user-controller.js new file mode 100644 index 0000000..9aa9d43 --- /dev/null +++ b/play/zinzya/app/controllers/user-controller.js @@ -0,0 +1,172 @@ +const jwt = require('jsonwebtoken') +const pick = require('lodash.pick') +const User = require('../../models/user') +const credentials = require('../../utils/credentials') +const {ApiError, ApiErrorNames} = require('../error/ApiError') +const pm = require('../../utils/permission') +const {ct, sendMail} = require('../../utils') + +function setToken(email, ctx) { + const token = jwt.sign({ + email + }, credentials.cookieSecret, {expiresIn: '7d'}) + // ctx .cookies .set('_li', token, { signed: true, maxAge: 60 * 60 * + // 24 * 7, httpOnly: true }) + return token +} + +class UserController { + static async login(ctx, next) { + console.log('用户登录') + const {email, password} = ctx.request.body + if (!email || !password) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + const user = await User + .findOne({email}) + .exec() + if (!user) { + throw new ApiError(ApiErrorNames.USER_NOT_EXIST) + } + const res = await user.validPassword(password) + if (!res) { + throw new ApiError(ApiErrorNames.WRONG_ACCOUNT_OR_PWD) + } + user.token = setToken(email, ctx) + await user.save() + ctx.body = { + data: { + ...pick(user.toObject(), ['auth', 'created', 'nick', 'email']), + token: user.token + } + } + } + + /** + * 添加账号 pm>=lv5 + * POST + * /shizuku/user/create + * body = {email} + * @param {ctx} ctx + * @param {func} next + */ + static async createAccount(ctx, next) { + const {email} = ctx.request.body + if (!email) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + const who = await ct.getCurrentUser(ctx) + if (!who || who.auth < pm.LV5) { + throw new ApiError(ApiErrorNames.PERMISSION_DENIED) + } + const user = await User.findOne({email}) + const itCode = user && user.invitationCode + const newCode = UserController.getItCode() + + if (!user) { + /* 用户不存在 */ + try { + await Promise.all([ + User.create({email, invitationCode: newCode}), + sendMail(email, newCode.value) + ]) + ctx.body = { + message: '创建账号成功' + } + } catch (e) { + console.log(e) + throw e + } + } else if (user && user.password) { + /* 用户已注册 */ + ctx.body = { + code: 0, + message: '用户已存在' + } + } else if (!itCode.value || Date.now() >= itCode.expired) { + /* code 过期,重发 */ + user.invitationCode = newCode + await Promise.all([ + user.save(), + sendMail(email, newCode.value) + ]) + + ctx.body = { + message: '已重新发送邀请码' + } + } else { + /* 账号之前已经创建 */ + ctx.body = { + message: '账号已经创建' + } + } + } + + static getItCode() { + return { + value: `${Math.random()}` + .split('.')[1] + .slice(0, 6), + expired: Date.now() + 1000 * 60 * 60 * 24 * 2 + } + } + + /** + * 注册 + * PUT + * /shizuku/user/register + * body = {email, code, password, nick} + * @param {*} ctx + * @param {*} next + */ + static async register(ctx, next) { + console.log('注册') + const { + email, + code, + password, + nick = '' + } = ctx.request.body + if (!email || !code || !password) { + throw new ApiError(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS) + } + const account = await User.findOne({email}) + const itCode = account && account.invitationCode + if (!account) { + /* 没有账号,无权注册 */ + throw new ApiError(ApiErrorNames.THE_EMAIL_CANT_REG) + } else if (account.password) { + /* 有账号,且密码不为空,已被注册 */ + throw new ApiError(ApiErrorNames.EMAIL_IS_EXIST) + } else if (!itCode.value || itCode.expired < Date.now()) { + /* 邀请码已过期 */ + ctx.body = { + code: 0, + message: '邀请码已过期' + } + } else if (+ itCode.value !== + code) { + ctx.body = { + code: 0, + message: '邀请码错误' + } + } else { + /* 有账号,且密码为空,可以注册 */ + // const token = setToken(email, ctx) + const bt = User.encryptPassword(password) + // account.token = token + account.password = bt + account.nick = nick + account.invitationCode = null + await account.save() + ctx.body = {} + } + } + + static async test(ctx) { + ctx.body = { + message: 'test api' + } + } +} + +module.exports = UserController \ No newline at end of file diff --git a/play/zinzya/app/error/ApiError.js b/play/zinzya/app/error/ApiError.js new file mode 100644 index 0000000..e354ae3 --- /dev/null +++ b/play/zinzya/app/error/ApiError.js @@ -0,0 +1,120 @@ +const errorMap = new Map() +const ApiErrorNames = { + USER_NOT_EXIST: 'user_not_exist', + MISSING_OR_WRONG_PARAMETERS: 'missing_or_wrong_parameters', + WRONG_PHONE_NUMBER: 'wrong_phone_number', + WRONG_ACCOUNT_OR_PWD: 'WRONG_ACCOUNT_OR_PWD', + INVALID_PWD: 'INVALID_PWD', + INVALID_EMAIL: 'invalid_email', + WRONG_ID: 'wrong_id', + FIELD_IS_ILLEGAL: 'field_is_illegal', + UNKNOWN_ERROR: 'unknown_error', + THE_EMAIL_CANT_REG: 'THE_EMAIL_CANT_REGister', + PERMISSION_DENIED: 'permission_denied', + UNAUTHORIZED: 'Unauthorized', + EMAIL_IS_EXIST: 'email_is_exist', + NO_PROXY_AVAILABLE: 'no_proxy_available', + SUPERAGENT_ERROR: 'superagent_error', + + + getErrorInfo: errorName => { + const errorInfo = errorName + ? errorMap.get(errorName) + : null + return errorInfo || errorMap.get(ApiErrorNames.UNKNOWN_ERROR) + } +} + +/* +-2 未被捕获的未知错误 +-1 未知错误 +101 用户不存在(不存在手机号等情况) +102 缺少必要参数或者参数格式有误 +103 数据重复错误 +104 权限不足 +110 数据库错误 +119 代理相关 +120 其他错误 +*/ + +errorMap.set(ApiErrorNames.UNKNOWN_ERROR, { + code: -1, + message: '未知错误' +}) + +errorMap.set(ApiErrorNames.USER_NOT_EXIST, { + code: 101, + message: '用户不存在' +}) + +errorMap.set(ApiErrorNames.MISSING_OR_WRONG_PARAMETERS, { + code: 102, + message: '缺少参数或者参数有误' +}) +errorMap.set(ApiErrorNames.WRONG_PHONE_NUMBER, { + code: 1021, + message: '手机号码格式有误' +}) +errorMap.set(ApiErrorNames.WRONG_ACCOUNT_OR_PWD, { + code: 1022, + message: '账号或密码有误' +}) +errorMap.set(ApiErrorNames.FIELD_IS_ILLEGAL, { + code: 1023, + message: '字段不合法' +}) +errorMap.set(ApiErrorNames.WRONG_ID, { + code: 1024, + message: 'ID有误' +}) +errorMap.set(ApiErrorNames.INVALID_EMAIL, { + code: 1025, + message: '邮箱账号不合法' +}) +errorMap.set(ApiErrorNames.INVALID_PWD, { + code: 1026, + message: '密码不合法' +}) + +errorMap.set(ApiErrorNames.EMAIL_IS_EXIST, { + code: 1031, + message: '该邮箱已被注册' +}) + +errorMap.set(ApiErrorNames.UNAUTHORIZED, { + code: 104, + message: 'Unauthorized' +}) +errorMap.set(ApiErrorNames.PERMISSION_DENIED, { + code: 1041, + message: 'Permission denied' +}) + +errorMap.set(ApiErrorNames.NO_PROXY_AVAILABLE, { + code: 1191, + message: '没有可用的代理' +}) +// errorMap.set(ApiErrorNames.SUPERAGENT_ERROR, { + +// }) + +errorMap.set(ApiErrorNames.THE_EMAIL_CANT_REG, { + code: 1201, + message: '该邮箱不能注册' +}) + +class ApiError extends Error { + constructor(errorName) { + super() + const errorInfo = ApiErrorNames.getErrorInfo(errorName) + this.name = errorName + this.code = errorInfo.code + this.message = errorInfo.message + } +} + +module.exports = { + ApiError, + ApiErrorNames, + errorMap +} \ No newline at end of file diff --git a/play/zinzya/bin/www b/play/zinzya/bin/www new file mode 100644 index 0000000..e303fc6 --- /dev/null +++ b/play/zinzya/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('demo:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '21001'); +// app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app.callback()); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/play/zinzya/middlewares/jwt.js b/play/zinzya/middlewares/jwt.js new file mode 100644 index 0000000..05e1c30 --- /dev/null +++ b/play/zinzya/middlewares/jwt.js @@ -0,0 +1,15 @@ +const { ApiError, ApiErrorNames } = require('../app/error/ApiError') +const jwtAuth = async (ctx, next) => { + try { + await next() + } catch (err) { + if (~~err.status === 401) { + ctx.status = 401 + throw new ApiError(ApiErrorNames.UNAUTHORIZED) + } else { + throw err + } + } +} + +module.exports = jwtAuth \ No newline at end of file diff --git a/play/zinzya/middlewares/request-validate.js b/play/zinzya/middlewares/request-validate.js new file mode 100644 index 0000000..9494cb7 --- /dev/null +++ b/play/zinzya/middlewares/request-validate.js @@ -0,0 +1,27 @@ +const {regs} = require('../utils').ct + +const {ApiError, ApiErrorNames} = require('../app/error/ApiError') +const validate = async(ctx, next) => { + const params = ctx.method === 'GET' + ? ctx.query + : ctx.request.body + /* + bid: bangumi id + */ + const {password, bid, email} = params + if (password && !regs.password.reg.test(password)) { + throw new ApiError(ApiErrorNames.WRONG_ACCOUNT_OR_PWD) + } + if (email && !regs.email.reg.test(email)) { + throw new ApiError(ApiErrorNames.INVALID_EMAIL) + } + const ids = [bid].filter(v => v) + ids.forEach(v => { + if (!regs.objectId.reg.test(v)) { + throw new ApiError(ApiErrorNames.WRONG_ID) + } + }) + await next() +} + +module.exports = validate \ No newline at end of file diff --git a/play/zinzya/middlewares/response-formatter.js b/play/zinzya/middlewares/response-formatter.js new file mode 100644 index 0000000..35ba4ea --- /dev/null +++ b/play/zinzya/middlewares/response-formatter.js @@ -0,0 +1,52 @@ +const {ApiError, errorMap, ApiErrorNames} = require('../app/error/ApiError') +const mongoose = require('mongoose') + +const responseFormatter = ctx => { + + const body = ctx.body || {} + ctx.body = { + code: 1, + message: 'success', + ...body + } +} + +const URLFiler = (pattern = '^/shizuku') => { + return async(ctx, next) => { + const reg = new RegExp(pattern) + try { + await next() + + } catch (err) { + if (reg.test(ctx.originalUrl)) { + + if (err instanceof ApiError) { + ctx.body = { + code: err.code, + message: err.message + } + } else if (err instanceof mongoose.Error.ValidationError) { + /* 数据库抛出的错误,字段不合法 */ + const e1 = Object.values(err.errors)[0] + const errorInfo = errorMap.get(ApiErrorNames.FIELD_IS_ILLEGAL) + ctx.body = { + code: errorInfo.code, + message: e1.message || errorInfo.message + } + } else { + ctx.body = { + code: -2, + message: err.message || '未知错误2' + } + } + } + // if (ctx.status === 404) { ctx.body = { code: 0, message: 'Not + // Found' } } + } + if (reg.test(ctx.originalUrl)) { + responseFormatter(ctx) + } + } +} + +module.exports = URLFiler \ No newline at end of file diff --git a/play/zinzya/models/bangumi.js b/play/zinzya/models/bangumi.js new file mode 100644 index 0000000..d62962c --- /dev/null +++ b/play/zinzya/models/bangumi.js @@ -0,0 +1,30 @@ +const mongoose = require('mongoose') + +const animeSchema = new mongoose.Schema({ + date: { + type: Date, + required: true + }, + name: { + type: String, + required: true + }, + kantoku: String, + maker: String, + type: { + type: String, + enum: ['动画', '剧场版', 'OVA/OAD', '其他'], + default: '动画' + }, + visible: { + type: Boolean, + default: true + }, + adder: mongoose.Schema.Types.ObjectId, + editor: [{ + nick: String, + uid: mongoose.Schema.Types.ObjectId + }] +}) + +module.exports = mongoose.model('Anime', animeSchema) \ No newline at end of file diff --git a/play/zinzya/models/dmhy.js b/play/zinzya/models/dmhy.js new file mode 100644 index 0000000..74450d0 --- /dev/null +++ b/play/zinzya/models/dmhy.js @@ -0,0 +1,31 @@ +const mongoose = require('mongoose') + +const dmhySchema = new mongoose.Schema({ + date: String, + type: String, + title: { + type: String, + required: true + }, + magnet: { + type: String, + required: true + }, + size: { + type: String, + required: true + }, + subtitle: String, + real_size: Number, + real_date: Date +}) + +// dmhySchema.pre('save', function (next) { +// const { date, size, type } = this +// this.date = new Date(date) +// this.real_size = transformSize(size) +// this.category = type +// next() +// }) + +module.exports = mongoose.model('Dmhy', dmhySchema) \ No newline at end of file diff --git a/play/zinzya/models/li.js b/play/zinzya/models/li.js new file mode 100644 index 0000000..e793ab3 --- /dev/null +++ b/play/zinzya/models/li.js @@ -0,0 +1,18 @@ +const mongoose = require('mongoose') + +const liSchema = new mongoose.Schema({ + title: { + required: true, + type: String + }, + link: { + type: String + }, + magnet: [String], + img: { + type: String + } +}) + +const Li = mongoose.model('Li', liSchema) +module.exports = Li \ No newline at end of file diff --git a/play/zinzya/models/proxy.js b/play/zinzya/models/proxy.js new file mode 100644 index 0000000..7fd82f8 --- /dev/null +++ b/play/zinzya/models/proxy.js @@ -0,0 +1,17 @@ +const mongoose = require('mongoose') + +const proxySchema = new mongoose.Schema({ + /* 代理地址 */ + server: { + type: String, + required: true, + unique: true + }, + /* 代理失败次数,达到一定数值将不再使用或删除 */ + failed: { + type: Number, + default: 0 + } +}) + +module.exports = mongoose.model('Proxy', proxySchema) \ No newline at end of file diff --git a/play/zinzya/models/user.js b/play/zinzya/models/user.js new file mode 100644 index 0000000..2e74620 --- /dev/null +++ b/play/zinzya/models/user.js @@ -0,0 +1,45 @@ +const mongoose = require('mongoose') +const bcrypt = require('bcrypt-nodejs') +const pm = require('../utils/permission') + +const userSchema = new mongoose.Schema({ + email: { + type: String, + unique: true, + required: true + }, + created: { + type: Date, + default: Date.now() + }, + password: { + type: String + }, + nick: { + type: String + }, + avatar: String, + token: String, + auth: { + type: Number, + enum: Object.values(pm), + default: 1 + }, + invitationCode: { + value: String, + expired: Date + } +}) + +userSchema.methods.encryptPassword = password => bcrypt.hashSync(password, bcrypt.genSaltSync(10), null) +userSchema.statics.encryptPassword = password => bcrypt.hashSync(password, bcrypt.genSaltSync(10), null) +userSchema.methods.validPassword = async function (password) { + try { + const value = await bcrypt.compareSync(password, this.password) + return value + } catch (e) { + return false + } +} + +module.exports = mongoose.model('User', userSchema) \ No newline at end of file diff --git a/play/zinzya/package.json b/play/zinzya/package.json new file mode 100644 index 0000000..aabe36f --- /dev/null +++ b/play/zinzya/package.json @@ -0,0 +1,40 @@ +{ + "name": "zinzya", + "version": "0.1.0", + "private": true, + "scripts": { + "start": "node bin/www", + "dev": "./node_modules/.bin/nodemon bin/www", + "prd": "pm2 start bin/www --name shizuku-server", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + "async": "^2.6.1", + "bcrypt-nodejs": "0.0.3", + "cheerio": "^1.0.0-rc.2", + "debug": "^2.6.3", + "jsonwebtoken": "^8.3.0", + "koa": "^2.2.0", + "koa-bodyparser": "^3.2.0", + "koa-convert": "^1.2.0", + "koa-json": "^2.0.2", + "koa-jwt": "^3.3.2", + "koa-logger": "^2.0.1", + "koa-onerror": "^1.2.1", + "koa-router": "^7.1.1", + "koa-static": "^3.0.0", + "koa-views": "^5.2.1", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "mongoose": "^5.1.6", + "nodemailer": "^4.6.7", + "pug": "^2.0.0-rc.1", + "superagent": "^3.8.3", + "superagent-charset": "^1.2.0", + "superagent-proxy": "^1.0.3", + "uuid": "^3.3.2" + }, + "devDependencies": { + "nodemon": "^1.18.7" + } +} diff --git a/play/zinzya/public/stylesheets/style.css b/play/zinzya/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/play/zinzya/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/play/zinzya/routes/api/bgm-router.js b/play/zinzya/routes/api/bgm-router.js new file mode 100644 index 0000000..a4783ed --- /dev/null +++ b/play/zinzya/routes/api/bgm-router.js @@ -0,0 +1,13 @@ +const router = require('koa-router')() +const BgmController = require('../../app/controllers/bangumi-controller') + +router.get('/search', BgmController.searchBGMs) +router.get('/range', BgmController.getDateRange) +router.get('/detail', BgmController.fetchDetail) +router.get('/daily', BgmController.fetchDaily) +router.get('/:year?', BgmController.getList) +router.post('/add', BgmController.addBangumi) +router.put('/:bid', BgmController.modifyBangumi) +router.del('/:bid', BgmController.deleteBangumi) + +module.exports = router \ No newline at end of file diff --git a/play/zinzya/routes/api/index.js b/play/zinzya/routes/api/index.js new file mode 100644 index 0000000..5e958d0 --- /dev/null +++ b/play/zinzya/routes/api/index.js @@ -0,0 +1,11 @@ +const router = require('koa-router')() +const liRouter = require('./li-router') +const userRouter = require('./user-router') +const bgmRouter = require('./bgm-router') + +router.prefix('/shizuku') +router.use('/li', liRouter.routes(), liRouter.allowedMethods()) +router.use('/bangumi', bgmRouter.routes(), bgmRouter.allowedMethods()) +router.use('/user', userRouter.routes(), userRouter.allowedMethods()) + +module.exports = router \ No newline at end of file diff --git a/play/zinzya/routes/api/li-router.js b/play/zinzya/routes/api/li-router.js new file mode 100644 index 0000000..195c053 --- /dev/null +++ b/play/zinzya/routes/api/li-router.js @@ -0,0 +1,10 @@ +const router = require('koa-router')() +const liController = require('../../app/controllers/li-controller') + +router + .get('/', liController.getList) + .post('/', liController.addLi) + .get('/force', liController.forceRefresh) + .get('/search', liController.searchLi) + +module.exports = router \ No newline at end of file diff --git a/play/zinzya/routes/api/user-router.js b/play/zinzya/routes/api/user-router.js new file mode 100644 index 0000000..3b4f467 --- /dev/null +++ b/play/zinzya/routes/api/user-router.js @@ -0,0 +1,10 @@ +const router = require('koa-router')() +const UserController = require('../../app/controllers/user-controller') + +router + .post('/login', UserController.login) + .post('/create', UserController.createAccount) + .put('/register', UserController.register) + .get('/test', UserController.test) + +module.exports = router \ No newline at end of file diff --git a/play/zinzya/routes/index.js b/play/zinzya/routes/index.js new file mode 100644 index 0000000..f75048e --- /dev/null +++ b/play/zinzya/routes/index.js @@ -0,0 +1,19 @@ +const router = require('koa-router')() + +router.get('/', async (ctx, next) => { + await ctx.render('index', { + title: 'Hello Koa 2!' + }) +}) + +router.get('/string', async (ctx, next) => { + ctx.body = 'koa2 string' +}) + +router.get('/json', async (ctx, next) => { + ctx.body = { + title: 'koa2 json' + } +}) + +module.exports = router diff --git a/play/zinzya/routes/users.js b/play/zinzya/routes/users.js new file mode 100644 index 0000000..c650166 --- /dev/null +++ b/play/zinzya/routes/users.js @@ -0,0 +1,13 @@ +const router = require('koa-router')() + +router.prefix('/users') + +router.get('/', function (ctx, next) { + ctx.body = 'this is a users response!' +}) + +router.get('/bar', function (ctx, next) { + ctx.body = 'this is a users/bar response' +}) + +module.exports = router diff --git a/play/zinzya/utils/crawler/bangumi.js b/play/zinzya/utils/crawler/bangumi.js new file mode 100644 index 0000000..d749919 --- /dev/null +++ b/play/zinzya/utils/crawler/bangumi.js @@ -0,0 +1,134 @@ +const superagent = require('superagent') +const cheerio = require('cheerio') +const Anime = require('../../models/bangumi') +require('superagent-charset')(superagent) + +class AnimeCrawler { + /** + * 解析html,提取番剧信息 + * @param {string} plain + */ + static parseDOM(plain) { + const $ = cheerio.load(plain) + return $('#anime tr').map(((i, el) => { + const [dateStr, + name, + maker, + kantoku] = $(el) + .find('td') + .map((j, em) => { + return $(em).text() + }) + .get() + if (dateStr) { + let date = new Date(dateStr) + if (isNaN(date.getTime())) { + date = new Date(`${dateStr.slice(0, 4)}-01-01`) + } + return { + date, + name: name.replace(/《(.+)》/, '$1'), + maker, + kantoku, + visible: true + } + } + })).get() + } + + /** + * 爬取对应年份的番剧列表 + * @param {number} year + */ + static async crawlAnimeByYear(year = 2018) { + try { + const res = await superagent + .get(`http://www.acwind.net/icdb/year/${year}/`) + .charset('gbk') + .timeout(5000) + .then(res => res.text) + return AnimeCrawler.parseDOM(res) + } catch (e) { + console.log('===================================='); + console.log(`year:${year}`) + console.log(e); + console.log('===================================='); + } + } + + /** + * 根据年份爬取对应年份的番剧列表并插入数据库 + * @param {number} year + */ + static async insertAnimeToDB(year) { + console.log(`开始爬取${year}年的番剧列表`) + const animes = await AnimeCrawler.crawlAnimeByYear(year) + console.log(`${year}年共${animes.length}部番剧, 开始插入数据库`) + + return new Promise((resolve, reject) => { + Anime + .collection + .insert(animes, (err, docs) => { + err + ? reject(err) + : resolve(docs) + }) + }) + } + + /** + * 循环爬取数据并插入db + */ + static async runQueue() { + let y = 1990 + while (y <= 2018) { + console.log('————————————————————————————start————————————————————————') + try { + await AnimeCrawler.insertAnimeToDB(y) + console.log(`${y}年番剧插入数据库成功`) + } catch (e) { + console.log(`${y}年番剧插入数据库失败`) + console.log(e) + } + console.log('————————————————————————————end————————————————————————') + console.log('\n') + y++ + } + console.log('insert complete') + } + + /** + * 强制更新数据库,默认更新当前年份。传入false表示更新整个表。传入具体年份更新对应年份 + * @param {boolean|number} currentYear + */ + static async forceUpdate(currentYear = true) { + if (typeof(currentYear) === 'boolean' && !currentYear) { + console.log(`删除所有番剧数据`) + await Anime + .find() + .remove() + // 更新全部数据 + await AnimeCrawler.runQueue() + } else { + currentYear = typeof(currentYear) === 'number' + ? currentYear + : (new Date()).getFullYear() + console.log(`删除${currentYear}年的番剧`) + await Anime + .find() + .where('date') + .gte(new Date(`${currentYear}-01-01`)) + .lte(new Date(`${currentYear}-12-31`)) + .remove() + try { + await AnimeCrawler.insertAnimeToDB(currentYear) + console.log(`${currentYear}年番剧插入数据库成功`) + } catch (e) { + console.log(`${currentYear}年番剧插入数据库失败`) + console.log(e) + } + } + } +} + +module.exports = AnimeCrawler \ No newline at end of file diff --git a/play/zinzya/utils/crawler/daily.js b/play/zinzya/utils/crawler/daily.js new file mode 100644 index 0000000..c4fb206 --- /dev/null +++ b/play/zinzya/utils/crawler/daily.js @@ -0,0 +1,42 @@ +const superagent = require('superagent') +const cheerio = require('cheerio') + +const parse = html => { + const $ = cheerio.load(html) + const daily = {} + $('.change .wrp>li').each((i, el) => { + const li = $(el) + const cls = li.attr('class') + const day = li + .find('ul li') + .map((j, l) => { + let s = $(l) + .text() + .trim() + if (!s) { + return false + } + let r = s.match(/第\d+?话/) + return { + name: r ? s.replace(/\s第\d+?话/, '') : s, + wa: r ? r[0] : '' + } + }) + .get() + day.length && (daily[cls] = day) + }) + return daily +} + +module.exports = async () => { + const url = 'http://www.dilidili.wang/' + try { + const res = await superagent + .get(url) + .timeout(5000) + .then(res => res.text) + return parse(res) + } catch (err) { + throw new Error('获取日更失败') + } +} diff --git a/play/zinzya/utils/crawler/dmhyCrawler.js b/play/zinzya/utils/crawler/dmhyCrawler.js new file mode 100644 index 0000000..15a7602 --- /dev/null +++ b/play/zinzya/utils/crawler/dmhyCrawler.js @@ -0,0 +1,150 @@ +const superagent = require("superagent"); +const cheerio = require("cheerio"); +const uuidv4 = require("uuid/v4"); +const Dmhy = require("../../models/dmhy"); +const { delay, transformSize } = require("../ct"); +const { ApiError, ApiErrorNames } = require("../../app/error/ApiError"); +require("superagent-proxy")(superagent); + +const hyUrl = "https://share.dmhy.org"; + +class DmhyCrawler { + /** + * 爬 + * sort [2, 31, 7] + * page + * @param {string} name + * @param {number} sort + * @param {number} page + */ + async crawlDmhy(name, sort, page = 1) { + const url = `https://share.dmhy.org/topics/list/page/${page}?keyword=${ + name ? encodeURI(name) : "" + }&sort_id=${sort}`; + return superagent + .get(url) + .set( + "User-Agent", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36" + ) + .timeout(15000) + .then(res => { + if (res.statusCode === 200) { + return this.parseDOM(res.text); + } + throw res.statusType; + }); + } + + /** + * 解析dom + * @param {string} text + */ + async parseDOM(text) { + const $ = (this.$ = cheerio.load(text)); + const state = this.getPages($); + const data = $("#topic_list tbody tr") + .map((i, el) => { + const tds = $(el).find("td"); + const { date, type, title, magnet, size, subtitle, link } = { + date: tds + .eq(0) + .find("span") + .text() + .trim(), + type: tds + .eq(1) + .text() + .trim(), + subtitle: tds + .eq(2) + .find(".tag") + .text() + .trim(), + title: tds + .eq(2) + .children("a") + .text() + .trim(), + magnet: tds + .eq(3) + .find("a") + .attr("href") + .split("&")[0], + size: tds + .eq(4) + .text() + .trim(), + link: + hyUrl + + tds + .eq(2) + .children("a") + .attr("href") + }; + return { + date, + type, + title, + magnet, + size, + subtitle, + link, + real_date: new Date(date), + real_size: transformSize(size), + id: uuidv4() + }; + }) + .get(); + return { + count: data.length, + ...state, + res: data + }; + } + + /** + * 获取当前页数,下一页是否存在 + * @param {$} $ + */ + getPages($) { + const el = $(".nav_title").eq(1); + const text = el.text().trim(); + if (text === "只有一頁") { + return { page: 1, next: false }; + } + const v = /第(\d+)頁/.exec(text); + const page = +(v && v[1]); + if (!page) { + return { page: 1, next: false }; + } + const l = el.find(".fl a").length === 2; + if (!l && +page !== 1) { + return { page, next: false }; + } + return { page, next: true }; + } + + async runQueue() { + let [hasNext, page] = [true, 1]; + while (hasNext) { + const { page, next, res } = await this.crawlDmhy("", 2, page); + hasNext = next; + next && page++; + console.log(`current page is ${page}`); + await this.insertToDB(res); + await delay(4000); + } + } + + async insertToDB(data) { + return new Promise((resolve, reject) => { + Dmhy.collection.insert(data, (err, docs) => { + err ? reject(err) : resolve(docs); + }); + }); + } +} + +const dmhy = new DmhyCrawler(); +module.exports = dmhy; diff --git a/play/zinzya/utils/crawler/proxy.js b/play/zinzya/utils/crawler/proxy.js new file mode 100644 index 0000000..c7bb06d --- /dev/null +++ b/play/zinzya/utils/crawler/proxy.js @@ -0,0 +1,105 @@ +const superagent = require('superagent') +const cheerio = require('cheerio') +require('superagent-proxy')(superagent) +const Proxy = require('../../models/proxy') + +const ipReg = /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/ + +let totalsPages = 0 +const pool = new Set() + +const parseDOM = res => { + const $ = cheerio.load(res) + const ips = [] + const body = $('table').eq(1) + if (!totalsPages) { + totalsPages = body + .find('tr b a') + .length + } + body + .find('tr') + .each((i, el) => { + const html = $(el) + .find('script') + .html() + if (html) { + const str = html.match(/unescape\('(.+)'\)/)[1] + const ip = unescape(str).match(ipReg)[0] + const port = $(el) + .find('td') + .eq(1) + .text() + .trim() + ips.push(`${ip}:${port}`) + } + }) + return ips +} + +const fetchIPS = async(page = 0) => { + try { + const res = await superagent + .get(`http://www.proxylists.net/cn_${page}.html`) + .set('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like ' + + 'Gecko) Chrome/67.0.3396.87 Safari/537.36') + .then(res => res.text) + .catch(e => { + throw e + }); + return parseDOM(res) + } catch (e) { + console.log(e) + return [] + } +} + +const filterUseful = ips => { + const q = ips.map(ip => { + return superagent + .get('https://share.dmhy.org/') + .timeout(5000) + .proxy(`http://${ip}`) + .then(res => { + if (res.statusCode === 200) { + // 保存到数据库 + saveToDB(ip) + } + }) + .catch(e => { + console.log(`${ip}不可用:${e.message}`) + }) + }) + return Promise.all(q) +} + +const saveToDB = async(server) => { + try { + await Proxy.create({server}) + pool.add(ip) + console.log(`${server}可用!!!!!!!!!!!!!!!!!!!!!!`) + } catch (e) { + console.log(e.message) + } +} + +/* 删除失败次数大于3次的ip */ +const delServer = async (fail = 3) => { + await Proxy.find().where('failed').gt(fail).remove() +} + +const run = async() => { + delServer() + let currentPage = 0 + do { + console.log('currentPage:', currentPage) + const ips = await fetchIPS(currentPage) + await filterUseful(ips) + currentPage++ + } while (currentPage < totalsPages); + console.log([...pool]) +} + +module.exports = { + fetchIpPool: run +} diff --git a/play/zinzya/utils/crawler/ruri.js b/play/zinzya/utils/crawler/ruri.js new file mode 100644 index 0000000..b5d58be --- /dev/null +++ b/play/zinzya/utils/crawler/ruri.js @@ -0,0 +1,127 @@ +// const fs = require('fs') +const superagent = require('superagent') +const cheerio = require('cheerio') +const async = require('async') +const Li = require('../../models/li') + +const url = 'http://llss.li/wp/category/all/anime/' +const magnet = /(熟|生)?[A-z\d]{20,}/g + +let newCount = 0 +let prevTime = 0 + +const delay = ms => new Promise((resolve, reject) => { + setTimeout(resolve, ms) +}) + +function fetchLi(li, cb) { + return superagent + .get(li.link) + .end((err, res) => { + if (err) { + cb(null, false) + } else { + const content = cheerio + .load(res.text)('.entry-content') + .text() + const mgs = content.match(magnet) + cb(null, { + ...li, + magnet: mgs + }) + } + }) +} + +/* 获取总页数 */ +function getTotalPages($) { + return Number.parseInt($('.wp-pagenavi span.pages').text().match(/共(.+)页/)[1].trim()) +} + +/* 获取每页内容 */ +function fetchPage() { + return new Promise((resolve, reject) => { + superagent + .get(url) + .end((err, res) => { + if (err) { + return reject(err) + } + resolve(parseText(res.text)) + }) + }) +} + +function parseText(text) { + const $ = cheerio.load(text) + const eros = $('.type-post').map((idx, element) => { + const el = $(element).find('.entry-title a') + return { + title: el + .text() + .trim(), + link: el.attr('href'), + img: $(element) + .find('.entry-content img') + .eq(0) + .attr('src') + } + }) + return new Promise((resolve, reject) => { + return async.mapLimit(Array.from(eros).filter(v => v.title), 5, fetchLi, (err, result) => { + if (err) { + reject(err) + } + resolve(result.filter(v => !!v)) + }) + }) +} + +/* 对比新数据和数据库中的数据 */ +async function contrast(newData) { + while (newData.length) { + const li = newData.shift() + const dbLi = await Li + .findOne({title: li.title}) + .exec() + if (dbLi) { + console.log('旧资源') + continue + } else { + console.log(`有新的资源:${li.title}`) + await Li.create(li) + newCount++ + } + } +} + +/* 定时重复爬, 2h */ +async function run() { + // newCount += 10 + while (true) { + const now = Date.now() + if (now - prevTime > 1000 * 60 * 60 * 24) { + const v = await fetchPage() + await contrast(v) + prevTime = Date.now() + } + await delay(1000 * 60 * 60) + } +} + +/* 强制刷新 */ +async function forceRefresh() { + console.log('强制刷新') + prevTime = Date.now() + const v = await fetchPage() + await contrast(v) + prevTime = Date.now() +} + +module.exports = { + crawlPer2h: run, + forceRefresh, + getCount() { + return newCount + } +} \ No newline at end of file diff --git a/play/zinzya/utils/credentials.js b/play/zinzya/utils/credentials.js new file mode 100644 index 0000000..f6aa562 --- /dev/null +++ b/play/zinzya/utils/credentials.js @@ -0,0 +1,18 @@ +module.exports = { + cookieSecret: 'iwu&yhe4JHf&lkf_jeu-kwe**j', + sysCookieSecret: 'ujw!ql*ldk_kdw-k2834.Hku', + ssl: { + windows_nt: { + key: 'c:/nginx/ssl-cer/server.key', + cert: 'c:/nginx/ssl-cer/server.crt' + }, + linux: { + key: '/usr/local/nginx/cert/214334684110204.key', + cert: '/usr/local/nginx/cert/214334684110204.pem' + }, + darwin: { + key: '/usr/local/etc/nginx/ssl_cer/CA/server.key', + cert: '/usr/local/etc/nginx/ssl_cer/CA/server.crt' + } + } +} \ No newline at end of file diff --git a/play/zinzya/utils/ct.js b/play/zinzya/utils/ct.js new file mode 100644 index 0000000..5c808ab --- /dev/null +++ b/play/zinzya/utils/ct.js @@ -0,0 +1,79 @@ +const {ApiError, ApiErrorNames} = require('../app/error/ApiError') +const User = require('../models/user') + +const regs = { + phone: { + str: '^(1[3|4|5|7|8])[0-9]{9}$', + reg: /^(1[3|4|5|7|8])[0-9]{9}$/ + }, + password: { + str: '^[A-z0-9_\!]{6,20}$', + reg: /^[A-z0-9_\!]{6,20}$/ + }, + code: { + str: '^[0-9]{6}$', + reg: /^[\d]{6}$/ + }, + objectId: { + reg: /^[0-9a-fA-F]{24}$/ + }, + email: { + reg: /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/ + } +} + +/** + * 获取当前用户 + * @param {ctx} ctx + */ +async function getCurrentUser(ctx) { + const token = ctx.header.authorization.replace('Bearer ', '') + if (!token) { + throw new ApiError(ApiErrorNames.UNKNOWN_ERROR) + } + const who = await User.findOne({token}) + return who +} + +/** + * 判断对象是否为空 + * @param {obj} obj + */ +function isEmptyObj(obj) { + if (typeof obj !== 'object') { + return false + } + return !Object + .keys(obj) + .length +} + +const delay = ms => new Promise((resolve, reject) => { + setTimeout(resolve, ms) +}) + +/* 将size转换成数值 */ +const transformSize = size => { + const [s, num, unit] = /(\d+\.?\d?)([g|m|k]b)/.exec(size.toLowerCase()) || [0, 0, 'kb'] + if (!num || !unit) { + return 0 + } + switch (unit) { + case 'gb': + return num * 1000 * 1000 + case 'mb': + return num * 1000 + case 'tb': + return num * Math.pow(1000, 3) + default: + return + num + } +} + +module.exports = { + getCurrentUser, + isEmptyObj, + regs, + delay, + transformSize +} \ No newline at end of file diff --git a/play/zinzya/utils/email.js b/play/zinzya/utils/email.js new file mode 100644 index 0000000..a1fbc5a --- /dev/null +++ b/play/zinzya/utils/email.js @@ -0,0 +1,35 @@ +const nodemailer = require('nodemailer') +const fs = require('fs') + +const transporter = nodemailer.createTransport({ + host: 'smtp.exmail.qq.com', + port: 465, + secure: true, + auth: { + user: 'zhin@imuntil.com', + pass: 'eVcybJ4QzvjxjzGv' + } +}) + +const sendMail = async(to, code) => { + return new Promise((resolve, reject) => { + transporter.sendMail({ + from: 'zhin@imuntil.com', + to, + subject: 'nakuna邀请码', + html: ` +

    您的邀请码为

    +

    ${code}

    +

    有效期2天,请及时注册

    + ` + }, (err, info) => { + if (err) { + reject(err) + return + } + resolve(true) + }) + }) +} + +module.exports = sendMail \ No newline at end of file diff --git a/play/zinzya/utils/index.js b/play/zinzya/utils/index.js new file mode 100644 index 0000000..62a7520 --- /dev/null +++ b/play/zinzya/utils/index.js @@ -0,0 +1,15 @@ +const ct = require('./ct') +const PM = require('./permission') +const credentials = require('./credentials') +const sendMail = require('./email') +const dmhy = require('./crawler/dmhyCrawler') +const daily = require('./crawler/daily') + +module.exports = { + ct, + PM, + credentials, + sendMail, + dmhy, + daily +} \ No newline at end of file diff --git a/play/zinzya/utils/permission.js b/play/zinzya/utils/permission.js new file mode 100644 index 0000000..2891409 --- /dev/null +++ b/play/zinzya/utils/permission.js @@ -0,0 +1,24 @@ +const [ + LV1, //地能力者 表番 + LV2, //异能力者 里番 + LV3, //强能力者 暂定 + LV4, //大能力者 编辑表番功能 + LV5, //超能力者 可以添加账号 + LV6 //绝对能力者 超级管理员 +] = [ + 1, + 2, + 3, + 4, + 5, + 6 +]; + +module.exports = { + LV1, + LV2, + LV3, + LV4, + LV5, + LV6 +} \ No newline at end of file diff --git a/play/zinzya/views/error.pug b/play/zinzya/views/error.pug new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/play/zinzya/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/play/zinzya/views/index.pug b/play/zinzya/views/index.pug new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/play/zinzya/views/index.pug @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/play/zinzya/views/layout.pug b/play/zinzya/views/layout.pug new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/play/zinzya/views/layout.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/play/zinzya/yarn.lock b/play/zinzya/yarn.lock new file mode 100644 index 0000000..8df2761 --- /dev/null +++ b/play/zinzya/yarn.lock @@ -0,0 +1,3410 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/babel-types@*", "@types/babel-types@^7.0.0": + version "7.0.4" + resolved "http://registry.npm.taobao.org/@types/babel-types/download/@types/babel-types-7.0.4.tgz#bfd5b0d0d1ba13e351dff65b6e52783b816826c8" + integrity sha1-v9Ww0NG6E+NR3/ZbblJ4O4FoJsg= + +"@types/babylon@^6.16.2": + version "6.16.4" + resolved "http://registry.npm.taobao.org/@types/babylon/download/@types/babylon-6.16.4.tgz#d3df72518b34a6a015d0dc58745cd238b5bb8ad2" + integrity sha1-099yUYs0pqAV0NxYdFzSOLW7itI= + dependencies: + "@types/babel-types" "*" + +"@types/node@*": + version "10.12.18" + resolved "http://registry.npm.taobao.org/@types/node/download/@types/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" + integrity sha1-HTynZHGJFVhPzZ9jRGIbdnJmXGc= + +abbrev@1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + +accepts@^1.3.5: + version "1.3.5" + resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-globals@^3.0.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8= + dependencies: + acorn "^4.0.4" + +acorn@^3.1.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^4.0.4, acorn@~4.0.2: + version "4.0.13" + resolved "http://registry.npm.taobao.org/acorn/download/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +agent-base@4, agent-base@^4.1.0, agent-base@^4.2.0: + version "4.2.1" + resolved "http://registry.npm.taobao.org/agent-base/download/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk= + dependencies: + es6-promisify "^5.0.0" + +aggregate-error@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/aggregate-error/download/aggregate-error-1.0.0.tgz#888344dad0220a72e3af50906117f48771925fac" + integrity sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w= + dependencies: + clean-stack "^1.0.0" + indent-string "^3.0.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "http://registry.npm.taobao.org/align-text/download/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "http://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-align@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ansi-align/download/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0, any-promise@^1.1.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3: + version "1.2.0" + resolved "http://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "http://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asap@~2.0.3: + version "2.0.6" + resolved "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types@0.x.x: + version "0.11.7" + resolved "http://registry.npm.taobao.org/ast-types/download/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" + integrity sha1-8xi/ROM522oyC+AAne1k7BRx9Gw= + +async-each@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= + +async@2.6.1, async@^2.6.1: + version "2.6.1" + resolved "http://registry.npm.taobao.org/async/download/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha1-skWiPKcZMAROxT+kaqAKPofGphA= + dependencies: + lodash "^4.17.10" + +async@~0.2.6: + version "0.2.10" + resolved "http://registry.npm.taobao.org/async/download/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "http://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-types@^6.26.0: + version "6.26.0" + resolved "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "http://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-nodejs@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/bcrypt-nodejs/download/bcrypt-nodejs-0.0.3.tgz#c60917f26dc235661566c681061c303c2b28842b" + integrity sha1-xgkX8m3CNWYVZsaBBhwwPCsohCs= + +binary-extensions@^1.0.0: + version "1.12.0" + resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" + integrity sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ= + +bluebird@3.5.1: + version "3.5.1" + resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + integrity sha1-2VUfnemPH82h5oPRfukaBgLuLrk= + +bluebird@^3.1.1: + version "3.5.3" + resolved "http://registry.npm.taobao.org/bluebird/download/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha1-fQHG+WFsmlGrD4xUmnnf5uwz76c= + +boolbase@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boxen@^1.2.1: + version "1.3.0" + resolved "http://registry.npm.taobao.org/boxen/download/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.2" + resolved "http://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +bson@^1.1.0, bson@~1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/bson/download/bson-1.1.0.tgz#bee57d1fb6a87713471af4e32bcae36de814b5b0" + integrity sha1-vuV9H7aodxNHGvTjK8rjbegUtbA= + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + +bytes@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= + +bytes@2.4.0: + version "2.4.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + integrity sha1-fZcZb51br39pNeJZhVSe3SpsIzk= + +bytes@3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cache-base@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/cache-content-type/download/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + integrity sha1-A1zeKwjuISn0qDFeqPAKANuhRTw= + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^4.0.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/capture-stack-trace/download/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= + +center-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1: + version "2.4.2" + resolved "http://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +character-parser@^2.1.1: + version "2.2.0" + resolved "http://registry.npm.taobao.org/character-parser/download/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A= + dependencies: + is-regex "^1.0.3" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "http://registry.npm.taobao.org/cheerio/download/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + +chokidar@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/chokidar/download/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha1-NW/04rDo5D4yLRijckYLvPOszSY= + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chownr@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/chownr/download/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ= + +ci-info@^1.5.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= + +class-utils@^0.3.5: + version "0.3.6" + resolved "http://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^4.1.11: + version "4.2.1" + resolved "http://registry.npm.taobao.org/clean-css/download/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha1-LUEe92uFabbQyEBo2r6FsKpeXBc= + dependencies: + source-map "~0.6.0" + +clean-stack@^1.0.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/clean-stack/download/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" + integrity sha1-noIVAa6XmYbEax1m0tQy2y/UrjE= + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cliui@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +co-body@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/co-body/download/co-body-4.2.0.tgz#74df20fa73262125dc45482af04e342ea8db3515" + integrity sha1-dN8g+nMmISXcRUgq8E40LqjbNRU= + dependencies: + inflation "~2.0.0" + qs "~4.0.0" + raw-body "~2.1.2" + type-is "~1.6.6" + +co@^4.6.0: + version "4.6.0" + resolved "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6: + version "1.0.7" + resolved "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg= + dependencies: + delayed-stream "~1.0.0" + +component-emitter@^1.2.0, component-emitter@^1.2.1: + version "1.2.1" + resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +concat-map@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^3.0.0: + version "3.1.2" + resolved "http://registry.npm.taobao.org/configstore/download/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha1-xvJd767vJt8S3TNBSwAf6BpUP48= + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +consolidate@^0.14.1: + version "0.14.5" + resolved "http://registry.npm.taobao.org/consolidate/download/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" + integrity sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM= + dependencies: + bluebird "^3.1.1" + +constantinople@^3.0.1: + version "3.1.2" + resolved "http://registry.npm.taobao.org/constantinople/download/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" + integrity sha1-1F7XJPV9PRBQABen06iJwTga5kc= + dependencies: + "@types/babel-types" "^7.0.0" + "@types/babylon" "^6.16.2" + babel-types "^6.26.0" + babylon "^6.18.0" + +content-disposition@~0.5.2: + version "0.5.3" + resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70= + dependencies: + safe-buffer "5.1.2" + +content-type@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js= + +cookiejar@^2.1.0: + version "2.1.2" + resolved "http://registry.npm.taobao.org/cookiejar/download/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha1-3YojVTB1L5iPmghE8/xYnjERElw= + +cookies@~0.7.1: + version "0.7.3" + resolved "http://registry.npm.taobao.org/cookies/download/cookies-0.7.3.tgz#7912ce21fbf2e8c2da70cf1c3f351aecf59dadfa" + integrity sha1-eRLOIfvy6MLacM8cPzUa7PWdrfo= + dependencies: + depd "~1.1.2" + keygrip "~1.0.3" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-to@~2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/copy-to/download/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= + +core-js@^2.4.0: + version "2.6.1" + resolved "http://registry.npm.taobao.org/core-js/download/core-js-2.6.1.tgz#87416ae817de957a3f249b3b5ca475d4aaed6042" + integrity sha1-h0Fq6BfelXo/JJs7XKR11KrtYEI= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-error-class@^3.0.0: + version "3.0.2" + resolved "http://registry.npm.taobao.org/create-error-class/download/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "http://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/crypto-random-string/download/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +css-select@~1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-what@2.1: + version "2.1.2" + resolved "http://registry.npm.taobao.org/css-what/download/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" + integrity sha1-wIdtnQSAkn19SSDc1yrzWVZJVU0= + +data-uri-to-buffer@1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/data-uri-to-buffer/download/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + integrity sha1-dxY+qcINhkG0cH6PGKvfmnjzSDU= + +debug@*: + version "4.1.1" + resolved "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E= + dependencies: + ms "^2.1.1" + +debug@2, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.3: + version "2.6.9" + resolved "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "http://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= + dependencies: + ms "^2.1.1" + +decamelize@^1.0.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "http://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@~1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "http://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + +deep-is@~0.1.3: + version "0.1.3" + resolved "http://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-property@^0.2.5: + version "0.2.5" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +degenerator@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/degenerator/download/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" + integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= + dependencies: + ast-types "0.x.x" + escodegen "1.x.x" + esprima "3.x.x" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@^1.1.2, depd@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@^1.0.4: + version "1.0.4" + resolved "http://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "http://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +doctypes@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/doctypes/download/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.1" + resolved "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8= + +domelementtype@~1.1.1: + version "1.1.3" + resolved "http://registry.npm.taobao.org/domelementtype/download/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= + +domhandler@^2.3.0: + version "2.4.2" + resolved "http://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha1-iAUJfpM9ZehVRvcm1g9euItE+AM= + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "http://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo= + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/dot-prop/download/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc= + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecdsa-sig-formatter@1.0.10: + version "1.0.10" + resolved "http://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.10.tgz#1c595000f04a8897dfb85000892a0f4c33af86c3" + integrity sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM= + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "http://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha1-vfpzUplmTfr9NFKe1PhSKidf6lY= + +error-inject@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc= + +es6-promise@^4.0.3: + version "4.2.5" + resolved "http://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" + integrity sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ= + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "http://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@1.x.x: + version "1.11.0" + resolved "http://registry.npm.taobao.org/escodegen/download/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha1-snqTiUgdW/1b7Hb3ux6z+PRVZYk= + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@3.x.x, esprima@^3.1.3: + version "3.1.3" + resolved "http://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +estraverse@^4.2.0: + version "4.2.0" + resolved "http://registry.npm.taobao.org/estraverse/download/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +execa@^0.7.0: + version "0.7.0" + resolved "http://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@3, extend@^3.0.0: + version "3.0.2" + resolved "http://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +extglob@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "http://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +file-uri-to-path@1: + version "1.0.0" + resolved "http://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= + +fill-range@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +form-data@^2.3.1: + version "2.3.3" + resolved "http://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.0: + version "1.2.1" + resolved "http://registry.npm.taobao.org/formidable/download/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" + integrity sha1-cPt8oCkO5v+WEJBBX0s989IIJlk= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@~0.5.2: + version "0.5.2" + resolved "http://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "http://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha1-BsJ3IYRU7CiN93raVKA7hwKqy50= + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.2: + version "1.2.4" + resolved "http://registry.npm.taobao.org/fsevents/download/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha1-9B3LGvJYKvNpLaNvxVy9jhBBxCY= + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +ftp@~0.3.10: + version "0.3.10" + resolved "http://registry.npm.taobao.org/ftp/download/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +gauge@~2.7.3: + version "2.7.4" + resolved "http://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-uri@^2.0.0: + version "2.0.2" + resolved "http://registry.npm.taobao.org/get-uri/download/get-uri-2.0.2.tgz#5c795e71326f6ca1286f2fc82575cd2bab2af578" + integrity sha1-XHlecTJvbKEoby/IJXXNK6sq9Xg= + dependencies: + data-uri-to-buffer "1" + debug "2" + extend "3" + file-uri-to-path "1" + ftp "~0.3.10" + readable-stream "2" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "http://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.1.3: + version "7.1.3" + resolved "http://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/global-dirs/download/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +got@^6.7.1: + version "6.7.1" + resolved "http://registry.npm.taobao.org/got/download/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.15" + resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha1-/7cD4QZuig7qpMi4C6klPu77+wA= + +has-ansi@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.3" + resolved "http://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +htmlparser2@^3.9.1: + version "3.10.0" + resolved "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" + integrity sha1-X15CLc9hGcDZg+02Jgzp3tC+5GQ= + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.0.6" + +http-assert@^1.3.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/http-assert/download/http-assert-1.4.0.tgz#0e550b4fca6adf121bbeed83248c17e62f593a9a" + integrity sha1-DlULT8pq3xIbvu2DJIwX5i9ZOpo= + dependencies: + deep-equal "~1.0.1" + http-errors "~1.7.1" + +http-errors@1.6.3, http-errors@~1.6.2: + version "1.6.3" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@^1.3.1, http-errors@^1.6.3, http-errors@~1.7.1: + version "1.7.1" + resolved "http://registry.npm.taobao.org/http-errors/download/http-errors-1.7.1.tgz#6a4ffe5d35188e1c39f872534690585852e1f027" + integrity sha1-ak/+XTUYjhw5+HJTRpBYWFLh8Cc= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha1-5IIb7vWyFCogJr1zkm/lN2McVAU= + dependencies: + agent-base "4" + debug "3.1.0" + +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "http://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha1-UVUpcPoE1yPgTFbQQXjD+SWSu8A= + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + +humanize-number@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/humanize-number/download/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" + integrity sha1-EcCvakcWQ2M1iFiASPF5lUFInBg= + +iconv-lite@0.4.13: + version "0.4.13" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + integrity sha1-H4irpKsLFQjoMSrMOTRfNumS4vI= + +iconv-lite@0.4.23: + version "0.4.23" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.16, iconv-lite@^0.4.4: + version "0.4.24" + resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha1-qD5i59JyrA47VRqqgoMaGbafgvg= + dependencies: + minimatch "^3.0.4" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/import-lazy/download/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^3.0.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +inflation@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" + integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= + +inflight@^1.0.4: + version "1.0.6" + resolved "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "http://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= + +ip@^1.1.4, ip@^1.1.5: + version "1.1.5" + resolved "http://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-ci@^1.0.10: + version "1.2.1" + resolved "http://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= + dependencies: + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-expression@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/is-expression/download/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + integrity sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8= + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "http://registry.npm.taobao.org/is-generator-function/download/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + integrity sha1-0hMuUpuwAAp/gHlNS99c1eWBNSI= + +is-glob@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/is-glob/download/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-npm/download/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-number@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-promise@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-redirect@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/is-redirect/download/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-regex@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/is-regex/download/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-retry-allowed/download/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-windows@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +isarray@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +js-stringify@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/js-stringify/download/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds= + +json-stringify-safe@5: + version "5.0.1" + resolved "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonwebtoken@8.3.0: + version "8.3.0" + resolved "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.3.0.tgz#056c90eee9a65ed6e6c72ddb0a1d325109aaf643" + integrity sha1-BWyQ7ummXtbmxy3bCh0yUQmq9kM= + dependencies: + jws "^3.1.5" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + +jsonwebtoken@^8.3.0: + version "8.4.0" + resolved "http://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.4.0.tgz#8757f7b4cb7440d86d5e2f3becefa70536c8e46a" + integrity sha1-h1f3tMt0QNhtXi877O+nBTbI5Go= + dependencies: + jws "^3.1.5" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + +jstransformer@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/jstransformer/download/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +jwa@^1.1.5: + version "1.1.6" + resolved "http://registry.npm.taobao.org/jwa/download/jwa-1.1.6.tgz#87240e76c9808dbde18783cf2264ef4929ee50e6" + integrity sha1-hyQOdsmAjb3hh4PPImTvSSnuUOY= + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.10" + safe-buffer "^5.0.1" + +jws@^3.1.5: + version "3.1.5" + resolved "http://registry.npm.taobao.org/jws/download/jws-3.1.5.tgz#80d12d05b293d1e841e7cb8b4e69e561adcf834f" + integrity sha1-gNEtBbKT0ehB58uLTmnlYa3Pg08= + dependencies: + jwa "^1.1.5" + safe-buffer "^5.0.1" + +kareem@2.3.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/kareem/download/kareem-2.3.0.tgz#ef33c42e9024dce511eeaf440cd684f3af1fc769" + integrity sha1-7zPELpAk3OUR7q9EDNaE868fx2k= + +keygrip@~1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/keygrip/download/keygrip-1.0.3.tgz#399d709f0aed2bab0a059e0cdd3a5023a053e1dc" + integrity sha1-OZ1wnwrtK6sKBZ4M3TpQI6BT4dw= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "http://registry.npm.taobao.org/kind-of/download/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha1-ARRrNqYhjmTljzqNZt5df8b20FE= + +koa-bodyparser@^3.2.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/koa-bodyparser/download/koa-bodyparser-3.2.0.tgz#b916de17e2039fe82650481973d7c294f10b5719" + integrity sha1-uRbeF+IDn+gmUEgZc9fClPELVxk= + dependencies: + co-body "^4.2.0" + +koa-compose@^3.0.0: + version "3.2.1" + resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.1.0: + version "4.1.0" + resolved "http://registry.npm.taobao.org/koa-compose/download/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + integrity sha1-UHMGuTcZAdtBEhyBLpI9DWfT6Hc= + +koa-convert@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/koa-convert/download/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@1, koa-is-json@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/koa-is-json/download/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ= + +koa-json@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/koa-json/download/koa-json-2.0.2.tgz#36af14e6ea1f5d646d7c44a285701c6f85a4fde4" + integrity sha1-Nq8U5uofXWRtfESihXAcb4Wk/eQ= + dependencies: + koa-is-json "1" + streaming-json-stringify "3" + +koa-jwt@^3.3.2: + version "3.5.1" + resolved "http://registry.npm.taobao.org/koa-jwt/download/koa-jwt-3.5.1.tgz#0b20e45c3a0f93c9a8df42f1057b3ae004e0f849" + integrity sha1-CyDkXDoPk8mo30LxBXs64ATg+Ek= + dependencies: + jsonwebtoken "8.3.0" + koa-unless "1.0.7" + p-any "1.1.0" + +koa-logger@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/koa-logger/download/koa-logger-2.0.1.tgz#3ee42f457c40fb4d4a19a131c8022504b5b232b8" + integrity sha1-PuQvRXxA+01KGaExyAIlBLWyMrg= + dependencies: + bytes "1" + chalk "^1.1.3" + humanize-number "0.0.2" + passthrough-counter "^1.0.0" + +koa-onerror@^1.2.1: + version "1.3.1" + resolved "http://registry.npm.taobao.org/koa-onerror/download/koa-onerror-1.3.1.tgz#a5b561e1c87ef3289e4301746e01382f24ffbe22" + integrity sha1-pbVh4ch+8yieQwF0bgE4LyT/viI= + dependencies: + copy-to "~2.0.1" + swig "~1.4.2" + +koa-router@^7.1.1: + version "7.4.0" + resolved "http://registry.npm.taobao.org/koa-router/download/koa-router-7.4.0.tgz#aee1f7adc02d5cb31d7d67465c9eacc825e8c5e0" + integrity sha1-ruH3rcAtXLMdfWdGXJ6syCXoxeA= + dependencies: + debug "^3.1.0" + http-errors "^1.3.1" + koa-compose "^3.0.0" + methods "^1.0.1" + path-to-regexp "^1.1.1" + urijs "^1.19.0" + +koa-send@^3.1.0, koa-send@^3.2.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/koa-send/download/koa-send-3.3.0.tgz#5a4ae245564680c6ecf6079e9275fa5173a861dc" + integrity sha1-WkriRVZGgMbs9geeknX6UXOoYdw= + dependencies: + co "^4.6.0" + debug "^2.6.0" + mz "^2.3.1" + resolve-path "^1.3.1" + +koa-static@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/koa-static/download/koa-static-3.0.0.tgz#40442233d2c0b35c225e450199c10bf8a539e416" + integrity sha1-QEQiM9LAs1wiXkUBmcEL+KU55BY= + dependencies: + debug "*" + koa-send "^3.2.0" + +koa-unless@1.0.7: + version "1.0.7" + resolved "http://registry.npm.taobao.org/koa-unless/download/koa-unless-1.0.7.tgz#b9df375e2b4da3043918d48622520c2c0b79f032" + integrity sha1-ud83XitNowQ5GNSGIlIMLAt58DI= + +koa-views@^5.2.1: + version "5.2.1" + resolved "http://registry.npm.taobao.org/koa-views/download/koa-views-5.2.1.tgz#fdd89dbbca7d9f47daf1f24ad6eb4cb9268f5f01" + integrity sha1-/didu8p9n0fa8fJK1utMuSaPXwE= + dependencies: + consolidate "^0.14.1" + debug "^2.1.3" + koa-send "^3.1.0" + mz "^2.4.0" + +koa@^2.2.0: + version "2.6.2" + resolved "http://registry.npm.taobao.org/koa/download/koa-2.6.2.tgz#57ba4d049b0a99cae0d594e6144e2931949a7ce1" + integrity sha1-V7pNBJsKmcrg1ZTmFE4pMZSafOE= + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.7.1" + debug "~3.1.0" + delegates "^1.0.0" + depd "^1.1.2" + destroy "^1.0.4" + error-inject "^1.0.0" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +latest-version@^3.0.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/latest-version/download/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "http://registry.npm.taobao.org/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +levn@~0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "http://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "http://registry.npm.taobao.org/lodash.includes/download/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "http://registry.npm.taobao.org/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "http://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "http://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.omit@^4.5.0: + version "4.5.0" + resolved "http://registry.npm.taobao.org/lodash.omit/download/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" + integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= + +lodash.once@^4.0.0: + version "4.1.1" + resolved "http://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.pick@^4.4.0: + version "4.4.0" + resolved "http://registry.npm.taobao.org/lodash.pick/download/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4: + version "4.17.11" + resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha1-s56mIp72B+zYniyN8SU2iRysm40= + +longest@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= + +lru-cache@^4.0.1, lru-cache@^4.1.2: + version "4.1.5" + resolved "http://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= + dependencies: + pify "^3.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-pager@^1.0.2: + version "1.4.0" + resolved "http://registry.npm.taobao.org/memory-pager/download/memory-pager-1.4.0.tgz#8902c72ce2fa34319adc0dae586b7d83cec6d6ac" + integrity sha1-iQLHLOL6NDGa3A2uWGt9g87G1qw= + +methods@^1.0.1, methods@^1.1.1: + version "1.1.2" + resolved "http://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "http://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@~1.37.0: + version "1.37.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + integrity sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng= + +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.18: + version "2.1.21" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + integrity sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y= + dependencies: + mime-db "~1.37.0" + +mime@^1.4.1: + version "1.6.0" + resolved "http://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +minimatch@^3.0.4: + version "3.0.4" + resolved "http://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "http://registry.npm.taobao.org/minimist/download/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "http://registry.npm.taobao.org/minipass/download/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha1-ys6+SSAiSX9law8PUeJoKp7S2Eg= + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "http://registry.npm.taobao.org/minizlib/download/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha1-3SfqYTYkPHyIBoToZyuzpF/ZthQ= + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "http://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mongodb-core@3.1.9: + version "3.1.9" + resolved "http://registry.npm.taobao.org/mongodb-core/download/mongodb-core-3.1.9.tgz#c31ee407bf932b0149eaed775c17ee09974e4ca3" + integrity sha1-wx7kB7+TKwFJ6u13XBfuCZdOTKM= + dependencies: + bson "^1.1.0" + require_optional "^1.0.1" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + +mongodb@3.1.10: + version "3.1.10" + resolved "http://registry.npm.taobao.org/mongodb/download/mongodb-3.1.10.tgz#45ad9b74ea376f4122d0881b75e5489b9e504ed7" + integrity sha1-Ra2bdOo3b0Ei0IgbdeVIm55QTtc= + dependencies: + mongodb-core "3.1.9" + safe-buffer "^5.1.2" + +mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" + integrity sha1-O6n5H6UHtRhtOZ+0CFS/8Y+1Y+Q= + +mongoose@^5.1.6: + version "5.4.2" + resolved "http://registry.npm.taobao.org/mongoose/download/mongoose-5.4.2.tgz#3f3d87e0082f3e28bf24f0e3f87e107195996461" + integrity sha1-Pz2H4AgvPii/JPDj+H4QcZWZZGE= + dependencies: + async "2.6.1" + bson "~1.1.0" + kareem "2.3.0" + mongodb "3.1.10" + mongodb-core "3.1.9" + mongoose-legacy-pluralize "1.0.2" + mpath "0.5.1" + mquery "3.2.0" + ms "2.0.0" + regexp-clone "0.0.1" + safe-buffer "5.1.2" + sliced "1.0.1" + +mpath@0.5.1: + version "0.5.1" + resolved "http://registry.npm.taobao.org/mpath/download/mpath-0.5.1.tgz#17131501f1ff9e6e4fbc8ffa875aa7065b5775ab" + integrity sha1-FxMVAfH/nm5PvI/6h1qnBltXdas= + +mquery@3.2.0: + version "3.2.0" + resolved "http://registry.npm.taobao.org/mquery/download/mquery-3.2.0.tgz#e276472abd5109686a15eb2a8e0761db813c81cc" + integrity sha1-4nZHKr1RCWhqFesqjgdh24E8gcw= + dependencies: + bluebird "3.5.1" + debug "3.1.0" + regexp-clone "0.0.1" + safe-buffer "5.1.2" + sliced "1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= + +mz@^2.3.1, mz@^2.4.0: + version "2.7.0" + resolved "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI= + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.9.2: + version "2.12.1" + resolved "http://registry.npm.taobao.org/nan/download/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" + integrity sha1-exqhk+mqhgV+PHu9CsRI53CSVVI= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "http://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.2.4" + resolved "http://registry.npm.taobao.org/needle/download/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha1-UZMb/4JTOxkot9HWngHxsA/9Kk4= + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/negotiator/download/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= + +netmask@^1.0.6: + version "1.0.6" + resolved "http://registry.npm.taobao.org/netmask/download/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" + integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "http://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha1-MHAEBxav3HeHR7YbaIe/eIgLgPw= + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nodemailer@^4.6.7: + version "4.7.0" + resolved "http://registry.npm.taobao.org/nodemailer/download/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" + integrity sha1-RCDgar//130GGPGE6kkEfbhPStg= + +nodemon@^1.18.7: + version "1.18.9" + resolved "http://registry.npm.taobao.org/nodemon/download/nodemon-1.18.9.tgz#90b467efd3b3c81b9453380aeb2a2cba535d0ead" + integrity sha1-kLRn79OzyBuUUzgK6yosulNdDq0= + dependencies: + chokidar "^2.0.4" + debug "^3.1.0" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.6" + semver "^5.5.0" + supports-color "^5.2.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.5.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~1.0.10: + version "1.0.10" + resolved "http://registry.npm.taobao.org/nopt/download/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.5" + resolved "http://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha1-PBcyt7qTazoQMlrvYWRnwMy8yXk= + +npm-packlist@^1.1.6: + version "1.2.0" + resolved "http://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.2.0.tgz#55a60e793e272f00862c7089274439a4cc31fc7f" + integrity sha1-VaYOeT4nLwCGLHCJJ0Q5pMwx/H8= + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "http://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "http://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw= + dependencies: + boolbase "~1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@^2.3.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "http://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +only@~0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/only/download/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= + +optimist@~0.6: + version "0.6.1" + resolved "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "http://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-any@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/p-any/download/p-any-1.1.0.tgz#1d03835c7eed1e34b8e539c47b7b60d0d015d4e1" + integrity sha1-HQODXH7tHjS45TnEe3tg0NAV1OE= + dependencies: + p-some "^2.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-some@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/p-some/download/p-some-2.0.1.tgz#65d87c8b154edbcf5221d167778b6d2e150f6f06" + integrity sha1-Zdh8ixVO289SIdFnd4ttLhUPbwY= + dependencies: + aggregate-error "^1.0.0" + +pac-proxy-agent@^2.0.1: + version "2.0.2" + resolved "http://registry.npm.taobao.org/pac-proxy-agent/download/pac-proxy-agent-2.0.2.tgz#90d9f6730ab0f4d2607dcdcd4d3d641aa26c3896" + integrity sha1-kNn2cwqw9NJgfc3NTT1kGqJsOJY= + dependencies: + agent-base "^4.2.0" + debug "^3.1.0" + get-uri "^2.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + pac-resolver "^3.0.0" + raw-body "^2.2.0" + socks-proxy-agent "^3.0.0" + +pac-resolver@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/pac-resolver/download/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" + integrity sha1-auoweH2wqJFwTet4AKcip2FabyY= + dependencies: + co "^4.6.0" + degenerator "^1.0.4" + ip "^1.1.5" + netmask "^1.0.6" + thunkify "^2.1.2" + +package-json@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/package-json/download/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +parse5@^3.0.1: + version "3.0.3" + resolved "http://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w= + dependencies: + "@types/node" "*" + +parseurl@^1.3.2: + version "1.3.2" + resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "http://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +passthrough-counter@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/passthrough-counter/download/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa" + integrity sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= + +path-to-regexp@^1.1.1: + version "1.7.0" + resolved "http://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= + dependencies: + isarray "0.0.1" + +pify@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "http://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o= + +promise@^7.0.1: + version "7.3.1" + resolved "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= + dependencies: + asap "~2.0.3" + +proxy-agent@2: + version "2.3.1" + resolved "http://registry.npm.taobao.org/proxy-agent/download/proxy-agent-2.3.1.tgz#3d49d863d46cf5f37ca8394848346ea02373eac6" + integrity sha1-PUnYY9Rs9fN8qDlISDRuoCNz6sY= + dependencies: + agent-base "^4.2.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + lru-cache "^4.1.2" + pac-proxy-agent "^2.0.1" + proxy-from-env "^1.0.0" + socks-proxy-agent "^3.0.0" + +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/proxy-from-env/download/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +pstree.remy@^1.1.6: + version "1.1.6" + resolved "http://registry.npm.taobao.org/pstree.remy/download/pstree.remy-1.1.6.tgz#73a55aad9e2d95814927131fbf4dc1b62d259f47" + integrity sha1-c6VarZ4tlYFJJxMfv03Bti0ln0c= + +pug-attrs@^2.0.3: + version "2.0.3" + resolved "http://registry.npm.taobao.org/pug-attrs/download/pug-attrs-2.0.3.tgz#a3095f970e64151f7bdad957eef55fb5d7905d15" + integrity sha1-owlflw5kFR972tlX7vVftdeQXRU= + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.4" + +pug-code-gen@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/pug-code-gen/download/pug-code-gen-2.0.1.tgz#0951ec83225d74d8cfc476a7f99a259b5f7d050c" + integrity sha1-CVHsgyJddNjPxHan+Zolm199BQw= + dependencies: + constantinople "^3.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.3" + pug-error "^1.3.2" + pug-runtime "^2.0.4" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.2: + version "1.3.2" + resolved "http://registry.npm.taobao.org/pug-error/download/pug-error-1.3.2.tgz#53ae7d9d29bb03cf564493a026109f54c47f5f26" + integrity sha1-U659nSm7A89WRJOgJhCfVMR/XyY= + +pug-filters@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/pug-filters/download/pug-filters-3.1.0.tgz#27165555bc04c236e4aa2b0366246dfa021b626e" + integrity sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4= + dependencies: + clean-css "^4.1.11" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.2" + pug-walk "^1.1.7" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/pug-lexer/download/pug-lexer-4.0.0.tgz#210c18457ef2e1760242740c5e647bd794cec278" + integrity sha1-IQwYRX7y4XYCQnQMXmR715TOwng= + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.2" + +pug-linker@^3.0.5: + version "3.0.5" + resolved "http://registry.npm.taobao.org/pug-linker/download/pug-linker-3.0.5.tgz#9e9a7ae4005682d027deeb96b000f88eeb83a02f" + integrity sha1-npp65ABWgtAn3uuWsAD4juuDoC8= + dependencies: + pug-error "^1.3.2" + pug-walk "^1.1.7" + +pug-load@^2.0.11: + version "2.0.11" + resolved "http://registry.npm.taobao.org/pug-load/download/pug-load-2.0.11.tgz#e648e57ed113fe2c1f45d57858ea2bad6bc01527" + integrity sha1-5kjlftET/iwfRdV4WOorrWvAFSc= + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.7" + +pug-parser@^5.0.0: + version "5.0.0" + resolved "http://registry.npm.taobao.org/pug-parser/download/pug-parser-5.0.0.tgz#e394ad9b3fca93123940aff885c06e44ab7e68e4" + integrity sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ= + dependencies: + pug-error "^1.3.2" + token-stream "0.0.1" + +pug-runtime@^2.0.4: + version "2.0.4" + resolved "http://registry.npm.taobao.org/pug-runtime/download/pug-runtime-2.0.4.tgz#e178e1bda68ab2e8c0acfc9bced2c54fd88ceb58" + integrity sha1-4XjhvaaKsujArPybztLFT9iM61g= + +pug-strip-comments@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/pug-strip-comments/download/pug-strip-comments-1.0.3.tgz#f1559592206edc6f85310dacf4afb48a025af59f" + integrity sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8= + dependencies: + pug-error "^1.3.2" + +pug-walk@^1.1.7: + version "1.1.7" + resolved "http://registry.npm.taobao.org/pug-walk/download/pug-walk-1.1.7.tgz#c00d5c5128bac5806bec15d2b7e7cdabe42531f3" + integrity sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM= + +pug@^2.0.0-rc.1: + version "2.0.3" + resolved "http://registry.npm.taobao.org/pug/download/pug-2.0.3.tgz#71cba82537c95a5eab7ed04696e4221f53aa878e" + integrity sha1-ccuoJTfJWl6rftBGluQiH1Oqh44= + dependencies: + pug-code-gen "^2.0.1" + pug-filters "^3.1.0" + pug-lexer "^4.0.0" + pug-linker "^3.0.5" + pug-load "^2.0.11" + pug-parser "^5.0.0" + pug-runtime "^2.0.4" + pug-strip-comments "^1.0.3" + +qs@^6.5.1: + version "6.6.0" + resolved "http://registry.npm.taobao.org/qs/download/qs-6.6.0.tgz#a99c0f69a8d26bf7ef012f871cdabb0aee4424c2" + integrity sha1-qZwPaajSa/fvAS+HHNq7Cu5EJMI= + +qs@~4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/qs/download/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + integrity sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc= + +raw-body@^2.2.0: + version "2.3.3" + resolved "http://registry.npm.taobao.org/raw-body/download/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha1-GzJOzmtXBuFThVvBFIxlu39uoMM= + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +raw-body@~2.1.2: + version "2.1.7" + resolved "http://registry.npm.taobao.org/raw-body/download/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + integrity sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q= + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "http://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@1.1.x: + version "1.1.14" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@2, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.5: + version "2.3.6" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.1.1" + resolved "http://registry.npm.taobao.org/readable-stream/download/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" + integrity sha1-7Wu8bFuliwkAOf8YzmcFFXla6wY= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.0.0: + version "2.2.1" + resolved "http://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk= + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp-clone@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/regexp-clone/download/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" + integrity sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk= + +registry-auth-token@^3.0.1: + version "3.3.2" + resolved "http://registry.npm.taobao.org/registry-auth-token/download/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + integrity sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA= + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "http://registry.npm.taobao.org/registry-url/download/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4= + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require_optional@^1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + integrity sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4= + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= + +resolve-path@^1.3.1: + version "1.4.0" + resolved "http://registry.npm.taobao.org/resolve-path/download/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "http://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6: + version "1.9.0" + resolved "http://registry.npm.taobao.org/resolve/download/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + integrity sha1-oUxv36j5Kn3x2ZbLcQX6dEZY6gY= + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "http://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +right-align@^0.1.1: + version "0.1.3" + resolved "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + +rimraf@^2.6.1: + version "2.6.3" + resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha1-stEE/g2Psnz54KHNqCYt04M8bKs= + dependencies: + glob "^7.1.3" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "http://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +saslprep@^1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/saslprep/download/saslprep-1.0.2.tgz#da5ab936e6ea0bbae911ffec77534be370c9f52d" + integrity sha1-2lq5NubqC7rpEf/sd1NL43DJ9S0= + dependencies: + sparse-bitfield "^3.0.3" + +sax@^1.2.4: + version "1.2.4" + resolved "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= + +semver-diff@^2.0.0: + version "2.1.0" + resolved "http://registry.npm.taobao.org/semver-diff/download/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: + version "5.6.0" + resolved "http://registry.npm.taobao.org/semver/download/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha1-fnQlb7qknHWqfHogXMInmcrIAAQ= + +set-blocking@~2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^0.4.3: + version "0.4.3" + resolved "http://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sliced@1.0.1: + version "1.0.1" + resolved "http://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= + +smart-buffer@^1.0.13: + version "1.1.15" + resolved "http://registry.npm.taobao.org/smart-buffer/download/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" + integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "http://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socks-proxy-agent@^3.0.0: + version "3.0.1" + resolved "http://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" + integrity sha1-Lq58+OKoLTRWV2FTmn+XGMVhdlk= + dependencies: + agent-base "^4.1.0" + socks "^1.1.10" + +socks@^1.1.10: + version "1.1.10" + resolved "http://registry.npm.taobao.org/socks/download/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" + integrity sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o= + dependencies: + ip "^1.1.4" + smart-buffer "^1.0.13" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "http://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk= + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.1.34: + version "0.1.34" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" + integrity sha1-p8/omux7FoLDsZjQrPtH19CQVms= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.6, source-map@~0.5.1: + version "0.5.7" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "http://registry.npm.taobao.org/sparse-bitfield/download/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= + dependencies: + memory-pager "^1.0.2" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "http://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "http://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: + version "1.5.0" + resolved "http://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +streaming-json-stringify@3: + version "3.1.0" + resolved "http://registry.npm.taobao.org/streaming-json-stringify/download/streaming-json-stringify-3.1.0.tgz#80200437a993cc39c4fe00263b7b3b903ac87af5" + integrity sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU= + dependencies: + json-stringify-safe "5" + readable-stream "2" + +string-width@^1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.1.1: + version "1.2.0" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha1-/obnOLGVRK/nBGkkOyoe6SQOro0= + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +superagent-charset@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/superagent-charset/download/superagent-charset-1.2.0.tgz#9eeba5a9275f6f1cd3d6b13861f94463f3c3a348" + integrity sha1-nuulqSdfbxzT1rE4YflEY/PDo0g= + dependencies: + iconv-lite "^0.4.16" + +superagent-proxy@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/superagent-proxy/download/superagent-proxy-1.0.3.tgz#acfa776672f11c24a90ad575e855def8be44f741" + integrity sha1-rPp3ZnLxHCSpCtV16FXe+L5E90E= + dependencies: + debug "^3.1.0" + proxy-agent "2" + +superagent@^3.8.3: + version "3.8.3" + resolved "http://registry.npm.taobao.org/superagent/download/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha1-Rg6g29t9WxG8T3jeulZfhqF44Sg= + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supports-color@^2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.2.0, supports-color@^5.3.0: + version "5.5.0" + resolved "http://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +swig@~1.4.2: + version "1.4.2" + resolved "http://registry.npm.taobao.org/swig/download/swig-1.4.2.tgz#4085ca0453369104b5d483e2841b39b7ae1aaba5" + integrity sha1-QIXKBFM2kQS11IPihBs5t64aq6U= + dependencies: + optimist "~0.6" + uglify-js "~2.4" + +tar@^4: + version "4.4.8" + resolved "http://registry.npm.taobao.org/tar/download/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha1-sZ7sP94qluZGZt+f20DFyhvDdH0= + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +term-size@^1.2.0: + version "1.2.0" + resolved "http://registry.npm.taobao.org/term-size/download/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "http://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "http://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + +thunkify@^2.1.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/thunkify/download/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= + +timed-out@^4.0.0: + version "4.0.1" + resolved "http://registry.npm.taobao.org/timed-out/download/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "http://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "http://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM= + +token-stream@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/token-stream/download/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo= + +touch@^3.1.0: + version "3.1.0" + resolved "http://registry.npm.taobao.org/touch/download/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds= + dependencies: + nopt "~1.0.10" + +type-check@~0.3.2: + version "0.3.2" + resolved "http://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-is@^1.6.16, type-is@~1.6.6: + version "1.6.16" + resolved "http://registry.npm.taobao.org/type-is/download/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ= + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +uglify-js@^2.6.1: + version "2.8.29" + resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-js@~2.4: + version "2.4.24" + resolved "http://registry.npm.taobao.org/uglify-js/download/uglify-js-2.4.24.tgz#fad5755c1e1577658bb06ff9ab6e548c95bebd6e" + integrity sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4= + dependencies: + async "~0.2.6" + source-map "0.1.34" + uglify-to-browserify "~1.0.0" + yargs "~3.5.4" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +undefsafe@^2.0.2: + version "2.0.2" + resolved "http://registry.npm.taobao.org/undefsafe/download/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" + integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= + dependencies: + debug "^2.2.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unique-string@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unique-string/download/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +unpipe@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/unzip-response/download/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +upath@^1.0.5: + version "1.1.0" + resolved "http://registry.npm.taobao.org/upath/download/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha1-NSVll+RqWB20eT0M5H+prr/J+r0= + +update-notifier@^2.5.0: + version "2.5.0" + resolved "http://registry.npm.taobao.org/update-notifier/download/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +urijs@^1.19.0: + version "1.19.1" + resolved "http://registry.npm.taobao.org/urijs/download/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" + integrity sha1-Ww/1MMDL3oOG9jQiNbpcpumV0lo= + +urix@^0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +use@^3.1.0: + version "3.1.1" + resolved "http://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^3.3.2: + version "3.3.2" + resolved "http://registry.npm.taobao.org/uuid/download/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE= + +vary@^1.1.2: + version "1.1.2" + resolved "http://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +void-elements@^2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +which@^1.2.9: + version "1.3.1" + resolved "http://registry.npm.taobao.org/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "http://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "http://registry.npm.taobao.org/widest-line/download/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= + dependencies: + string-width "^2.1.1" + +window-size@0.1.0: + version "0.1.0" + resolved "http://registry.npm.taobao.org/window-size/download/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +with@^5.0.0: + version "5.1.1" + resolved "http://registry.npm.taobao.org/with/download/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + integrity sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4= + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + +wordwrap@0.0.2: + version "0.0.2" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wordwrap@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/wordwrap/download/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrappy@1: + version "1.0.2" + resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0: + version "2.3.0" + resolved "http://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha1-H/YVdcLipOjlENb6TiQ8zhg5mas= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "http://registry.npm.taobao.org/xdg-basedir/download/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +xregexp@2.0.0: + version "2.0.0" + resolved "http://registry.npm.taobao.org/xregexp/download/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= + +yallist@^2.1.2: + version "2.1.2" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha1-tLBJ4xS+VF486AIjbWzSLNkcPek= + +yargs@~3.10.0: + version "3.10.0" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yargs@~3.5.4: + version "3.5.4" + resolved "http://registry.npm.taobao.org/yargs/download/yargs-3.5.4.tgz#d8aff8f665e94c34bd259bdebd1bfaf0ddd35361" + integrity sha1-2K/49mXpTDS9JZvevRv68N3TU2E= + dependencies: + camelcase "^1.0.2" + decamelize "^1.0.0" + window-size "0.1.0" + wordwrap "0.0.2" + +ylru@^1.2.0: + version "1.2.1" + resolved "http://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" + integrity sha1-9Xa2M0FUeYnB3nuiiHYJI7J/6E8= diff --git a/re/config_dir/tsconfig.json b/re/config_dir/tsconfig.json new file mode 100644 index 0000000..194d0d1 --- /dev/null +++ b/re/config_dir/tsconfig.json @@ -0,0 +1,72 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} diff --git a/re/geekbang/@types/babel__register.d.ts b/re/geekbang/@types/babel__register.d.ts new file mode 100644 index 0000000..6ab13a0 --- /dev/null +++ b/re/geekbang/@types/babel__register.d.ts @@ -0,0 +1 @@ +declare module '@babel/register' \ No newline at end of file diff --git a/re/geekbang/@types/easy_sock.d.ts b/re/geekbang/@types/easy_sock.d.ts new file mode 100644 index 0000000..6da8e0b --- /dev/null +++ b/re/geekbang/@types/easy_sock.d.ts @@ -0,0 +1 @@ +declare module 'easy_sock'; \ No newline at end of file diff --git a/re/geekbang/@types/protocol-buffers.d.ts b/re/geekbang/@types/protocol-buffers.d.ts new file mode 100644 index 0000000..3cc236e --- /dev/null +++ b/re/geekbang/@types/protocol-buffers.d.ts @@ -0,0 +1 @@ +declare module 'protocol-buffers'; \ No newline at end of file diff --git a/re/geekbang/api.ts b/re/geekbang/api.ts new file mode 100644 index 0000000..7a41240 --- /dev/null +++ b/re/geekbang/api.ts @@ -0,0 +1,57 @@ +import koa from 'koa' +import mount from 'koa-mount' +import rpcClient from './lib/rpcClient' +import protobuf from 'protocol-buffers' +import fs from 'fs' + +const app = new koa() +const schema = protobuf( + fs.readFileSync(`${__dirname}/routes/play/proto/play.proto`) +) + +const client = rpcClient( + 4001, + schema.CommentListRequest, + schema.CommentListResponse +) + +const praiseClient = rpcClient( + 4002, + schema.PraiseRequest, + schema.PraiseResponse +) + +app.use( + mount('/comment', async (ctx) => { + const id = (ctx.query.id as string).split(',') + console.log(`id`, id) + const result = await new Promise((resolve, reject) => { + client.write({ id }, (err: Error, data: any) => { + err ? reject(err) : resolve(data) + }) + }) + ctx.status = 200 + ctx.body = result + }) +) + +app.use( + mount('/praise', async (ctx) => { + const { id } = ctx.request.body as Record + if (!id) { + ctx.status = 400 + ctx.body = 'invalid praise id' + return + } + const result = await new Promise((resolve, reject) => { + praiseClient.write({ commentid: id }, (err: Error, data: any) => { + err ? reject(err) : resolve(data) + }) + }) + + ctx.status = 200 + ctx.body = result + }) +) + +export default app diff --git a/re/geekbang/data-server.ts b/re/geekbang/data-server.ts new file mode 100644 index 0000000..8f1ea1d --- /dev/null +++ b/re/geekbang/data-server.ts @@ -0,0 +1,3 @@ +import './routes/detail/__server' +import './routes/play/__server' +import './routes/list/__server' \ No newline at end of file diff --git a/re/geekbang/index.ts b/re/geekbang/index.ts new file mode 100644 index 0000000..70fd2b8 --- /dev/null +++ b/re/geekbang/index.ts @@ -0,0 +1,37 @@ +import koa from 'koa' +import mount from 'koa-mount' +import bodyParser from 'koa-bodyparser' +import { URL } from 'url' + +import downloadService from './routes/download' +import detailService from './routes/detail' +import playService from './routes/play' +import listService from './routes/list' + +import apiService from './api' + +const app = new koa() +app.use(bodyParser()) + +const paths = ['/download', '/detail', '/play'] +app.use(async (ctx, next) => { + const url = new URL(ctx.href) + // console.log(`url.pathname`, url.pathname) + if (paths.indexOf(url.pathname) > -1) { + url.pathname += '/' + ctx.redirect(url.toString()) + return + } + await next() +}) + +app.use(mount('/detail', detailService)) +app.use(mount('/download', downloadService)) +app.use(mount('/play', playService)) +app.use(mount('/list', listService)) + +app.use(mount('/api', apiService)) + +app.listen(3000, () => { + console.log('server listened 3000') +}) diff --git a/re/geekbang/lib/dataServer.ts b/re/geekbang/lib/dataServer.ts new file mode 100644 index 0000000..5c5653f --- /dev/null +++ b/re/geekbang/lib/dataServer.ts @@ -0,0 +1,85 @@ +import net from 'net' + +export interface Callback { + ( + req: { body: any; socket: net.Socket }, + res: { end: (data: any) => void } + ): any +} + +type Ed = { + decode: (buf: Buffer) => any + encode: (data: any) => Buffer +} + +export interface SchemaReq extends Ed {} +export interface SchemaRes extends Ed {} + +class DataServer { + constructor(public schemaReq: SchemaReq, public schemaRes: SchemaRes) {} + + isCompleteRequest = (buffer: Buffer) => { + return buffer.readInt32BE(4) + 8 + } + + decodeRequest = (buffer: Buffer) => { + return { + seq: buffer.readInt32BE(), + result: this.schemaReq.decode(buffer.slice(8)), + } + } + + encodeResponse = (data: any, seq: number) => { + const body = this.schemaRes.encode(data) + const head = Buffer.alloc(8) + head.writeInt32BE(seq) + head.writeInt32BE(body.length, 4) + return Buffer.concat([head, body]) + } + + createServer = (callback: Callback) => { + let buffer: Buffer = null + const dataServer = net.createServer((socket) => { + socket.on('data', (data) => { + buffer = buffer && buffer.length ? Buffer.concat([buffer, data]) : data + + let checkLength: number = null + + while (buffer && (checkLength = this.isCompleteRequest(buffer))) { + let requestBuffer: Buffer = null + + if (checkLength === buffer.length) { + requestBuffer = buffer + buffer = null + } else { + requestBuffer = buffer.slice(0, checkLength) + buffer = buffer.slice(checkLength) + } + + const request = this.decodeRequest(requestBuffer) + + callback( + { + body: request.result, + socket, + }, + { + end: (data) => { + const buffer = this.encodeResponse(data, request.seq) + socket.write(buffer) + }, + } + ) + } + }) + }) + + return { + listen(...rest: any[]) { + dataServer.listen.apply(dataServer, rest) + }, + } + } +} + +export default DataServer diff --git a/re/geekbang/lib/rpcClient.ts b/re/geekbang/lib/rpcClient.ts new file mode 100644 index 0000000..0cde229 --- /dev/null +++ b/re/geekbang/lib/rpcClient.ts @@ -0,0 +1,42 @@ +import EasySock from 'easy_sock' +import { SchemaRes, SchemaReq } from './dataServer' + + +const encode = (requestSchema: SchemaReq) => (data: any, seq: number) => { + const body = requestSchema.encode(data) + const head = Buffer.alloc(8) + head.writeInt32BE(seq) + head.writeInt32BE(body.length, 4) + + return Buffer.concat([head, body]) +} + +const decode = (responseSchema: SchemaRes) => (res: Buffer) => { + const seq = res.readInt32BE() + const body = responseSchema.decode(res.slice(8)) + return { result: body, seq } +} + +const isReceiveComplete = (buffer: Buffer) => { + if (buffer.length < 8) return 0 + const bodyLength = buffer.readInt32BE(4) + if (buffer.length >= bodyLength) { + return bodyLength + 8 + } + return 0 +} + +export default (port: number, schemaReq: SchemaRes, schemaRes: SchemaRes) => { + const rpc = new EasySock({ + ip: '127.0.0.1', + port, + timeout: 500, + keepAlive: true, + }) + + rpc.encode = encode(schemaReq) + rpc.decode = decode(schemaRes) + rpc.isReceiveComplete = isReceiveComplete + + return rpc +} diff --git a/re/geekbang/lib/tplengine.ts b/re/geekbang/lib/tplengine.ts new file mode 100644 index 0000000..95cae04 --- /dev/null +++ b/re/geekbang/lib/tplengine.ts @@ -0,0 +1,27 @@ +import fs from 'fs' +import vm from 'vm' + +const templateCache: Record = {} + +const templateContext = vm.createContext({ + include(name: string, data: any) { + const template = templateCache[name] || createTemplate(name) + return template(data) + }, +}) + +function createTemplate(templatePath: string) { + templateCache[templatePath] = vm.runInContext( + ` + (function (data) { + with (data) { + return \`${fs.readFileSync(templatePath, 'utf-8')}\` + } + }) + `, + templateContext + ) + return templateCache[templatePath] +} + +export default createTemplate diff --git a/re/geekbang/package.json b/re/geekbang/package.json new file mode 100644 index 0000000..e900c8b --- /dev/null +++ b/re/geekbang/package.json @@ -0,0 +1,44 @@ +{ + "name": "geekbang", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "server:node": "tsnd -P ./tsconfig.json --respawn ./index.ts", + "server:data": "tsnd -P ./tsconfig.json --respawn ./data-server.ts", + "client": "webpack --config ./webpack.config.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@babel/register": "^7.14.5", + "easy_sock": "^0.4.1", + "koa": "^2.13.1", + "koa-bodyparser": "^4.3.0", + "koa-mount": "^4.0.0", + "koa-static": "^5.0.0", + "protocol-buffers": "^4.2.0", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@babel/core": "^7.14.6", + "@babel/preset-react": "^7.14.5", + "@types/koa": "^2.13.3", + "@types/koa-bodyparser": "^4.3.1", + "@types/koa-mount": "^4.0.0", + "@types/koa-static": "^4.0.1", + "@types/node": "^15.12.4", + "@types/react": "^17.0.11", + "@types/react-dom": "^17.0.8", + "awesome-typescript-loader": "^5.2.1", + "source-map-loader": "^3.0.0", + "ts-node": "^10.0.0", + "ts-node-dev": "^1.1.6", + "typescript": "^4.3.4", + "webpack": "^5.40.0", + "webpack-cli": "^4.7.2" + } +} diff --git a/re/geekbang/routes/detail/__server/index.ts b/re/geekbang/routes/detail/__server/index.ts new file mode 100644 index 0000000..ca76d11 --- /dev/null +++ b/re/geekbang/routes/detail/__server/index.ts @@ -0,0 +1,21 @@ +import Server from '../../../lib/dataServer' +import protobuf from 'protocol-buffers' +import fs from 'fs' +import data from './mock' + +const schema = protobuf(fs.readFileSync(`${__dirname}/../proto/detail.proto`)) + +const server = new Server(schema.ColumnRequest, schema.ColumnResponse) + +server + .createServer((req, res) => { + const columnid = req.body + + res.end({ + column: data[0], + recommendColumns: data.slice(0, 3), + }) + }) + .listen(4000, () => { + console.log('detail data server listened on 4000') + }) diff --git a/re/geekbang/routes/detail/__server/mock.ts b/re/geekbang/routes/detail/__server/mock.ts new file mode 100644 index 0000000..073aa41 --- /dev/null +++ b/re/geekbang/routes/detail/__server/mock.ts @@ -0,0 +1,177 @@ +export default [ + { + id: 232, + type: 2, + column_cover: + 'https://static001.geekbang.org/resource/image/42/78/42db8ef7b28bcdc26410141dd97b8178.jpg', + column_title: 'Node.js开发实战', + column_subtitle: '带你开发一个完整的Node.js项目', + author_name: '杨浩', + author_intro: '腾讯高级工程师', + column_intro: `

    课程背景

    Node.js 拥有广大的 JavaScript 程序员基础并且完全开源,所以它拥有一个强大的开发者社区。依靠繁荣的社区力量,现在已经发展出成熟的技术体系与庞大的生态。它被广泛地用在 Web 服务、开发工作流、客户端应用等诸多领域。其中,在 Web 服务开发这个领域,业界对 Node.js 的接受程度最高。

    对于很多前端开发者来说,掌握 Node.js 的基础知识并不难,难点在于如何按照后端工程师的思维,基于 Node.js 来一步步构建项目,其中涉及诸如 RPC 调用、系统运维以及进程管理等前端工程师较少涉及到的领域。

    因此,本课程站在一个前端工程师的角度,讲解如何基于 Node.js 开发一个完整的项目,从一开始的技术预研再到实际开发、性能优化以及最终的框架架构搭建和工程化建设,带你完整体验一遍前端工程师使用 Node.js进行项目开发会碰到的各种常见场景和技术难点,学完课程之后,你将能够熟练运用 Node.js 进行大型项目的设计和开发。

    讲师简介

    杨浩,腾讯高级工程师。之前曾在腾讯视频负责 Web 端的相关工作,设计并完成了腾讯视频整站大部分页面的 Node.js 化。

    腾讯视频是从 2015 年开始使用 Node.js 对整站进行改造的,杨浩与同事一起从零开始一步一步把整个 Node.js 的开发运维步骤打通,搭建了一个运行于后台服务和浏览器前端之间的 Node.js 中间层用作 SSR(Server Side Rendering),以提高搜索引擎抓取的效果以及首屏展现的速度。

    在 2018 年由 InfoQ 举办的 ArchSummit 全球架构师峰会深圳站上,杨浩也对在腾讯视频进行 Node.js 改造这一经历做了公开分享:

    https://time.geekbang.org/dailylesson/detail/100016617

    课程收获

    1. Node.js 开发必备基础知识;
    2. 使用 Node.js 构建 BFF 层;
    3. 一个完整项目的开发重构实战;
    4. 性能优化和工程化建设核心方法。

    更新频率

    1. 9月18日上线 1-8 讲,9月25日开始固定为每周三更新。
    2. 全部课程预计将于 12 月 11 日前更新完毕。

    如何在电脑端观看视频

    1. 用浏览器访问 https://time.geekbang.org ,登录极客时间账号;
    2. 然后在“讲堂”板块选择“视频课程”标签,点击相应的视频课程即可观看。

    订阅须知

    1. 本课程为视频课程,共55讲,订阅成功后即可通过“极客时间”App端、小程序端、Web端永久观看;
    2. 由于视频内容为虚拟商品,一经订阅,概不退款;
    3. 企业批量购买请点击“企业充值”了解详情,可支持员工选课,企业支付;
    4. 在课程学习过程中,如有任何问题,请邮件联系 service@geekbang.org。
    5. 戳此申请学生认证,订阅课程一律 5 折。
    `, + column_unit: '55讲', + sub_count: 2915, + update_frequency: '约550分钟', + column_price: 12900, + column_price_market: 12900, + articles: [ + { + id: 0, + is_video_preview: true, + article_title: '第一课', + }, + { + id: 1, + is_video_preview: false, + article_title: '第二课', + }, + { + id: 2, + is_video_preview: false, + article_title: '第三课', + }, + { + id: 3, + is_video_preview: false, + article_title: '第四课', + }, + ], + }, + { + id: 278, + type: 2, + column_cover: + 'https://static001.geekbang.org/resource/image/a0/19/a0ad97e899aa22023951bde5813e0819.jpg', + column_title: '移动端自动化测试实战', + column_subtitle: '一步一步带你成为测试高手', + author_name: '思寒', + author_intro: 'TesterHome 社区测试专家、霍格沃兹测试学院创始人', + column_intro: `

    课程背景

    随着行业的竞争加剧,互联网产品迭代的速度越来越快,QA 与测试工程师都需要在越来越短的测试周期内充分保证质量。 App 测试则面临着更多的挑战,比如多端发布、多版本发布、多机型发布等等,这导致了手工测试很难完全胜任,自动化测试、持续测试就成为了团队的必要需求。作为传统的测试工程师与研发工程师,需要适应行业的变化,并积极做出应对。

    学习自动化测试有两个难点,除了其本身拥有一定的技术门槛之外,实战经验才是学习自动化测试的最大难点。部分初中级测试工程师往往在掌握了基本的编程与自动化测试框架 API 后,会认为自己已经掌握了自动化测试,便开始投入到实际开发中,却又掉进各种各样的技术债和经验债里,痛苦不堪。

    因此,整个课程将分为基础篇、框架篇和实战篇三个阶段,十个章节,由浅入深地带大家掌握 app 自动化测试技能。通过学习这门课程,你将能够掌握正确的自动化测试方法、理解自动化测试的技术体系,可以解决工作中遇到的自动化测试难题,并能把这项技术熟练应用在自己公司的测试体系中。

    讲师简介

    思寒,TesterHome 社区测试专家,霍格沃兹测试学院创始人。

    先后任职于阿里巴巴、百度、雪球等公司,承担测试工程师、测试开发工程师、测试架构师等工作。

    2013年,移动互联网开始迅猛发展,催生了对 app 测试的需求,思寒老师与其团队决定物色一个优秀的移动测试框架,在进行大量调研之后,Appium 以其优秀的特性脱颖而出。思寒老师也开始投身于这个开源框架的建设中,积极参与 Appium 框架的中文翻译、向 Appium 提交测试用例与 pull request,同时也开始在历任的公司中将 Appium 用于公司内的移动测试,积累了非常多的落地经验。

    课程收获

    1. 系统掌握 Appium 自动化测试框架;
    2. 全面提升移动端自动化测试实战能力;
    3. 掌握自动遍历测试及兼容性测试技巧;
    4. 构建多设备管理平台与持续集成体系。

    更新频率

    1. 10月23日上线 1-9 讲,10月30日开始固定为每周三更新。
    2. 全部课程预计将于 2020 年 1 月 22 日前更新完毕。

    如何在电脑端观看视频

    1. 用浏览器访问 https://time.geekbang.org ,登录极客时间账号;
    2. 然后在“讲堂”板块选择“视频课程”标签,点击相应的视频课程即可观看。

    订阅须知

    1. 本课程为视频课程,共58讲,订阅成功后即可通过“极客时间”App端、小程序端、Web端永久观看;
    2. 由于视频内容为虚拟商品,一经订阅,概不退款;
    3. 企业批量购买请点击“企业充值”了解详情,可支持员工选课,企业支付;
    4. 在课程学习过程中,如有任何问题,请邮件联系 service@geekbang.org。
    5. 戳此申请学生认证,订阅课程一律 5 折。
    `, + column_unit: '55讲', + sub_count: 1471, + update_frequency: '约550分钟', + column_price: 9900, + column_price_market: 9900, + articles: [ + { + id: 0, + is_video_preview: true, + article_title: '第一课', + }, + { + id: 1, + is_video_preview: false, + article_title: '第二课', + }, + { + id: 2, + is_video_preview: false, + article_title: '第三课', + }, + { + id: 3, + is_video_preview: false, + article_title: '第四课', + }, + ], + }, + { + id: 211, + type: 1, + column_cover: + 'https://static001.geekbang.org/resource/image/b6/1a/b683240befccbdcaa86da8f382d3a11a.jpg', + column_subtitle: 'Facebook研发效率工作法', + column_title: '研发效率破局之道', + author_intro: '前Facebook内部工具团队Tech Lead', + author_name: '葛俊', + column_intro: `

    如果你问中国和美国互联网公司都有什么差别,很多人会回答:低效加班文化。最近爆出的996大讨论,正反映出国内很多公司拼工时的做法,以及程序员群体对这种做法的反感情绪。

    “拼工时”说到底是为提高产出,但国内互联网产业已经步入从野蛮生长到精耕细作的过渡期,人力成本逐渐提高,通过糙快猛打拼和996加班去抢占市场获得机会的成功案例越来越少。至此,只有提高效能才是出路。

    事实上,越来越多的公司意识到研发效能的重要性,很多百人研发规模的公司开始组建专门的效能团队,着手提高公司的整体效能。

    然而,因为软件开发的灵活性,导致研发效能的提高需要关注的点太多、可以使用的方法也很多,结果就是不知道从何处着手,或者是花了精力、加大了投入却看不到效果,甚至产出抵不上投入。

    • 整个研发过程环节很多,到底该从哪里下手?
    • 通过设置的度量标准来看,某个指标明显提高了,但却看不到总体效果,而且引发了团队抱怨以及团队间的矛盾。这到底是怎么回事?
    • 团队成员虽然执行力强,但是不愿意思考,应该创建怎样的公司文化来激发创新?

    在这个专栏中,葛俊将基于硅谷和国内多年的从业经验,从研发流程、工程方法、个人效能、管理和文化这四个方向入手,系统介绍研发效能的理论和实践,探讨协同、开发、测试、运维等关键研发步骤中高效的工程方法。

    葛俊,前 Facebook内部工具团队Tech Lead,开源项目Phabricator的主要作者之一。在互联网行业奋斗的15年里,他曾任职于微软、Facebook、华为,以及硅谷和国内的两家创业公司。

    在此期间,他在研发效能团队工作过,也在使用效能流程和工具的产品团队工作过,也有过主导推进研发效能的丰富经历。可以说,他目睹了硅谷以及国内的大型企业、创业公司推进研发效能的成功经验与失败经历,同时总结了一套适用的高效能引入方法,希望在这个专栏里和你一起学习、进步。

    专栏模块

    专栏共35讲,分为5个模块。

    1. 研发效能综述

    讲解研发效能的定义、模型,并着重介绍什么是度量,以及度量的正确使用方法。借此,希望你能够梳理出研发效能的主脉络,构建出一幅清晰的知识图谱。

    2. 研发流程

    与你分享敏捷、持续集成、持续交付、DevOps、团队协同等话题。通过这个模块,希望帮助你深入理解研发过程中的关键流程,以及流程优化的基本原则,从而能够针对实际情况找到最合适自己的工程实践,让软件开发的整个流程更加顺畅、高效。

    3. 工程方法

    与你讨论研发流程(包括开发、测试、运维等)中各关键步骤的高效工程方法,并分析软件开发的趋势和热点,比如智能化、云原生等。通过这个模块,希望能够加深你对这些工程方法的了解,帮助你找到针对具体环节提高效能的方法,以及学会如何正确地使用这些方法。

    4. 个人效能

    聚集探讨如何提高个人效能,具体涉及深度工作、Git、命令行、VIM、工具环境集成等内容,旨在帮助你提高技术专精程度,持续成长。每个开发人员都应该提高自己的效能,只有这样才能持续学习持续提高,避免被业务拖着跑的现象。

    5. 管理和文化

    系统分析硅谷尤其是Facebook的工程师文化,并根据国内公司的具体落地经验,给出推荐的文化引入和建设方法。

    限时福利

    1. 订阅后,分享专属海报,每邀请一位好友订阅有奖励。
    2. 戳此添加社群管理员,进入技术交流&福利群
    3. 戳此申请学生认证,订阅课程一律 5 折。

    订阅须知

    1. 本专栏为订阅专栏,更新时间为2019年8月23日至2019年11月13日。订阅成功后,即可通过“极客时间”App端、小程序端、Web端永久阅读。
    2. 本专栏更新时间为每周一、三、五,形式为图文 + 音频,共计35期,定价99元。
    3. 企业批量购买请点击“企业充值”了解详情,可支持员工选课,企业支付。
    4. 本专栏为虚拟商品,一经订阅,概不退款。
    5. 在专栏阅读过程中,如有任何问题,请邮件联系service@geekbang.org。
    `, + column_unit: '35讲', + sub_count: 3034, + update_frequency: '每周一 / 三 / 五更新', + column_price: 9900, + column_price_market: 9900, + articles: [ + { + id: 0, + is_video_preview: true, + article_title: '第一课', + }, + { + id: 1, + is_video_preview: false, + article_title: '第二课', + }, + { + id: 2, + is_video_preview: false, + article_title: '第三课', + }, + { + id: 3, + is_video_preview: false, + article_title: '第四课', + }, + ], + }, + { + id: 180, + type: 3, + column_cover: + 'https://static001.geekbang.org/resource/image/cc/fb/ccb3acf6fcfab959aee1d800b882f7fb.png', + column_subtitle: '程序员都应该学学怎么表达', + column_title: '如何做好一场技术演讲', + author_intro: '极客时间编辑部', + author_name: '极客时间', + column_intro: `

    内容简介

    程序员都应该学学怎么表达。

    据调查,75% 的人在公众场合演讲时会感到非常恐慌。但是,公众演讲是每个人都需要面对的“刁难”,无论是学生时期的课题总结、毕业答辩,还是工作之后的公司内部项目汇报、外部技术交流,这些场合都需要我们具备优秀的演讲能力,才能更好地向别人展示我们的工作成果,让优秀的技术方案广为传播。

    公众场合的演讲能力成为职场中越来越重要的一项基础技能。 谁知道,未来的某一天,会不会是你,站在新闻发布会的台上,向下面黑压压的人群宣布一款你公司的技术产品呢? 又或者,你作为一位技术大咖,在一场技术大会上向大家讲述你的技术棋局?

    就像编程一样,演讲能力也是可以习得的。正如天生口吃的德摩斯梯尼通过自己的不断苦练也能成为古希腊著名的演说家一样,成为一个优秀的技术演讲者,也是有径可循的。

    这里收录的 6 篇文章,包含多位技术大牛的演讲经验总结,从技术人员的角度来剖析做好一场技术演讲的术与道。

    内容目录

    本系列共 6 篇文章,前 5 篇文章沿着“内容准备—心态调节—陈述技巧—形象管理”依次展开,每篇文章的主题各有侧重点。最后一篇是综合性的经验阐述,和前五篇提到的几个关键点既相互对照,又加入了节奏掌控、回答问题的技巧等独创性内容。

    限时福利

    1. 订阅后,分享专属海报,每邀请一位好友订阅有奖励。
    2. 戳此添加社群管理员,进入技术交流&福利群
    ↵↵

    适宜人群

    想提升演讲能力,向公众有效传播自己的技术方案、理念和观点的人;想学习更多的内容布局、组织方法,让自己的演讲更生动、更形象的人;想了解如何在公众场合管理好自己的身体语言,打造良好的个人形象的人。

    购买须知

    1. 本系列共六篇文章,现已全部上线,购买成功后,即可通过“极客时间”App端、小程序端、Web端永久观看;
    2. 由于文字内容为虚拟商品,一经购买,概不退款;
    3. 在阅读过程中,如有任何问题,请邮件联系 service@geekbang.org。
    `, + column_unit: '6讲', + sub_count: 17209, + update_frequency: '约150分钟', + column_price: 100, + column_price_market: 100, + articles: [ + { + id: 0, + is_video_preview: true, + article_title: '第一课', + }, + { + id: 1, + is_video_preview: false, + article_title: '第二课', + }, + { + id: 2, + is_video_preview: false, + article_title: '第三课', + }, + { + id: 3, + is_video_preview: false, + article_title: '第四课', + }, + ], + }, + { + id: 198, + type: 1, + column_cover: + 'https://static001.geekbang.org/resource/image/7f/6d/7f9edc0620b7083074b21cc9036ffa6d.jpg', + column_subtitle: '基于DDD的微服务拆分与设计', + column_title: 'DDD实战课', + author_intro: '人保高级架构师', + author_name: '欧创新', + column_intro: `

    随着分布式技术的快速兴起,我们已经进入到了微服务架构时代。微服务架构的出现,很好地实现了应用之间的解耦,解决了单体应用扩展性和弹性伸缩能力不足的问题。随着业务的复杂度升级,其好处自然不言而喻。

    那微服务到底怎么拆分和设计才算合理,拆多小才叫微服务?这个尖锐的问题,在业内一直被热议。紧接着,继阿里巴巴成功转型中台战略之后,微服务设计和拆分再至风口浪尖,对于众多公司来说,都是一个不小的挑战。

    那有没有好的方法来指导微服务和中台的设计呢?当然有,你也可能耳闻过,那就是领域驱动设计(DDD)。

    • 你可能会疑惑,早在2003年就诞生的DDD,怎么来指导“迟到”近20年才大热的微服务设计?
    • 怎么认识和学习这个抽象又庞大的知识体系?
    • 怎么应用,怎么实践?
    • 落地后它究竟能解决旧系统的哪些问题?

    本专栏将重点解决以上问题,力求用浅显易懂的案例,深入DDD的核心知识体系与设计思想,带你掌握一套完整而系统的基于DDD的微服务拆分与设计方法,明确从战略设计到战术设计的微服务标准设计过程,助力落地边界清晰、可持续演进的微服务架构。

    你将获得

    • 洞悉DDD必知必会10大核心概念
    • 掌握事件风暴与领域建模
    • 上手中台业务建模与设计
    • 实战设计清晰的微服务架构

    作者简介

    欧创新,人保高级架构师,拥有十多年的软件架构经验。他热衷于采用DDD的设计方法实现中台业务建模,专注基于DDD的微服务设计和开发。目前,他正在深入探索传统企业中台数字化转型的技术和方法体系。

    课程设计

    专栏共21讲,分为基础篇、进阶篇和实战篇三部分。

    基础篇主要讲解DDD的核心知识体系,具体包括:领域、子域、限界上下文、实体、值对象、聚合和聚合根等概念。借助浅显易懂的案例,带你理解它们以及它们之间的合作、依赖关系。

    进阶篇主要讲解领域事件、DDD分层架构、几种常见的微服务架构模型以及中台设计思想等内容。带你深入微服务分层设计的底层原理与具体实现。

    实战篇作为本课程的重点,包含多个实战小项目,例如中台和领域建模的实战、微服务设计实战等。最后作者会用一个典型的案例将DDD所有的知识点串联,带你走一遍基于DDD的微服务设计全流程。

    另外,实战篇还补充有“如何借鉴微服务的设计思想来设计前端应用”“微服务设计原则”以及“分布式架构设计的关键注意事项”,以完善实战体系。

    限时福利

    1. 订阅后,分享专属海报,每邀请一位好友订阅有奖励。
    2. 戳此添加社群管理员,进入技术交流&福利群
    3. 戳此申请学生认证,订阅课程一律 5 折。
    ↵↵

    订阅须知

    1. 本专栏为订阅专栏,更新时间为2019年10月14日至2019年12月02日。订阅成功后,即可通过“极客时间”App端、小程序端、Web端永久阅读。
    2. 本专栏更新时间为每周一、三、五,形式为图文+音频,共计21期,定价68元。
    3. 企业批量购买请点击“企业充值”了解详情,可支持员工选课,企业支付。
    4. 本专栏为虚拟商品,一经订阅,概不退款。
    5. 在专栏阅读过程中,如有任何问题,请邮件联系service@geekbang.org。
    `, + column_unit: '21讲', + sub_count: 3878, + update_frequency: '每周一 / 三 / 五更新', + column_price: 5900, + column_price_market: 5900, + articles: [ + { + id: 0, + is_video_preview: false, + article_title: '第一课', + }, + ], + }, +] diff --git a/re/geekbang/routes/detail/index.ts b/re/geekbang/routes/detail/index.ts new file mode 100644 index 0000000..04a227d --- /dev/null +++ b/re/geekbang/routes/detail/index.ts @@ -0,0 +1,43 @@ +import koa, { Context } from 'koa' +// import mount from 'koa-mount' +import statics from 'koa-static' +import fs from 'fs' +import protobuf from 'protocol-buffers' +import engine from '../../lib/tplengine' +import rpcClient from '../../lib/rpcClient' + +const schema = protobuf( + fs.readFileSync(`${__dirname}/proto/detail.proto`, 'utf-8') +) +// rpc 服务器 +const rpc = rpcClient(4000, schema.ColumnRequest, schema.ColumnResponse) + +// 渲染引擎 +const tpl = engine(`${__dirname}/template/index.html`) + +const app = new koa() + +app.use(statics(__dirname + '/source/ ')) + +app.use(async (ctx) => { + const id = ctx.query.columnid + + if (!id || Array.isArray(id)) { + ctx.status = 400 + ctx.body = 'invalid columnid' + return + } + + const result = await new Promise((resolve, reject) => { + // 与data server通信,获取id对应数据 + rpc.write({ columnid: +id }, (err: Error, data: any) => { + err ? reject(err) : resolve(data) + }) + }) + + ctx.status = 200 + // 通过模板渲染数据 + ctx.body = tpl(result) +}) + +export default app diff --git a/re/geekbang/routes/detail/proto/detail.proto b/re/geekbang/routes/detail/proto/detail.proto new file mode 100644 index 0000000..b07c704 --- /dev/null +++ b/re/geekbang/routes/detail/proto/detail.proto @@ -0,0 +1,28 @@ +message Column { + required int32 id = 1; + required string column_cover = 2; + required string column_title = 3; + required string column_subtitle = 4; + required string author_name = 5; + required string author_intro = 6; + required string column_intro = 7; + required string column_unit = 8; + required uint32 sub_count = 9; + required string update_frequency = 10; + required uint32 column_price = 11; + optional uint32 column_price_market = 12; + repeated Article articles = 13; +} +message Article { + required uint32 id = 1; + required bool is_video_preview = 2; + required string article_title = 3; +} + +message ColumnResponse { + required Column column = 1; + repeated Column recommendColumns = 2; +} +message ColumnRequest { + required int32 columnid = 1; +} \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/0.7c3b3351c3cdfe36ae03.js b/re/geekbang/routes/detail/source/static/0.7c3b3351c3cdfe36ae03.js new file mode 100644 index 0000000..c895a23 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/0.7c3b3351c3cdfe36ae03.js @@ -0,0 +1,11 @@ +webpackJsonp([0],{1e3:function(t,e,i){var n=i(973);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("aeedd1d8",n,!0,{})},1002:function(t,e,i){var n=i(975);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("073cf370",n,!0,{})},1005:function(t,e,i){var n=i(978);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("5c6dfc08",n,!0,{})},1007:function(t,e,i){var n=i(980);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("6744a39b",n,!0,{})},1009:function(t,e,i){var n=i(982);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("79ea3320",n,!0,{})},1010:function(t,e,i){var n=i(983);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("04434dd2",n,!0,{})},1013:function(t,e,i){var n=i(986);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("3d9229de",n,!0,{})},1015:function(t,e,i){var n=i(988);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("21492ef8",n,!0,{})},1019:function(t,e,i){var n=i(992);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("78effd66",n,!0,{})},1041:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABP0lEQVQ4T43TQUrDQBQG4PdXZaqQi3gEV3bhSvMvBKuIolREvIOgp3CjIBTEErRtEsxGIRfoNdoDZDcQExlIYdpO2mYVZub/3hteArGeKIqORKQnIn3P8zqtViu3913vsBfDMHwC8GjWyrKMtNbH7Xb7bxkyAwRBsKGU6gNghXxqrc+WITOACaVpupll2ZeNkDwFUKy8wvSAA3kneQmgnEcWOqhDROTN9/2beaQWcF3HICQ7dhdLARcC4Mr3/e4UWQmMRqOt8Xg8AHBYhW5Jvq4FmPBkMvkWkYNqrAOt9Yk91toOkiRReZ7HVrintb6Y/yacQBAE281mMxGR/apyj+T5WmM0YaXUL4C9Ktwlee0Km/2ZDuI43imK4mfd8AIQhuE9gOeq8gvJu7rKzikMh8PdRqPxISIxyYdVv7LZ/weqI6ERwVNb5gAAAABJRU5ErkJggg=="},1042:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAABlUlEQVQ4T7WUv0sbcRjGn+fuGtJBgtDZwcGpY/FHmkEXbRc3IQ3egRrr0P9AxGoduombRO60TQiUZiiKkMGxkCgGHHRzLDgInSI2er08csWWtl7scn3Hl4cP3+d93vfLumuvdl21Fh+/qlzgnqq5zloiSM4/mdu47CRjzbOPAVoWzdH+6a0vnYR11z4V0WrDH8vMfDiL0rHu2gsgVwB8bRvB86dT5cMoYd21V0AuCDqH+CydLx79rWPYqHmTDmW4oCRhMp0vVSKBnj0rYB2gbxDZweni9u+6H7Cw9j070xZ2SHZLepvOl+ajgPueMyLpE8gUgOWhmeLST90vWNg43Mz1+jL3CPZK2k4ED3NRAz/YcPoCQ3skeyRVrkzTGZl61/oDFgI/l3PdVsvcAZgRdNJp4I3Ci0e+Ze0CHJBwZCSD4TuwENgovHxwbX1zCTqU3gzmS6+jLJ98nEg0m8n3ALOQxv8vrFGYSPlWMnz+vTZvx1HtaDMM4HvbqoLo+2cApqq3Qd0NILbViG1pYz2nuA89ti/oBt+wE+SqS1akAAAAAElFTkSuQmCC"},1043:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAA2CAYAAAC8yXv8AAAEoElEQVRoQ+2aXYgbVRTH/2cy2boWra1FdulmMzfZGF1xlboI6osUHwSt1G19UCtaoYhPvih+oq2gXfog+iBCBT/QB4WqVbAFEXwpVPxARaqs2cyd2V3TRVexYulukrlX7pro7O1MksmnDzlPYXI+fjk5c+fcc4fQoszPz2/yPG+HEGKbYRhXSSkZgPXKLRH9JaW0AXwD4DMAHzLG/mglJDVr7LruFUKIJwDcASDeoJ8igHeIaNqyrB8btFmjFhl4cXFx/fLy8rSU8kEAsWaCAvCklC/F4/GnEonE2Sg+IgHn8/lLDcP4CEA2SpAauicNw7gtmUyqsmlIGgZ2XfcaIcQnADbV8fw7gFOqhAEMA9hYR/8XIcRN6XT6+0aIGwKenZ0dM03zhJRyc4jTL6WUr3qedyyTySz4dXK53IhpmrcC2Atga4j9KSnldalUyq0HXRc4l8utM03zCwATAc4KqpZTqZQqk7pi2/YuInoZwCW6MhF9tbS0dP3k5GSplqO6wJzz/QCeDnDyebFY3J7NZpfqkvoUOOdDAD4OyjYRPWlZ1vNNAzuOM1xZR8/TnHwrhLgxnU6fjgJb1c3n8xsMwzgB4HLN/kyxWLRqJaFmhm3bfo6I1Frrl7OxWOzK0dHRfDOwVRvbtrNE9B2AdZqffYwx9a8GSiiwlJIcx5kHsEWz3M8Y29cKbNU2pNw4YywVGdi27YlKBvy2RdM0hxOJhFq6WpaZmZnNAwMDPwMY8DsjovGwJ2Fohm3b3ktEhzSqo4yxW1omXXsTHgNws+ZzD2PsjaA4ocCO4xyUUj6iGT3DGHu2zcBqBdJrdpox9ngkYM75awD2aEb3M8ZebzPwfQB0n4cYYw9EBVZ/yb1abe20LOv9NgPvAPCB5vNNxpj6IedIaElwzs8BBnA7Y+xIH7if4f9qoF8SnPPmb7rKjmJnZUexDUBCu8FUm6ma83aKavKv1RyqluBTADOxWOywv29ZXSVUzxuLxV4gIrVPq9tytpO2AV8eEb1SKpUezmQyK1Rpcg4DmGrAuJcqRyzLmiLbtncT0Vu9JIkQ+y4FfJyIbohg1DNVIjpOnPNlvYkmot1SypM9I/sn8NUBPcaKApYa2GnG2EU9hl0Nzzn/E8AFa/qZ/zmwmsNt6AP7M5DL5S6Mx+O71DXP895rdmddKYnOZrhQKJy/srLyNYDLKj/ip8HBwa1DQ0NnmrknOOedBQ7qC4hoyrIsvUFviL8bwEHbndANZT3qPrCeIc55P8MdXYf7Ge7Cstav4X4N+5c2x3HullK+7b8mpbwnlUqtuVbvgVH9vuMPjrm5ubTneeqEs3oyWvI8b3xsbGy2UUi/XseBKx2WmvU+qj4T0UHLstT8tynpCnBTZCFGfeB2ZjPIV1iGhTbtKcXj8eGRkZHfOg1Uy//CwsLF5XJ5UUpp+vSE2jWrk3T1UoZffgVQ6CUwEW0JONvmCvgAgMd6CRch9gFyXXejEEKdSOqTygh+uqKqJpoTq5NK13XHhRBHASS7Ejp6ENswjO3JZPKHf0erlQPrhwDcCSDTwusx0XGCLTw1HwbwbrlcfjGTyagpEP4GG9SM8nedrMQAAAAASUVORK5CYII="},1044:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAYAAAAcaxDBAAAPX0lEQVR4Xu1de5gU1ZX/nds9AwwPcTWuiRrhU8J0NUh4+IwaEaSrQUx0XSSCm91v9YtERIXpGsCsTvzcMF3DIwYlZk12jW6MEqPZVehqRMBP4kYkoEBXT9YXrmsCWdjFQQaG6aqz3+2pHnp6ZuhXVQ+Q3L9mus4999xf3ed5FeEEKMnYkmEM/1iAgyCMAHgYQJ8j4AwGBgAYDOAogM+YcUAQHWTYnwK0G4x3AUoQUtsD4UW7+7o71BcCNK+LfsG2MYkgJjL4WgDnO3LYAP4bwEcAfg9gH0CfHZORB4FpEAEDmfgvnXrnAPA5NB8xsJHAG4TAq7VT6iWPipaKAbrj5SWnV/nFLJtpJhEuByAA7GdgEwEbbRZbjqQ+S0yY3tBaDAJbX2qo6e8fFBSwLoagy4lxDQPnAmBmvCGIn21P2T+76PpF/1cM31JpPQc0uaZxtO0T84lwCxgDQNgJG6ttH14OvtG6gxoa5Kh0tcg2WYivQWAGGKNBOMyM54RlLw9MW7jT1cZymHkGaDK+dDyz3QBgGghHCHgKEE8EQnW/9bJDubylHIB9BzNuQ3o95rVEvge9ksN1QHe90vhFYYlGADPlJgLQqnbC8jGhyB8rCWRuW+/Em86qYswH+NsABgF41vbZC0ddt/C/3JTLNUA3bmzwn9024B4GPQTAD9AKhk8PqvP/102By+WVMJb/BciqI+YFAFIEfmBPv8OPTJzYkCqXt6zvCqAJY8mFBN/PAFxCjA1CiLtGhuqa3RDQKx6/iy+ttdh+FMAkAFsgMFuZor1bbntlA5qINc0mwg8BtpnprmA48q/lClXJ+ol4dBYxrQSoihlzypW/ZEB59Wpf82kfLmemeWBsZbK+EVQXvVdJMNxqa2d82Xk+tuQMu4oYK2sPDruPZsywSuFfEqAfbmzof/hozTNg3AjgsSq7/4IRU+e1lSLAiVJn69YfVQ3cf2BpeoAQXhxQ3Xrr8IkNR4qVr2hAt29cMbTf0fZfgXElmOcp4fpVxTZ6ItObcX0OGCtB2NxWXfX1sRPvO1CMvEUBKm87fr9vAwAFTDOVcOTFYho7WWjNWNONIH4WgJlKWdcWc8sqGND3X2k8rc0ScQBjAbpJUSNrThaASpEzYegqAf8GYHs/nx264LqFnxbCpyBA0xvQkN0vMDCdiW8LhurlAn7KF2ek/gJALNAy7OuFbFQFAZqMRx+RizUTIsGQtvSURzKrg86auoqIfxAI1d+Tr+95ATWN6G0APQXgEUXV7s3H8FR8bhr69wFIML+pqJrEotdyXECTa5Z9iX3WNoC22y2HJo2a0SCVvH9yZdfqhmoxpGY9gHFk+cYFpi34z95A6BVQZ938DwYutH32l91WImQEao43DbdtnsWEawm4CMAZzrMWAPL6uolt37PBqQu29+WbdA7/7xDwXm3LsMt7W097BdQ09LsAPEqgWQE18ozbnUkLiJQOplsK0ikQXmPLd19fApuM6d9gwjMEvjug1ks9QLfSI6C71uhnCx+SAP9aUeuvdxtMM67fAqYfAyzVaMUUiwjfqZ0SiRIRF1PRLVrT0F8CcKVtITBqmrYnl2+PgJpx/WkwbhZESm0o8qFbwkg+mZGfw1Oqzl4jwnrY+IgFbDB9Xt6tAVYB1OTQPx4IRb7dF6CmlyhmE4TnlZAmldZdSjdATUMfB0hlBzUGQ5HFboKZNPS/YuD5bJ4E+heG/35Fve8PPbXVcaGgBQAtBFCVoSGihkAo8l035SuUV9LQ/5GBRUTi4lzNfw+ARl8G6GqGf5ibyuHfvbT8HKsqZQIY4gjezqDZQTWyupCOmGujl0GQnG5nOvS2ELi6dor260Lqu0njXME/AuF1JaRN6zpAsv7btU7/srAhj0m6okbkiHCtmLGmJ0H8zU6GhJlKSHuumAYcO9VmAP076vH2QEgb3xdT3zSaGgHWbIFxo6Zob3fOnOwOmYb+UxD+2vK1Dx89+f69xXT2eLTOkUOuxWn7OQNPBlXt70rhbxq6PGDLg3a6kEAoMEVbVwqvcuqkbVRg6WjxC0XVOgdK55RPD+Mq3ydgPKmomjRkuVYScb2OGE0Ow5QQfH6pTghpveW+Tz9wbO8S0qcVNfI3rglbBCPT0FeB8LepduucjEaqE9Cs3Xe8omrbiuCbl9Q09FcATHYIX1FUbUpPlaTTQk3VgMUA3QxgKMBbhUBD7ZT6rdn0CUNfSoA0ssmyV1G1s/MK4QGBs4H/Nvtc2gloIqZvJoEhSkiTtxVXi2nocgdPd5rAdQG1flluA/J6R4NrNhDhKznPjjDRNcFQ5M3M78l1+hS2IVWJ6UL+1JmByYv3uyp0gczMuL6DbbQEw9qVHf0D4OzAH4PxgBLWHi6QV8FkpqF3HsIZdEtPO3vSaLqDwf/UC9PXFVW7OvOsORYdaRN1WlUF05jacGRHwQK5SGjG9O+A8JAQfK5cxtKAmoZ+O4AnyLIv8sJVpQugJKYGQ3Wx3D6ZRvQ5gGb00lduPfO0fhMmfKtdPv949fIBB4ekDh7b5KwRfWUgTLv9+IR8mXcoqvbjNKAJQ39eAJcGVO08F19eJyvT0A9njjpM+PtgSPvnboDG9U1gfLW39tv6VZ2ebd9JGtG5DJpDwK8Cqna/F3IXytM0dOn191ZQ1W7OjNA/gLC+p6tUoUyPR5c0mt5m8BiH5nFF1eaUC6gbcrnFwzSangL4OkXVPk871+oX+ATeY6Y7g+HIj9xqJJuPaeg/BHBnxw6CT/ZWtw7LdX0xixyhXshZKs9ErOlbRPy4ZeNCcuwmL9jgS0ep9VtKZXq8eolYdBIRSQVtR2G6XQlHftIF9DyAMvNkCFIE0MYpEVem1Umn3BOi7IotvViQvQVMN5FpNP0DwA+2trcOKdbZtdDecEODSF5WI+/xI506ey1/+5js21i+EZrT1lEi3B0Iab2dCgoVzRW6Y5skfZfS103gGkXVMm7ZrjTSbY3ssHW/cOx32hz4zaGvZhxuiwRUsrHZ9k0QZPdn4hEksGdPVesGt7zoigVBbkzSukAdHWFS1Pped9himfdGbxq6dB6QGvp0kWvO6Kna+/LvEgCV1aT7eLau1PT7relfmrzoA7dkLpSPaURfAxFTwtCTgrAzENJ6OwMWyjMv3TvxpoFV4PVgXAZg295+rZdmRlSJgPbQJm8f0O/wFW3tNeNtm4b62n1vj5w+/5O8wpVJ4Jyjx8gpLz2LVyuqNrdMngVVl465Z7X1H1lt17yX7WDmHqBpMeQ1NGPss8F4JKBGFnip5jMNXdqYZkhAW5jxWDCsLSoIEY+IXAa0u5SE+UpIW+GR+EjE9CVENFcCKsNPGk91QJnxQTCsXeAZoPGm7xHzIgloGzOWVwrQd9ZGz61mf82emoMfZO/Ino9Q6TKoank9ZUoFPJEF6D5mPOE1oAlDv4ogXccRdIQ+ILU0mWl40gOaNeWlaWKNl5tSwmgMEom30oFf3QpFpf3qZAf02KYU13cQ0Ozlsck0mn4J8E29TyeKgviy42mbSp2K2fW8nPLZx6aNAAsvD/amocsA2IF5QJG6zk67uxsA5vLwGNCOg30lrp6mocuIChks26fFW0AzV09HOTK4xT/4vBnzpSLY9WIa+htAOgK5T4tXgHZVjjhKCy/Vd8l44xXMYpPXUzrf2/IK0C7qu0oomGVHd8WiNwgi6dfk6Tp5PFC9ArSLglkKkDbzemgCyXSyr0H1CtAuJhDZWWmkI+ASRdW+mG/alPu8L0H1DtDuRjpPzci5L6GPQD2gqNrp5Q6I3Po9mpG9dnToqROVBpWB5qCqBdwGNGHoiwl4uIujQ3raS1ccwmBF1TLmXrfb7savwqD26lNVTkd7dMWRDB3HgZVs+8ZVMjCgYqAyVihhbX454OXWTaxdNpaEtY0J84IhbaV8XhF3xnydqASoRHRDIBSRHtCuleO6MzrHp7TDbTtoWKWTrngM6r4B/VrPKyX+vTf08zrcpg/fHrqEFzIskrHoTUwkg1VdvfcT8+JAuH5JITIUStNh8kA9277x2Utk96CFuL4GjKtSKev8YuLECxUkH52TA+TJjsw6rpQtdkvrVW6GVRYctOBM+3RYDQFL+sqrrXmd/hXbhowO+UKZkL5ZZaemj5i6+H/K5NOlumlEHwZocUFhNWlQPQz8KrRjMr8SISWdf+Wlo9j7vzQj661nnrYi41NaaLv56NKZJMmXJMYvA2Ftdi59ntBEbFZUbXq+Rrx8/u7a730u5fPfyIxrQBgFhoywy8QqyaZTIOxlG7sFsM0merXa7md4lVSmpNDE7HMpMW4NhLWfewnaycLbjDXNBPHPiw6elR3MDu+2yDdmdGjBxydLx72Qs+zw7vQo7UxAgG12S+tkN3dKLzrtFU8ZG1Wz78B6gMaXnIAgI5xp6DKoSro8/jlFRrkpMjKgJmP6D5hwNzEtCIQjy70aCSci384kLoyVgbA2L5+MBbmmyPXUHLz7RSJc/6eZZoiNQMvwr7mWZki+lexEWMT2DYHwws5Itnxv7WR8now1hpjEv3uSCCsDyJ9TteUfGgVN+Ww2XZIJEu5WQpp0ADtlSsKI3kmgRyuSTDCDWna6S5lx69AZQ+vcvuJV+g11HI0+lSHo91Q03WWmo+mD/+DdK+TuD+B1i3yzTtbDf58nZM0ePU4qNzntjxJorhc5nrwcrU4upscAVAM8R1Hrny6nvaLX0J4ac25UUpBLALzqIzH3RE9q7YSISyAnEfAWLN/s46VgKxRkVwCVjaWjO47W3EvAQ2D4mGhZf2FFC827WajA5dLJ499RS2gM1IFgMfDAH6tbv+9WwJhrgGY6mvNhgANgLGfyr3IzZVEpoKb1q2TNAbO0fEqHhxP7wwC5nWxeF51g22gASOY1OgSin4L5J27nM8kHbtrU67NvB6dTHA0EYa0gfjA3j0k+PoU+d32E5jacNvxZdC8Eyw+ddHxcBfSczdbLwd8c2enZx1X8vhsAlh90GQ1AZvtebQusyM6xVChIxdB5DmhGGDnlBNpvdT7/c4XjE7CPmDYx8SYh+M3P2g6bxUZES2fXQ0Pbg5YlxpPgK3v6/I+NqmcqteRUDNDst+z4UoWJKcTEMptMJk2QdB3/BDLBFOH3YNovP1DFMjRNFqJBIj1teRBzuo6MoM7+QNUeYtrMxHFfuz9WiRjP3NHbJ4B2W2/jTcPZtscyiSDAF8pPqDHoLPkJNSfYIRNxLKOPDzGwnwBpyfyQgPfBvIuE2O52JslipnqG9v8BuZkudolAsY8AAAAASUVORK5CYII="},1045:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAACoCAYAAAB9oAXOAAAf0klEQVR4Xu19C5hT1bn2++2dzMBQLhXqrcc6FhWSAdHWUrTqEQWSDPqf1gvH04vH2mOterQ6kASwPZ3z1yNMglJpba32Yr2cv4fWSxVJAire6u1YWxkmQVFBq9WWojDIwEyS/f3Pt7MzhGFmcpk9yU5mf88zzwMze631fe96s7L2Wt+FYMugCGzY0Oo4fF/9PwCORo20Ywg4BoQjwTQRgP5DwDgGxhgdfQyAE0AaQKfxu70s/2bsUAg7ANqhEd5XwNsYvJVZ28qd3W9PW9DaY0/H4AiQDdB+BLasXTUu5dg3i9M8A6RMB7RpADUBqCsDTikArwFoZ2CjQtjoSKdeOK556fYyjF01Q4xowm5Ze+MnUopzLhO+QIwvMHgaALWI2esCZMXUf9IA7wEod5V0ABgLQHCeCMiqzLICFyMJAM8x+JmUhvUzmoPvFNO41p4dUYRlZoqvWzGTWJtPIC8DnwWgDDKpOwHaBPBmYn4ToG3y08Panw/5yLnjqAUte4slxJa1q+rTjr0TU2n1kwStkcCNIDoGwPEAZgCYNGifhHaAogxE3buOfpIWLJCtx4iRmieskLQjFvocgRYQsADAUQPM7m4ALzDwLIFeRJo2uecveqvcTNj0SOhwxcHTAWUmWDsFoFMAHDKAHrJduE8Br57SecxTI4G8NUvYzevajtRY+TqYvw5gcj8T3kOMZxgcJUV9/P26j16ZPbtV9pGWEv1bIdbmVkCzmcgHxpkAGvpR8i8A3Z3W+I7pzYE3LGWEicrUFGFlchPRsI8IlzMwv5/96C6AHgJp92t1ex+dNrv1IxOxLEtXWze0jtqXbDiDNXwJwPkAPtFnYGbgCSL89K91XfdZ8UM4FKBqgrAyiXv3jfkKiFsAuPsAso+B+wFaXafVR49rvqZ7KIBZqS2vXq3Gx249k4guAnAhgPF99HuLCT+qS4+6/bjma7JHbFYyoWhdqpqwr8TCY5zMVxGwkIFDD7Ce9OOhO8COe5u8LR8UjUyVNdi0ofVj6r6GC5jwTQCy782VTia6VVGTN7nmLJUTjaqVqiTsn1ffPHr3+NS3iLG4D1E1gB5UFL556rzA76t2VoaoeOKR5dNZUReC+F/6nCF3MvCDnnrnypNmX7dziMNUpHlVEZZbW5X4KQ2XEOP7AI7sRYywF4w7Gembm7xLXq8IkhYcNB5deQQh+e8MXAlgQo6KOwl8Q7pz7w+r7XataggbX9s2CwrdAmBmDvA9DLpdVbRlU+cF/2JBzlhCpY1rln3c4VRbwPi2cZFh6EWvE/F1Lk9gjSUULUAJyxP21YdXTEo7+WaAv2rcGIlZGoA706S2Tvcs/HMBdtqPABAsU05tMQFXH7hV4EeItX93+ZZsszpQliZsRyT8VSIh6wFHN0+wprY0NS/8o9XBtap+HdFlxxKpIbB+NJZdbeWI77uuzqN/aOULCEsSVvZeQM/PAfL1wgm8A+Zvu3zB+61KhGrTKxEJn8nEPwbgytH9RYX54qm+4KtWtMdyhI3H2r4Ipjty7tTl6/8nTm3U0lo5S7QSETatbq2jsaOXEtGSnG1CFzO1NPn8P7WSrqKLZQj70sOtDQ3O0T8A6LIckF4l0i51eRY/azXgak2fTWtXuBVV+zkYs3K+1R5Skso3ppy76O9WsdcShJU9lQLHbxks3kq6yNXinp6ulpPPbRUXPlvKgIA4qx/a3fBdApYCENdIkbcVhc+fOi/4UhlUyDtExQmbiIXPZea7cs4JtxPh0mo6asmLcpU9YBwh3pPjNNRNoKtdXr9s1SoqFSOs7qgSW/EdgP+zd2tCeF7tcVww5dyWdyuKij04/rhh5YS6fcm7iHDufjj4jq5JE646+eTLk5WCqCKEFSfmpLLvlwDk6jArt2qdXS3VdvNSqYkrx7j6orJuxVKwvqhkIzEe6653XlCpq92yE1Y+ufXdyQcA3a9TpIfB32ryBoXAtlgQgY7YCh+x9j85t2Sb0qQ2V+LSpqyEfSUWPtTJWhSgk4x5+VABnz/VG9xgwXmyVcpBQHeoURW5wv2U8eu3oGCue15gSzmBKhthX1nb9g8OhdYTMNUwcKtKSvMUz6LN5TTYHqt0BPQoDo0eQiYWTuR9SmvzXPMXt5fea3Ety0LY1x5d9ulUSn0MQKOhXgJwnu32XvdeceraT1cagc2/axvLdfQgE84ydPlAUdhTrmOvYSesrKxOhZ6CJKDIyMtqUvFY6TC60iSotvGNl+bfAjgnS1pKa2eWY6UdVsIae9anAZIQZpHn6lXNN3nu4l3VNkm2vgciIFe6yviGX+c40GxXSTljuLd4w0bYN9YvH9+tKU+DMT27star2lk2WWuH+jppx41+MOukRMA7nFZOG87w+GEhrBiijm2I9O5zCO3OdOpsO+1O7ZA1a4n4gIxxNDycO9f1inb6cC1MphNWDps3R8N3M+ErGaPo9bSj57Tpc67/a+1Nl22RIGAEg8pL9ef1GWc8nt7d5RuOSyDTCRuPhb4PxneMqfyQkZ5px1nVPrElT1lScT4L8LGZdQr3uD2Br5ltuamETUTazmMieXuUfnskU0mTx/+42Urb/VkTAT2SAap4dWXyIxBa3J7ASjO1NY2wr8ZWTE2z9gKAcRkF+WK3N3i3mcrafVkfgY5Y+CxijhnuiSnSMMfVHHjSLM1NIawcJqfr6cWcW6xb3N7AtWYpafdTXQjEo+FrAc6urNvVpOMkszzwTCFsPBr6FYCLjZX1qa5JE+ZU0gWtuqa3NrXtiIbuJeDLhnVPuDob55gR3DhkwiYioX9hwn8bir2fJJoxw+P/W21Og21VoQhkQp4aXgQgGcxBzEtdvuCyQtsP9NyQCJuILGtkUiXcWrKKMLHmc/kWy/7FFhsBbI6ET9CI5b1mFICkBj5tmjcoJC5ZSiZsJm9p+DECZmfesbDS7QtI9kBbbAR6EeiIhK8hYsnYI7JlbKdjRimZy7MdlkzYRDR8GYNvNzra6NRGzaylVJY258xBQL9IioXXMuDNrGu4qckbWFRq7yUR1vCLjBvnbSkiZZbLs+gPpSpht6ttBNpjNx2lcrrDiFiQmgwz3d7Ay6VYXRJh49HwfQCfp39iGMubfAFJwmCLjcCACMSjoasA/Mh44A+u57tmUmurJEkpSoombEek7WwietQY5Y2xnY7pQ9mTFKWt/XDVIiCpUhOzxjwJ8GmGEZe5vYGfFWtQUYSVRAuHdTfIqYDUs5LDinPcXv8jxQ5qPz8yEdi0LnSiokGubiUCd3t3vfP4YqNviyJsRyx0NTFWZTbPFGvy+vWNtC02AoUiEI+GJPncFRkOFf8CVjBh5fpVqycppyNVS5IqKScMt3d5oSDYz1UPApl8v5pE2srZfQ9xekoxeWkLJmw8Fr4ezDcYq+uPmrx+SYpri41A0Qgkom0LGbTCaPgLtzfwjUI7KYiwespxhyqr68cBdAHOY+2I10Ihtp/ri4BeVGVcSmpRSJ2KFBS4C81vUBBhO6Kh/yTgPzLvWRR2e/wBexpsBIaCQDzSdiWIbtUpxbjX5QtISYC8kpewUv9J6W6QOgITAPpITdIxdoh2XlztB/IgkAlgbJAs35KrIqWp2uRpcxe/nQ+4vIQ98GSg+Le6fArYfx+5CORyi4hXuTxBqXIzqAxKWOPcVfaukk+p4E9BvkHtv9sICALGt7dUTD9Evr276x1H5TuXHZSwHZHQhURYnYGX7nZ7/YaTdmUBl1uTzbPGXCRJHJhYPkzZVJCVVczioxPwrsa0lnfv+eVwRLSWYn6foNWg2xsIDdbPoISNR0PrAcyRDlhTP2OFUkNG3a4Hcq74SsFppLdJKETzp3r8WysNRKZiUFLqg9VJSgCXZ9HxRMQD6TUgYY0EbnL0QCA87/YE+hbcrYituR+iiihQI4MysLlOG3WiFVxCO6Kh3xJwvr4wMs9p8gUlx0G/MiBhOyKhZURYrHcCvtQKCYcTkeUeJiVaI5ypuBkMvqLJG7yt0ook1oXmsYZMpArxr92eYG5m9gPU65ewGc8a/ShLDnZ3a/VdR06b3SqV8ioqiUhoFZNedtIWcxBY4/YGcmoYmNNpsb0YfJNvc8lw2d1d7zx8oJevfgkbj604A6xlYsmZfuX2+S8pVonheD4eC91/YLnJ4RhlRPX5J7c3kM2GXlHDcy+niPF1ly9wZ38K9U/YHI8aMOa7fYG1FbXGGDwebVsD0Hwr6FITOhDa3Z7ACVawpX19m0tNk0SxSNqgqMsb6C3bmqvfQYSVs9fDuxveZeBQADu6Jo0/wio5BmzCmkwtCxFWLIvHQhuN9KxJNakc2d+N6kGEPWA7AL7D7Q1+02SYSu7OJmzJ0PXf0HKE3e8RSMSXuDxBSdBygBxE2NzTAatFFNiErW3CGpVqNurbAsJvXJ7AgryEzVmWu5NEE2d4/HtMhqnk7mzClgxdVayw+rYgGpKrWrm9/MDV2Xho3/RGB6ywRvj2O/q+l7HO7Qt4TIZoSN3ZhB0SfAc3ttiWwCCs1LP9N/m3xtrp03yLnxnwpSsebfsaQFKoWORatzeQzdhhMlKldWcTtjTcBmxlRcJGwl8C8f36tgD4nssb+L8DEjYRC93GjMuNBz5barIDk2Ht7c4mrMnIWpCwRsyXJBOUb//1bm9g3iArbGhTJtscfeTqPHqCGekRzYTYJqyZaOqUsMw5bK5l8WhIzmNdcsvq6mz8eC4Pe/ewHdGbDyGktgNQ+mO2yVCV1F08Gvo1gAM+cSV1ZDfSEWBGvMkXyCa2sAwq8Wiodx8rZUJzv+l7CRuPtc0F0zp970DU6vL4peS4LTYCZUcgEQldwgS9ujsRLnd5Atmkg/o+QZd4pM0PIt15VmP+p2m+oBTBtcVGoOwIGBliJMOQyE/c3sCVWSX2EzYavgtgvUyNQvRpKzj3lh0pe0BLIGDUst0NwAnQM26v//SDCJuIhv/E4Bn6RtfjHz+Y17clrLKVqGkEci6wdrm9AckSo4u+whr+iHszYQp4zu0NnFrTaNjGWR6B3KIeSY2PmtEclAutDGGNEvHisD1sFezMQCgeDf0AgOXeas2wrUJ9vO72Bi6q0NiDDpsbnJh746UTdlNk+WkKKU9neuDvu73BTJYXi4l9DmvyhFj0HFas7Ii2fZ1Av9AZyfS1Jp//nt4VNh4NSfi27so1mLe3yXAV3Z1N2KIhG7yBhQmbiITPZOINBkl7r2j1FTYeCX0HhO/LvxXwWVO9Qf1Bq4lNWJNnxMKE3RwLH6Mxv2lY3JvhMEPYzN5QTxOTVtk9fW4wYTI0pnRnE9YUGPd3YmHCGhkOuwxlf+f2Br7YuyVIREL3MOEr8osk0WFWrWRoE3bkEFZfSGOhLjBGA/Ss2+v/wv49bCQUA2Xu6P9a3+WcPbs1ZTI0pnRnE9YUGKtihTW++bPO3K+6vYGpuYT9XxBOFi9vtzcw0WRYTOvOJqxpUGY6svCWwCCs1H77DIC/u70BKVWQOYfNced62+0NHG0yLKZ1ZxPWNCirhLDhp40cavvc3sDoXMJml16bsCZzwtLdWXyF7YiGHs/WMnZ7A/riml1hM4S1uAFDXGH/QExbofCAmfHykYuZjgBYkuLVRnrPKprvsZ2OBilgmCXsB3rBjSoyIB+5cv6eJuYFLl9QjxMaqiRiy09lViIAxg21r4q3t/x8hx4GcI7gVK9qEybPXbyr9glLeMDtCeh1cc2SeDTUBqD6C5NUMWFrdktQSrW9fMRORMOXMbjXCz7f85b9u+UJuz+XWt8tQe2+dBHaXbsaTzIzoLIjEnqICBVPUznkD4LFCTvYS1c2SrEmTwkYuA/QvpdO8V+GMsl1TscEjVmusPNWOxnKOGVra3HCxqMDHWtFQvbFQdlYYqGBLE/Y0AAXB/bVrIVYVEZVrE9YY6vKr7m9wSm957C280sZSWKloaxO2AGdX2z3QivRqHy6WJiwg7oX2g7c5eOIpUayMGHzOXDXdogM4XkC/gtQ3iuUMJqmfZoIkv1GcjzVpliYsIOGyNRyECIz3tyb6pp+8rmtWe/1gsn3Six8qJNZKk73xsUX3LgaHrQ0YfenKwL4Yrc3eHfvS1f1hHmXVEXmFrc3cG2p/IlHw/cBbOrVbqm6mN7OwoQdNMy7WhJplOStRbjH7QnoKZhKkXi07UmAziilreXbWJiwgybSEGCrIVVRSYQF9hHTWS6f/7liCbQp1naBwiTVzActIl1sv5Z53sKEHTRVkQAYr4JkcCUSVszrIaaHWMFWMLR8hGGwgwguMKS4WW2SNbMhtGRC402rW+uUcQ1SKnbgZHDVkG5zCITNx9GR+XerEnZd6ERFQ550m1WQ0NgmrMmfK4sStqCExkbK+L8PVAzBZKhK6s4mbEmwDdzIooSNR9tuB+gyQ/H+U8Zn9rHZohwHF0MwGaqSurMJWxJsVUjYbFGOg4vDHPBCYZc9MpkQVu/Ogits4tEbJ3LKIcVhCil7ZBeWszrHTNXPgoSNF1NY7tWHb/5k2pnSMx3bpTtNpYY1O7MiYXP2r3lLd+r72P0167u7kl2HlHIHP1yzY+9hTUbWkoTtLY6809XZOGnQ4sgCh11+3mRSWLk7ixG2pPLzibWhf2QFT2Rw5jvc3uA3rYK5vcKaPBMWI2w8Fr4ezDeIlUR8icsT1LPC58pB144bNrQ6DutukOhSyRa3o2vS+CNOPvnypMlQldSdTdiSYKuaY614NPQKgBMApNSkcsSUcxfJvcDghNX3sdHQjwFcoa+xpDQ3eRZJap6Ki01Yk6fAQits+/o2l5omSTcABsWavH5vf9b269iR6+0Npl+5ff5LTIaqpO7isdD9YHyppMZ2o/4Q+JPbGzjJCtB0RNpaieh7GcLypU3eoF5rtqAV1vCPlbpdR0plxCTRETM8/j2VNiwRCa1iwtWV1qOGxl/j9gYqnsHG4NvrAI4B0N1d7zz8pNnX7SyYsPJg7mmBVUohJSLLPUxKtIYIU1FTGHxFkzd4W0WV0I9S91eSB/A/gxW7G9DXs31taLKqYItxRWaJcp7MTIlYeD2AsysNcrWPz8DmOm3Uicc1X9NdaVsSkfBvmPgCfTvAPKfJF3xsIJ0GdU6OR0NCjjl6R5r6mabmhVkfxYrZ+OrDKyalHNqDRNCrithSPAJCVqcjPf/4OUuydbCK78SkFvHoyiOA5DajzvEbLo//uMEKcw9K2I5I6EIiSIiIyF1ub+BfTdJzSN3InmfzrDEXaeDzFOBTLPXwbMmLAAHvakxr67j+TiusrKJwbrAhEZa4PIHlgxkyKGGNM9k39HTyQEpTtcnT5i5+Oy8y9gM2AgUgsGlD68eU7oatACYB9FEqlfrUCecs+bBkwkrDjkj4GiK+Rf5NjBUuX8BfgC72IzYCeRHoiIWuJsYqg1s/dPkC1+RrlDfAzvgUyBHXBPkUkCPZ6JqzdEe+ju2/2wgMhoARaLjZOMpKIa0c656/SLIVDip5CavvM6JtNwB0vd4TUdjt8Vd/fv98yNh/H1YE4rHQFWDIjSoY+O8mb0AvHZtPCiLsxjXLPu5wqPJGKSl7urQ0Jk+bH3g/X+f2320E+kNAz0w4PrUFjE/KuxGl1SbX/IWvFYJWQYTVV9mcEvXEKGi/UYgC9jMjD4FEJNzCxDfpX9igX7q8/ksLRaFgwm7+XdtYrZ5klZ0kRb9VUk6Y4lkkexBbbAQKRsCI2ZJrWPm27iFOT3H5lsg5bEFSMGGltwNODICoyxuQzCi22AgUjMABnoDgm5u8wYUFNy42DY9xLiu3XdMyg9A5bq//kWIGtJ8duQhsjoRP0IhfNkqfbu+udx4/kJPLQCgVtcLqe9loeA7AcmUrhH19dP2e6cfMbt03cqfBtrwQBDJ+ICueMqpzS5PL3N7Azwppm/tM0YTVSZvjl0rAjS5vIHPkZYuNwAAIxCNtV4LoVuPPL7ue7/octbbmTczXt7uSCLt5XduRmqZ7h4+XFzBNwcxp8wJ/smfLRqA/BNpjNx2lcroDwFj9il/B50rlS0mEFaUSsdA3mfFTfWMAesWh1X/eKg4VNm2sg4BsBTbHwmsZ0ENemLG8yRdYUqqGJRPW8E19HMCZ+uCMlW5foKVURex2tYlArr8AwK+Nrt87YyjvPCUTVl9lI8samVTZCsjWgEmB1zUvsK42obetKhYBI8/AiwBGydaRiU5v8vhfKLafIb905XaQiIa/zOB7jd+9nySaMcPj/9tQlLLbVj8CLz3c2tDgbBBy6kegDFzf5A3cOFTLhrTCZgfPTTcP8FN/rd979uzZramhKme3r14EcsvBgvCka1fj2X3TDpVinSmElWvbdD29SMDUjBL8A7c3eF0pCtltqh+BeDR8LcArDUu2q0nHSVPObXnXDMtMIawoYiRCeB7AOIO0vcXAzFDU7qM6EOiIhc8iZolsdgJIE9Mcl89vpL4aug2mEVZ/CYuGzmfgN8aVr1Ru8Zip7NDNtXsYTgQ6osuOJajPGmmu5Lyzxe0JZFdaU4Y2lbCi0QHO3sB2RvrUJu8S8c6xpYYR2LL2xk8kFeezAB8rZhLjXpcv8FWzTTadsPpBcTR8NxMMD3J63aklTz2ueamkAbelBhEwTgTkTP7zBlkfT+/u8k1b0NpjtrmmE1YUlHgddWxDhAln6QoT2usV7fTJcxfvMtsAu7/KIiDRAx+NTa0p11wPC2EFwjfWLx/frSlPgzHdIO3z9YrmtUlbWYKZOboeSDi+4QEwmjPrEt7RkJ49nFvAYSOsGND+6H8dpqYcTwF0vPyfGb8f5dDm26Q1kzaV6SsT9Trm/+VUOt+uknLGcEehDCthBUqjtP1TRjiv/OplcqTm2aHilSGaGaNuWbuqvof2/YYI2cyHHyhMs6f6/BvN6H+wPoadsDL4a48u+3QqpUqCr0ZDmQ7AOdftve694TbQ7t9cBOSSiOvowd49K/CBorBn6rzgS+aO1H9vZSFsdqV1KLQ+exvGjDcdijJ/uL9CygHiSBlj0yOhwxUVawB81rD5fUpr81zzF7eXC4OyEVYnbSx8qJM5BuBEw8APScOXXM2BJ8tlsD1OaQgYnldCVsmzJvIWFMx1zwtIStaySVkJK1bpSTmcqrxZ/qNhZQ+DvzVQivCyIWEPNCACiXWheazpN5jGtTs6NFVrrkRiwLITVlCRTXtS3XsnmC7KQenWrknjr7NKxRqbvxkE4pE2P4iWGZGu4ia4IZ1Kn58vy+Bw4VcRwoox+o3YuhX/wcxSiCGrx3Nq0nGhWZ49wwXaSOh3y9pV41Lqvp8x48L99vIdXZMmXFXJRaVihM2CsCnS9n8UoruMqAX59XYiXOryBGS/ZEsFEIivbZsFhe4BMNkYvpuZvt3k8+sxfJWUihNW/9pZFzoOjPt6b8V0B3Xc1pXsWmSlWreVnKhyjC2JUg7vbljKwHcBOIwx39bAF07zBiXUpeJiCcIKCroDRd3oVWD6Rg4qCWL6hsvnf67iSNW4Aro/s0a/AGNWjqlrnFrqUis5LlmGsFmQEpG285jodgATjd9pDPqx2q0tnfpPwd01zpuym6c7Ko0fs4SZlxqFMUSHLhAWueb5bxusQEbZlS02t1a5FJREHazRz7Ox7DKuOFYw0zVun/+BculR6+MYFS8lG4s7aysB/5tS+V+nzw0mrGi/5VbYXJA6IuGvEumxQZLiMytPsKa2WKEEkxUntBCd9MgAUkN9yqDuAeG7rl2Nq8wIFixEj1KesTRhxSDDk/0mgMV7Pauv5GS6M01q63TPQqm/YEsBCBi5WSXd/7U5X/8CahScvqKYPK0FDDcsj1iesPv3tuFTmLRbAcot5ttNjNtJ5eVT5wX/MiwI1UCnf9ywckJ9d08LQEJUyW+VlW1gaqmmbVbVEFYQloJy8VMaLiFmKRJyRC/shL2k4Wcpxi3TmwNSV8wWifx4JHS4quJqBq40Ml5ncdlJ4BtG1e+9dShpgyoBclURNgtQJiwjfQWIgwwcmgOcBtCDROmbXJ7FEr05IkUcVaCq1zH4ywDqc0DYLTkjuuvrbi42kbBVgKxKwmbBy9QQG30VgVr6EFePIyPm25Mp7d5K3XuXc5LlHHuMo2GBBvxbP3V4O5nxY8WZWlHtjvNVTdgsIbZuaB21r6fhYmb9ZcJ1AFEIe5nxgEL0a0e6fl0tpQTl1avV+NitZxLhnwFakHO93ftlxIRVdelRtx/XfE1nOT9AwzVWTRA2C46eAjQa9jHwLSI9ME7tA5xE7f6OQfdz/Z7Hps1u/Wi4gB2ufvUPZ7LhDNbwRQDnATisz1gMgoQk/aRr4vj7K+moMhwY1BRhcwHSs4Sn6VIQLslx4sh9pIcYzzA4qqm0vmlnY7sVzx/lQ7jp0dBURxpnM5EPrOfjbTiYDPweoNwFhX9ebqfq4SDmQH3WLGFzV934uhUzSeN/BuECAEcNAIZc+77AzL8n0ItpRW2vxBlvJtK4bjqgfRag0wCcCuCQAXT+OxHu00Cr3buOftKKHzizyVzzhM0FTN8yREKfh4JmAnk5E5ukDALqhyBsZA2vKuBtrNCbDNrm6FHfqftY545SjoQy4dHjJxKljwRrjQA3alAaCTyVgBMOennsqxyhHaAoA9G/1e15aqSlNR1RhO0793KLllKcc5nwBTDLaibJdwcjcN8u9gDYAfAOgOT2TVbp3ry4xFCY9OzkIuLMIz+5B/cFLED8GkCydXkmpWH9jObgOwU0qtlHRjRh+86qZKvpSWEWkzIDhOlgncDiGFJXBgYI0bcA3A5SNhKw0ZFOPm8l174yYJB3CJuweSB66aWfOsft/OCoZNqhf30TcyNAUoV6IkATAZafCQBJHn8RWVGzq/SHxu8kKdpOgHYw8w4QdoDoPdlmgLANSXWbg5xv1dKRW17mlfjA/wdEg9BdM7/kYgAAAABJRU5ErkJggg=="},1046:function(t,e,i){t.exports=i.p+"static/time/img/progress3.bc13f19.png"},1047:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAACoCAYAAABwvnWJAAAgAElEQVR4Xu19C5hbVbX/b51kZtopbZHyEoG2YO0k01IrQqFekCJtzrQgilBR8Y8Xr6gIKG1zpkUeowg0SR9QrwLKFV/4qFhEoUlaoF7BUr1FbDuTtCK0gCDIQzql6bzOWf9vnZzMZNLM5DFJ5mR69vfNB0322XuttX/Ze5+91/otglMGtcDWrffUjHv7rRO6dfckgCcRMBmM4wBMAGgCwBNAGAdGvdXQWABuAD0A9pmfERJgtAP0JsBvApD//hOgPfKnG7y78+jxL37wg1/sdoYjuwXIMUyfBZ7buHx8Vw/OYKL3E9N0JkwH0ACgtgJ26gZhJxitRNjOBrYzubc0qoveqkDftu/ikAZq6yPBY0mh8wA+iwizAXgBKAWM2n5rdnwTIAPg/QB19T5PqAHjMIAVgI6wZuDDCmifAcSZ8SQR/mjo2DBtgfZqAc+PmKqHFFC5pUVpmzVqNimu+cSGCtD7zYV54PJvJGe3XQp4Dyv0PIP2uLtc/6g9rP3NyXNaOgpFwrPr19Tp7gMTdFZOIPAkME8CaBIDUwmYAeCIQdpkgP/KpETAHPa2T9pMCxfqhcpQjfVHPFCZmXZtDM02DFwCwsVgvGeAgdrHoM0KeLNByv/16PqOGfOb/1HpQd25IXAc6zydyXU6gWczcCaA8QPI8SqDHmDWf9n4p47N1NJiVFreSvU3YoHaunH5iS7D9Z/MfAWAE7MYtAOMP0BBxGDj8cb2k1rtODvJKhA/c4wX4LkwoIJwNoBRmfoQ8A8G30ds/MDTtGxPpQBUqX5GFFCTgzr6owB9AQw1y37z3wAeBGhdonv/pg9e0JKolKFL1c/W37XU17vrzwHh44D5NyGjbZlVHyPmuxv2TX7Ijj++YmwxIoBqDl5t/eVgWgTwe/sZgnAAjF+B8UtjX+LRaQtb+l52irGYjZ6Ro7PRb+z9CIBPEuhigPu9qDHjeSi4owf0gxk+v7z4VW2paqDufCgw1qhTvgbwtQCOzBiFp0H4nzrF+NnJc5furdoRylNwsQWPok+B8V8MnJbx2FvM/O2uUbV3zJxz3dt5NmmralUJ1NZNLYcpnaO/ApA/Y+nrAXgdk7Kq0ef/k60sXUFh4tEVpxpsLCLgEgA1aV3/G4xVShff2XBhc/IyokpKVQHV3IOeUX8FAbcycHSajfcD/H3orju8C5a8UCW2L7uYO6IrT3Ab+rVM+CIAuTFLlTfAfPNrow58b86cFrlBs32pGqDGw6FzmIxVAM3starsPw3c3a3Q8hk+/79sb+1hEjD+6G0TuMd1HaB8NWMfG2NgcaOqRYZJtLy7tT1Q5fZIcfGdAC1M06oHRN9TyLi1YV7zK3lre4hXfHb9bUd1K67rAfpKxpbgN65u99VTL1j0sl1NZFugykF9PLLiChCHALwrZUACIrqhLJ42f0nMrka1u1yt61d4XYqxkmEe4aXKXhCWeZ5K3GPHiwNbAlUO60lXfkjAnDRD7gbjam+Ttt7uQKgW+doiQZVA38440nvC7dY/977zlj1vJz1sB9RYOHQpiO8CcLhlqB4Gr+kh5aZqPwu008CnZHlp7arR7WN7biLCEss9Ub5qJ+JrPb7mH9lFZtsA9dn1a8Z1KR13EfDpNONsVxT+fMO85q12MdhIlaM1snyGArqv38sqeG1nXe0X7XD2agug7tgY8Cg6raOk76cUZvDqWmP09VPmX9s5UsFhN71a17bUKuPqbwHM2TXl7ribSLnE41vy9HDKO+xAbYuEFhLwP2nHJq8AdLlX9T86nIY5lPtOHgWyLPspZ54OIv7ScG4Fhg2o1uH97QC0XlAwNtRwz2VT5l//+qEMFDvonjx7df8cwNw+efgOT/vkJcPh6DIsQLWcSH4KNr1/kks90XLv3ok3DocR7AAMO8rAa9e64uN2fwOg6/sczDls1B1YOG1OyzuVlLniQE0eOrt/B2CWpWgHgy5vVP1rK6m401f+FoiFQx8H8U8AjLGeetrQcX4lw2IqClTxXtcNeiztpel1YrrQ0+R/Kn+zOTWHwwKt4RWnKWT8FsCxVv/PQlfmVsq3omJA3RkNTTaYH4OEGyfLLt3AgunzteeGw/BOn4VbQC5iFF15BMA06+kXFeZ5DU3NuwpvrbAnKgLUXdEVDTobAlKJh5ct6TOubte8qRcseaMwcZ3aw22BtsiqIwg9YQCnW7K8Rrox17Ng6Y5yylZ2oLZFbn+vAtcmBo5PKkKbO+vcC+xwiFxOw47ktpMO6yTbgHMsPV9nGHMa1aVt5dK7rEDdtj5wfI1CTwCYZCnw+26i852r0HINZ+XalavXd8b1rEtzbHmFoX+4UV3293JIUTagJt/uazb3OTzQ5kT3/rnVGFBXDsOPhDbNY8aaetmzpmbW3d0Gn12OMPOyANVS4PHeIyjG1jq3cd6hELs0EgBYiA7JsKD6DUjyDwidx446xTir1GNdcqDKIfHOcXtkSfiopXDc1a2c7bw4FTL81VVXOLs6DeUJsMnVBWI8vv+o8WopSd9KDtR4NHAnM0lUqJTXGfrscu1bqms4R7a08j5Sq9BTfS/NuMuraleVSuuSAjUWCXwWoB9bwiWY6NxDORq0VINULe3EH1k+nV2KvDynKIi+4FW1e0shf8mA2rZ+5UxS9CcBkyeUwfQJb5P/wVII6bRRPRZoi65oIjbkitwFoMsAnzVNbf7zUDUoCVCtQ2BxbrZunfhWr9p8w1CFc56vTgvEIqEbAf5m8t0K/+giOnWoUcIlAWosGlyX8oSS4LuG9knnO15Q1QmyUkhtBmZGQ7KaXphsjx/x+LQLiEj4XosqQwZqPBq8khn3WL2/0NOjzzzl/GVCRuaUQ9gC5kmArkhUwMkmVAnXNvq0bxdrkiEB1brDF2FkX6ozMKdR1WQz7RTHAmiLhmYRs+BBaIU6SDdOL9YnoGigbtrU4j6ms34LgFOt6f0Wr9p8kzM+jgXSLdAWCV4vFEzWZ3812hOzimFULBqo8XBgGRPdZgpA2PJabeKsauExcqBUOQskowT2bAJwlrkFAL7ZqGo3FypBUUAVjyiCS9y6hPm4i2F8oJyeM4Uq5dS3lwViG4JTYGB7Ci+GocwslOmmKKDGIkG52zWDvoioxePzf8NepnGksZsFYpFAM0DLLbme8Pj8Hy7kFKBgoMaigY+BKXWQ32a0Jz5QzJ7DboZ05CmvBZLvNKP/3EtwwfQpb5P/F/n2WhBQd29qGXWgs17IycyDfQV8boPaLPsPpzgWyGmB2PrAGVBosxXR+mKiO+HJ1+2zIKDGo8GlzJBYfBDhVx6flk4FmVNQp4JjgVg0+BMwLiv0xSpvoFqEBMLwNs48E2PdMxLTxDhQKq8Fdv1u1Xv0Gn2nxYyzX3d3nzz9vK+/lqvXvIEaiwQDKVYTZixvbNKW5Wrc+d6xQDYLxKOhm5m5Jbky8xqPr/mruSyVF1B3PHrrMa6eGplN5QZqL8N9kpNMNpdpne8HsoAwN3YrHYInyZHV0W3wlFzhK3kBNRYJrAboa+YvALjZo2qmZ4ydi5laMrJiukH9klLYWeQhycYEw2UYL09Vtb8VcuwzpE6H8HAsEhTOMVmlpdztVbUvD9ZcTqAm96Y1e6w9xZs1xqiTpsy/tn0IMpb1UetqV7KANAM4oayd2bPxF8D8nbH7av77hIWLDthTRMCKq5NZ9RgQDhg9OGkwiqCcQI2FgzeAIJyZMp1+y+vTbrSr8rHI6ncD3b9MXdfZVc7KyMV/I50vLtYJpBIyxqKhr4P5W/lga1CgSuz2vnE9gvpjBfWuLuVEuwbpZQaYVcLQVdDHGyCa4/X5W+0o6zObVh9e19nzkrVav2HUJSYPxBI4KFDbosEriIVk16SA/l5jkyZLqi1LPBq8m9lM/OWUNAsw44+NTdp/2NUo8XBwDROuseS72qtq38km66BAjUWC4sYn9JBMuqvBs2Dx3+yocDIXFV5KS5ZgRzGHTSZFwX80zNP+OGwCDNJxPHz7JCaXEOUJFXubV9VSBGz9nhoQqDvDoVMM4m1W7d97VS09lY6tdI6FQ58HcUmiHW2lWOmEKWnocunESrYUjwTDKWogg42zpjUtlSDR/IAaiwT/G4BkeAOBPuNR/T8rtYClai9d1lK1OcLaecmraik+ftupFg8HLmKiX1tYu8+j+q/IC6hWdox/AjgCgBxJvcfO2UlikeB3AQx6Dme70amsQHu9qpbK21XZnvPobevWe2rq39j7okUSvG9su/uYzKO1rEt/PBo8nxkSmy13XN/1+vzmzGrX4gB18JGRkGWPqtn6TLktElhJoEXJWRUXe1TNnGFTJStQMzxczrZ7wJ4D1JxTyIteVZuYs9YwVmiNBE5XQH8ygcr0gKfJf8mgQLV8TiWl+Fj5JTZsSUy0YxLXdCUcoOZEmO2BKhq0hYPPEeEkAAmjLnFM+pnqQTNqLBJaAPDDpuqM1d4mzZyO7VwcoOYcnWoB6u1EWJqcVfkTnqbmdQMu/emDXi0e/A5QRwZQ4+HQmUwsEQBS7vWq2hcGA6pQWwu7xd7EkeOPKiXHZU5zFlnBAWpOw1XFjGqFVsu2U06bXvH4/MenPMH6Lf0W80k8qTat86r+T+Q0gQ0qOEDNOQhVAVRznxoJ3p/KME66cUrKqaYfUGPhwFUgMu9aCXSlR/V/P6cJbFDBAWrOQagaoKZz7BJ4iUdtXpnEY1rpj2bXVLve7WcOSxmAagBYz4xXckKgDBWI8HZy+aNL07JuD6Wn6gHqIysmwmXsEWXlLL+xSTMp9vvPqJHgC5L6moB/eVTtmKFYppLPlhiobxowPjJNXZryc6ikKv36shhphGQsldaxWFmqBqiiYCwSlFsquaB4y+PzHyn71F6g7oiuPMHFulQQ+D7o9WkXFWuVSj9XSqAyeFWj2ry40joM1F88HFrExObyN4RSXUCNBn4OltUEUJgbJIVlL1Bbo4GLFaZfJXHatzcYgnEq9mgpgUrgazxqszjk2KK0RYIqAZLScSilqoAajwSuZpDJpZpyiOoFajwSvJUBycsOJvpIo88veaKqopQUqDYj1sjIMlPseFQVUFvDy/9DITNphUA14FX9S3uBGosEHgZogXxVY/QcPWX+9a8Xa5VKP1dKoAohMTEvTL8VqbQ+qf7ikdCnGfxDiwh3KGJUFVAttmphLSeh2veoWlMaUIO7rZylr3pV7d1DsUqlny0xUFPiPwvgVYvLoLIqEWrBkDE4skQdVxVQRedYJCixepNBeNnr0443gWoF8e23TgE2elVtXokMVJFmygTUisheoU6qDqht4eBviXCB2KfOZRxuAnXHxoDHpZOw9EmxddhCtoF1gJoT7lUH1Fg4uAqE60QzQ8FME6hWEqv1lrrNXlUL5lTdRhUcoOYcjKoDals0eA0x1piaMV1kAjUWCYoHv3kkw4yFjU2aeUxVLcUBas6RqjqgxqOhC5j5t6IZMS1OAbWXqU9R+LSGec2Sha9qigPUnENVdUBtiyxvJCgp4ow7TaDGI6EfMPg/zf2Ay5g4be7S5A1VlRQHqDkHquqAui0aOrqG2eRNJYZ4VJlL/29S6QAT3Ykx+dJV5zRPhSo4QM1p6KoDquWb2pPco2JDCqjiVX2m8Et5fZpwoFZVcYCac7iqDqjWBPqGxaH6tAXUwC6A3lcNYbXZhsQB6ogFqlBITQGwOzWjmu59sgvwqlpjTrVtVsEBas4BqdIZNfAXK93PaymgCiuKUEvu8Pq0U3KqbbMKpQYqgbaJux9AFXecFuZoBbSXmd9FzMuYcG4JzF2lQA09AbAwEe5NAVU8yscT8H8eVTu9BIapaBOlBSo/Y7QfOMMOSd6S7NljNlmDNRSbVjlQ6Z0UUIXqfCxAT3pVv5lctZpKKYFKzNd7mprNXFp2KPFw8FNMGCpBXZUCtc+jzwFqBhqJsMzj01I5O4cdq+kO7UMQZsQA1Vn6e1HAz3i2HPigHWiMJLNLLBp6jIChctNWKVBTe9S+pd95meo/Xf2cDVfIrdO/aHRn3RBmsqIe1TtpjOF2HUXgq8H4+ACNdDLjZSKIg7GcisvWTYgbsvmwvuBVtUlFCTOMD8UiB79MOcdTwzggeXb9FogfZGCTC8rmqU/tfyHbrL/rdyuO5Bp9OpNyNjNLqPEHqvc056DjqeSBP4AqXSJGLpGvnMRI4jC3MerhYsiUWzcE368Y7POqzankY3n+Loa/WiwSPOjAP3mFCuzzqpok5a2qUsq3fhspvgfE13l9zeKHcUiWWCSYeYWa5pRy5PjaaiBGSx+5kQZUSZV0oCdxXbU5B5Xy15TVKSXdzU9R+D0N85orfiMzFCVHEFC7iXGlp0mTyNNDuqS7+THwM8dx2j5w6ATjIm+TlgoJGlSybesDx9coSoNctQJUB8I+Rdeff7W+Iz5nTkvSPa6KS1bHaScUZdhHVDeYL5rW1GyGXgxUTFpQw7iSgQstCvEsVekdgB8l4KcNWxIP2uE8uBjrZg1FcYL7ijFl6Z4hohaPz/+NgVo0ecHQEwTTQivDXZ6ds6REX+zxaUmq+yoqWYP7nHDp4RxB/oOnffK5tHChnk0K6wpV8tEWfRrDwA/HtbuvsnNa9Ezds4ZL9yOgYGzwNmm+4Ry6Qvuu4pepbt3FM6bPbbZYvvtrHosEvwpgdSY9aKH2SdanzXUuff7Jc5fuLe75yj6VlYBCRIhFgkKeKrmIHEofc1xxAIyOEgyPa8DZcJBkc/Fo8Epm3FOC/nubIMbj+r5Ekx1cGHPplZXSJwlUhyStz3gUMOr2f2ug3PG5jJz5vbV83w+gNu27bujKFO+CJXJ93a/EIsEPAHgqo36h3WavXwUpmZ5dv2Zct9IhjlIHk6Q5tJPJcS1XfvtYOOAHUS8DTTrtdzqiuKVFiZ9RL9emAtZyFIOJZjf6/GaWPDuW/rSTCHpVrbmXza8tHLyECGvNVY9psafJv8qOSmSTqZR7VAZWNqraklLrvjMcmGoQ7exbh3Gp16f9MrOfEjlKW83yMwx8G6RMIWYNgGxDpDzmVbXzSq1jqdoblMi3dePyExVdSS5DhzI1elqCg1IZXtrJYI42enr0I085f5nlotfXUywSTPldDKl7ySc6atT+z06e02Lus2PR4C1g3JBqlGFMa1SXtg2pkzI9HBuMGt1Uxkk2IWYwiOhjHp8/mV27BMXac0Usxx9pcbtX1WZkNh1LywgytG4p4PEtWZZKJmaO7frAGVBI9r3JQviW16fdOLR+yvP0oMkmLKBKbM6nTD30Qzp9j1xB/i8R3hrSUDC9w2BZbuW4Lz3LzM+9qvbpzLbbosEriCFnpsUWkfvLXlW7N7OBg08RaLNX9X+o2I7K9Vz6j3Ww9D29rH5OQrRyDYUw1OCbjap280EzaiSwGqCvFdnzXlKw0DNP25D5vPVyItez70r7zpYunW3h0GVE/BORkwn+Rp+2IrkApBUnxWSRECnwsYGyzsSjwbXM6Jen3jqmup+BOQQMlPLzRdKN81PpGNPFiYVDl4L4PgCjMsUUJme7XQCkJ+UzYLw/le8rSxp0izvdSdpbIPwKqE64yuvT7soyo/Ym/LC+257oTpyZ8kuNRUJfA8ycU0ras08DNRd41esk7q1faYsEryfgWwPfbNUcl+25AjQpadW8k/ZKr04a9JLaPmtj6Utav9kvEvwFgE/2fkZ0g9fnvzW9TjwS/AQTfgLGaAJ+20X06Rk+v+Rf6C1bt95TM+aN9ntSVKIDaaR08riGC5v3lV/j/HrIeOHLlQY9tABg09vGblnsBlK3lOeo+Zl0qLX4Vq/a3HtUlGotFg0FwexP/XugS4F4dPlsA67zvXsn3pjpzPLMptWH13V2PwDgIzmkfNuraul71qEqNeTn26Kh24TGSBoyiC+Z5msWPcxy0NK/e1PLqAOd9ZIzfayw+zVsSUy0u09jLBqUGeayIVuqcg380qtqZgrF/jNq4LMA/Tj9s0KyKO6MhiYbzHKslg/R3e+9qjZUvoCSWqwtHHzO8rNNKJ18bPpsfxBQped4OPhTJnwmOavi7EZVs7KolVSukjWWvgEvWaPlbSjuVTVvZhc7NwSOMwx6KYvP6Z2e9kmLB3IFlHZaI4HTFdBDeSf4zbKtKK/Kg7feGl5xmkLGn83Zk+kBT5O/30tldqBGg+fLsmM1/R2vql09nErk6jseDd7NjC/mqmej77mb6NgZPr+sXP1KPBx8LDuDH60b2+66LJtPaSwc+jgUvl/2rXnqyLqBKdPna8/lWb/s1doigZUEWiQdZS77JnizSdC6tqVWGVcv/OmHA3izxhj1nmJiysuundVBLBK8A4D4blZNIeLPeXzNPzoIqP0nif5fE7bU6D0fTU//GY8EFjNMZ5f0k4BcdnjIq2ofy1WpUt8nWQvrZSWRdO/7Et2JYzMjcLMCVQSMRUPfAfNVSTTTZzyqf6iMcmXTOx4J3sTAgKEcZet4aA1nzZAofFPxDaFNYHw4e/P8TwJWGoRXiUmWxwsLFKObYcy00z1/PBy4iIl+LXpINEKjqpmJT9LLgEDdGQ6dYhBvsx7e1KhqpSCULdCm+VVPVzS/J2xRy9BdPC2bd3/8kZXvY5cuKZTGll5Susmr+m8pfbvFtxiPBMMMqNKCwcZZ05qWPpk3UM1ZNRIUn0Uh9mXSXQ2eBYuFYsV2Jen00fkywIfZTrhBBaKfeFX//8tWpTUc+KhCtC7NNW/Iqsm5a0P7pIsGeykbcicFNhAP3z6JySV7Zdm6DEjNP+CMagI1HPo8iE0HByLc4/FpXypQjopVj4WDN4Bgq5kiD+UNA3zmNLXZfNvNLNa99w9KkAZdXkZ+e1i7+1K7BfjFo4E7melaS/ervar2nWy2GBSoEvT3zriePQwcLTFEri7lxKkXLBE+INsVuX7bOW7POgaEwa5qiuQLcBt1swZ6Wd0ZCcwxgPsBKjY1vcGMoHffpBvsNJPKACUvJ3peslbCt4y6xMSBwn8GBWpyVu2bqQby+rELKqzTCnkDvqbAt+BhVYGI13h8zQOeWiQHtOtmgGRFO8i5ZGDh6UkDxuKBZuxhVdo8rw8sY6LbTDly+MfmBKrwbeo1hkSojpGjKqWTJ9vpfjibseOPLJ/OLkXOVeW2avxwD0he/Q/gqJL+7I5Hbz1G0Ws+S0wfB1jeHdxZ2paxihDTjz1N/j5H6byEqFylrb9rqa+vqZe9qRxJdQA1Jw3mIJMTqOas2u+c0n5vjQOZVwLltp8++rjRtUZtV6crYbDeWbmhKKynMXVkFOJy9+z6NXWd6DrZRXw0E9yKYrzNir7bc971bxbW8/DUzgh2vNural8eTJK8gNr6SPBYxQVBv6Sf3NvTo0/OFu8zPCo7vVabBazQnOet9JGdOrmmTPctlgP/AUteQDVn1TTPHmYsb2zSTC8XpzgWKNQC6Rc0ufbnqbbzBmr80dsmcI9bfgXCgdQBXWnIRp5QqNBO/UPLAtbqLOfxcpmR0N3dJ00/7+tmuvOSzKjSSPpbGhF+5fFpwi7nFMcCeVsgFg3cC6bPJx/gW7xq8035PJz3jCqNWb6qMQCT5d/ENMfT5P99Ph05dRwLtEVDs4hZeAvkFurFRHfCky/9e0FAFVPHooGPgelBy+ytRnvi1Gog3XJgMrwWsDyk5ErepCoq1NGpYKCaYI0EJSR3brJD3OxRtW8Orxmc3u1ugVgk0AyQlbqT/+DxaeekE2Tkkr8ooO5YHzzZpWC7dVzVyTBOtZPbWC6lne8ra4HYhuAUMLZZjt0dLlJmTvUt6ePhykOcooBqvlglHXZNcgAQtrxWmzhrJCQ5yMNmTpUCLJAMgd79OEBnm69PwNcbVS15bVpAKRqolhPIUwycluwv/ze4AuRzqla5Bfrd5wN/TRw5/vRi8pgVDVSxn8Ws8rS1BdANNs7J5vRa5bZ2xC/SAlbAoThB18jZu8I0q6HJL1vGgsuQgCq9tYVDXyTiu62eX+jp0Wc616sFj8OIe+C5jcvHd+qurQC/11xvmb7a2ORfU6yiQwaqdByLBOW4ygoW47CnffIFdvN9LNZAznOFW8CK+/p1bwp3wnrPPP/5hbzlZ/ZaEqBa16sS42PlhHf2q4UP78h5IhYJ3QiweWQpJCZdRKdmCw0vROOSANXcAqxfOZMUXfYj4mHFYPqEt8mfuhgoRCanbhVbwGLWFkoo4YXtYqKzS5EvoGRAFdvGo4HLmSmVcDbBROeWQsgqHrdDSnTLYV1YdVLO6l/IRipcjFFKClQLrOnBWq/rBs60EyNHMUZynsltAUkiXKuQHFceb9W+y6tqJi9EKUrJgXpQkB1hB7P7nEZ10dBoxkuhrdNGWSxgvuEbyhNgTLf2pSUPyy45UEVQKx7mcQCzLMv8yahLnFeqBGNlsbbTaFEW2BYNjalh3tibSIOww6hNzC71WJcFqKLxs+tvO6pbqdmcOkcD4X8TXYn5+bp1FWU156GKWkAmpNE19Q8TkKKv3NNt8Fkz5jf/o9SClA2oIqiZvpt12VxLjlVILs4uhT6ayZBcaqWc9spvAYvzQXgUTCoegP/JMM5uVJf9vRy9lxWoInBb5Pb3KnBtSm2yJYXjKLexoJCIy3Io7rRZvAV2PhQYa9SRZFk5x2rldRCd6/X5W4tvdfAnyw5U6d7yCXgMwHGWOH9xdSs+u7KulMvYI6Hd7Q/f/i632xVOe/94jXRjbraMLKXUtyJAFYEt2m55wbJur7DL7dbnv++8ZRIw6JQqsICZhtRQHk693Us4icI8r6GpeVe5xa8YUEUROWtzK7SRgAZzzwr8C0wfszOjR7kHoFraj0dXnMpsyI2TMJtIeRa6MrdSkcgVBaqpnXka4BaFhZJG0HqADVze2KT9qloG7VCT06ReT2bTE1onKX8xdCyYtkB7tVK2qDhQzZk1efZ2fxpbMhNwe8OWxI12z8BSqYGxQz/iBbUzGrqRgZY+Gn0OG3UHFhkBB60AAATjSURBVJb6nDSXvsMCVBFKeKHiZ45Znp5XCYwNNdxzWTpHfS4FnO/LY4GkR5zrRwAtSOshZ3aW8kgzQLKJcnWWrd1YNPhJMN3byxZNeBlMn/Oq/kcrKYfTV58F4uuDH2YFku/qROvTDgZf1ag2S07VYSnDNqOma9sWWd5IUCTZwFTrc2bw6lpj9PV2zsYyLCNWxk6FX5bG1n+DCFoav+xuReGFDfOaxd942IotgCraC8Nbl9JxFwHpeey3EylXeHxLJC7LKWW0QDK5iPFDgGamupHEZB2j3F+YOee6t8vYdV5N2waoKWnjkdCnGfzdNJ/GHgbuPNCduMnxE8hrTAuqJFeh7eP1GymZgzVFDLyPwV8dzqU+UwnbAVUEjD2yYiJc8uvuvaKTj3czKV9p9C2RWxGnlMAClje+BNxNSTUnV9wG43K7+RDbEqhiNDNALBoS1reQlUHQtCUBEd1QFk+bv0TI2pxShAWEuYQMrOlzKDEbaQfzMs+fDtxtxyNC2wI1ZX/h03S5sYYZ6Ulce0D0PaOHb6nkoXMRmLDVI9uioaNr2FgGkHje16YJ95Cr2/2VqRcsetlWAqcJY3ug9u5dw6FzmIxV6Zt981aL+a4eUgJDjXK06wCVQq5kwhBeArAkX07dLsn69HcGX9OoapFS9FPONqoGqOZ2QC4JZo3+EojkpuSoPsPQO4BxL3TXHZW6ey7noJSqbdMfGMY1YJa0P+npKt9gplt43/67q4UytKqA2rsd2NRymKur/mpmLLESFqS+6gHxAwph5XCf+5UKbMW0Y4auu/RFYHwyI+vf2wCtUjqNO+yegilT76oEakoJOXvtUTq+xskU6EdkKPc0M31/lFv/xaHgpN0qP97OMZ9i8H/1Ovz0GeRtBtZ01dWstsOZaDE/vqoGakphM5iwtv5yMC3qjdHqs8Z+MD0A8NrEUeM3FsMkV4xhK/GMsDgf2zHqIwYplxLo4sykxcx4Hgru4NrEfZV2Iim1/iMCqCmjJPewYy4k4isZmJclzaSEbP8GoHWJ7v2bqvECQfIodHTXn80GXwzQRRlbHzGFAeBxAu5uaJ/0m5HCATaigJr+KxZvdNKVzxPwuTTnivQqHWD8AQoiAG30PLU/ZsfzQ8vLzEtsnMNETWDzEkRok/oX05mHf6CQcl+Dz7+71DPacLc3YoGaPsvuml1/JjMvTJ7FDpileS8Bkjv0KQP4s0vh7Q3zml+p9ADFIqvfTUr3dGY6DWycCdCH0i88MuQRx+Vfg5S1nqfeedKOP7RS2W/EAzXdUDI7tc0aNZsU13xiQwXo/X0OwVlN+hYD2wjYBfAeEO1h0B4XGS+5eka/WYxnVzID9vgJBuvHE4xJBJ4ERZlEBjcw4RQARw4yuAzwX2UFIKZww76JT4yUpT0XoA8poGYaw8oiN48ZHyLCbADewtKny/ktS5Jc+WMG2gnQU/0QQ2EyCcPEzhMAmpD5wpNjgFjiIkG8GUx/MHRsOFRv4g5poGaCpC2y6giQMUuBMcNgTCfCdLAZiCjU3uUu3QD+BuIdZGA7g7Yxubc4nF1JsztAzQG/rVvvqRn9xlsTCe5JkGXa/DP3uROYcSQIEwg4HECd1ZTMoJKZTmbDlB9nJ8v/M95USGZfetMgvErMzwOynejZw+2dL1bLLVG5f7HZ2v//e45J0tAY+PIAAAAASUVORK5CYII="},1048:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJ4AAACeCAYAAADDhbN7AAAgAElEQVR4Xu1dCVRTV/o3IAkQVlkFAoIhYRBDGGRfBLcgo221ClXRsVYL1VodrU5b/atlpO2oOHSsLQzVuuAGVutokYAWBWRHkoCUhAhCQEFA9iUg4X+uLR1MXpKXlRd4nDNzPH33fsvv/vLeXb77fZhp6N8rBLKzs3UxGMxcHR0dFz09PaKent4sHA43E4vFmuBwOGMcDmeEw+EMQVsMBjNdR0cHB/49PDzMHx0dfQn+zefze/h8fjefz+8aGhrq5PP5zwYGBp4MDAxwh4eHq0dHRytCQ0MHUcinTcNMRRCysrKM8Xj8EkNDw0BDQ0M3Y2NjopGRka2Wlpa2KvEQCAQj3d3dTV1dXdyenp7Knp6evL6+vszFixd3qVIvEmVPCeKlp6cbmZqarpgxY0a4mZmZp6mpqaOWlpYWEgZEIBAIOjo66l68ePGwvb39546Ojuvh4eHdSLBNlTZMWuLduXOHZG5uvsnS0nKxpaXlXG1tbR1VAqks2SMjI8PPnz+veP78eVZbW9vpRYsWcZQlG0lyJhXxsrKy7M3NzWNsbGzetLCw+BMGg9Fo/0ZHR0fb2tqqnz59eqO1tfW7xYsXNyCJPIrYotEDAxxPTU3VtrW1XUsgELbY2tr6q3qepgjYivQF88OmpqZ8Ho+X3NTUdDEiImJEEXkT3VdjiXfz5k1zBweHTx0dHTcYGBiYKwPIwcHB3ra2tpb29vbW5ubm9qampvbm5ubelpaWXh6P11dbW9s3ODg4MjAwIGhoaHi1OrW3t9fV09PT0tXV1XZycsITCAS8lZWVgbW1tYGtra2ZtbW1mZmZmbm5ubm1rq6ugTLs7O3tbaurqztXX1//5fLly9uUIVPdMjSOeGDuZmdnd8DJyWmljo6OnryA9fX1ddfX13OrqqpqGQxGY2ZmZlNJSYlKJ/VeXl5GS5YssaVSqXYuLi6zHBwcZhsaGprK68Pw8PBAbW3ttcbGxlhNmwtqDPHodLrjrFmzvpo9e/YKeRYKQ0NDA1wu99e8vLyKa9euceh0OiLeFAsXLjSLiIggBwQEzHF2dp6DxWJl/jGBBUltbe1PdXV1f6fRaHXyElmd/RBPPDqdbung4BA/e/bsiOnTp2NlAae3t7eTyWQ+vH79evl3333H7e/vF8jSX91t9fX1tT744APiW2+9RaVSqZ4GBgYmstgwMjIyxOVyU+vr63fTaLTnsvRVd1vEEg8sGohE4gFXV9e/jZ0YwAEHnCQwmcySS5cuFZ44cQKcGIzC6Ye0Njo6Opjt27cT16xZ4+vu7u41dlICx05wglJVVfV1V1fX56Ghoa9OVZD2h0ji5eTk/GXOnDknZsyY4QgXsJaWloaMjIyc/fv3Fzc2NvLh9tOEdnZ2drjDhw97h4WFBVlZWTnAtfnFixd1VVVVHwUFBd2C20dd7RBFvIyMjBlOTk5JRCLxbZh7cKNcLrcyOTk568iRI2x1gTaRevbu3UvesmXLYiKR6AaOjaXZAvYCuVzutdra2vfDwsJeSGuvrudSDVeXIfn5+WspFMq/8Xi8mTSdAMyqqqqHsbGxt1JTU59Kaz8Zn69atWrmoUOHlrm6unrC+ZH29fW1s1isj/z9/S8iAY8JJx6dTsfPmjXrFIlEioDzC+ZwOMzPP//8vxcvXmxEAoATbcPatWvtDh48+AaJRHKHYcsoh8NJffLkyXs0Gq0PRnuVNZlQ4t27d8+PQqFcNjU1tZfmYUtLCy8+Pj716NGjk/LsUpr/0p7v2bOHtHv37ggrKyuCtLYdHR0NLBbrnZCQkAJpbVX1fMKIV1xc/BGVSj0ibbXG5/P7Ll68eD06OjpPU1eoqho8YblgJZyYmBiwbt26lTgcDi9JL1j9MxiMvd7e3v9Wl33j9aideKmpqVgKhfIDmUxeI+3TWllZWbpx48YrZWVlKj1RmAjgVanT09PT6MyZM5Fubm7zpOlhs9kXWSzWuxEREUPS2irzuVqJB85XPT096TNnzvyzJCf6+/u7ExISUvbt28dUprNTTVZcXJz7jh07ovB4vJEk3589e/awrKyMps5zX7URj06nu3h5edGlzedqampYkZGR58rLy3umGlFU4a+Hh4fhlStXNjg7O1MkyQfzvpKSEhqNRqtWhR3CMtVCvPv37wfPmzfvJ319fbEH4iMjIy9TU1OvRkVF3RMIBBp52qCOAZNHh5aWFubcuXPz33nnndXa2trTxcno7+/vKC0tfWv+/Pk58uiRpY/KiZeTk0Pz9vb+UdJkF5yp7t27N+m7776rlcV4tK1sCMTExDgePXo0RtIZMFjMFRcXvx0cHEyXTbpsrVVKvNzc3BU+Pj4XdXR0dMWZxePxat58880k9NMq28DJ2xp8em/cuBFNIBCcxckA4VZFRUXrgoKCrsurR1o/lREvLy9vpY+PzyVJESVMJrMwODj4fHd3NyIPsqWBp6nPjYyMpufk5Kx3d3f3FefDy5cvhwoLC99RFflUQrzc3Nwwb2/vaxJiy0bpdPrP4eHht9D53MTQF8z70tPTl9FotL+I29YCMYzFxcUrg4KCMpRtpdKJl52dHejv75+BxWLFbWCOnj9//tKGDRvuK9sZVJ7sCIBFx/r168XuqQ4NDfXl5+eHhYaG5skuXXwPpRIPhKX7+voW4PH4GVAqR0dHBYmJiWe3bt1aqEwnUFmKIZCYmOj7/vvv/xWDwUDeNe7r63tRWFjop8zweqURLz093cLX17dU3D4dIF1CQsL3u3btKlMMJrS3KhA4fvy4586dOzeLIx/Y5yssLJwXHh7eqgz9SiFednb2dBcXlzJra2txm5SjSUlJZ2NiYibsUFoZYE12GYmJiX7R0dF/FTfna25uZlVXV3sqI6pZKcQD530kEgnMEyD/UlJSLq1fv/7eZB+4yeCftDkfCKsik8mRivqqMPGKioo+/D3CAVLW3bt3MxYtWqSy/SBFAUD7iyJw586dtxYuXLhUHDYlJSV7vL29jymCnULEy87O9g0ICLgnLrSJxWIVeXh4/IBumSgyROrvC7ZaysvL36VQKD5Q2sEeX15e3vzQ0FC5F4lyE+/mzZv6AQEBVaamppCXT3g8HsfNze1rdHNY/cRRhkawyVxZWbmDQCCQoOR1dHTUP3jwwHX58uX98uiTm3hsNvsyiUSC/Nb39vZ2BAcHx6HHYPIMCXL6gOO1nJycfQYGBpDBHYrM9+QiHriY4+fnlwK1+hEIBC8//PDDePTAHzkEUsQSEFhw8uTJj7W0tKCiWkYLCgqi5LlAJDPxwBXEwMBAjrjbYBcuXLgEQpsUcRbtiywEzp8/HxIVFQW5awFur+Xl5ZFkvTopM/E4HM5VZ2fnt6GgAUGcLi4u36KLCWQRR1FrwGKjurp6q7hg0pqamh9JJNIqWfTIRLzc3NxlAQEB/4W6xwmyL82fP/8f6P0IWeDXnLZgvpebm3sAKowe3HN+8ODBG7JkLIBNPHA6QaFQambMmDELCq4vvvjiW/SOhOYQSR5L4+LiKJ999tk2MavcJ0wm0xnuqQZs4pWXlx+kUqmHoJQ+evSo1M3NLVkeZ9A+moVARUXFFnG31xgMxiEPD4/P4XgEi3ggVVhwcDBXV1f3VZ2H8X8gVDogIOAQ+omFA7fmtwGf3IKCgs+hrjIMDg725OTkEOGkSINFvOrq6gtkMnktFGxnz55N2bhxY67mQ4p6ABeB06dPB7377rtRUO3ZbHaKi4vLemmypBIvMzPTecGCBZXa2toiSRFbW1t5BALhCz6fj+iEh9JAQJ/LhgAOh9Pi8XifWVhYiKTLAMkhf/nlF7clS5bUSJIqlXg1NTXXiUTiW1BC9u7dG4/mMpFt0CZL6927d5OOHTu2G8ofLpf7k7Oz8wq5iQciikNCQh5B3cVks9lMsGc3WYBE/ZAdAbC3RyaTRbJUgdOr7OzsOZIiliW+8aqrq1PIZPI6YZPAvk1UVNRhNFWY7IM1mXqAFGkpKSn7ofZ12Wz2BRcXF8h5IMBALPHASjYkJKQOi8XqC4OFbp9MJvoo5ou47ZWhoaH+e/fuOYpb4YolHovFip87d+4uCLNGIyMjY6dqJk7Fhmny9Y6IiLC5cuXKAaiXWEVFxXEKhQI5D4QkHsi4vnTp0maoijngPJZEIp2cfBCiHsmLAJvN3kYikUTu24AKRLdv37aGKn8FSbz8/PwNfn5+Z9GVrLxDMbX6gWykR44cgXyzFRQU/NXf3/+cMCKQxGtoaMglEAiBwo1BOlhra+vDUwtW1Fs4CDQ3N++HSoPL4/Hy7O3tg6QS7+7duw4hISGPoaogoqcUcIZgarYRd5oBqk7eu3dv9sKFC+vHIyPyxmMwGF+6u7t/IgwfyJnr5OS0RxOKlyQnJ/uvWrVqqYmJiWVXV1drWlra7S1btjzQJEokJycHrF69eqmxsbFFZ2fn89TU1NvR0dH5SPUBFIGpra09CnXxi8lkfkWlUj+VSLznz59XgSLDwg6WlpbmeXl5nUeq42N2AdJt3rwZXEp+7e/u3bv0RYsWXUO6/cC+O3furFy4cCFN2Nb//Oc/Z5FMvuLi4igvLy+Rz2pra+uvlpaWrmKJB04qFixYUA21Ibh79+5jx48fl3j+hoRB7ejo+Ad400HZognkE0c64A9485mamv4fEnCGsmHXrl3O8fHxH0M8G83MzHQdn+b2tU8tg8H4p7u7+17hjn19fZ2mpqafaEK6/9HR0SRJA4Nk8kki3ZhPGAwmGqnEA+UOOjo6vsLj8SJVJ1ks1tHx3HqNeE+fPi2Dysiel5d3NygoKBWpDo+3q7Oz8zCYF2ka+eCQDsxXTUxM9iN5HHJyciKCgoIWCtsIMsvb2Nh4/vEDGvtHVlaWcWhoaBtUQMDf/va3YwkJCYj/zAJfwKR88+bNG6QNDpLefHBIB/z5/vvvzyF9kbRjxw5iQkLCHmH8QXL1jIwMy2XLlnWAZ3+88QoKCjb6+vr+INwBZIU0MjLapUkxd3AHEgnk0yRbpf2YwXMQq9fd3R0PdcZfWFj4rp+f35nXiMfhcNKcnZ1Frqg9evSozM3N7T9wlCKpjSYMqCbYKM+YVlZWvj9nzpw/PqtjMmpqaq6SSKTVrxEPFNU1NTUVuUH2/fffn92yZQti948kAYPkgUWybfKQbXyfpKQkf5BhVFgOyLcydkvx1acWZPMMCwtrgdpGCQ8P33/79m2lZIFU1CF5+iNxgJFokzzYiuuzdOlSi/T0dJGjVRDHmZGRYQWyir4iXn5+/ho/Pz+RArrgkraBgYHIRFGZRqpDFpIGGkm2qBL73t7eo1CXvwsKCtb6+/tfekU8Fov1zdy5c0Uu6oIq2HPmzJG4L6ZK45UpGwkDjgQblImpJFmPHj2KdnV1FSmWWFFRcZJCoXz4inj19fX37e3tg4UFXb169erq1auz1GWsqvVM5MBPpG5V4wolPy0tbfGqVatEFqsNDQ05Dg4O818Rr6urq8nIyMhGWMD+/fsT4uLifp0Iw1WlcyIIMBE6VYUfXLn79u370+HDh3cKt+/u7n5qbGxsiwGZPcPDw3u0tLREahx4e3vvKSkpmXRFitVJBHXqgksKdbTz8vIyKi4uPiqsSyAQCNLT0w0xOTk53kFBQUXCDUA6Aj09PagDX3XYrXId6iCEOnSoHCgFFPT19R3V19cXKdKcm5vrgxEX5t7Y2MglEAgijFXADsR1VSUxVCkbcUCKMYjH4+2xs7MjCj8G4fCYhw8fxnp4eIiE2jCZzCIqlXpaU5yU105VEEQVMuX1byL7MRiMTe7u7iKZ48vLy/8BMj2eI5PJIklWMjMz02k02o2JNFxdupVJFGXKUpf/qtJDp9PfXLJkSbiwfDabfR5TW1tLd3R0XCL88PTp0+fee+89jQoXVwRAZRBGGTIU8QFpfU+dOhWwadMmkUihurq6TExTU1OJjY3NPGGjv/rqq28//fRTJtKcUaU9ihBHkb6q9GkiZX/55Zfun3zyyVZhG0DcJ6a1tZVjbm4uUiZ8+/btR7755pvHE2n4ROiWh0Dy9JkI39Stc9u2bU7ffPPN34X1trW11WC6u7ubDQ0NrYQfrlix4sBPP/3Uom5jkaBPFiIBe6Eu5gj7gYTYP3Vj+8Ybb1jduHEjVlhvT09PCwbcp9DX1zcWfjhZN4/hgg+XfHDkTUXSAVw8PT2NSktLRbbkBgYGujB8Pr8fi8XqCQM4e/bsnbW1tQNwgJ2sbZRBvqlKOsAJJycnvcePHycI8wNEtWPA/+no6OgKP3RwcNjR0NAwOFlJBdcvRcg3lUkH8AWXvHk83r+FsQbJATAgOA9qEJB8jQ4uaZTVTh7yTXXSjWEv7ropSjyY7JSFfCjp/geqWOKhn1p4zEOJBw+n8a0kfmrRxYV0QGUh3Zg09K0nZXGBbqdIJp48pEPJ9xsCErdT0A1k8cRThHQo+aZNk7iBjB6ZQRNPGaSb6uSTcGTGRYMEIHgHl3RgHge6o0dm0D9eiUECaFjU66DJQrqxRI/y9JG+pNH8FhLDotBA0P8NsCIEUqSv5lMM2gOJgaBTPfR9DDJlEEcZMiYTCSWGvk/lyz7KJJ0qZGk6CSVe9hF3vXFgYKBHX19/0l5vVCVR0Dffb+hKvN44FS90q5J06pCtCW9CqRe6gRNTKYWFOokxld98UlNYgIFoaGi4TyAQJn3SHnWSbiJ0IelNKC5pD4/Hy7G3t/8tac9USFM2kUSYim8+WGnKJntixokkHRJ0T8SbsLe39wgejxe5y/NaYsbJnIoWSQM/Vd58NBrNPCMjI06Y8CKpaEGDFy9ePDE1NXUQboz0+llwfs1IGnAk2QIHO3nawE6+DYRPtnIDSHrTCQ/eZCefhHIDP5JIpFdZQuEUWOk3MjLarUkFVpBMOk2wTZ633FgfUGClq6srHofD6QvLKSoq2jRWxOcP4t26dcs0LCzsOVRJqZ07dx79+uuvuYoYpO6+mvBW0QQbZR03mUtKAQWToYge8EOTBlSTbIVDQglF9MptbGz+yAL/WvVGJpN5hEKhiNS10KSyoWgRPTj0UE0bUDb0xYsXXxkYGMhWNpROp7ssWbKkavzcb8xETSmUjJYNVQ2p4EjduXOn87/+9S/ZCyUD4eJKw5eUlOR6e3unwDFgItughZInDv2ioqIob29v2UvDA5MZDMaX7u7unwibD/JdODk57WlsbORPnGvSNaOl4aVjpIoW4PJ2bW3tUR0dHZywfCaT+RWVSv10/H9/bY4HHty9e9chJCTksZaWlrawgB9++CFl06ZNuaowXFkyk5OT/Tdv3ixSOVCTLliLW3AgeTP/1KlTgZs2bRLJpS0QCEbu3LnjTKPR6iQSDzxsaGjIJRAIgcJkaGlp4VlbW4tU5VMWaZQlB+ycR0RELDUxMbEE5dTT0tJuI72ytbDvYJG0evXqpaDMfWdn5/PU1NTb0dHRiC3f2tzcvN/Kyoog7AePx8uzt7cX+fyKvPFAR1CHwNfX91UlZeG/vXv3xh89epSjLJKgcjQfgT179pCOHDmyG8qTwsLCjX5+fmeFn0ESLzU1VXvp0qXNBgYG5sIdOBwOi0wmn9R8uFAPlIUAm83eSiKR3IXl9fb2tt2+fds6IiJiBBbxQCMWixU/d+7cXRDGjUZGRsampqY+VZbhqBzNRSAiIsLmypUrB6C24CoqKo5TKBTINyHkGw/AQKfTLUNCQp5ApamtrKwsnTt3brLmwoVariwEKioqtri5uYmUqwC7INnZ2fY0Gu05lC6xxAONq6urU8hk8jrhjiCuKioq6vDFixcbleUAKkfzEFi7dq1dSkrKfgwGI8IjDodzhUwmvyPOK4nEu3PnDik0NPSRlpbWdGEBbDab6eLi8q3mwYVarCwEqqurPyCTyVRheQKB4GV2dvacRYsWiV2ESiQeEFhTU3OdSCS+BWXsxx9/HB8fH4+ucJU1khokZ9euXc7x8fGQ9665XO5Pzs7OKyS5I5V4mZmZzgsWLHikra2tIyyotbWVRyAQvtDEWD0NGmPEmQpi7ng83mcWFhYi+3YjIyPDd+/epdBotGqFiAc6s9nsiyQSaQ2UoNOnT59/77338hCHDmqQyhAQd0oBFHI4nEtkMnmtNOVS33hjK9zg4GCurq6uobBAPp/f5+fnd7C8vLxHmjL0ueYj4OHhYVhQUPA5DofDC3sDqrrn5OQQxa1kx7eHRTzQ4eHDh597eHiA/RqRP3R7RfMJBdcDcdsnoH95eXnsn//854NwZMEmXnZ29nR3d3cu1E00oOiLL744uW/fPhYcpWgbzUQgLi6O8tlnn22Dsr6jo6OeyWQSQ0NDX8LxDjbxgLDc3NxlAQEB/4Xat+nr6+sOCgqKRT+5cGDXvDbu7u6GDx48OIDH442ErQf7ug8ePHgzKCjoJlzPZCLe75PHq87Ozm9DKaipqWGBvT2BQABZpgquUWg7ZCGgpaWFqa6u3urs7EwRM+7XSSTSSlmslpl4GRkZMwIDAzl4PN4MSlFKSsql9evX35PFCLQtshE4d+7c/PXr10OuVPv6+l7k5eU5h4WFvZDFC5mJB4Tn5+ev9fPzA2HwIv3BrvW2bduOJSYmvhb4J4tRaFvkIBATE+N48uTJj6FOr6ZNmzZaWFi43s/P74KsFstFPKCEzWZfIZFIEVAKe3t7OwIDA+OYTCa6xSLriCCoPZjX5eXl7TMwMDCFMovD4aSSyeRIeUyWm3ggk2hAQECVuFUuj8fjuLm5fd3d3Q1rlSOP8Wgf1SFgZGQ0ncVi7XBwcCBBaQGr2JKSkjk0Gq1PHivkJh5Qlp2d7RsYGHhv+vTpIhc8wHMWi1Xk4eHxA7rYkGdoJq4PWEyUl5e/S6FQfKCsePnyJT8vLy8kNDS0UF4rFSIeUFpUVLTd29tbpArzmEFZWVnpS5YsuSGvgWg/9SOQkZHxBo1G+4s4zcXFxR/5+PicUMQyhYn3+3xP7FkumICeP3/+0oYNG+4rYijaVz0I/L6CBefykNzgcDiXyWQy5Lm9LBYqhXjgVMPFxaXM2toacp8HkC8pKelMTEyM3K9mWZxC28qHQGJiol90dDS4GgrJi+bmZlZubq5XRETEkHwa/tdLKcQD4kBWUV9f31JTU1N7KKNGR0cFCQkJ3+/atatMUaPR/spH4Pjx4547d+7cjMFgtMQsJhoKCwvnhYeHtypDu9KIB4wBEcu+vr4FeDx+hjjyJSYmnt26dSv65lPG6ClJxrfffusbExPzV3GkA5vEhYWFfpIiimU1RanEA8qzs7MD/f396VgsViQx3+/GgTnfxQ0bNuTIaizaXvkInDt3Lvj3UwlILgwNDfXn5+fTQkNDlRpzqXTiAWhyc3PDfHx8runo6OiJgWr0559/vrls2bKflQ8lKhEOAmDL5NatW8uWLl0KVq+QPBgeHh4oKipaGRQUlAFHpixtVEI8YEBeXt5KHx+fS9OnT8eKM6i0tPRBaGjohd7eXpELv7I4gbaVDQGwOXzv3r31Hh4evuJ6vnz5cqioqGhNYGDgNdmkw2utMuKNkc/b2/uCjo6OrjhzeDxezfLly5PQ4zV4A6ZoK3AMdvPmzWgCgeAsTtbw8PBgcXHxOlWRDuhVKfGAgpycHJqPj8+PWCxWJFR6zHFwtrtnz54kNLBAUVpJ7h8dHT3r2LFjMeLOXkHvoaGhvqKioreDg4Nflb1X1Z/KiQcMv3//fvC8efN+0tfXhzxsBm1GRkZeXr58OQ1sNKNHbModbjCfO3v27Pw1a9ashkquPqatv7+/o7S09K358+erfOGnFuIBx7Kysv7k6emZIW6fb8x5EEwaGRl5Do1kVg75wKc1LS1tg7ggzjEtHR0dDWVlZWGLFy/+VTmaJUtRG/GAGWCTmUqlZsycOfOP7N9Q5vX393cnJCSk7Nu3j6kOECarjri4OPcdO3ZEQYWrj/f52bNn5QwGg6aszWE4eKqVeMCg1NRUrLu7+xlx93THG11ZWVmycePG1LKysm44zqBtfkPA09PT6MyZMxFubm5e0jAB92CZTOZGZRyDSdM1/rnaiTemHEQ4UKnUI1A5c8cbCO7tXrhw4ceYmJj84eFh9C6HhNEF6f4TExP9161b9zbUvdfxXUE2JwaD8Xdvb++vZSGMstpOGPGAA7/88ksAlUq9KG3eB9qCNLjx8fGpaDZS6KEHWTl3794dAZUOVrgHmM8xGIy1CxYseKAsIskqZ0KJB4yl0+n4WbNmnfo9jF6qPSBLVWxs7H/RFGm/DfWaNWtsDx48+CaZTBbJyAlBhlFQLPHJkyeb5I0clpVg4tpLHWhlKZImB1wgolAoJ8QFGIzvD+5xVlVVlcXGxv48VTOTrlq1auahQ4eWubq6ekLdcxbGGxz0V1RUfCTPxRxpYyfPc8QQDxgPrk46OTklE4nEFXDABHF+XC63Mjk5OevIkSNseQDQtD579+4lb9myZTGRSHSDcwAAfqRcLvc6m82OXr58eRtS/EUU8cZAARkLXF1d/z1jxgxHuEC1tLTUp6en5x44cKAY6UVg4Po01g4UL4mNjfUODw8PsrKyEilmLU4euJDz6NGj7bLc8JfVNnnbI5J4wBmw7UIkEv/P1dV1Bw6HE8lSJc7h31drxZcvXy46ceIEV1NXwmCFun37dmJkZKSPh4eHt7TV/3g8+Hx+T1VV1ddcLvcf6t4mgUtExBJvzAGQBNzBwSGeSCRGaGtri410gXK4t7e3k8FglKWlpZUlJSXVIT2BJEh4GB0d7bh69WpPKpXqCVUFUdLAjoyMDHG53LT6+vpdcFKFwSWJKtohnnjjCOjo6Oj4TycnpxWSzhvFgTQ4ONjL4XCqCgsLf7127RqHTqcjYr6zcOFCs4iICLKvr++fSCSSq66uroGsAw3OuWtra683NDR8smjRolpZ+09Ee40h3hg4ILzezs7ugJOT00oJgaZSsQTZrerr67lVVVW1DAajMQq3HtUAAAJLSURBVCMjo0nVJyTgRCEsLMyWSqXaubi4zHJwcHAyNDSEvCYg1YFp06aBQM3a2tprjY2NscoMS4ejW9E2Gke8MYdv3rxp7uDg8Kmjo+MGqApE8gAzMDDQ097e3tLe3t7W3Nzc3tTU1N7c3Nzz7NmzvsbGxt7Hjx/3DQ0NCbq6ul42Nze/umllbW2NNTY2no7FYrVmz56Nt7OzM5g5cybe2tra0NbW1sza2trMzMzM3MzMzEpPTw/2XFWS/aBiTl1d3bn6+vovkbRSlQVzjSXemJOg/BWBQIiytbXdbGtr6wdVdVIWQJDaFlRBbGpqKmxqakrm8XgpUGWakGo7lF0aT7zxTmVlZdlbWFh8YGNj86aFhYULnH0uhA/WaGtra/XTp09vtLa2frd48eIGhNsL27xJRbzxXoMy91ZWVu9aWlousrS0nAtVLgE2SmpsCNK8gSrpz58/z2xubj4lLW2/Gk1TqqpJS7zxKKWnpxuZmpquMDMz+4u5ubmPiYkJAebJiFLBhhIGThY6Ozt5bW1txe3t7Znt7e1Xly1b1qFyxROsYEoQTxhjEJBqYmKy2NDQ0MfQ0HCusbEx0cjIyFZLSwvyFr2yxkggEAi6u7uburq6uD09PRU9PT1FnZ2dWeoMwFSWL4rKmZLEgwItOzsb3ISj6urqknE4HFFfX38WFou1wmKxJjgcDvzPCIfDvdpjA9kxx1KzgWuAAoFgGPx3Pp/fy+fzu4eGhrr4fH7H0NBQS39//xM+n88dHBwEZ8mM0NDQQUUHbTL0/3/KBobS8SSMwgAAAABJRU5ErkJggg=="},1052:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAAAAACi5bZQAAAfaklEQVR4Ae2dB5gVRdb3DznjMGQxkMwbiMuYWCVnGFdwMUeyYeVdCTrkYFaSOedEUmclCAqIKCg5KciAgAwjOAhDmCHU5/l/4dRzum/dvs2dF7736d+TzvPvqgv+cHr6VlVXkYnwJRITiYnERGIiMZGYSMz/P2IKNgVkrxGyONiC8pCrz3YjZCMpkOAIgt1c5qAMSpZxcBxNdqDO3RSQfB8xGykgQ4xQioNiKGeRg4uM0BXJOgmWIriOy9soEUoZB78R81fUoykgq3zEbKKAjDJCDQ6qopxHDtKMcAOSjRIsR3AHlwMoEWoYB7nENEf9OAVkbSQmEnNqxJTloDTKxeTgciOkI1nvK+aO5Ik5TkyjZIk55zoHV3rE9Ob4pveYSWjyF4IH6XMNgvPQZLlhJiHf6SvmFVyrjACUQ3A5CVchKSlidr0n/IJkJpdvot0IS8xl1zmoHUfMrcbB15YYG8RNUU5GvcAIJNxsNFqMAc2lSz0ECzy/OKqKmOkkTEVSFLUBlpjPjYO+ccRcZxx84i8mB3EL1ONQT5OL+0m4J6CYNOlSG8E0EuYhqSxiPiMhE0ktLlM8Yj4wDm6JxERiTrkY4xLze3wx24m5W4KLXWL+I2LORLmQhGmFLObjgYqRMcSM4It9XWLyH2fuscS8PVBxEzF/kmA8+pTUYjoi3iZiyqH10MeFLfHFjBuomJqAmN6kKBVDTHECXjGKjZaYzhSPNYYpr8VMNkJlad3cKNxiKpHipgTEDCRFrRhiagQUs8QScwPFY4lhymkxD/uLaZeYmPqk6BeJicSctmK+NIoF1l/hTorHAhFTz/qN/JARqkrrpv5iUk9HMRddAZg2iPcvYh5BUk36lED8sgT3IdgvYkqjS2/E2xHfiwR3/VTEa/3FFEe7AaePGEUxI0wkRUnE6yV43gjlJO5shMskrimpEgOYv522YioYYYK/mOUSTPIXk26EFhLXiC+m+ekuJhITidGPkVcgGEWKEkZ4gjSI16EEz8UX01ziSsafs06lmPQU5sdcwBxAfBh1J2JWc7nPCEdwsTsxy7jMSWEqIABlUoQiWsxwxJnyR/6YIow1THfURU+lmNaos40v6cRsMx7kAe8HLgvIiRLzAOr5qEE2CQ8haU/gVIppg3qXS8xWo9GzBPkJiRlkjceAXSRkIOlwasREYv5FihoeMa1cYrq5xNxIzCYuj1EwuhlmsBaT4xHTnhRXeMTUIUWfBMSMqqVo7BFzPfIc6866Q7gBF7dzfGKHJp2YBVxuQVmilqKk9eCM4AZ07GeJ+YWDVbWEYWjSvZbiHx4xl+smQwtvaBPMJuFTPbTppIlRXCHX6iL4lIR5MkJWzgijHDMkp2zMF8wjQQ+Gu2loQKjBcCUm8zQRE4mJxNxoHMxzifnKKwacnJhqCD4JKmauS8wnxsGdccRc+YmDDEvMN0iOcJmP8rlOzIWWmM85nor4CsR1UNdCfTWXHS0x27h1liWmPbfoic+eiI71/cXsRpORaDIF9WGOC1AutsQM+sRBy2QtA2mEegeX2fakviWmFGqUm1EORX0X6lzUlpgJXI63xKA8gLIt6jH+YqZbXwn+Lt9F9qK86L95fYw8+TqmaM+VYQc1GC5PviLmJS4nWWLyuMzyf/JVU7TqyXfHKVw4FImJxGykgDxgiTnumtQvq8ei+qO+FvVaLWYSl49YYqwH56tQ90P9mRYzwxKTjroAtSVmJAVkpY+YvaMCstASc3/GHwyMIWYCtx6ZwQxDzxGoR6Deo8Us53SpJWawdHwf8eeos7SYzdZn1yfmPi7/bYn5elRAcpSYEECMoMUICC6xfmV9aICIcT3HVDReHM8xGogJR2GL2Y8gzRoMfysRMbX/h4uJxERiOpOiPeLxqGcZwfr7vYY6U4v5mxH0DEn5kxTTOrliXmgjHJD4GyuuTIpUxBmzmf7SriUxZ6C+EPWfUW8XMRXbKM5APJM/6YM2mhUuMaNnM2AqgkpthAWGuZXLLiHFDCDhN4mnU1wGG6YTxWW9iImBYbJJM8clZr4ER0nzDvKaqEOKGUhCrsSfBH2ZKZ3cxJ8lkCdfEGI8Jpc01ixB2f8WMZGYSMwQEo5JPIvicr9h2pETmb8lB4bZHWOBXhUua3rEzJTgGGneFjHlEhCzpYZQjoRqEvfYJfydmFW7FPsNk4v6LPJlCi6m8QeerbvfTkJ1btFolzAAcWoNpiiXRWsIGWhyxDANOKhGQh9cPCxiiqBPWyPcg2RjuGGHjkZoi2S3cXAueZB/uPO4LG4Ud5PiHCMMJgcZRqhJiv8yQn2JGxnh5pMZj+lkgHvu2ilGnnwv4LKk6znB8+Q7KKiYWqQY6C+mSfBZgkjMSf8otT5JMecH+1E6N6iYh1xi7jdCPX8xtwYSU66qUAS3OZTX5ghdkew2vvyOJrj5FqmqeQUXm3J5pmGOIgB3EJMijf+aIwxGUoIA4W8ljDfMPjSsKU1K4OIw62/VmIMqxDTIEa4LJGaiXmZ3lufX9XzjoL1rpOmfeo3Id44BxmwSHkHS2rXOtwUprvZ8792OOuRg+ONGSLEXDgmzjYN0z6pN93vXiiVyLYuEh52rNmMtHBK6y8Kcg5GYSEzhi1H3GNzsUpN4j7lFi3HdY7aQMBrJpRKcYTStHfeYIGJWxxHTZx6Ti7xLiz/oiuC5FsKLSPIxfY5yuRGGoUlpfF3DxWWIf0bdUovZhNYXIQaT0A5f0na1EN41zEAJuszT9EJeihjwF8Sb/MVUbKHJcogR5kmrfI/+y5DslN8cfzGauuqFe1lPL2KEj0hxwMTjOGm+RH6Oju/0F3OpceAQs0ha7XA9+coUrf8DngyGu8S85Dfs4GYXaTIdT75eMU0iMZGYQhCzkTRrtZh/eJac5suPejPXPeZKBK+Q8KtRTEqGmC+Qn63j3ojbyL9IHsq6gcTsGSI0I6bXOOawiLlwnJCBhmO5HIvyIcRfGOYj1CnEgLMRdCLhfg4eMcIy+eNr+YuZP47ZqsXUHSKMQpOKHJe24kzDvIN6D5cFKCcj/n6c8KsSoxlGwl4RY/OV9aY+ym9RDkB9FQXE+HKlnxhZBqLEdDXC35GAVBOQx0hYmehguFfMbM8eVYEHw4WSxpc0rxjHSxbt/J98U0xAppCwNhITiUmqmPtIiPGMuRh5LRHzH8T93WI0xpd6+lpgMc1DiHmBhBUxxSxKZ8ZME3pw0I6YJlbcDw1Li5gcxOuCipnMrWcYYS5/XibKL6cx3TnoFVTM++nMJPRM1WJmpDsYPE34PaaYN4l5wgjF9PtU+v4PMUJAMTuN4hn9BxNTOaiYB60l82drMWPJQe9AM5HvecdjHLMEIcQ4n3y9713XDipmlHuPKgf9IjGRmEIQM42YJ41AQroROkpczWiuo7is8xXzshZT1zPpNEuCgwgut9YhzJCeFFTMrXHEZJ3L3LaVeQD1UuQ/c/AtMWXOFUojAcUQ9DTMFNRlkS/mnutQNtzKjED9NOoCfGVB6w4iJhXBcvnPK46gF4JcdDyM+q8cN0SwG8E+1IdQ7+Dy5xhiFmxV7I0j5kdielgPeAv1/7RO/m69OkMyg3PIGiubhPodPTD4Fz3s8LWIIdDFaFLUz7ADJWaLCYbjhXQ9HuPGuxvI1sDLWZWYJVpMunvVZkJiNp22YiIx2+QVtWbJFpPKcfUwYjafjJihFZivpdVOBE7a7WeGE1MGyXoOdqGENfMs6tfQ8HgwMUXRpQe65CM+hPocjusjOIrgiHXxBJcnUB5EPBGfUpyYlfsVRwKKCcuXJHyM5EzZN9umJzEbgompY72SNNYaxbK+1GRa71u2kbt+rtz13Q8RvQpHjOO963OdU7QOMc4NAlug3oM6yBtuQnfHA95pIyYSE4lZQMKnMrxX3Gi6+99jnpPuy2W8o0YMMQetyQPrFdbOYu0IyquSK2brEuGotP0NwXajKED8RhpzDjEPI+nAQQvDHECQhXo4Gm7TYj7mFC7pRbRuzkF6DDGz0AQ8heA21Jeh/pjLOSgbIN5qiWmQxoA/W2I2o+HBOGLuImGvtP1Q3qK1ybbeOprkPyu/wPt1TYsBg0iQVIlJnLtEjP37LMsS01WmTwLuUZWb4Gbqwla/bWvdYgaQkBdejHuKlgHLQm7eFV9MJCYSczPqDBKMMFVeYrM5bol5iISfpMlCBLcbjV793ddfzLsIhoUW09t6/WGj/ue6OZCYhhOYq1Ffew/zFAcvGWYtgllGeJEvjrXEzLlH2CvtshBMNcIb3PNpxI8iWMtBBoIaWswqxHO1mLKIu5LmjnsU0w3zCmpr3n4bgg/iitFsQC7bFftAQMQEpxIxehfkZ2XaTMQISsyZCJaS5phJnETELNLLWb3UCCVGv2Th2A3EIUZ2A9HsOIViIjGRmA0xVgOnusSQ0PQkxUyQe8xFruWsf9FippPmuEmcf8ac1N//FjOAmOv/d30DU1LELL9BgDUzFQ3BhBuEZYa5l8s7UG66QfjKX8xm/pChaDEZH3jU+PI5LpYXMTvfEhoQky5/2GjDZKL+BvX9qD08gv77tBj1DDcFdWMCImaa/gJts5iE9605TJSLSHjFI0boK99Y3FQRMTZd/ffYG2MNNlcjjVwMOEV7BYGAL1k4x2OWJPTq3xKjCTBLEGo/X+G1SEwkJqlipluT+g2lWxkEU0n4xiXmXS1mYUAxfWVu2E0R/0N6r/YXMxr1my4xz8UUs+0C5s6NzCDU01CDzYY5gLofMWejCbjUEtMLTfZrMYcQP6jFFEH/dAQfcvkE2h0yirkXaJZyuyUo7zTMFNRvoT9YaonZi2S/iCm9UbMvzqR+d9T3y9y6lxGkSBEx8paviBEmazEE/ixrBCcb4HxlR8bhfkXZyjDD9eroPBEjyKYXSZii1WSQjV7O6hIzwV+M3jnRyzTS7HEtHAK5p0ZMJCYSs7kkc4Ml5ot8X4a6xDyQL9TjD0w1zAkET5dk3kHyJy5LENMAF5/n8ul8RYFhZpQUioiYbASdXGKuzNfUgxgrOGaYY6hPBF8y70aLEYKP+TqpbRQyEyk4xLhxj/lGYiIxkZjCEnNvssV87xUDKB51Yrz+tl/Hw/UO+4coIL3iiDmynMlC/WRDAYsOSjTUVAgo5vhy5nWPmPUcf4u4TENFOWsiYLmQbZheaLJI4s2IX/jfMeo1HC8gpnxDTSlr+gXBuDhiNspDgXee42yj6RRAjOu868qOQdEr4++2REIzoykpF1vZuX6AujT0ER+OwfA2AcS4Tki/wHmShSbEWbTkesAj0CQSE4lJshi5x3QwmkpxxRSPIeY35CQ8YITqiYsZboQiEl9lNGeHENMrppjddzDPo/7mJaGsiNmGYLkl5nruc59HTCt81hRuPZmElui/2TAPcovbLDEb+do6fzG18Xn/McK9SMBAfOp3iGehTtFiViPe4i9mPS5e5itGcydZiJgPUf/bEmMEW8wCJFDq5QUj6ENhHvYXc71xsIiYe1E3I6DFjED9ur+YR0O+d+0+DtE5GO6cwXEe8aFINw4+C3UcooiZEok5eTHDg/woKTH/8eyIVI58yfQXMxE/SiHELCXmUdTXuH+UQonJGSA09BeTNYlZ6i9mOy52RtxhAPMkB4+RpjUu7tZi1nHrVZaYJzgYaYmZOcCXLsQ0RX0u6tHc81FLzPJJzKZwYjaSA4gRtBhhAgn7kLheFhUxgj4tR8QMoIAcNoyIEcKI2XTSYhxvuHnZ6BTjOF/JjXqX4DQTE4mJxJwT4+yTE64tuA657jG7DeM6+8SI16sSE3PEMDGGHS6UdrVDinluCVOey5JpmjOIacxle8N8h/gcEhpycNUSf7rwxWbElEtTlCf44rIDGv/gEpOGJnehfgJ1W+7ZFEHFNE1pjkuj3eqQYpbKl0gn5Q0zl3wpYfypQ4GoaYBLTEfrmJ7PZbmVk7IGhBEjqzZDj/mCCq7FifGp7RTj2PTiVImJxERifiTNQhk8cFJN3rv2Utr4cyEFopZbjIytjbXEVKN4FDfCRBLW+Ig5nqc5hhwlrFH7PE11jouUY9rauZBdzp+i+GWHJovJl918bQMa97TEZKJPqrQrhiYlLTEHucUOBJfnCelIVqE2QkGecNwrxs1OYjqFWDJ/IP4+eCtIIy/KbvU84M1HXTnuN/d93teLQ+3t4GZHaDH744tZThrnWbQBxeS6NlOPxBS2mGxiOheOmO8dYrag7GKJ+dIl5lP9M3y5Ea5B8mOiYgqyHCwhpoUnr6rF7EN8EDXIq83UJKZibaGEiFmLAI+rlWsL+JDtKHtbYt7OYirhtouL1RGnoJ5vmJ+5xRoEPYzQH8lWLk9kMTsD7gAdHhEzDPV7RrHOM690sYixXgh92TiAGJszEX+FepwRyiExDvKIOT/g4sRwOI5cdayPcbzIFVyMPggcyD54DmTP8NNZTCQmEjPLKL5C3Msl5m0OXgotZkwgMfp48uBiaqVrSlh/EQQXkNCegw4eMYOmMQeRgB/Q8yUtpvg0oT8Hd6H08E18MT3QMFuL+XWasAPJHC4/TGfunCZsiyPmVqNJRQ6u9ezKboASI1sYOICYoDR3ixGmajFzSHgdSXnUnh+SZwLuOOTYnTWDhF3uTS+SJSY9qJhMLWaB68jVZSS8FomJxBS6GHWPeUSLyUb5V8MMDSomlRKgnbzAZ1MM8bf+YlI9X1DnIrnQX8w7gcR8OojJ0mLqIb5Mizn4MPOuYZagvkSL2YaeHxvhBW43luJRCZ83Gt2bkTCM4/GIu/uLKYWLD6J/R2K6IqmkxVyKJhm4mB1HTG/U80WMRsQIrqMgFyK4zWgoHvWsJSY2asW9EqPP4X2OFLaYgah7JrB516LQYtKT/C6B60UutxhZOKTFhN+jKhITiQmwTUpX6+yTVajJhfEiP7CHtZghRnEkoJh3SJMjQ/Q2X/q/S/AiKcoh3mR9g+sbU8yhecykFsw41LegzpynuImEK7jFNUZ4G32qEnMZl50sMWe3EH7m+Pg85nli2nPZzTonsrSIyZmnKeA4P8Y5kTO4nElMCoL6pCiG+Ab0eRR1TV8xwkfW2Sd/Q51vFKO8+oWRpChqibFZL302yJZs/0K5Uu/OGpjWsgtmPjmRN+GfJWFtApte5AZ4vVgYR4oKXjH+Z9HeoTe9CCNGb1vrRhYORWIiMckW8yEx40VMgHtMNSOMDCpmmz69+CZ5B+R7ecGkhkmIzmHFOE4v3lKZuWkPc8gSk1pZUQbxh2hYDfdXxN0Mcwhxx/hiUrhPTcMcRZ8DXOahbFmZ2c7lqsrCBCOcJ3EPBI+hLukvpt8epivqZVxu94iZjCbHYj7g9TDCFeRgjp6JvNoI1zjFCMWNL81kbeNWEsYboZLEbfX/ql4x/2WYHjKpf9gj5vXgww5uMbNdU7TpXjEhT/3LCvqG2yivGPdZtErMa5GYQhYz1yWmmxbzddgfpW3xxbSJL+b++GLeSFhMtRp/UBVlqRpMedTv7WKqaTF5iK9Hw2Ii5jsEFUmowsHZRjiEnqA1Wm/h8nuUKf5iiuJiT38x+2oII+KLmbCLOZqAmGOyPKkb4jGuCbcR1k4CdQhihOdJ2G4Uz+pjLK1Hgc/8xdQ0ghKjcIsRVicgJlcvHMoIMkXr2HHIfRC48yQLJaZG0sWsjcREYgpBTCN5rXy79Sg1Ov495gN/Mc+57jFvybWv9HGI3n3/S8lne8Vsd31f+EHE/BnxSwnfYwa2Y/K43IOy72fM9SRczXELS8x7aLhYi8lFzz4kvMjBLMP8josYNbwY3TeImOq4NhnxB0bowUFPj5jGaLiHgwL0/MYIY3FxJ5dHUN6CJv0JkpBsdYhxMJ8UelJfUGIWkD96xuxNI5Szn/qdiBjLw14EFxkHm0iYaUA4MZ+QoKdo3WKWBFzOOslfTLpxE3QfPCEJU7SRmEiMazlr16CnkXkm9RsYTVnkLjGljPo+9Lq/mHYmLk9qMUamaGOxhYTpMcXszWCGjxJ+llb7EYxAkyu1mDzErxrNExyP8YhJR/PKXBYbxfSVax0RbBcxKdbfajHiN1Af4vLAKKGFJeYpDkai5zBcnGMUBYh7k5COJEeJEWaQME/ibfLTopeBBGKJZ1n7JRSbhSKmnmdhZoNYE24ipgRq68e0l1HkkT8rHYPhwiKJ9ZNveDF6d1Yh8VP/dpHgXDg00H85q5e1kZhITJLEvOp/jymwxrsfImFHIYqxXql829oipqncY3bEmNQ/R5aarUc83GgSFvNLpvAbkh4d/qAHgikdmJGZwhGMYiEeYjS3cnytS0zxTOFeLWYWp/NR7kKLhzowz6PO5/hIpqYvmmA5QAmUacTURb3IMHdy2RbxeejTzyHGRTH5/3KW/+F2uxGnGU1l5EEPbHhLi/HwgP4B99KKHLyjh6mbIXg5pJgU/z2qhMBPvm4xL7nFyKt/7ilaB+49qiIxkZhCFlNJxEzzF3MEcRv/DT8qolzpEXMmaiO8LS2+con5JpQYeeSuqcU8RcKqmGJm1tIUFTGHdzDDdIuaxJSqpcFtuwjKtug5yhKTjQTlGjTBP8BopPmIz+M0zSOmClr/JvEXCB6LLyYVDZfwn7DJEpO3QyiIKebd+FssZFDiyNHGECOo14unGKG03mF5EAl79AZ8D7rFqJeFjogYjfvJN9li0vRJFoJ7PKa2Q4xj50QHMktw2ouJxDztL2aFtJusx7nOjSFmr8SzLDHtyYWsjzmUgJjjucybKUJxLaYATTJSAlJUi3kO8au5zHEkKBdIu0dzhZrc+C/WHzzY+lv9JO1mIM5AnY4anEH+fM/tfrHEHMkVjsXcWOdaIzTXYmboX9duamsx9qspG+KuxT2uVwY+4v/U38oa850deNW5iJkQclKfHA94bs71F3OD2iBQkfBB4M5jhMKv2ozERGJCivmBmG5GaCIdKln3mIwQ95gGRrgloJgT0iUz+WKC32N2NGdGGGEAEvAPBF+jfh316gVMvlFsWyBUxwwJ+vQ1zA7ErbWY8s0VFRHPkk8a4xFzGbdLiy/mjOaaMlrM9ObCFiUmBI2J2anjoaSo6LOeXsQ4NiFVKDEGuMW4NyEN/oDnJsS2teReOOTYttYpJgmH2532YiIxkZjxpDHCy8E3U9fIk287EbMTZXNLzHQjJEtM7uMBWeIvZhsujhioGGqYX3CxGzEdkOdoMWu4xQp/MfXRZQQ+pL6I2Y94qPUHrzfM8xyMscQsQ5Mf/MWswMW1McVsoIA4D2wYbHxZQMKniR/Y0BPxv/2HHRZ6TgcuHuLsE/f+MYFwHvExxD0TGf6Ij/jjMUKtEEd8vHZqxERiIjGN9KT+0qD3mI/8xUzgcnxSxBQNeI+pj+CFQPeYyz5wMNgSsxDJYS5/7870RzCqu+Imw+z5QBiIfKcWs4WvbbLEvMnBlDBiPuGer1lifviA2S5iSiF4vjszGHVWHDE3GgfzXZP6l7mfY4QeiNcHOxRmbxgx4ITrOaYcyrWyRQAIv5zVPUXrfPIVbkjGER9uMe4nX70byGkiJhITiTlmickgjdF01d+VmhrFFSLmJ5StPGJ+ldaLEYwzGsQtjeYCucf8mLCY8fUVl8cQk8YX61hiftukWF1fQE+TjbxAxJSqrygtYo6i8S5LzBtIjnGQg9ZnIk5F/YVhLueyLuIy9TUlOC6C8mxLzL+R/BhHzL9IUT2GmCpx9ww/REJ/owg0GA70nuFgV4yVHtUpKCLmRtRr3GLiH4cYbjP1e5IhZp4E7j2qknVCeiQmElOoYo4cZKrjTlaWaXtQg4mhA2WFexEftcQgLk1McS6L+4s5ho73W2IOcbCFNNPQsB5/VBnSlCoL5GJR1PclV0xLvePQF6TZahQT5b1Hm1WI7+TyHn8xU0mYF3B3vv0EXN9emxqQXDHBDgIX3AuHZCsmxxStLaZygFP/NB+4NlM/9WIiMZGYCjFO/cvyv8e8ruN1/mKOSYuZJMx1ipEvUofdYvTc8PVI1iRLTIMmf9AawbImml84PrZMeBTxZ9aYCeK3/MUslI4vNhGWxReTyX3mo6yAPmf7i7loGbMVyQg0/ClZYo6bePzu+kpwhAQR46WdUbjFeNahPe8VI+ixuaSI2WU0IR/w3GLSw4mRwXCXmH6RmEhMoYnpQ4oyHjFpqA+Hv8doMbfIdsMeWhpN0RBiPvMXc3MCYqb2Uwz1iJmEfMKUP3jFODjcT8iYwvwgF4/2Ex7kaw+hrE7MXXLtecMsmSLcjdzDuQTHXN7hEXMHeu4TMdXQ5z3DzMPFvcka2iyKxARkCjEvGF/e4GvP6vOubfqSYPy5xnoCIluMsEHEXGqELkhWJktMDXnydeN68gV6itZ32EHYE3DbWq+YTWGffB1EYjxEYm41Dr72iCGQFDFT44rpE+Ie0xrli1pMHsr6nnvMiphiat/ioKVHzPuv/cF7KNejyYchxGxFz8t8xfyKaxMRf/cacxEx/+T4HiPMRMOziOnOZU+U1RE30WKO4qMm4eIbhlmEJPfkl4F4mEXMvSHELCPgK+YnlK2N0Nb/LO0h5ESJAWa9PEAJyRbjXjhkgr/65z9FK7Qg4Ng5MbCY4FO0biIxkZhQh/QOMr58RszdxsF48j0kcyli8KjMu9MBLjd75qwa+m8gPYgCslH/lr0pjpj8tQHJMb7k4WK2cbAHTfbp+DBisBfBT6iPc1mA8mcjZEnrjUbIkdhNvvQ5hOAXh5iI//FiIjGRmEhMJCYSE4mJxERiIv4XgxMe0pYXoYwAAAAASUVORK5CYII="},1065:function(t,e,i){function n(t){this.$style=i(1005)}var r=i(22)(i(941),i(1099),n,null,null);t.exports=r.exports},1066:function(t,e,i){function n(t){this.$style=i(999)}var r=i(22)(i(942),i(1093),n,null,null);t.exports=r.exports},1067:function(t,e,i){function n(t){this.$style=i(997)}var r=i(22)(i(943),i(1091),n,null,null);t.exports=r.exports},1068:function(t,e,i){function n(t){this.$style=i(1009)}var r=i(22)(i(944),i(1105),n,null,null);t.exports=r.exports},1069:function(t,e,i){function n(t){this.$style=i(1013)}var r=i(22)(i(945),i(1110),n,null,null);t.exports=r.exports},1070:function(t,e,i){function n(t){this.$style=i(1010)}var r=i(22)(i(946),i(1106),n,null,null);t.exports=r.exports},1071:function(t,e,i){function n(t){this.$style=i(996)}var r=i(22)(i(947),i(1088),n,null,null);t.exports=r.exports},1072:function(t,e,i){function n(t){this.$style=i(1002)}var r=i(22)(i(948),i(1096),n,null,null);t.exports=r.exports},1075:function(t,e,i){function n(t){i(1015)}var r=i(22)(i(952),i(1089),n,null,null);t.exports=r.exports},1084:function(t,e,i){function n(t){this.$style=i(1007)}var r=i(22)(i(961),i(1103),n,null,null);t.exports=r.exports},1088:function(t,e){t.exports={render:function(){var t,e=this,i=e.$createElement,n=e._self._c||i;return e.showModal?n("div",{class:e.$style.modalContainer},[n("div",{class:e.$style.modalMask,on:{click:function(t){e.showModal=!1}}}),e._v(" "),n("div",{class:[e.$style.modalContent,(t={},t[e.$style.show]=e.showContent,t)]},[n("span",{class:[e.$style.close,"iconfont"],on:{click:function(t){e.showModal=!1}}},[e._v("")]),e._v(" "),n("div",{class:e.$style.videoWrapper},[n("VideoPlayer",{attrs:{"video-list":e.videoList,loginUser:e.loginUser},on:{"update:videoList":function(t){e.videoList=t},"update:video-list":function(t){e.videoList=t}}})],1)])]):e._e()},staticRenderFns:[]}},1089:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"nav-bar"},[i("a",{staticClass:"icon-round iconfont",attrs:{href:"javascript:;"},on:{click:t.back}},[t._v("")]),t._v(" "),i("a",{staticClass:"icon-round iconfont",attrs:{href:"javascript:;"},domProps:{innerHTML:t._s(t.shareIcon)},on:{click:t.share}})])},staticRenderFns:[]}},1091:function(t,e){t.exports={render:function(){var t,e=this,i=e.$createElement,n=e._self._c||i;return n("section",{class:e.$style.columnInfoContainer},[n("div",{class:e.$style.columnInfoMedia},[n("img",{class:e.$style.columnInfoCover,attrs:{src:e._f("resizeImg")(e.data.lecture_url,148*e.ratio,195*e.ratio),alt:""}}),e._v(" "),3===e.data.column_type?[n("a",{class:[e.$style.play,(t={},t[e.$style.active]=e.isActive,t)],attrs:{href:"javascript:void(0);"},on:{click:e.showModalHandler}}),e._v(" "),n("span",{class:e.$style.mediaMask})]:e._e()],2),e._v(" "),n("div",{class:e.$style.columnInfoInner},[n("div",{class:e.$style.columnInfoTitle},[e._v(e._s(e.data.column_title))]),e._v(" "),n("div",{class:e.$style.columnInfoSubtitle},[e._v(e._s(e.data.column_subtitle))]),e._v(" "),n("div",{class:e.$style.columnInfoAuthor},[e._v(e._s(e.data.author_name))]),e._v(" "),n("div",{class:e.$style.columnInfoAuthorIntro},[e._v("\n "+e._s(e.data.author_intro)+"\n ")]),e._v(" "),n("div",{class:e.$style.columnInfoFooter},[n("div",{class:e.$style.buttonBox},[e.data.had_sub?[n("button",{class:[e.$style.button,e.$style.hadSub],on:{click:e.start}},[e._v("开始学习")])]:e.data.is_onborad?e.data.groupbuy&&e.data.groupbuy.had_join?[n("button",{class:[e.$style.button,e.$style.disabled]},[e._v("已参团")])]:e.data.column_price_market>e.data.column_price?[n("button",{class:e.$style.button,on:{click:function(t){return e.subscribe(1)}}},[e._v(" 限时 ¥"+e._s(e._f("columnPrice")(e.data.column_price)))]),e._v(" "),e.data.column_price_market>e.data.column_price?n("s",{class:e.$style.sourcePrice},[e._v("原价 ¥"+e._s(e._f("columnPrice")(e.data.column_price_market)))]):e._e()]:e.data.groupbuy&&!e.data.groupbuy.had_join?[n("button",{class:e.$style.button,on:{click:function(t){return e.subscribe(2)}}},[e._v(e._s(e.data.groupbuy.success_ucount+"人成团¥")+e._s(e._f("columnPrice")(e.data.groupbuy.price)))]),e._v(" "),n("button",{class:[e.$style.button,e.$style.only],on:{click:function(t){return e.subscribe(1)}}},[e._v("单独订阅¥"+e._s(e._f("columnPrice")(e.data.column_price)))])]:[n("button",{class:e.$style.button,on:{click:function(t){return e.subscribe(1)}}},[e._v(" "+e._s(e.data.is_preorder?"预售":"订阅")+" ¥"+e._s(e._f("columnPrice")(e.data.column_price)))]),e._v(" "),e.data.column_price_market>e.data.column_price?n("s",{class:e.$style.sourcePrice},[e._v("原价:¥"+e._s(e._f("columnPrice")(e.data.column_price_market)))]):e._e()]:[n("button",{class:[e.$style.button,e.$style.disabled]},[e._v("已下架")])]],2),e._v(" "),n("div",{class:e.$style.columnStatics},[e._v("\n "+e._s(e.data.sub_count||1)+" 人已学习\n "),e.data.column_unit&&3!==e.data.column_type?n("span",[e._v("· "+e._s(e.data.is_finish?"已完结":"共"+e.data.column_unit))]):e._e(),e._v(" "),e.data.update_frequency&&!e.data.is_finish?n("span",[e._v("· "+e._s(e.data.update_frequency))]):e._e()])])]),e._v(" "),n("VideoPlayerModal",{attrs:{isShow:e.showModal,videoData:e.data},on:{closeModal:function(t){e.showModal=!1}}})],1)},staticRenderFns:[]}},1093:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",{class:t.$style.catalogWrapper},[t.freelyRead.total>0&&t.isNeedSub?i("div",{class:t.$style.freeReadTip},[t.loginUser?[t.freelyRead.countt.data.price?i("s",{class:t.$style.recommendColumnSourcePrice},[t._v("原价 ¥"+t._s(t._f("columnPrice")(t.data.market_price)))]):t._e()]],2)])])},staticRenderFns:[]}},1105:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.$style.main},[i("RichContent",{class:t.$style.columnContent,attrs:{content:t.richContent},on:{"update:content":function(e){t.richContent=e}}})],1)},staticRenderFns:[]}},1106:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("section",{class:t.$style.grouponContainer},[i("div",{class:t.$style.grouponTimeline},t._l(t.progressItems,function(e,n){return i("div",{key:n,class:t.$style.grouponTimelineItem},[i("div",{class:t.$style.icon},[i("img",{attrs:{src:e.icon,alt:""}})]),t._v(" "),i("span"),t._v(" "),i("div",{class:t.$style.text},[t._v(t._s(e.text))])])}),0),t._v(" "),i("div",{class:t.$style.grouponItems},[t._l(t.groupbuyList,function(e){return i("grouponItem",{key:e.code,class:t.$style.grouponItem,attrs:{data:e,price:t.groupbuyPrice},on:{join:t.joinGroupbuy}})}),t._v(" "),1===t.groupbuyList.length?i("div",{class:[t.$style.grouponItem,t.$style.avatars]},[t._l(t.currentShowHeaders,function(e){return i("img",{class:t.$style.currentAvatar,attrs:{src:e.header||t.defaultAvatar,alt:""}})}),t._v(" "),t.currentHeaders.length>=5?i("span",[t._v("等")]):t._e(),t._v(" "),i("span",[t._v("已参团")])],2):t._e()],2)])},staticRenderFns:[]}},1108:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"quene-wrap"},[i("div",{ref:"scroller",staticClass:"quenr-scroll",on:{click:t.handleClick}},[t._t("default")],2)])},staticRenderFns:[]}},1110:function(t,e,i){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.$style.grouponItemContainer},[n("div",{class:t.$style.grouponItemMedia},[n("img",{class:t.$style.grouponItemAvator,attrs:{src:t.data.host_avatar||i(226),alt:""}})]),t._v(" "),n("div",{class:t.$style.grouponItemInner},[n("h3",[t._v(t._s(t.data.host_nickname))]),t._v(" "),n("p",[t._v("仅剩"),n("span",{class:t.$style.num},[t._v(" "+t._s(t.data.want_ucount)+" ")]),t._v("个名额,\n "),t.time>0?[t._v("\n 剩余"),n("span",{class:t.$style.num},[t._v(" "+t._s(t._f("formatTime")(t.time)))]),t._v("结束\n ")]:[t._v("\n 已结束\n ")]],2)]),t._v(" "),n("div",{class:t.$style.grouponItemAfter},[n("button",{class:t.$style.grouponBtn,on:{click:t.handlerClick}},[t._v("去参团"),t.data.amount?n("span",[t._v("¥"+t._s(t._f("columnPrice")(t.data.amount)))]):t._e()])])])},staticRenderFns:[]}},1336:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(65),r=i(1949),o=i.n(r),a=i(1946),s=i.n(a);e.default={name:"courseIntro",components:{IntroPc:o.a,IntroMobile:s.a},data:function(){return{isInApp:n.a.isInApp(),mobile:!1,isPreview:!1}},created:function(){this.checkMobile(),this.isPreview="true"===n.a.getQueryString(window.location.href,"preview"),window.addEventListener("resize",this.checkMobile,!1)},beforeDestroy:function(){window.removeEventListener("resize",this.checkMobile)},methods:{checkMobile:function(){var t=document.documentElement.clientWidth||document.body.clientWidth;this.mobile=t<860,this.$forceUpdate()}}}},1337:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(220),a=i.n(o),s=i(99),A=i.n(s),l=i(218),c=i(65),u=i(219),d=i(654),h=i.n(d),f=i(821),p=i.n(f),g=i(621),m=i(1075),v=i.n(m),w=i(787),b=i.n(w),y=i(634),B=i.n(y),x=i(935),E=i.n(x),_=i(798),C=i.n(_),T=i(822),U=i.n(T),Q=i(782),F=i.n(Q),k=i(797),S=i.n(k),I=i(908),R=i.n(I);e.default={name:"courseinfo",data:function(){return{isIphoneXSeries:c.a.isIphoneXSeries(),isMobile:!c.a.isPC(),ratio:parseInt(Math.min(2,window.devicePixelRatio||1)),winW:document.documentElement.clientWidth||750,loading:!1,show:"1"===this.$route.query.had_sub?"table":"info",barLeft:0,barRight:0,id:0,isShowShareSale:!1,articleData:{},listChapter:[],listData:[],isInApp:c.a.isInApp(),groupbuyPosterData:null,from:c.a.getQueryString(window.location.href,"from"),isInAndroidApp:c.a.isInAndroidApp(),isShowJumpWXLite:c.a.gteqIOSVersion("1.1.6")||c.a.gteqAndroidVersion("1.0.11"),iOSAppSwitch:c.a.getQueryString(window.location.href,"switch"),shareSaleCode:c.a.getQueryString(window.location.href,"code"),payUrl:l.a.timeServer+"/serv/v1/column/subscribe",params:{cid:this.$route.params.id},videoHeight:0,videoList:[],lastWatch:0,groupbuyList:[],joingroupbuy:{code:"",price:0,count:0},marqueeData:[],marqueeTheme:{bgColor:c.a.isInApp()?"#f5f5f5":"#f2f2f2",textColor:"#fa8919"},groupbuyText:c.a.ltIOSVersion("2.3.0")||c.a.ltAndroidVersion("2.3.0")?"已参与拼团,可进入【极客时间小程序】查看拼团进度":"查看拼团进度"}},components:{VideoPlayer:p.a,NavBar:v.a,RichContent:b.a,Carousel:E.a,GrouponItem:C.a,GroupbuyPosterBox:U.a,SubBottom:F.a,TopNav:h.a,BreadCrumb:S.a,Marquee:R.a},computed:A()({},i.i(u.a)({loginUser:"loginUser"}),{isBottomShow:function(){return"service"!==this.from},barLeftRes:function(){return("info"===this.show?this.barLeft:this.barRight)+"px"},isShowPlayer:function(){return!c.a.isInApp()||c.a.ltAndroidVersion("1.0.13")},playerStyle:function(){return{position:c.a.isInAndroidApp()?"fixed":"relative"}},wrapperStyle:function(){return{paddingTop:c.a.isInAndroidApp()?this.videoHeight+"px":0}},courseTabStyle:function(){var t={};return c.a.isInAndroidApp()&&c.a.isEnableCss("position","sticky")?t.top=this.videoHeight+"px":t.top="-1px",t},isEnableSticky:function(){return!0},showGroupon:function(){return c.a.gteqIOSVersion("1.1.6")||c.a.gteqAndroidVersion("1.0.11")||!c.a.isInApp()},showAdModule:function(){var t=!this.shareSaleCode&&(!this.loginUser||this.loginUser&&!this.articleData.had_sub);return 0===this.marqueeData.length&&(t=!1),t},adBottom:function(){return(this.isInApp?this.isIphoneXSeries?80:60:50)+"px"}}),created:function(){var t=this;this.id=this.$route.params.id||c.a.getQueryString(window.location.href,"id"),this.isPreview="true"===c.a.getQueryString(window.location.href,"preview"),this.isPreview?window.addEventListener("message",function(e){try{t.articleData=e.data}catch(t){console.log(t)}},!1):(this.requestInfo(),this.getColumnInfoAd(),this.getShareSale());var e=c.a.getQueryString(window.location.href,"joingroupbuy");e&&this.requestGroupBuyInfo(e)},beforeDestroy:function(){window.removeEventListener("resize",this.getOffsets),c.a.isInApp()&&document.removeEventListener("notify",this.notifyHandler)},mounted:function(){var t=this;this.getOffsets(),window.addEventListener("resize",this.getOffsets,!1),this.$nextTick(function(){t.isInIOS||(t.videoHeight=t.$refs.video.offsetHeight)}),c.a.isInApp()&&document.addEventListener("notify",this.notifyHandler)},methods:{getColumnInfoAd:function(){var t=this;g.a.getColumnInfoAd().then(function(e){e.content&&(t.marqueeData=[JSON.parse(e.content)],console.log(t.marqueeData))}).catch(function(t){console.log("getColumnInfoAd Error",t)})},getOffsets:function(){this.barLeft=this.offset(this.$refs.lefttab).left-this.offset(this.$refs.tabparent).left,this.barRight=this.offset(this.$refs.righttab).left-this.offset(this.$refs.tabparent).left},requestInfo:function(){var t=this;g.a.getColumnInfo(this.id,!0).then(function(e){t.articleData=e,t.groupbuyList=e.groupbuy_list||[],t.groupbuyList.length>2&&(t.groupbuyList=[].concat(a()(t.groupbuyList),a()(t.groupbuyList.slice(0,2)))),c.a.canNotifyApp()&&c.a.notifyApp({type:"course:intro",data:e}),e.had_sub&&(t.show="table"),t.shareConfig(),document.title="极客时间 | "+e.column_title,t.loading=!1,t.requestChapter();var i=t.videoListAdapter(e);t.videoList=i,c.a.canNotifyApp()&&c.a.notifyApp({type:"video:videolist",data:i,index:0})}).catch(function(e){t.loading=!1,console.log(e)})},getShareSale:function(){var t=this;g.a.requestColumnSaleShare(this.id).then(function(e){t.shareSaleInfo=e.sharesale,t.isShowShareSale=e.is_sharesale&&c.a.gteqAndroidVersion("1.0.10")}).catch(function(t){console.log(t)})},requestChapter:function(){var t=this;g.a.getChapters(this.id).then(function(e){e=e.map(function(t,e){return t.open=!1,t.courselists=[],t}),t.listChapter=e,t.requestList()}).catch(function(t){console.log(t)})},requestList:function(){var t=this;g.a.getArticles(this.id,0,"earliest",200).then(function(e){t.listData=e.list,t.listChapter.forEach(function(t){t.courselists=e.list.filter(function(e){return String(t.id)===String(e.chapter_id)})}),t.$nextTick(function(){setTimeout(function(){t.tableBodys=document.querySelectorAll(".table-body");for(var e=0;ee&&(e=i.video_play_utime,t=n)}),t=isNaN(t)?0:t,this.lastWatch=t,this.articleData.had_sub){var i=this.listData[t].chapter_id,n=this.listChapter.findIndex(function(t){return String(t.id)===String(i)});n=n>-1?n:0,this.toggleChapter(n)}else{var r=this.listChapter.findIndex(function(t){return t.courselists.length>0});r>-1&&this.toggleChapter(r)}},toggleChapter:function(t,e){var i=this;this.listChapter[t].open=!this.listChapter[t].open,void 0===this.tableBodys[t].originHeight&&(this.tableBodys[t].originHeight=this.computedHeight(this.tableBodys[t])),this.tableBodys[t].style.height=this.listChapter[t].open?this.tableBodys[t].originHeight+"px":"0px",e&&this.listChapter[t].open&&setTimeout(function(){var t=e.target;"table-header"!==t.className&&(t=t.parentElement);var n=t.offsetTop,r=Math.max(document.documentElement.scrollTop,document.body.scrollTop),o=document.documentElement.clientHeight,a=r+o-n-240;if(a<0){var s=0;i.interval=setInterval(function(){window.scrollTo(0,r-i.linear(s,0,a,15)),++s>15&&clearInterval(i.interval)},20)}},20)},linear:function(t,e,i,n){return i*Math.sqrt(1-(t=t/n-1)*t)+e},computedHeight:function(t){var e=document.createElement("div");e.classList.add("table-list"),e.style.visibility="hidden";var i=t.cloneNode(!0);i.style.height="auto",e.appendChild(i),document.body.appendChild(e);var n=e.offsetHeight;return document.body.removeChild(e),n>=1?n-1:0},notifyHandler:function(t){try{t.detail.data;switch(t.detail.type){case"view:appear":this.handleAppBack()}}catch(t){console.log(t)}},checkGroupbuyProgress:function(){if(c.a.isInApp()){if(c.a.ltIOSVersion("2.3.0")||c.a.ltAndroidVersion("2.3.0"))return;c.a.notifyApp({type:"jump",path:"views/join_groupbuy.js",data:{code:this.articleData.groupbuy.join_code}})}else this.$router.push("/groupon/"+this.articleData.groupbuy.join_code)},jumpweapp:function(t){c.a.gteqIOSVersion("2.3.0")||c.a.gteqAndroidVersion("2.3.0")?c.a.notifyApp({type:"jump",path:"views/join_groupbuy.js",data:{code:this.groupbuyList[t].code}}):c.a.gteqIOSVersion("1.1.6")&&c.a.ltIOSVersion("2.3.0")||c.a.gteqAndroidVersion("1.0.11")&&c.a.ltAndroidVersion("2.3.0")?c.a.notifyApp({type:"wakeup:WXLite",data:{path:"pages/groupon/groupon?code="+this.groupbuyList[t].code}}):(this.$ga.sendPv("/fake/webintro/joingroupbuy/"+this.articleData.id),this.$router.push("/groupon/"+this.groupbuyList[t].code))},jumpWebview:function(t,e){c.a.isInApp()&&c.a.canNotifyApp()?c.a.notifyApp({type:"jump",path:"views/webview.js",data:{url:"https://time.geekbang.org"+t,title:e}}):this.$router.push(t)},handleAppBack:function(){var t=this;this.articleData.had_sub?g.a.getArticles(this.id,0,"earliest",200).then(function(e){t.listData=e.list,t.listChapter.forEach(function(t){t.courselists=e.list.filter(function(e){return String(t.id)===String(e.chapter_id)})})}):g.a.getColumnInfo(this.id,!0).then(function(e){t.articleData=e,t.requestChapter()})},freeWatch:function(t){var e=this.listData[t].id;c.a.isInApp()&&c.a.canNotifyApp()?c.a.notifyApp({type:"jump",path:"views/courses/course_detail.js",data:{url:"https://time.geekbang.org/course/detail/"+this.id+"-"+e}}):this.$router.push("/course/detail/"+this.id+"-"+e+(this.shareSaleCode?"?code="+this.shareSaleCode:""))},watchVideo:function(t){this.articleData.had_sub||t.article_could_preview?c.a.isInApp()&&c.a.canNotifyApp()?c.a.notifyApp({type:"jump",path:"views/courses/course_detail.js",data:{url:"https://time.geekbang.org/course/detail/"+this.id+"-"+t.id}}):this.$router.push("/course/detail/"+this.id+"-"+t.id):(c.a.isInApp()&&c.a.canNotifyApp(),c.a.error("请先购买专栏解锁"))},subscribe:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.loginUser){var e=c.a.ltIOSVersion("2.3.0")||c.a.ltAndroidVersion("2.3.0")?this.articleData:A()({},this.articleData,{subscribeType:t});if(c.a.isInApp()&&c.a.canNotifyApp())c.a.notifyApp({type:"sub:paybox:show",data:e});else{var i=this.generatePayData(t);B.a.set("orderInfo",i,{domain:".geekbang.org"}),window.location.href="https://cashier.geekbang.org/payment"}}else c.a.login()},videoListAdapter:function(t){var e=[];return e.push({id:t.id,cover:t.column_video_cover,media:t.column_video_media?JSON.parse(t.column_video_media):this.articleData.had_sub?"VIDEOERROR":"FORBIDDEN",title:"课程介绍",size:t.video_size,totalSecond:t.video_total_seconds,played:0}),e},shareConfig:function(){var t=this.articleData.column_share_title,e=this.articleData.column_subtitle,i=this.articleData.author_header,n="https://time.geekbang.org/course/intro/"+this.id;c.a.isInWeixin()?c.a.shareInWeixin({timelineTitle:t,messageTitle:t,desc:e,img:i,url:n}):c.a.isInApp()&&c.a.canNotifyApp()&&c.a.notifyApp({type:"share-info",data:{title:t,description:e,weiboMessage:t,link:n,img:i}})},offset:function(t){var e=null,i=null,n=t.offsetParent;for(e+=t.offsetLeft,i+=t.offsetTop;n;)-1===navigator.userAgent.indexOf("MSIE 8.0")&&(e+=n.clientLeft,i+=n.clientTop),e+=n.offsetLeft,i+=n.offsetTop,n=n.offsetParent;return{top:i,left:e}},backHandler:function(){c.a.isInApp()&&c.a.canNotifyApp()?c.a.notifyApp({type:"back",data:{url:window.location.href}}):window.history.back()},shareHandler:function(){var t=this.articleData.column_share_title,e=this.articleData.column_subtitle,i=this.articleData.author_header,n="https://time.geekbang.org/course/intro/"+this.id+(this.isShowShareSale?"?code="+this.shareSaleInfo.code:"");c.a.notifyApp({type:this.isShowShareSale?"share:poster":"share-now",data:{title:t,description:e,weiboMessage:t,link:n,img:i,data:this.articleData,shareSaleInfo:this.shareSaleInfo,isShareSale:this.isShowShareSale,platforms:["WechatSession","WechatTimeLine","QQ","Sina","Copy"]}})},jumpWXLite:function(){c.a.isInApp()&&(c.a.gteqIOSVersion("2.3.0")||c.a.gteqAndroidVersion("2.3.0"))?this.subscribe(2):c.a.isInAndroidApp()&&c.a.ltAndroidVersion("2.3.0")?c.a.notifyApp({type:"wakeup:WXLite",data:{path:"/pages/courseintro/courseintro?id="+this.id}}):(this.$ga.sendPv("/fake/webintro/newgroupbuy/"+this.articleData.id),this.groupbuyPosterData={url:"https://time.geekbang.org/course/intro/"+this.articleData.id,title:this.articleData.column_title,price:this.articleData.groupbuy.price,succUserCount:this.articleData.groupbuy.success_ucount,code:this.articleData.column_wxlite_code})},generatePayData:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,e={list:[{count:1,image:this.articleData.column_cover,name:this.articleData.column_title,sku:this.articleData.column_sku,price:{sale:this.articleData.column_price}}],invoice:!1,app_id:3,cid:this.articleData.id,isFromTime:!0,detail_url:c.a.getQueryString(window.location.href,"redirect")||"https://time.geekbang.org/course/intro/"+this.articleData.id};return 2===t?(e.list[0].price.sale=this.articleData.groupbuy.price,e.groupBuy={is_host:!0}):3===t&&(e.list[0].price.sale=this.joingroupbuy.price,e.groupBuy={code:this.joingroupbuy.code}),this.shareSaleCode&&(e.shareSaleCode=this.shareSaleCode),this.$route.query.utm_term&&(e.utm_term=this.$route.query.utm_term),e},jumpGroupon:function(){c.a.isInApp()&&c.a.canNotifyApp()||this.$router.push("/groupon/"+this.articleData.groupbuy.join_code)},jump:function(t){c.a.isInApp()&&c.a.canNotifyApp()?c.a.extraJump(t):window.location.href=c.a.addUrlParam(t.redirect_param,"csku",this.articleData.column_sku)}}}},1338:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(65),a=i(1947),s=i.n(a),A=i(1948),l=i.n(A),c=i(1945),u=i.n(c),d=i(621);e.default={name:"courseIntro",components:{IntroMobileBought:s.a,IntroMobileNotBuy:l.a,IntroMobileOld:u.a},data:function(){return{hadSub:!1,notSub:!1,lastReadArticleId:null,columnData:null}},created:function(){var t=this;this.courseId=this.$route.params.id,this.requestCourse().then(function(){t.afterLoad()})},computed:{isLt240AppVersion:function(){return o.a.ltIOSVersion("2.4.0")||o.a.ltAndroidVersion("2.4.0")}},mounted:function(){},methods:{afterLoad:function(){this.columnData&&(this.hadSub=this.columnData.had_sub,this.notSub=!this.columnData.had_sub,this.hadSub&&this.columnData.last_aid&&"0"!==String(this.columnData.last_aid)&&(this.lastReadArticleId=this.columnData.last_aid))},requestCourse:function(){var t=this;return new r.a(function(e){d.a.getColumnInfo(t.courseId,!0).then(function(i){t.columnData=i,t.shareInWeixin(),e()}).catch(function(t){console.log(t)})})},shareInWeixin:function(){var t=this.columnData;o.a.shareInWeixin({timelineTitle:""+t.column_share_title,messageTitle:""+t.column_share_title,desc:""+t.column_subtitle,img:""+t.author_header})}}}},1339:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(220),a=i.n(o),s=i(65),A=i(654),l=i.n(A),c=i(621),u=i(690),d=i(711),h=i.n(d),f=i(813),p=i.n(f),g=i(1065),m=i.n(g),v=!1;try{var w=Object.defineProperty({},"passive",{get:function(){v=!0}});window.addEventListener("test",null,w)}catch(t){}e.default={name:"courseBought",components:{TopNav:l.a,RichContent:h.a,ArticleListHeader:p.a,CircleProgress:m.a},props:["columnData","lastReadArticleId"],data:function(){return{productType:"course",columnId:null,fastVideoId:null,scrollTimer:null,dataManager:null,fixedTop:null,requesting:!1,columnCouldSub:!0,columnHadSub:!1,isShowLayer:!1,isTabsFixed:!1,hasCode:!1,articlesPage:{},heightList:[],totalArticleList:[],chapterIds:[],chapters:[],articles:[],column:{},cacheData:{},tabIndex:1,currentChapterIndex:0,ratio:parseInt(Math.min(2,window.devicePixelRatio||1)),scrollTop:0,scrollY:0,diff:-1}},created:function(){this.columnId=this.$route.params.id,this.hasCode=!!this.$route.query.code,this.column=this.columnData,this.loadData()},mounted:function(){this.afterLoadedData(),document.addEventListener("scroll",this.scrollHandler,!1)},destroyed:function(){this.enableScroll(),document.removeEventListener("scroll",this.scrollHandler,!1)},computed:{hasChapter:function(){return this.column.show_chapter&&this.chapters.length>0},fixedChapter:function(){return this.totalArticleList[this.currentChapterIndex]?this.totalArticleList[this.currentChapterIndex]:null}},watch:{scrollY:function(t,e){for(var i=this.heightList,n=0;n=r&&-t0&&t<50?t-50:0;this.fixedTop!==i&&(this.fixedTop=i,e&&(e.style.transform="translate3d(0, "+i+"px, 0)"))}},methods:{loadData:function(){var t=this;this.cacheData={},this.$loading.open(),this.dataManager=new u.a,this.dataManager.use(function(e){t.requestChapters().then(function(){e()})}),this.dataManager.use(function(e){t.requestArticleList().then(function(){e()})}),this.dataManager.load()},useData:function(){var t=this,e=void 0;this.cacheData.requestChapters&&(e=this.cacheData.requestChapters,this.chapters=e),this.cacheData.requestArticleList&&(e=this.cacheData.requestArticleList,this.articlesPage=e.page,this.articles=[].concat(a()(this.articles),a()(e.list)),this.transformArticleList(this.articles),this.totalArticleList=this.getTotalArticleList(),this.hasChapter?(this.fastVideoId=this.lastReadArticleId||this.totalArticleList[0].articles[0].id,this.$nextTick(function(){t.calculateHeightList()})):this.fastVideoId=this.lastReadArticleId||this.articles[0].id),this.cacheData={}},afterLoadedData:function(){var t=this;this.dataManager.ready(function(){t.$loading.close(),t.useData()})},openLayer:function(){this.isShowLayer=!this.isShowLayer,this.isShowLayer?this.disableScroll():this.enableScroll()},closeLayer:function(){this.isShowLayer=!1,this.enableScroll()},goDetail:function(t){t=t||{},this.$router.push("/course/detail/"+this.columnId+"-"+t.id)},switchTab:function(t){this.tabIndex=t},scrollHandler:function(t){var e=this,i=document.documentElement.scrollTop||document.body.scrollTop,n=s.a.offset(this.$refs.tabs).top,r=this.$refs.contentWrap;this.hasCode?this.scrollY=r.getBoundingClientRect().y:(i+=63,this.scrollY=r.getBoundingClientRect().y-63),this.isTabsFixed=i>n,clearTimeout(this.scrollTimer),this.scrollTimer=setTimeout(function(){e.loadMore()},100)},scrollToChapter:function(t){this.currentChapterIndex=t,this.isShowLayer=!1,this.calculateHeightList();var e=this.heightList[t]+210;this.enableScroll(),window.scrollTo(0,e)},transformArticleList:function(t){t.forEach(function(t){var e=Math.min(t.video_play_seconds/t.video_total_seconds,1);t.studyPercent=parseInt(100*e.toFixed(2))+"%",t.studyProgress=parseInt(360*e)})},getTotalArticleList:function(){var t=this.chapters,e=this.articles;return t.forEach(function(t,i){t.articles=e.filter(function(e){return String(e.chapter_id)===String(t.id)})}),t},calculateHeightList:function(){var t=this,e=this.$refs.listGroup,i=0;this.heightList=[],this.heightList.push(i),e.forEach(function(e){i+=e.clientHeight,t.heightList.push(i)})},loadMore:function(t){Math.max(document.body.scrollTop,document.documentElement.scrollTop)>=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight)-window.innerHeight-50&&this.requestMoreArticleList()},requestChapters:function(){var t=this;return new r.a(function(e){c.a.getChapters(t.columnId).then(function(i){t.cacheData.requestChapters=i,t.chapterIds=i.map(function(t){return t.id}),e()}).catch(function(t){console.log(t)})})},requestArticleList:function(t){var e=this;return t=t||0,new r.a(function(i){c.a.getArticles(e.columnId,t,"earliest",200,!1,e.chapterIds).then(function(t){e.cacheData.requestArticleList=t,i()}).catch(function(t){console.log(t)})})},requestMoreArticleList:function(t){var e=this;if(this.articlesPage.more&&!this.requesting){this.$loading.open(),this.requesting=!0;var i=this.articles.length>0?this.articles[this.articles.length-1].score:0;this.requestArticleList(i).then(function(){e.useData(),e.requesting=!1,e.$loading.close()})}},preventDefault:function(t){var e=0;this.$refs.layerChapterItem.forEach(function(t){e+=t.getBoundingClientRect().height});var i=t.target.nodeName.toLowerCase();("li"!==i||"li"===i&&e<=220)&&t.preventDefault()},enableScroll:function(){window.removeEventListener("wheel",this.preventDefault),window.removeEventListener("touchmove",this.preventDefault)},disableScroll:function(){window.addEventListener("wheel",this.preventDefault,!!v&&{passive:!1}),window.addEventListener("touchmove",this.preventDefault,!!v&&{passive:!1})}}}},1340:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(220),a=i.n(o),s=i(99),A=i.n(s),l=i(65),c=i(219),u=i(654),d=i.n(u),h=i(621),f=i(690),p=i(711),g=i.n(p),m=i(634),v=i.n(m),w=i(813),b=i.n(w),y=i(908),B=i.n(y),x=i(1072),E=i.n(x);e.default={name:"courseNotbuy",components:{TopNav:d.a,RichContent:g.a,ArticleListHeader:b.a,Marquee:B.a,GrouponModal:E.a},props:["columnData"],data:function(){return{from:l.a.getQueryString(window.location.href,"from"),productType:"course",columnId:null,fastVideoId:null,tabIndex:0,ratio:parseInt(Math.min(2,window.devicePixelRatio||1)),scrollTop:0,chapters:[],articles:[],column:{},articlesPage:{},groupbuyList:[],hasCode:!1,isFirstSwitchCatalog:!0,columnCouldSub:!0,columnHadSub:!1,isTabsFixed:!1,isShowMoreGroup:!1,hasTrialArticles:!1,couldGroupBuy:!1,hadJoinGroupBuy:!1,isValidGroupBuy:!1,groupCode:null,groupCount:0,groupPrice:0,couponRecomend:null,shareSaleCode:l.a.getQueryString(window.location.href,"code"),marqueeData:[],marqueeTheme:{bgColor:"#f2f2f2",textColor:"#fa8919"},showGrouponModal:!1}},watch:{isShowMoreGroup:function(t){t?l.a.fixedBody.open():l.a.fixedBody.close()}},created:function(){this.columnId=this.$route.params.id,this.hasCode=!!this.$route.query.code,this.loadData(),this.getColumnIntroRelated()},mounted:function(){this.afterLoadedData(),document.addEventListener("scroll",this.scrollHandler,!1)},destroyed:function(){document.removeEventListener("scroll",this.scrollHandler,!1)},computed:A()({isBottomShow:function(){return"service"!==this.from},hasChapter:function(){return this.column.show_chapter&&this.chapters.length>0},isShowSubBtn:function(){return this.columnCouldSub&&!this.columnHadSub&&this.column.is_onborad},filterColumnUnit:function(t){var e=String(this.column.column_unit);return e=/\d/.test(e)?e.match(/\d+/)[0]:null},totalArticleList:{get:function(){var t=this.chapters,e=this.articles;return t.length?(t.forEach(function(t,i){t.articles=e.filter(function(e){return String(e.chapter_id)===String(t.id)}),t.isActive=0===i}),t):this.articles}},showAdModule:function(){var t=!this.shareSaleCode&&(!this.loginUser||this.loginUser&&!this.columnHadSub);return 0===this.marqueeData.length&&(t=!1),t},adBottom:function(){return"50px"}},i.i(c.a)({loginUser:"loginUser"})),methods:{loadData:function(){var t=this;this.cacheData={},this.$loading.open(),this.dataManager=new f.a,this.dataManager.use(function(e){t.requestChapters().then(function(){e()})}),this.dataManager.use(function(e){t.requestArticleList().then(function(){e()})}),this.dataManager.load()},useData:function(){var t=void 0;this.cacheData.requestChapters&&(t=this.cacheData.requestChapters,this.chapters=t),this.cacheData.requestArticleList&&(t=this.cacheData.requestArticleList,this.articles=[].concat(a()(this.articles),a()(t.list)),this.articlesPage=t.page,this.hasTrialArticles=this.articles.some(function(t){return t.article_could_preview}),this.hasChapter?this.fastVideoId=this.totalArticleList[0].articles[0].id:this.fastVideoId=this.articles[0].id),this.cacheData={}},afterLoadedData:function(){var t=this;this.dataManager.ready(function(){t.$loading.close(),t.useData()})},getColumnIntroRelated:function(){this.column=this.columnData,this.columnCouldSub=this.column.is_onborad,this.columnHadSub=this.column.had_sub,this.column.groupbuy&&(this.isValidGroupBuy=!0);var t=this.column.groupbuy||{};this.couldGroupBuy=t.could_groupbuy,this.hadJoinGroupBuy=t.had_join,this.groupCount=t.success_ucount,this.groupPrice=t.price,this.groupCode=t.join_code,this.groupbuyList=this.column.groupbuy_list||[],this.groupbuyList.sort(function(t,e){return t.want_ucount-e.want_ucount||t.left_seconds-e.left_seconds}),this.shareSaleCode||this.getColumnInfoAd()},getColumnInfoAd:function(){var t=this;h.a.getColumnInfoAd().then(function(e){e.content&&(t.marqueeData=[JSON.parse(e.content)])}).catch(function(t){console.log("getColumnInfoAd Error",t)})},requestArticleList:function(t){var e=this;return t=t||0,new r.a(function(i){h.a.getArticles(e.columnId,t,"earliest",200,!1).then(function(t){e.cacheData.requestArticleList=t,i()}).catch(function(t){console.log(t)})})},requestChapters:function(){var t=this;return new r.a(function(e){h.a.getChapters(t.columnId).then(function(i){t.cacheData.requestChapters=i,e()}).catch(function(t){console.log(t)})})},subscribe:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,e=this.generatePayData(t);v.a.set("orderInfo",e,{domain:".geekbang.org"}),this.loginUser?window.location.href="https://cashier.geekbang.org/payment":l.a.login()},generatePayData:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,e={list:[{count:1,image:this.column.column_cover,name:this.column.column_title,desc:(this.filterColumnUnit?this.filterColumnUnit+"讲 | ":"")+this.column.sub_count+"人已学习",sku:this.column.column_sku,price:{sale:this.column.column_price}}],invoice:!1,app_id:3,cid:this.column.id,isFromTime:!0,detail_url:l.a.getQueryString(window.location.href,"redirect")||"https://time.geekbang.org/course/intro/"+this.column.id};return 2===t&&(e.list[0].price.sale=this.groupPrice,e.groupBuy={is_host:!0}),this.shareSaleCode&&(e.shareSaleCode=this.shareSaleCode),this.$route.query.utm_term&&(e.utm_term=this.$route.query.utm_term),e},goDetail:function(t){t=t||{},this.$router.push("/course/detail/"+this.columnId+"-"+t.id)},goGroupon:function(t){this.$router.push("/groupon/"+t)},goGroupRule:function(){this.$router.push("/rules/groupon")},goCoupon:function(){window.location.href="https://account.geekbang.org/dashboard/coupon"},goSignUp:function(){window.location.href="//account.geekbang.org/signup?redirect="+encodeURIComponent(window.location.href)},expandChapter:function(t,e){var i=this,n=this.chapters.findIndex(function(e){return e.id===t.id});this.chapters.forEach(function(e){e.id!==t.id&&(e.isActive=!1)}),n>=0&&(this.$set(this.chapters[n],"isActive",!this.chapters[n].isActive),this.$forceUpdate()),this.$refs.articleListWrapper.forEach(function(t,e){i.$refs.articleListWrapper[e].style.height="0px"});var r=this.$refs.chapterArticleList[e].offsetHeight+10;this.$refs.articleListWrapper[e].style.height=t.isActive?r+"px":"0px"},expandDefaultChapter:function(){var t=this;this.$nextTick(function(){var e=t.$refs.chapterArticleList[0].offsetHeight+10;t.$refs.articleListWrapper[0].style.height=e+"px"})},switchTab:function(t){this.tabIndex=t,this.hasChapter&&this.isFirstSwitchCatalog&&this.expandDefaultChapter(),1===t&&(this.isFirstSwitchCatalog=!1)},jump:function(t){window.location.href=l.a.addUrlParam(t.redirect_param,"csku",this.column.column_sku)},scrollHandler:function(t){var e=document.documentElement.scrollTop||document.body.scrollTop,i=l.a.offset(this.$refs.tabs).top;this.$route.query.code||(e+=63),this.isTabsFixed=e>i},createGroupon:function(){if(!this.groupbuyList||0===this.groupbuyList.length)return void this.subscribe(2);this.showGrouponModal=!0}}}},1341:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(99),r=i.n(n),o=i(218),a=i(65),s=i(219),A=i(674),l=i.n(A),c=i(673),u=i.n(c),d=i(634),h=i.n(d),f=i(621),p=i(1067),g=i.n(p),m=i(1070),v=i.n(m),w=i(1068),b=i.n(w),y=i(1066),B=i.n(y),x=i(766),E=i.n(x),_=i(787),C=i.n(_),T=i(1084),U=i.n(T);e.default={name:"IntroPc",components:{CommonHeader:l.a,CommonFooter:u.a,ColumnInfo:g.a,GrouponModule:v.a,ColumnIntro:b.a,Catalog:B.a,RichContent:C.a,RecommendColumnItem:U.a,ReturnTop:E.a},data:function(){return{columnInfo:{},articleList:[],columnId:this.$route.params.id||a.a.getQueryString(window.location.href,"id"),recommendList:[],chapterList:[],tabs:["课程介绍","课程目录"],currentTabIndex:this.$route.query.had_sub?1:0,fixed:!1,offsetTop:0,freelyRead:{count:0,total:0},shareSaleCode:a.a.getQueryString(window.location.href,"code")}},head:{title:function(){return{inner:this.columnInfo.column_title}},meta:function(){var t=this.columnInfo.column_title||"",e=this.columnInfo.column_subtitle||"",i=this.columnInfo.column_cover||"";return[{name:"keywords",content:t,id:"metakeywords"},{name:"description",content:e,id:"metadesc"},{property:"og:url",content:"https://time.geekbang.org/course/intro/"+this.columnId},{property:"og:type",content:"courses"},{property:"og:title",content:t+" | 极客时间"},{property:"og:description",content:e},{property:"og:image",content:i}]}},computed:r()({},i.i(s.a)({loginUser:"loginUser"}),{showGroupby:function(){return!this.columnInfo.had_sub&&this.columnInfo.groupbuy&&!this.columnInfo.groupbuy.had_join||this.columnInfo.groupbuy_list&&this.columnInfo.groupbuy_list.length},groupbuyPrice:function(){return this.columnInfo.groupbuy?this.columnInfo.groupbuy.price:0}}),filters:{formatList:function(t,e){if(t&&t.length){var i=t.slice(0,e);return i.sort(function(t,e){return t.left_seconds-e.left_seconds}),i}}},created:function(){this.init()},mounted:function(){window.addEventListener("scroll",this.scrollHandler)},beforeDestroy:function(){window.removeEventListener("scroll",this.scrollHandler)},methods:{init:function(){this.getColumnInfo(),this.getArticles(),this.getChapters()},getColumnInfo:function(){var t=this;f.a.getColumnInfo(this.columnId,!0).then(function(e){t.columnInfo=e,t.freelyRead={count:t.columnInfo.freelyread_count||0,total:t.columnInfo.freelyread_total||0},t.currentTabIndex=e.had_sub?1:0,t.getColumnRelate(),t.$emit("updateHead")}).catch(function(t){console.log("getColumnInfo error",t)})},getArticles:function(){var t=this;f.a.getArticles(this.columnId,0,"earliest",500,!1).then(function(e){t.articleList=e.list}).catch(function(t){console.log("getArticles error",t)})},getChapters:function(){var t=this;f.a.getChapters(this.columnId).then(function(e){t.chapterList=e}).catch(function(t){console.log("getChapters error",t)})},requestNewArticles:function(){var t=this;f.a.getNewUpdate(this.id).then(function(e){t.newArticleList=e.list}).catch(function(t){console.log("getNewArticles error",t)})},getColumnRelate:function(){var t=this;f.a.getColumnRelate({sku:this.columnInfo.column_sku}).then(function(e){t.recommendList=e.list}).catch(function(t){console.log("getColumnRelate error",t)})},download:function(t,e){e.preventDefault(),t?(this.$ga.sendEvent("Android 下载","首页 Android 下载","首页点击 Android 下载按钮"),window.open(o.a.androidDownloadUrl)):(this.$ga.sendEvent("App Store下载","首页去App Store下载","首页点击App Store下载按钮"),window.open(o.a.iosDownloadUrl))},tabChange:function(t){this.currentTabIndex=t},jumpToRule:function(){window.open("https://time.geekbang.org/rules/groupon")},jumpToIntro:function(t){switch(t.product_type){case"c1":case"c2":var e=t.subscribe?"https://time.geekbang.org/column/article/"+t.last_aid+"?cid="+t.product_id:"https://time.geekbang.org/column/intro/"+t.product_id;window.open(e);break;case"c3":var i=t.subscribe?"https://time.geekbang.org/course/detail/"+t.product_id+"-"+t.last_aid:"https://time.geekbang.org/course/intro/"+t.product_id;window.open(i)}},catalogJump:function(t){t=t||{};var e="/course/detail/"+this.columnInfo.id+"-"+t.id;this.$router.push(e)},jumpToArticle:function(){this.columnInfo.last_aid?window.open("https://time.geekbang.org/course/detail/"+this.columnInfo.id+"-"+this.columnInfo.last_aid):this.articleList.length?window.open("https://time.geekbang.org/course/detail/"+this.columnInfo.id+"-"+this.articleList[this.articleList.length-1].id):a.a.error("暂无视频")},scrollHandler:function(t){var e=this.$refs.columnPageTabs.offsetTop,i=window.scrollY;this.fixed=i>=e},subscribe:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.loginUser){var e=this.generatePayData(t);h.a.set("orderInfo",e,{domain:".geekbang.org"}),window.location.href="https://cashier.geekbang.org/payment"}else a.a.login()},generatePayData:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,e={list:[{count:1,image:this.columnInfo.column_cover,name:this.columnInfo.column_title,sku:this.columnInfo.column_sku,price:{sale:this.columnInfo.column_price}}],invoice:!1,app_id:3,cid:this.columnInfo.id,isFromTime:!0,detail_url:a.a.getQueryString(window.location.href,"redirect")||"https://time.geekbang.org/course/intro/"+this.columnInfo.id};return 2===t?(e.list[0].price.sale=this.columnInfo.groupbuy.price,e.groupBuy={is_host:!0}):3===t&&(e.list[0].price.sale=this.joingroupbuy.price,e.groupBuy={code:this.joingroupbuy.code}),this.shareSaleCode&&(e.shareSaleCode=this.shareSaleCode),this.$route.query.utm_term&&(e.utm_term=this.$route.query.utm_term),e}}}},1411:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'.gNP6uw0v_0,.uUUOZcsG_0{position:relative}.gNP6uw0v_0{z-index:999}._3gz6nKnP_0{position:relative;margin-top:-12px;border-radius:10px 10px 0 0;background:#fff}._1N0mR54l_0{position:relative;height:56px}._XaIXlwS_0{display:-webkit-box;display:-ms-flexbox;display:flex;padding:8px 30px 4px;height:56px;border-bottom:.5px solid #e8e8e8;border-radius:10px 10px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff}._XaIXlwS_0._3F1kMZrf_0{position:fixed;z-index:99;top:63px;left:0;width:100%;background:#fff}._XaIXlwS_0.H2QTagfl_0{top:0}._XaIXlwS_0 ._1akscRpO_0{height:44px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#b2b2b2;font-size:17px;font-weight:500;-webkit-box-flex:1;-ms-flex:1 1 50%;flex:1 1 50%;position:relative}._XaIXlwS_0 ._1akscRpO_0._1iXnArfc_0{color:#fa8919}._XaIXlwS_0 ._1akscRpO_0._1iXnArfc_0:after{content:"";position:absolute;height:3px;width:66px;background:#fa8919;bottom:4px;left:50%;margin-left:-33px;border-radius:4px}._2IMgl6qW_0{background:#f6f7fb}._1P8N2qqx_0{margin-bottom:10px;padding:26px 20px 10px;background:#fff}._1P8N2qqx_0 ._2N5-SVUM_0{font-size:19px;font-weight:600;color:#353535}._1P8N2qqx_0 .xYcKhe5p_0{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:12px;margin-bottom:6px}._1P8N2qqx_0 .xYcKhe5p_0 img{width:50px;height:50px;border-radius:50%;padding:3px;-ms-flex-negative:0;flex-shrink:0}._1P8N2qqx_0 ._2XnKIzvn_0{margin-left:8px;padding-top:6px}._1P8N2qqx_0 ._2XnKIzvn_0 ._1sYJK73F_0{font-size:17px;font-weight:600;color:#353535}._1P8N2qqx_0 ._2XnKIzvn_0 ._2p9TE1SZ_0{margin-top:4px;font-size:13px;font-weight:400;color:#4c4c4c}._1A5xG4H9_0{padding:40px 20px 20px;background:#fff}._9wFm16P4_0{position:relative;padding-bottom:50px}._1ig3bjj5_0{padding-left:16px;background:#f6f7fb;-webkit-box-sizing:border-box;box-sizing:border-box}._2vrLpSjk_0{height:50px;width:calc(100% - 50px);line-height:50px;font-size:15px;font-weight:500;color:#888;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._2uF12dWN_0{position:relative;padding-left:16px;padding-right:16px;color:#4c4c4c;border-bottom:.5px solid #e8e8e8;-webkit-box-sizing:border-box;box-sizing:border-box}._2uF12dWN_0 ._2OQCk6aH_0{position:absolute;top:15px;color:#999}._2uF12dWN_0 ._10V3LBwP_0{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;margin-left:24px;margin-right:36px;padding-top:20px;padding-bottom:20px}._2uF12dWN_0 ._10V3LBwP_0 ._26g50Mgk_0{font-weight:400;font-size:15px;line-height:20px}._2uF12dWN_0 ._10V3LBwP_0 ._26g50Mgk_0._2QKf7Ct4_0{color:#b2b2b2}._2uF12dWN_0._1iXnArfc_0,._2uF12dWN_0._1iXnArfc_0 ._2OQCk6aH_0{color:#fa8919}._2uF12dWN_0 .bAORgbUU_0{position:absolute;top:18px;right:18px;width:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._2uF12dWN_0 .bAORgbUU_0 .wCDOMbCK_0{color:#ff9c3a;font-size:12px;-webkit-transform:scale(.9);transform:scale(.9)}._3WlJ_jn3_0{position:absolute;z-index:999;top:70px;right:20px;height:24px;width:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:18px;color:#b2b2b2;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}._3WlJ_jn3_0._1bmM07Sl_0{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._47NC-nhs_0{position:relative}._47NC-nhs_0 ._1Qdrnmxe_0{position:absolute;z-index:99;top:0;left:0;width:100%}._47NC-nhs_0 ._1Qdrnmxe_0._1UZ_Yhbw_0{position:fixed;z-index:30;top:119px;left:0;width:100%}._47NC-nhs_0 ._1Qdrnmxe_0._1gz1b1gT_0{top:56px}._47NC-nhs_0 ._2z2IFvIz_0{position:absolute;z-index:20;top:50px;bottom:0;left:0;width:100%;height:600px;overflow:hidden;background:rgba(0,0,0,.6)}._47NC-nhs_0 .xq1tySOy_0{position:absolute;z-index:99;top:50px;left:0;width:100%;overflow-y:auto;background:#f6f7fb}._47NC-nhs_0 ._3aInQnZ-_0{width:100%;max-height:220px}._47NC-nhs_0 ._1akscRpO_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:20px;margin-left:16px;padding:12px 16px 12px 0;font-size:14px;font-weight:400;color:#4c4c4c;border-bottom:.5px solid #e8e8e8}._47NC-nhs_0 ._1akscRpO_0._3mqb-9HS_0{color:#fa8919;font-weight:500}',""]),e.locals={wrap:"uUUOZcsG_0",topNavWrap:"gNP6uw0v_0",contentWrap:"_3gz6nKnP_0",tabsWrap:"_1N0mR54l_0",tabs:"_XaIXlwS_0",tabsFix:"_3F1kMZrf_0",hasCodeTabsFix:"H2QTagfl_0",item:"_1akscRpO_0",on:"_1iXnArfc_0",intro:"_2IMgl6qW_0",columnCard:"_1P8N2qqx_0",columnTitle:"_2N5-SVUM_0",columnTeacher:"xYcKhe5p_0",columnTeacherInfo:"_2XnKIzvn_0",author:"_1sYJK73F_0",authorTitle:"_2p9TE1SZ_0",richContent:"_1A5xG4H9_0",listWrap:"_9wFm16P4_0",chapterTitleWrap:"_1ig3bjj5_0",chapterTitle:"_2vrLpSjk_0",articleItem:"_2uF12dWN_0",playIcon:"_2OQCk6aH_0",txtWrap:"_10V3LBwP_0",txt:"_26g50Mgk_0",noContent:"_2QKf7Ct4_0",progressWrap:"bAORgbUU_0",percent:"wCDOMbCK_0",expand:"_3WlJ_jn3_0",open:"_1bmM07Sl_0",chapterLayerWrap:"_47NC-nhs_0",chapterFixedWrap:"_1Qdrnmxe_0",fixed:"_1UZ_Yhbw_0",hasCode:"_1gz1b1gT_0",overlayer:"_2z2IFvIz_0",layerListWrapper:"xq1tySOy_0",sectionList:"_3aInQnZ-_0",active:"_3mqb-9HS_0"}},1429:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._2OHhEWH3_0{position:fixed;width:100%;top:0;left:0;z-index:100;background:#fff;-webkit-transition:-webkit-box-shadow .3s ease;transition:-webkit-box-shadow .3s ease;transition:box-shadow .3s ease;transition:box-shadow .3s ease,-webkit-box-shadow .3s ease}._2OHhEWH3_0._2YTJk42p_0{-webkit-box-shadow:0 0 1px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1)}._19DIyVZA_0{width:100%;max-width:1080px;margin:0 auto}._19DIyVZA_0 ._1MY5REoi_0{width:100%;max-width:100%}.qS5i8JF2_0{background:#fff}._3822azc__0{width:100%;max-width:1080px;margin:0 auto}._3KQ4h2yI_0{padding:54px 0 60px}._2kQ_HbHL_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}._2s9KUZUW_0{margin-left:63px;background:#fafafa;width:305px;height:196px;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:25px 20px 31px 24px;border:1px solid #fcfdfc}._2s9KUZUW_0 h3{font-size:16px;font-weight:500;color:#404040;margin-bottom:18px}.j4HnGIK5_0{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.j4HnGIK5_0,.j4HnGIK5_0 .Oa6Lqpnp_0 ._2FeHrWPK_0{display:-webkit-box;display:-ms-flexbox;display:flex}.j4HnGIK5_0 .Oa6Lqpnp_0 ._2FeHrWPK_0{cursor:pointer;font-size:12px;color:#fff;width:134px;height:35px;line-height:35px;border-radius:6px;background:#404040;margin-bottom:10px;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:12px;font-weight:400}.j4HnGIK5_0 .Oa6Lqpnp_0 ._2FeHrWPK_0._2ZgKlrv6_0{background:#6ab344;margin-bottom:0}.j4HnGIK5_0 .Oa6Lqpnp_0 ._2FeHrWPK_0._2ZgKlrv6_0 i{font-size:19.5px;margin-right:8px}.j4HnGIK5_0 .Oa6Lqpnp_0 ._2FeHrWPK_0 i{font-size:16px;margin-right:10px}.j4HnGIK5_0 ._35ob5jQd_0{margin-top:15px;display:block;padding-left:2px;color:#c79d5e;font-size:12px;font-weight:300;line-height:1em}.j4HnGIK5_0 ._35ob5jQd_0 ._32Ica7Z6_0{height:9px;margin-left:3px}.j4HnGIK5_0 ._2wnMjaGX_0{position:relative;top:-1px;padding:9px;border-radius:6px;background:#fff;font-size:0;border:1px solid #ddd}.j4HnGIK5_0 ._2wnMjaGX_0 img{width:88px;height:88px}._8bmTe6Bc_0{height:40px;margin-bottom:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}._8bmTe6Bc_0 h3{font-size:20px;font-weight:500;line-height:24px}._8bmTe6Bc_0 h3 span{color:#404040;font-size:15px;font-weight:400;line-height:19px;margin-left:21px}._8bmTe6Bc_0 ._3EWzlu_m_0{color:#b2b2b2;font-size:15px;line-height:19px;font-weight:300}._8bmTe6Bc_0 ._3EWzlu_m_0 ._3zRc9B6B_0{height:9px;margin-left:5px;position:relative;top:-1px}._1y8VaRsC_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;padding-bottom:50px;padding-top:20px;min-height:700px}._1y8VaRsC_0 ._2IYyBY-w_0{width:712px}._1y8VaRsC_0 ._2IYyBY-w_0 ._1C2HTZHn_0{border-bottom:1px solid #e9e9e9;height:50px}._1y8VaRsC_0 ._2IYyBY-w_0 ._1C2HTZHn_0,._1y8VaRsC_0 ._2IYyBY-w_0 ._3UpDxHgY_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._1y8VaRsC_0 ._2IYyBY-w_0 ._3UpDxHgY_0{margin-right:65px;height:100%;font-size:20px;font-weight:500;color:#404040;border-bottom:2px solid transparent}._1y8VaRsC_0 ._2IYyBY-w_0 ._3UpDxHgY_0._1VkkSc6v_0{border-bottom-color:#fa8919;color:#fa8919}._1y8VaRsC_0 ._2IYyBY-w_0 ._3UpDxHgY_0 ._27k0us_4_0{display:block;width:38px;height:17px;border:1px solid #fa8919;border-radius:3px;text-align:center;line-height:17px;margin-left:8px;font-size:12px;color:#fa8919;font-weight:400}._1y8VaRsC_0 .hTxdFIfR_0{padding-top:40px}.VpgaLBIY_0{background:#fff;width:305px}.VpgaLBIY_0 ._3MZnDYIJ_0{color:#404040;font-weight:500;font-size:16px;height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e9e9e9}.VpgaLBIY_0._2YTJk42p_0{position:fixed;z-index:201;top:0;right:50%;-webkit-transform:translateX(540px);transform:translateX(540px)}._1APHks3t_0{position:fixed;z-index:200;top:0;left:0;right:0;background:#fff}._1APHks3t_0 ._3-myBZGL_0{-webkit-box-sizing:border-box;box-sizing:border-box}._1APHks3t_0 ._2LE7QYDq_0{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:711px;border-bottom:1px solid #e9e9e9}._1APHks3t_0 ._2LE7QYDq_0,._1APHks3t_0 ._2M_ztfFw_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._1APHks3t_0 ._2M_ztfFw_0{height:50px}._1APHks3t_0 ._2M_ztfFw_0 ._3UpDxHgY_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;margin-right:65px;font-size:20px;font-weight:500;color:#404040;border-bottom:2px solid transparent}._1APHks3t_0 ._2M_ztfFw_0 ._3UpDxHgY_0 ._27k0us_4_0{display:block;width:38px;height:17px;border:1px solid #fa8919;border-radius:3px;text-align:center;line-height:17px;margin-left:8px;font-size:12px;color:#fa8919;font-weight:400}._1APHks3t_0 ._2M_ztfFw_0 ._3UpDxHgY_0._1VkkSc6v_0{border-bottom-color:#fa8919;color:#fa8919}._1APHks3t_0 ._2M_ztfFw_0 s{color:#888}._1APHks3t_0 ._5erIS0aB_0 .R6WNSOyh_0{display:inline-block;cursor:pointer;border:none;outline:none;width:110px;height:34px;border-radius:5px;line-height:34px;background:#fa8919;color:#fff;font-weight:400;letter-spacing:1px;font-size:14px}._1APHks3t_0 ._5erIS0aB_0 .R6WNSOyh_0._3g-XKua7_0{background:#fbf5ee;color:#fa8919}._1APHks3t_0 ._5erIS0aB_0 .R6WNSOyh_0._3uPjFjQU_0{background:#b2b2b2}._1APHks3t_0 ._5erIS0aB_0 .R6WNSOyh_0._1vk_1DiL_0{background:#fff;color:#fa8919;border:1px solid #fa8919}._1APHks3t_0 ._5erIS0aB_0 ._1LHy2tVc_0{color:#888;font-size:12px;font-weight:400;margin-right:16px}@media screen and (min-width:860px) and (max-width:1159px){._3822azc__0{padding:0 40px;-webkit-box-sizing:border-box;box-sizing:border-box}._2s9KUZUW_0{display:none}._3FHiavwz_0{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}._1y8VaRsC_0 ._2IYyBY-w_0{width:100%}.VpgaLBIY_0{display:none}._1APHks3t_0 ._3822azc__0{padding:0}._1APHks3t_0 ._2LE7QYDq_0{width:100%;padding:0 40px;-webkit-box-sizing:border-box;box-sizing:border-box}}",""]),e.locals={"fixed-header":"_2OHhEWH3_0",fixedHeader:"_2OHhEWH3_0",fixed:"_2YTJk42p_0",commonHeader:"_19DIyVZA_0",commonHeaderWrapper:"_1MY5REoi_0",pageContent:"qS5i8JF2_0",contentBlock:"_3822azc__0",columnInfoWrapper:"_3KQ4h2yI_0",columnInfoContent:"_2kQ_HbHL_0",downloadBox:"_2s9KUZUW_0",downloadDetails:"j4HnGIK5_0",download:"Oa6Lqpnp_0",downloadBtn:"_2FeHrWPK_0",android:"_2ZgKlrv6_0",downloadTip:"_35ob5jQd_0",imgArrow:"_32Ica7Z6_0",qrcode:"_2wnMjaGX_0",grouponTitle:"_8bmTe6Bc_0",grouponRule:"_3EWzlu_m_0",iconImg:"_3zRc9B6B_0",columnIntroWrapper:"_1y8VaRsC_0",columnPageTabs:"_2IYyBY-w_0",tabs:"_1C2HTZHn_0",tabLink:"_3UpDxHgY_0",active:"_1VkkSc6v_0",tabTips:"_27k0us_4_0",tabItems:"hTxdFIfR_0",columnPageRecommend:"VpgaLBIY_0",recommendTitle:"_3MZnDYIJ_0",fixedTopBar:"_1APHks3t_0",topBarContent:"_3-myBZGL_0",topBarTabsWrapper:"_2LE7QYDq_0",topBarTabs:"_2M_ztfFw_0",topBarButtonGroup:"_5erIS0aB_0",button:"R6WNSOyh_0",hadSub:"_3g-XKua7_0",disabled:"_3uPjFjQU_0",only:"_1vk_1DiL_0",sourcePrice:"_1LHy2tVc_0","groupon-item":"_3FHiavwz_0",grouponItem:"_3FHiavwz_0"}},1471:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'._3fIfKJLa_0{position:relative;padding-bottom:50px}._31KCY2V0_0{position:relative;z-index:999}._3S9zDb5r_0{margin-top:-12px;border-radius:10px 10px 0 0;background:#fff}._3S9zDb5r_0,.G12COEt-_0{position:relative}.G12COEt-_0.FtZ7Mc2W_0{background:#fff}._1ThXy2m1_0{position:relative;height:56px}._2nR5D6h1_0{display:-webkit-box;display:-ms-flexbox;display:flex;height:56px;padding:8px 30px 4px;border-bottom:.5px solid #e8e8e8;border-radius:10px 10px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff}._2nR5D6h1_0._2CzydgKO_0{position:fixed;z-index:99;top:63px;left:0;width:100%;background:#fff}._2nR5D6h1_0._1HwCEVP7_0{top:0}._2nR5D6h1_0 ._2X_hBozN_0{height:44px;-ms-flex-align:center;-ms-flex-pack:center;color:#b2b2b2;font-size:17px;font-weight:500;-webkit-box-flex:1;-ms-flex:1 1 50%;flex:1 1 50%;position:relative}._2nR5D6h1_0 ._2X_hBozN_0,._2nR5D6h1_0 ._2X_hBozN_0 .NF7u1k3D_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}._2nR5D6h1_0 ._2X_hBozN_0 .NF7u1k3D_0{position:absolute;height:16px;line-height:16px;border:.5px solid #fa8919;color:#fa8919;font-size:12px;-ms-flex-align:center;-ms-flex-pack:center;border-radius:3px;width:30px;top:13px;left:52%;margin-left:38px}._2nR5D6h1_0 ._2X_hBozN_0.FtZ7Mc2W_0{color:#fa8919}._2nR5D6h1_0 ._2X_hBozN_0.FtZ7Mc2W_0:after{content:"";position:absolute;height:3px;width:66px;background:#fa8919;bottom:4px;left:50%;margin-left:-33px;border-radius:4px}._2JF-O166_0{background:#f6f7fb}._1vOxtQHd_0{margin-bottom:10px;padding:26px 20px 10px;background:#fff}._1vOxtQHd_0 ._1eZO65O8_0{font-size:19px;font-weight:600;color:#353535}._1vOxtQHd_0 ._2VvNVxco_0{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:12px;margin-bottom:6px}._1vOxtQHd_0 ._2VvNVxco_0 img{width:50px;height:50px;border-radius:50%;padding:3px;-ms-flex-negative:0;flex-shrink:0}._1vOxtQHd_0 ._-0gLIt4o_0{margin-left:8px;padding-top:6px}._1vOxtQHd_0 ._-0gLIt4o_0 ._2o0tNsVW_0{font-size:17px;font-weight:600;color:#353535}._1vOxtQHd_0 ._-0gLIt4o_0 .aagcBzyO_0{margin-top:4px;font-size:13px;font-weight:400;color:#4c4c4c}._1FoVl4lp_0{padding:40px 20px 20px;background:#fff}._2kmqNM-O_0{padding-bottom:50px}._2kmqNM-O_0 .hBCjbnVM_0{width:45px;height:22px;line-height:22px;background:#fbf5ee;color:#fa8919;font-size:12px;font-weight:500;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:15px}.O7LncbFH_0{position:relative;padding-top:17px;padding-bottom:17px;border-bottom:.5px solid #e8e8e8}.O7LncbFH_0.FtZ7Mc2W_0{border-bottom:none}.O7LncbFH_0 ._1iW3Ob1G_0{padding-left:16px}.O7LncbFH_0 ._2cPU7t2d_0{position:absolute;right:15px;height:24px;width:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:16px;color:#b2b2b2;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.O7LncbFH_0 ._2cPU7t2d_0.-fcNzVC5_0{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.O7LncbFH_0 ._2Re4_uHw_0{font-size:15px;line-height:20px;margin-right:50px;font-weight:500}.WWSG8v14_0{height:0;overflow:hidden;-webkit-transition:height .3s ease;transition:height .3s ease}.WWSG8v14_0 ._33JeiSie_0 ._2wSIUssj_0:first-child{margin-top:10px}._2wSIUssj_0{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:16px;margin-right:15px}._2wSIUssj_0 .jMfUj-7K_0{position:absolute;top:10px;color:#999}._2wSIUssj_0 ._2enAnfRp_0{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:24px;padding:14px 0;border-bottom:.5px solid #e8e8e8}._2wSIUssj_0 ._2M_OQIya_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:10px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}._2wSIUssj_0 ._2M_OQIya_0 ._38ljH6KR_0{color:#4c4c4c;font-weight:400;font-size:15px;line-height:20px}._2wSIUssj_0 ._2M_OQIya_0 ._38ljH6KR_0._2Z80v1u6_0{color:#b2b2b2}._2wSIUssj_0 ._31Z9uvWc_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}._31SxrPRH_0{position:relative;padding-top:16px}._31SxrPRH_0 ._1xQCbSIH_0{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:23px;padding-right:15px;height:30px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._31SxrPRH_0 ._1xQCbSIH_0 ._3TQRJ5mF_0{font-size:17px;color:#353535;font-weight:500}._31SxrPRH_0 ._1xQCbSIH_0 ._3ZRM-e8J_0{font-size:12px;color:#888;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:20px;margin-top:4px;font-weight:400;margin-left:10px}._31SxrPRH_0 ._1xQCbSIH_0 ._3YAPQEXn_0{font-size:12px;color:#888}._31SxrPRH_0 .mS6yTiNp_0{padding-top:5px;padding-bottom:15px;margin:0 15px;border-bottom:.5px solid #e8e8e8}._31SxrPRH_0 .mS6yTiNp_0:last-child{border-bottom:none}._2v_shP7R_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-bottom:10px;padding-top:10px}._2v_shP7R_0 ._2FefNNnN_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:36px;width:36px;overflow:hidden;border-radius:50%}._2v_shP7R_0 ._2FefNNnN_0 img{width:100%;vertical-align:center}._2v_shP7R_0 ._38ljH6KR_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-left:10px}._2v_shP7R_0 ._20C173EN_0{font-size:14px;line-height:20px;color:#353535;font-weight:400}._2v_shP7R_0 ._2M_OQIya_0{font-size:12px;color:#888}._2v_shP7R_0 ._2M_OQIya_0 span{color:#fa8919;margin:0 5px}._2v_shP7R_0 ._8RTDM8_S_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:0 8px;height:25px;border-radius:20px;font-size:15px;font-weight:500!important;color:#fa8919;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fbf5ee;font-weight:400}.MoPEKLFH_0{position:fixed;bottom:0;left:0;right:0;height:50px;z-index:5}.MoPEKLFH_0 .CCJGNNxD_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:50px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:#fa8919;color:#fff;font-weight:500;font-size:15px}.MoPEKLFH_0 .CCJGNNxD_0,.MoPEKLFH_0 .CCJGNNxD_0 ._3EYJ57ZY_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.MoPEKLFH_0 .CCJGNNxD_0 ._3EYJ57ZY_0{font-size:18px;margin-left:5px}.MoPEKLFH_0 .CCJGNNxD_0 ._3EYJ57ZY_0 ._2oDaVEnP_0{margin-right:6px}.MoPEKLFH_0 .CCJGNNxD_0 ._3EYJ57ZY_0 ._3K0T6ejo_0{font-size:18px}.MoPEKLFH_0 .CCJGNNxD_0 ._3jjeO8u8_0{text-decoration:line-through;font-size:14px;font-weight:300;margin-left:6px;margin-top:2px}.MoPEKLFH_0 ._1zgZHwCw_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:#fff;color:#888;font-size:15px;font-weight:500}.MoPEKLFH_0 ._1zgZHwCw_0 ._3EYJ57ZY_0{font-size:18px;color:#fa8919;margin-left:5px}.MoPEKLFH_0 ._2-Z88Goj_0{height:50px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:#b2b2b2;color:#fff;font-size:15px;font-weight:400}.MoPEKLFH_0 ._2-Z88Goj_0,.MoPEKLFH_0 ._3qr3AhpD_0,.MoPEKLFH_0 .UrO8r754_0{display:-webkit-box;display:-ms-flexbox;display:flex}.MoPEKLFH_0 ._3qr3AhpD_0{background:#f2f2f2;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:23px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:-23px;left:0;right:0;font-size:12px;color:#888}.MoPEKLFH_0 ._3qr3AhpD_0 ._3jEOayVs_0{color:#fa8919}.MoPEKLFH_0 ._3qr3AhpD_0 ._1AvoQhHD_0{margin-top:-2px;font-size:12px;-webkit-transform:scale(.7);transform:scale(.7)}._3StNhF5r_0{position:fixed;top:0;bottom:0;left:0;right:0;z-index:300}._3StNhF5r_0 ._1XV0BbVd_0{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.5)}._3StNhF5r_0 ._2CT4l7N3_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#fff;background:rgba(0,0,0,.5);width:40px;height:40px;border-radius:50%;position:absolute;bottom:45px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:2}._42t8gtcq_0{position:absolute;z-index:2;top:50%;left:15px;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:#fff;border-radius:8px}._42t8gtcq_0 ._2v_shP7R_0{border-bottom:.5px solid #e8e8e8;margin-left:16px;margin-right:16px}._42t8gtcq_0 ._2v_shP7R_0 ._2M_OQIya_0{color:#888}._42t8gtcq_0 ._1xQCbSIH_0{height:60px;font-size:18px;font-weight:500;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:.5px solid #e8e8e8;margin-left:16px;margin-right:16px}._42t8gtcq_0 ._1Rj_RLHR_0{position:relative;max-height:290px;overflow:hidden}._42t8gtcq_0 .mS6yTiNp_0{max-height:290px;overflow-x:hidden}._42t8gtcq_0 ._1JB-2-gn_0{height:50px;font-size:12px;color:#888;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.pnwFqHjb_0{position:fixed;left:0;right:0;z-index:20}',""]),e.locals={wrap:"_3fIfKJLa_0",topNavWrap:"_31KCY2V0_0",contentWrap:"_3S9zDb5r_0",container:"G12COEt-_0",on:"FtZ7Mc2W_0",tabsWrap:"_1ThXy2m1_0",tabs:"_2nR5D6h1_0",tabsFix:"_2CzydgKO_0",hasCodeTabsFix:"_1HwCEVP7_0",item:"_2X_hBozN_0",tag:"NF7u1k3D_0",intro:"_2JF-O166_0",columnCard:"_1vOxtQHd_0",columnTitle:"_1eZO65O8_0",columnTeacher:"_2VvNVxco_0",columnTeacherInfo:"_-0gLIt4o_0",author:"_2o0tNsVW_0",authorTitle:"aagcBzyO_0",richContent:"_1FoVl4lp_0",listWrap:"_2kmqNM-O_0",trialBtn:"hBCjbnVM_0",chapterItem:"O7LncbFH_0",chapterTitleWrap:"_1iW3Ob1G_0",expand:"_2cPU7t2d_0",open:"-fcNzVC5_0",chapterTitle:"_2Re4_uHw_0",articleListWrapper:"WWSG8v14_0",chapterArticleList:"_33JeiSie_0",articleItem:"_2wSIUssj_0",playIcon:"jMfUj-7K_0",section:"_2enAnfRp_0",left:"_2M_OQIya_0",txt:"_38ljH6KR_0",noContent:"_2Z80v1u6_0",right:"_31Z9uvWc_0",group:"_31SxrPRH_0",hd:"_1xQCbSIH_0",tit:"_3TQRJ5mF_0",subtit:"_3ZRM-e8J_0",icon:"_3YAPQEXn_0",bd:"mS6yTiNp_0",groupItem:"_2v_shP7R_0",img:"_2FefNNnN_0",name:"_20C173EN_0",btn:"_8RTDM8_S_0",bottom:"MoPEKLFH_0",oBtn:"CCJGNNxD_0",num:"_3EYJ57ZY_0",text:"_2oDaVEnP_0",price:"_3K0T6ejo_0",delete:"_3jjeO8u8_0",wBtn:"_1zgZHwCw_0",gBtn:"_2-Z88Goj_0",btnWrap:"UrO8r754_0",tip:"_3qr3AhpD_0",strong:"_3jEOayVs_0",arrowIcon:"_1AvoQhHD_0",moreGroupWrap:"_3StNhF5r_0",mask:"_1XV0BbVd_0",close:"_2CT4l7N3_0",moreGroup:"_42t8gtcq_0",bdWrapper:"_1Rj_RLHR_0",ft:"_1JB-2-gn_0",adWrapper:"pnwFqHjb_0"}},1528:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".course-wrapper{background-color:#f5f5f5;padding-bottom:67px;min-height:100vh;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;max-width:46.25rem;margin:0 auto}.course-wrapper .course-video{width:100%;position:relative;z-index:2;top:0;left:0}.course-wrapper .course-loading{text-align:center;padding:20px 0}.course-card{background-color:#fff;padding:14px 12px 12px;margin-bottom:10px}.course-card.inner{padding:14px 22px 12px}.course-card .course-main-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.course-card .course-main-title .course-title{font-size:16px;word-break:break-all;line-height:21px;font-weight:400;color:#353535;text-align:justify;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.course-card .course-main-title .course-title span{float:right;line-height:1.25rem;color:#888;font-size:11px}.course-card .course-main-title .download{width:48px;text-align:right;font-size:16px;color:#888}.course-card .course-main-title .course-status{color:#888;font-size:12px;line-height:1;padding-top:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.course-card .course-main-title .course-status .course-status-lf i.circle{color:#fa8919;font-size:12px}.course-card .course-main-title .course-status .course-status-lf .course-status-text{color:#fa8919;margin-right:6px}.course-card .course-main-title .course-status .course-status-lf i.video{color:#d9d9d9;font-size:12px}.course-card .course-teacher{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:12px;margin-bottom:6px}.course-card .course-teacher img{width:50px;height:50px;border-radius:50%;padding:3px;border:1px solid #fa8919;-ms-flex-negative:0;flex-shrink:0}.course-card .course-teacher .course-teacher-info{margin-left:6px;padding-top:10px}.course-card .course-teacher .course-teacher-info h3{font-size:15px;font-weight:400;color:#353535}.course-card .course-teacher .course-teacher-info p{font-size:12px;color:#888}.course-card .course-content{font-size:14px;word-break:break-all;color:#353535;text-align:justify}.course-card .course-content img{width:100%}.course-card .course-content-more{text-align:center;height:22px}.course-card .course-content-more i{font-size:15px;color:#e6e6e6;line-height:1}.course-tab{width:100%;background-color:#fff;padding-top:14px;display:-webkit-box;display:-ms-flexbox;display:flex;border-bottom:1px solid #f6f6f6;position:relative;z-index:1}.course-tab.fixed{position:-webkit-sticky;position:sticky;top:-1px}.course-tab .course-tab-left{-ms-flex-preferred-size:50%;flex-basis:50%;width:50%;text-align:right;padding-right:43px}.course-tab .course-tab-right{-ms-flex-preferred-size:50%;flex-basis:50%;width:50%;text-align:left;padding-left:43px;position:relative}.course-tab a{font-size:15px;color:#353535;font-weight:400;line-height:1;padding-bottom:16px;display:inline-block;cursor:pointer}.course-tab a.active{color:#fa8919}.course-tab .course-line{position:absolute;width:60px;height:2px;background-color:#fa8919;bottom:0}.course-tab .course-line.isMobile{-webkit-transition:left .35s ease-out;transition:left .35s ease-out}.course-tab .course-tab-tip{position:absolute;font-size:12px;left:106px;top:6px;border:1px solid #fa8919;color:#fa8919;border-radius:2px;padding:1px 2px;line-height:12px}.table-list{border-bottom:1px solid #f6f6f6}.table-list .table-header{padding:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;background-color:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.table-list .table-header h3{font-size:15px;word-break:break-all;line-height:21px;font-weight:400}.table-list .table-header i{color:#d9d9d9;font-size:16px}.table-list .table-header i.active{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.table-list .table-body{overflow:hidden;height:0;-webkit-transition:height .3s;transition:height .3s}.table-list .table-body .table-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;padding:8px 12px;cursor:pointer}.table-list .table-body .table-item>i.video{color:#fbac84;font-size:14px;-ms-flex-negative:0;flex-shrink:0}.table-list .table-body .table-item .table-item-text{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-left:8px;cursor:pointer}.table-list .table-body .table-item .table-item-text .table-item-text-subtitle{line-height:20px;font-size:15px;font-weight:400;text-align:justify;word-break:break-all;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:2}.table-list .table-body .table-item .table-item-text .table-item-text-progress{display:-webkit-box;display:-ms-flexbox;display:flex;padding-right:18px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.table-list .table-body .table-item .table-item-text .table-item-text-progress .table-item-text-progress-text{font-size:12px;color:#888}.table-list .table-body .table-item .table-item-text .table-item-text-progress .table-item-text-progress-text>span{color:#fbac84}.table-list .table-body .table-item .table-item-text .table-item-text-progress .table-item-text-progress-bar{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-left:12px;margin-right:18px;position:relative;height:4px;background-color:#e8e8e8}.table-list .table-body .table-item .table-item-text .table-item-text-progress .table-item-text-progress-bar .table-item-text-progress-bar-val{position:absolute;height:4px;left:0;top:0;width:0;background-color:#fbac84;-webkit-transition:width .5s;transition:width .5s}.table-list .table-body .table-item .table-item-right{-ms-flex-negative:0;flex-shrink:0;width:38px;margin-left:10px;text-align:right}.table-list .table-body .table-item .table-item-right.center{-ms-flex-item-align:center;align-self:center}.table-list .table-body .table-item .table-item-right>i.lock{color:#d9d9d9;font-size:14px;margin-right:2px}.table-list .table-body .table-item .table-item-right>.table-item-right-free{font-size:12px;padding:0 2px;border:1px solid #fa8919;color:#fa8919;line-height:1;border-radius:2px}.table-list .table-body .table-item .table-item-right>.table-item-right-download{font-size:12px;color:#d9d9d9}.table-list .table-body .table-item .table-item-right>.table-item-right-loading{font-size:12px;color:#888}.buy{position:fixed;left:0;bottom:0;z-index:10;height:67px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;border-top:1px solid #f2c9b3;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.buy.noborder{background-color:#f5f5f5;border-top:none}.buy a{display:inline-block;text-align:center;height:48px;line-height:48px;font-size:15px;cursor:pointer;outline:none;border-radius:3px}.buy a.buy-free{background-color:#018cee;color:#fff;margin-left:10px;margin-right:5px;color:#fa8919;background:#fff;width:117px;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;border:1px solid #fa8919}.buy a.buy-free,.buy a.buy-join{-webkit-box-sizing:border-box;box-sizing:border-box}.buy a.buy-join{margin-left:5px;margin-right:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.buy a.buy-join span{margin-left:5px;color:hsla(0,0%,100%,.5);font-size:11px;text-decoration:line-through}.buy a.buy-sold-out{background-color:#ccc;margin-left:10px;margin-right:10px}.buy a.buy-sold-out,.buy a.continue-learn{color:#fff;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.buy a.continue-learn{background-color:#fa8919;margin:0 10px}.buy .btn-groupbuy{text-align:center;font-size:15px;font-weight:400;color:#fff;-webkit-box-flex:1;-ms-flex:1;flex:1;height:48px;line-height:48px;margin-left:10px;margin-right:10px;border-radius:5px;background:#fa8919}.isIphoneXSeries .buy{padding-bottom:20px}.isIphoneXSeries .table-wrap{padding-bottom:45px}.isIphoneXSeries .course-card.inner{padding-bottom:20px}@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-ratio:3){.buy{padding-bottom:20px}.table-wrap{padding-bottom:45px}.course-card.inner{padding-bottom:20px}}@-webkit-keyframes chapter{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:1}}@keyframes chapter{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:1}}.btn-jump-wxlite{position:fixed;z-index:10;top:50vh;right:10px;width:64px;height:64px;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.3);box-shadow:0 2px 4px rgba(0,0,0,.3)}.btn-jump-wxlite span{color:#fff;font-size:12px;width:50px;display:block;text-align:center;background:#404a68;font-weight:400;margin-top:6px;line-height:1.5;border-radius:999em}.btn-jump-wxlite p{color:#404a68;font-weight:500;font-size:20px;line-height:1.2}.groupon-info{background-color:#fff;margin-bottom:10px}.groupon-info .groupon-info-hd{padding:12px 1.375rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;border-bottom:1px solid #f6f6f6}.groupon-info .groupon-info-hd a{color:#888;font-size:14px}.groupon-info .groupon-info-hd a i{font-size:14px}.bottom-groupbuy{width:100%}.bottom-groupbuy a{margin:0;font-size:13px;display:block}.button-primary{-ms-flex-preferred-size:0;flex-basis:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1;border-radius:0}.button-plain{-ms-flex-preferred-size:0;flex-basis:0;background:#fff;color:#fa8919}.button-cancel{background:#b2b2b2;color:#fff;border:0;border-radius:0;margin-right:0}.button-subscribe span{color:hsla(0,0%,100%,.5);font-size:11px;text-decoration:line-through}.button-text{color:#888}.button-text.is-orange{color:#fa8919}.button-text.is-big{font-size:20px}.btn-groupbuy{color:#888;text-align:center;font-size:13px}.ad-wrapper{position:fixed;left:0;right:0;z-index:20}@media (max-width:769px){.page-course-intro .breadcrumb{padding:10px}}",""])},1566:function(t,e,i){var n=i(1411);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("701b0488",n,!0,{})},1584:function(t,e,i){var n=i(1429);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("7274e04e",n,!0,{})},1626:function(t,e,i){var n=i(1471);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("0d6f7d36",n,!0,{})},1683:function(t,e,i){var n=i(1528);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("f0926f40",n,!0,{})},1945:function(t,e,i){function n(t){i(1683)}var r=i(22)(i(1337),i(2099),n,null,null);t.exports=r.exports},1946:function(t,e,i){var n=i(22)(i(1338),i(2076),null,null,null);t.exports=n.exports},1947:function(t,e,i){function n(t){this.$style=i(1566)}var r=i(22)(i(1339),i(2013),n,null,null);t.exports=r.exports},1948:function(t,e,i){function n(t){this.$style=i(1626)}var r=i(22)(i(1340),i(2113),n,null,null);t.exports=r.exports},1949:function(t,e,i){function n(t){this.$style=i(1584)}var r=i(22)(i(1341),i(2045),n,null,null);t.exports=r.exports},2004:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i(t.isInApp||t.mobile||t.isPreview?"IntroMobile":"IntroPc")],1)},staticRenderFns:[]}},2013:function(t,e){t.exports={render:function(){var t,e,i,n,r,o,a,s=this,A=s.$createElement,l=s._self._c||A;return l("div",{class:[s.$style.wrap],on:{click:s.closeLayer}},[l("div",{class:s.$style.topNavWrap},[l("TopNav")],1),s._v(" "),l("ArticleListHeader",{ref:"header",attrs:{columnData:s.column,productType:s.productType,videoId:s.fastVideoId}}),s._v(" "),l("div",{ref:"contentWrap",class:[s.$style.contentWrap]},[l("div",{ref:"tabs",class:[s.$style.tabsWrap]},[l("div",{class:[s.$style.tabs,(t={},t[s.$style.tabsFix]=s.isTabsFixed,t),(e={},e[s.$style.hasCodeTabsFix]=s.isTabsFixed&&s.hasCode,e)]},[l("div",{class:[s.$style.item,(i={},i[s.$style.on]=0===s.tabIndex,i)],on:{click:function(t){return s.switchTab(0)}}},[s._v("课程介绍")]),s._v(" "),l("div",{class:[s.$style.item,(n={},n[s.$style.on]=1===s.tabIndex,n)],on:{click:function(t){return s.switchTab(1)}}},[s._v("课程目录")]),s._v(" "),1===s.tabIndex&&s.hasChapter?l("div",{ref:"expand",class:[s.$style.expand,"iconfont",(r={},r[s.$style.open]=s.isShowLayer,r)],on:{click:function(t){return t.stopPropagation(),s.openLayer(t)}}},[s._v("")]):s._e()])]),s._v(" "),l("div",{directives:[{name:"show",rawName:"v-show",value:0===s.tabIndex,expression:"tabIndex === 0"}],class:s.$style.intro},[l("div",{class:s.$style.columnCard},[l("h3",{class:s.$style.columnTitle},[s._v("课程讲师")]),s._v(" "),l("div",{class:s.$style.columnTeacher},[l("img",{attrs:{src:s._f("resizeImg")(s.column.author_header,50*s.ratio,50*s.ratio),alt:"avatar"}}),s._v(" "),l("div",{class:s.$style.columnTeacherInfo},[l("h3",{class:s.$style.author},[s._v(s._s(s.column.author_name))]),s._v(" "),l("p",{class:s.$style.authorTitle},[s._v(s._s(s.column.author_intro))])])])]),s._v(" "),l("div",{class:s.$style.richContent},[l("RichContent",{attrs:{content:s.column.column_intro,canNote:!1,customColor:"white",customSize:"middle"},on:{"update:content":function(t){return s.$set(s.column,"column_intro",t)},note:function(){},share:function(){}}})],1)]),s._v(" "),l("div",{directives:[{name:"show",rawName:"v-show",value:1===s.tabIndex,expression:"tabIndex === 1"}],ref:"listWrap",class:s.$style.listWrap},[s.hasChapter?[l("div",{class:[s.$style.chapterLayerWrap]},[l("div",{ref:"fixedChapter",class:[s.$style.chapterTitleWrap,s.$style.chapterFixedWrap,(o={},o[s.$style.fixed]=s.isTabsFixed,o),(a={},a[s.$style.hasCode]=s.isTabsFixed&&s.hasCode,a)],on:{click:function(t){return t.stopPropagation(),s.openLayer(t)}}},[l("div",{class:[s.$style.chapterTitle]},[s._v(s._s(s.fixedChapter.title)+" ("+s._s(s.fixedChapter.articles.length)+"讲)")]),s._v(" "),s.isShowLayer?[l("div",{class:s.$style.overlayer}),s._v(" "),l("div",{class:s.$style.layerListWrapper},[l("ul",{class:[s.$style.sectionList]},s._l(s.chapters,function(t,e){var i;return l("li",{key:t.id,ref:"layerChapterItem",refInFor:!0,class:[s.$style.item,(i={},i[s.$style.active]=s.currentChapterIndex===e,i)],on:{click:function(t){return t.stopPropagation(),s.scrollToChapter(e)}}},[l("span",[s._v(s._s(t.title))]),s._v(" "),s.currentChapterIndex===e?l("span",{class:["iconfont"]},[s._v("")]):s._e()])}),0)])]:s._e()],2)]),s._v(" "),s._l(s.totalArticleList,function(t,e){return l("div",{key:e,ref:"listGroup",refInFor:!0,class:[s.$style.chapterItem,s.$style.on]},[l("div",{class:s.$style.chapterTitleWrap},[l("div",{class:[s.$style.chapterTitle]},[s._v(s._s(t.title)+" ("+s._s(t.articles.length)+"讲)")])]),s._v(" "),l("div",{class:[s.$style.articleListWrapper]},[l("div",{class:s.$style.chapterArticleList},[t.articles.length?s._l(t.articles,function(t,e){var i;return l("div",{key:e,class:[s.$style.articleItem,(i={},i[s.$style.on]=s.lastReadArticleId===t.id,i)],on:{click:function(e){return s.goDetail(t)}}},[l("div",{class:[s.$style.playIcon,"iconfont"]},[s._v("")]),s._v(" "),l("div",{class:s.$style.txtWrap},[l("div",{class:[s.$style.txt]},[s._v(s._s(t.article_title))])]),s._v(" "),l("div",{class:s.$style.progressWrap},[l("CircleProgress",{attrs:{size:16,border:2,progress:t.studyProgress,color:"#fa8919",backgroundColor:"#FAE7D0"}}),s._v(" "),l("div",{class:s.$style.percent},[s._v(s._s(t.studyPercent))])],1)])}):[l("div",{class:s.$style.articleItem},[l("div",{class:s.$style.txtWrap},[l("div",{class:[s.$style.txt,s.$style.noContent]},[s._v("该章节暂未更新内容,敬请期待")])])])]],2)])])})]:s._l(s.articles,function(t,e){var i;return l("div",{key:e,class:[s.$style.articleItem,(i={},i[s.$style.on]=s.lastReadArticleId===t.id,i)],on:{click:function(e){return s.goDetail(t)}}},[l("div",{class:[s.$style.playIcon,"iconfont"]},[s._v("")]),s._v(" "),l("div",{class:s.$style.txtWrap},[l("div",{class:s.$style.txt},[s._v(s._s(t.article_title))])]),s._v(" "),l("div",{class:s.$style.progressWrap},[l("CircleProgress",{attrs:{size:16,border:2,progress:t.studyProgress,color:"#fa8919",backgroundColor:"#FAE7D0"}}),s._v(" "),l("div",{class:s.$style.percent},[s._v(s._s(t.studyPercent))])],1)])})],2)])],1)},staticRenderFns:[]}},2045:function(t,e,i){t.exports={render:function(){var t,e=this,n=e.$createElement,r=e._self._c||n;return r("div",{class:e.$style.pageContent},[r("common-header",{attrs:{loginUser:e.loginUser}}),e._v(" "),r("div",{class:e.$style.columnInfoWrapper},[r("div",{class:[e.$style.contentBlock,e.$style.columnInfoContent]},[r("column-info",{attrs:{data:e.columnInfo,loginUser:e.loginUser},on:{subscribe:e.subscribe,start:e.jumpToArticle}}),e._v(" "),r("div",{class:e.$style.downloadBox},[r("h3",[e._v("移动设备学习")]),e._v(" "),r("div",{class:e.$style.downloadDetails},[r("div",{class:e.$style.download},[r("a",{class:e.$style.downloadBtn,on:{click:function(t){return e.download(0,t)}}},[r("i",{staticClass:"iconfont"},[e._v("")]),e._v(" "),r("p",[e._v("App Store 下载")])]),e._v(" "),r("a",{class:[e.$style.downloadBtn,e.$style.android],on:{click:function(t){return e.download(1,t)}}},[r("i",{staticClass:"iconfont"},[e._v("")]),e._v(" "),r("p",[e._v("Android 下载")])]),e._v(" "),r("span",{class:e.$style.downloadTip,attrs:{href:"javascript:;"}},[e._v("扫描二维码下载客户端"),r("img",{class:e.$style.imgArrow,attrs:{src:i(1042),alt:""}})])]),e._v(" "),r("div",{class:e.$style.qrcode},[r("img",{attrs:{src:i(1052),alt:""}})])])])],1)]),e._v(" "),e.showGroupby?r("div",{class:[e.$style.contentBlock,e.$style.columnGrouponWrapper]},[r("div",{class:e.$style.grouponTitle},[r("h3",[e._v("限时拼团\n "),e.columnInfo.groupbuy||e.columnInfo.groupbuy_list&&e.columnInfo.groupbuy_list.length>0?r("span",[e.columnInfo.groupbuy?r("span",[e._v(e._s(e.columnInfo.groupbuy.success_ucount)+"人成团,")]):e._e(),e._v("未成团自动退款")]):e._e()]),e._v(" "),r("a",{class:e.$style.grouponRule,attrs:{href:"javascript:;"},on:{click:e.jumpToRule}},[e._v("规则说明"),r("img",{class:e.$style.iconImg,attrs:{src:i(1041),alt:""}})])]),e._v(" "),r("groupon-module",{attrs:{cId:e.columnInfo.id,groupbuyList:e._f("formatList")(e.columnInfo.groupbuy_list,4),groupbuyPrice:e.groupbuyPrice}})],1):e._e(),e._v(" "),r("div",{class:[e.$style.contentBlock,e.$style.columnIntroWrapper]},[r("div",{ref:"columnPageTabs",class:e.$style.columnPageTabs},[r("div",{class:e.$style.tabs},e._l(e.tabs,function(t,i){var n;return r("a",{key:i,class:[e.$style.tabLink,(n={},n[e.$style.active]=e.currentTabIndex===i,n)],attrs:{href:"javascript:;"},on:{click:function(t){return t.preventDefault(),e.tabChange(i)}}},[e._v(e._s(t)),1!==i||0!==e.currentTabIndex||e.columnInfo.had_sub?e._e():r("span",{class:e.$style.tabTips},[e._v("试看")])])}),0),e._v(" "),r("div",{class:e.$style.tabItems},[0===e.currentTabIndex&&e.columnInfo.column_intro?r("ColumnIntro",{attrs:{content:e.columnInfo.column_intro},on:{"update:content":function(t){return e.$set(e.columnInfo,"column_intro",t)}}}):1===e.currentTabIndex?r("Catalog",{attrs:{isNeedSub:!e.columnInfo.had_sub&&e.columnInfo.is_onborad,articleList:e.articleList,chapterList:e.chapterList,freelyRead:e.freelyRead,columnType:e.columnInfo.column_type},on:{jumpToArticle:e.catalogJump}}):e._e()],1)]),e._v(" "),r("div",{class:[e.$style.columnPageRecommend,(t={},t[e.$style.fixed]=e.fixed,t)]},[r("h3",{class:e.$style.recommendTitle},[e._v("看过的人还看了")]),e._v(" "),e.recommendList.length?e._l(e.recommendList,function(t){return r("RecommendColumnItem",{key:t.product_id,attrs:{data:t},on:{jump:e.jumpToIntro}})}):e._e()],2)]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:e.fixed,expression:"fixed"}],class:e.$style.fixedTopBar},[r("div",{class:[e.$style.contentBlock,e.$style.topBarContent]},[r("div",{class:e.$style.topBarTabsWrapper},[r("div",{class:e.$style.topBarTabs},e._l(e.tabs,function(t,i){var n;return r("a",{key:i,class:[e.$style.tabLink,(n={},n[e.$style.active]=e.currentTabIndex===i,n)],attrs:{href:"javascript:;"},on:{click:function(t){return t.preventDefault(),e.tabChange(i)}}},[e._v(e._s(t)),1!==i||0!==e.currentTabIndex||e.columnInfo.had_sub?e._e():r("span",{class:e.$style.tabTips},[e._v("试看")])])}),0),e._v(" "),r("div",{class:e.$style.topBarButtonGroup},[e.columnInfo.had_sub?[r("button",{class:[e.$style.button,e.$style.hadSub],on:{click:e.jumpToArticle}},[e._v("开始学习")])]:e.columnInfo.is_onborad?e.columnInfo.groupbuy&&e.columnInfo.groupbuy.had_join?[r("button",{class:[e.$style.button,e.$style.disabled]},[e._v("已参团")])]:e.columnInfo.column_price_market>e.columnInfo.column_price?[r("button",{class:e.$style.button,on:{click:function(t){return e.subscribe(1)}}},[e._v(" 限时 ¥"+e._s(e._f("columnPrice")(e.columnInfo.column_price)))]),e._v(" "),e.columnInfo.column_price_market>e.columnInfo.column_price?r("s",{class:e.$style.sourcePrice},[e._v("原价:¥"+e._s(e._f("columnPrice")(e.columnInfo.column_price_market)))]):e._e()]:e.columnInfo.groupbuy&&!e.columnInfo.groupbuy.had_join?[r("button",{class:e.$style.button,on:{click:function(t){return e.subscribe(2)}}},[e._v(e._s(e.columnInfo.groupbuy.success_ucount+"人成团¥"+(e.columnInfo.groupbuy.price/100).toFixed(0)))]),e._v(" "),r("button",{class:[e.$style.button,e.$style.only],on:{click:function(t){return e.subscribe(1)}}},[e._v("单独订阅¥"+e._s(e._f("columnPrice")(e.columnInfo.column_price)))])]:[e.columnInfo.column_price_market>e.columnInfo.column_price?r("s",{class:e.$style.sourcePrice},[e._v("原价:¥"+e._s(e._f("columnPrice")(e.columnInfo.column_price_market)))]):e._e(),e._v(" "),r("button",{class:e.$style.button,on:{click:function(t){return e.subscribe(1)}}},[e._v(e._s(e.columnInfo.is_preorder?"预售":"订阅")+" ¥"+e._s(e._f("columnPrice")(e.columnInfo.column_price)))])]:[r("button",{class:[e.$style.button,e.$style.disabled]},[e._v("已下架")])]],2)])])]),e._v(" "),r("common-footer"),e._v(" "),r("ReturnTop")],1)},staticRenderFns:[]}},2076:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[t.isLt240AppVersion?[i("IntroMobileOld")]:[t.hadSub?i("IntroMobileBought",{attrs:{columnData:t.columnData,lastReadArticleId:t.lastReadArticleId}}):t.notSub?i("IntroMobileNotBuy",{attrs:{columnData:t.columnData}}):t._e()]],2)},staticRenderFns:[]}},2099:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:["page-course-intro","course-wrapper",t.iOSAppSwitch?"ios-app-switch":"",{isIphoneXSeries:t.isIphoneXSeries}],style:t.wrapperStyle},[t.isInAndroidApp&&t.isShowPlayer?i("nav-bar",{attrs:{"share-icon":t.isShowShareSale?"":""},on:{back:t.backHandler,share:t.shareHandler}}):t._e(),t._v(" "),i("TopNav"),t._v(" "),t.articleData&&t.articleData.id?i("bread-crumb",{staticClass:"breadcrumb",attrs:{list:[{title:"讲堂",link:"/"},{title:""+t.articleData.column_title}]}}):t._e(),t._v(" "),t.isShowPlayer?i("div",{ref:"video",staticClass:"course-video",style:t.playerStyle},[i("video-player",{attrs:{"video-list":t.videoList},on:{"update:videoList":function(e){t.videoList=e},"update:video-list":function(e){t.videoList=e}}})],1):t._e(),t._v(" "),i("div",{staticClass:"course-card"},[i("div",{staticClass:"course-main-title"},[i("div",{staticStyle:{"flex-grow":"1"}},[i("h3",{staticClass:"course-title"},[i("span",[t._v(t._s(t.articleData.sub_count?t.articleData.sub_count:1)+"人购买")]),t._v(t._s(t.articleData.column_title))]),t._v(" "),i("div",{staticClass:"course-status"},[i("div",{staticClass:"course-status-lf"},[i("i",{staticClass:"iconfont video"},[t._v("")]),t._v(" "),i("span",[t._v("视频课程")]),t._v(" "),i("span",{staticStyle:{marginLeft:"10px"}},[t._v(t._s(t.articleData.update_frequency))])])])])])]),t._v(" "),t.iOSAppSwitch||!t.showGroupon||t.articleData.had_sub||t.articleData.groupbuy&&t.articleData.groupbuy.had_join||!t.articleData.groupbuy_list||!t.articleData.groupbuy_list.length?t._e():i("div",{staticClass:"groupon-info"},[i("div",{staticClass:"groupon-info-hd"},[i("a",{on:{click:function(e){return t.jumpWebview("/rules/groupon","拼团须知")}}},[i("i",{staticClass:"iconfont",staticStyle:{"margin-right":"2px"}},[t._v("")]),t._v("拼团须知")]),t._v(" "),i("a",{directives:[{name:"show",rawName:"v-show",value:t.isInApp&&t.articleData.groupbuy_list.length>2,expression:"isInApp && articleData.groupbuy_list.length > 2"}],on:{click:function(e){return t.jumpWebview("/list/groupon/"+t.id,"进行中的团")}}},[t._v("查看更多"),i("i",{staticClass:"iconfont"},[t._v("")])])]),t._v(" "),i("carousel",{attrs:{showNum:2},on:{itemclick:t.jumpweapp}},t._l(t.groupbuyList,function(t,e){return i("groupon-item",{key:e,attrs:{data:t}})}),1)],1),t._v(" "),i("div",{ref:"tabparent",staticClass:"course-tab",class:{fixed:t.isEnableSticky},style:t.courseTabStyle},[i("div",{staticClass:"course-tab-left",on:{click:function(e){t.show="info"}}},[i("a",{ref:"lefttab",class:{active:"info"===t.show},attrs:{href:"javascript:void(0);"}},[t._v("课程介绍")])]),t._v(" "),i("div",{staticClass:"course-tab-right",on:{click:function(e){t.show="table"}}},[i("a",{ref:"righttab",class:{active:"table"===t.show},attrs:{href:"javascript:void(0);"}},[t._v("课程目录"),i("span",{directives:[{name:"show",rawName:"v-show",value:"info"===t.show&&!t.articleData.had_sub,expression:'show==="info" && !articleData.had_sub'}],staticClass:"course-tab-tip"},[t._v("试看")])])]),t._v(" "),i("div",{staticClass:"course-line",class:{isMobile:t.isMobile},style:{left:t.barLeftRes}})]),t._v(" "),t.loading?i("div",{staticClass:"course-loading"},[t._v("\n 加载中...\n ")]):i("div",{ref:"contentWrap"},[i("div",{directives:[{name:"show",rawName:"v-show",value:"info"===t.show,expression:'show==="info"'}],key:"info"},[i("div",{staticClass:"course-card inner"},[i("h3",{staticClass:"course-title"},[t._v("课程讲师")]),t._v(" "),i("div",{staticClass:"course-teacher"},[i("img",{attrs:{src:t._f("resizeImg")(t.articleData.author_header,50*t.ratio,50*t.ratio),alt:"avatar"}}),t._v(" "),i("div",{staticClass:"course-teacher-info"},[i("h3",[t._v(t._s(t.articleData.author_name))]),t._v(" "),i("p",[t._v(t._s(t.articleData.author_intro))])])])]),t._v(" "),i("div",{staticClass:"course-card inner",staticStyle:{marginBottom:"0"}},[i("rich-content",{ref:"contentBox",staticClass:"course-content typo common-content",attrs:{content:t.articleData.column_intro}})],1)]),t._v(" "),i("div",{directives:[{name:"show",rawName:"v-show",value:"table"===t.show,expression:'show==="table"'}],key:"table",staticClass:"table-wrap",style:{paddingBottom:"25px"}},t._l(t.listChapter,function(e,n){return i("div",{key:e.id,staticClass:"table-list"},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.courselists&&e.courselists.length>0,expression:"chapter.courselists && chapter.courselists.length > 0"}],staticClass:"table-header",on:{click:function(e){return t.toggleChapter(n,e)}}},[i("h3",[t._v(t._s(e.title))]),t._v(" "),i("i",{staticClass:"iconfont",class:{active:e.open}},[t._v("")])]),t._v(" "),i("div",{staticClass:"table-body",class:{active:e.open}},t._l(e.courselists,function(e){return i("div",{key:e.id,staticClass:"table-item",on:{click:function(i){return t.watchVideo(e)}}},[i("i",{staticClass:"iconfont video"},[t._v("")]),t._v(" "),i("div",{staticClass:"table-item-text"},[i("p",{staticClass:"table-item-text-subtitle"},[t._v(t._s(e.article_title))]),t._v(" "),t.articleData.had_sub?i("div",{staticClass:"table-item-text-progress"},[e.had_viewed?i("p",{staticClass:"table-item-text-progress-text"},[t._v("观看进度:"),i("span",[t._v(t._s(e.video_play_seconds>0&&e.video_total_seconds>0?Math.min(Math.ceil(e.video_play_seconds/e.video_total_seconds*100),100):0)+"%")])]):t._e(),t._v(" "),e.had_viewed?i("div",{staticClass:"table-item-text-progress-bar"},[i("div",{staticClass:"table-item-text-progress-bar-val",style:{width:(e.video_play_seconds>0&&e.video_total_seconds>0?Math.min(Math.ceil(e.video_play_seconds/e.video_total_seconds*100),100):0)+"%"}})]):t._e(),t._v(" "),e.had_viewed?t._e():i("div",{staticClass:"table-item-text-progress-text"},[t._v("\n 未学习\n ")])]):t._e()]),t._v(" "),t.articleData.had_sub?t._e():i("div",{staticClass:"table-item-right"},[!t.articleData.had_sub&&e.article_could_preview?i("span",{staticClass:"table-item-right-free"},[t._v("试看")]):t._e(),t._v(" "),t.articleData.had_sub||e.article_could_preview?t._e():i("i",{staticClass:"iconfont lock"},[t._v("")])])])}),0)])}),0)]),t._v(" "),t.isInApp?[t.isBottomShow&&t.articleData.groupbuy&&t.articleData.groupbuy.had_join?i("div",{staticClass:"buy noborder color-primary",on:{click:t.checkGroupbuyProgress}},[i("p",{staticClass:"btn-groupbuy"},[t._v(t._s(t.groupbuyText))])]):t.isBottomShow&&t.articleData?i("div",{staticClass:"buy noborder"},[t.articleData.had_sub?t._e():i("a",{staticClass:"buy-free",on:{click:function(e){return t.freeWatch(0)}}},[t._v("免费试看")]),t._v(" "),!t.articleData.had_sub&&t.articleData.is_onborad?i("a",{staticClass:"iconfont button-primary buy-join",on:{click:function(e){return t.subscribe(1)}}},[t._v("\n "+t._s(t.iOSAppSwitch?"":t.articleData.is_preorder?"预售":t.articleData.column_price_market>t.articleData.column_price?"限时":"加入学习")+" "+t._s(t.isInApp?"":"¥")+t._s(t._f("columnPrice")(t.articleData.column_price))+"\n "),t.articleData.column_price_market>t.articleData.column_price?i("span",[t._v(" "+t._s(t.isInApp?"":"¥")+t._s(t._f("columnPrice")(t.articleData.column_price_market))+" ")]):t._e()]):0==t.articleData.had_sub?i("a",{staticClass:"buy-sold-out"},[t._v("已下架")]):t.articleData.had_sub?i("a",{staticClass:"continue-learn",on:{click:function(e){return t.freeWatch(t.lastWatch)}}},[t._v("进入学习")]):t._e()]):t._e(),t._v(" "),!t.isShowJumpWXLite||!t.articleData.groupbuy||t.articleData.groupbuy.had_join||t.articleData.had_sub||t.iOSAppSwitch?t._e():i("div",{staticClass:"btn-jump-wxlite",style:{background:t.articleData.column_bgcolor},on:{click:t.jumpWXLite}},[i("span",[t._v("拼团价")]),t._v(" "),i("p",[t._v("¥"+t._s(t._f("columnPrice")(t.articleData.groupbuy.price)))])])]:t._e(),t._v(" "),t.isInApp?t._e():[t.isBottomShow?i("sub-bottom",[!0===t.articleData.had_sub?[i("a",{staticClass:"button-primary",on:{click:function(e){return t.freeWatch(t.lastWatch)}}},[t._v("进入学习")])]:t.articleData.groupbuy&&t.articleData.groupbuy.had_join?[i("div",{staticClass:"bottom-groupbuy"},[i("a",{staticClass:"button-primary",on:{click:t.jumpGroupon}},[t._v("查看拼团进度")])])]:!1===t.articleData.is_onborad?[i("a",{staticClass:"button-cancel"},[t._v("已下架")])]:!1===t.articleData.had_sub&&t.articleData.is_onborad?[t.joingroupbuy.code?[i("a",{staticClass:"button-primary button-plain",on:{click:function(e){return t.subscribe(3)}}},[i("span",{staticClass:"button-text is-big is-orange"},[t._v("¥"+t._s(t._f("columnPrice")(t.joingroupbuy.price)))]),t._v("\n  \n "),i("span",{staticClass:"button-text"},[t._v("加入拼团")])])]:t.articleData.groupbuy&&!t.articleData.groupbuy.had_join?[t.joingroupbuy.code?t._e():i("a",{staticClass:"button-primary button-plain",on:{click:function(e){return t.subscribe(2)}}},[i("span",{staticClass:"button-text is-big is-orange"},[t._v("¥"+t._s(t._f("columnPrice")(t.articleData.groupbuy.price)))]),t._v("\n  \n "),i("span",{staticClass:"button-text"},[t._v(t._s(t.articleData.groupbuy.success_ucount)+"人成团")])])]:t._e(),t._v(" "),i("a",{staticClass:"button-primary button-subscribe",attrs:{href:"javascript:;",id:"tagmanager-subscribe"},on:{click:function(e){return t.subscribe(1)}}},[t._v("\n "+t._s(t.articleData.is_preorder?"预售":t.articleData.column_price_market>t.articleData.column_price?"限时":"订阅")+" ¥"+t._s(t._f("columnPrice")(t.articleData.column_price))+"\n "),t.articleData.column_price_market>t.articleData.column_price?i("span",[t._v("¥"+t._s(t._f("columnPrice")(t.articleData.column_price_market)))]):t._e()])]:t._e()],2):t._e()],t._v(" "),t.showAdModule?i("div",{staticClass:"ad-wrapper",style:{bottom:t.adBottom}},[i("Marquee",{attrs:{data:t.marqueeData,themeStyle:t.marqueeTheme},on:{jump:t.jump}})],1):t._e(),t._v(" "),t.groupbuyPosterData?i("groupbuy-poster-box",{attrs:{data:t.groupbuyPosterData},on:{hide:function(e){t.groupbuyPosterData=null}}}):t._e()],2)},staticRenderFns:[]}},2113:function(t,e,i){t.exports={render:function(){var t,e,n,r,o,a=this,s=a.$createElement,A=a._self._c||s;return A("div",{class:[a.$style.wrap]},[A("div",{class:a.$style.topNavWrap},[A("TopNav")],1),a._v(" "),A("ArticleListHeader",{ref:"header",attrs:{columnData:a.column,productType:a.productType,videoId:a.fastVideoId}}),a._v(" "),A("div",{ref:"contentWrap",class:[a.$style.contentWrap]},[a.groupbuyList.length>0?A("div",{ref:"group",class:a.$style.group},[A("div",{class:a.$style.hd,on:{click:function(t){a.isShowMoreGroup=!0}}},[A("div",{class:a.$style.tit},[a._v("限时拼团")]),a._v(" "),A("div",{class:a.$style.subtit},[a.isValidGroupBuy?A("span",[a._v(a._s(a.groupCount)+"人成团,")]):a._e(),a._v("未成团自动退款")]),a._v(" "),A("div",{class:[a.$style.icon,"iconfont"]},[a._v("")])]),a._v(" "),A("div",{class:a.$style.bd},[a._l(a.groupbuyList,function(t,e){return[e<2?A("div",{key:e,class:a.$style.groupItem},[A("div",{class:a.$style.img},[A("img",{attrs:{src:t.host_avatar||i(226)}})]),a._v(" "),A("div",{class:a.$style.txt},[A("div",{class:a.$style.name},[a._v(a._s(t.host_nickname))]),a._v(" "),A("div",{class:a.$style.left},[a._v("仅剩"),A("span",[a._v(a._s(t.want_ucount))]),a._v("个名额,剩余"),A("span",[a._v(a._s(a._f("filterTime")(t.left_seconds)))]),a._v("结束")])]),a._v(" "),A("div",{class:a.$style.btn,on:{click:function(e){return a.goGroupon(t.code)}}},[a._v("去参团 ¥"+a._s(a._f("columnPrice")(t.amount)))])]):a._e()]})],2)]):a._e(),a._v(" "),A("div",{ref:"container",class:[a.$style.container,(t={},t[a.$style.on]=a.groupbuyList.length>0,t)]},[A("div",{ref:"tabs",class:a.$style.tabsWrap},[A("div",{class:[a.$style.tabs,(e={},e[a.$style.tabsFix]=a.isTabsFixed,e),(n={},n[a.$style.hasCodeTabsFix]=a.isTabsFixed&&a.hasCode,n)]},[A("div",{class:[a.$style.item,(r={},r[a.$style.on]=0===a.tabIndex,r)],on:{click:function(t){return a.switchTab(0)}}},[a._v("课程介绍")]),a._v(" "),A("div",{class:[a.$style.item,(o={},o[a.$style.on]=1===a.tabIndex,o)],on:{click:function(t){return a.switchTab(1)}}},[a._v("课程目录"),0===a.tabIndex&&!a.columnHadSub&&a.hasTrialArticles?A("span",{class:a.$style.tag},[a._v("试看")]):a._e()])])]),a._v(" "),A("div",{directives:[{name:"show",rawName:"v-show",value:0===a.tabIndex,expression:"tabIndex === 0"}],class:a.$style.intro},[A("div",{class:a.$style.columnCard},[A("h3",{class:a.$style.columnTitle},[a._v("课程讲师")]),a._v(" "),A("div",{class:a.$style.columnTeacher},[A("img",{attrs:{src:a._f("resizeImg")(a.column.author_header,50*a.ratio,50*a.ratio),alt:"avatar"}}),a._v(" "),A("div",{class:a.$style.columnTeacherInfo},[A("h3",{class:a.$style.author},[a._v(a._s(a.column.author_name))]),a._v(" "),A("p",{class:a.$style.authorTitle},[a._v(a._s(a.column.author_intro))])])])]),a._v(" "),A("div",{class:a.$style.richContent},[A("RichContent",{attrs:{content:a.column.column_intro,canNote:!1,customColor:"white",customSize:"middle"},on:{"update:content":function(t){return a.$set(a.column,"column_intro",t)},note:function(){},share:function(){}}})],1)]),a._v(" "),A("div",{directives:[{name:"show",rawName:"v-show",value:1===a.tabIndex,expression:"tabIndex === 1"}],class:a.$style.listWrap},[a.hasChapter?a._l(a.totalArticleList,function(t,e){var i,n;return A("div",{key:e,class:[a.$style.chapterItem,(i={},i[a.$style.on]=t.isActive,i)]},[A("div",{class:a.$style.chapterTitleWrap,on:{click:function(i){return a.expandChapter(t,e)}}},[A("div",{class:[a.$style.expand,"iconfont",(n={},n[a.$style.open]=t.isActive,n)]},[a._v("")]),a._v(" "),A("div",{class:a.$style.chapterTitle},[a._v(a._s(t.title)+" ("+a._s(t.articles.length)+"讲)")])]),a._v(" "),A("div",{ref:"articleListWrapper",refInFor:!0,class:[a.$style.articleListWrapper]},[A("div",{ref:"chapterArticleList",refInFor:!0,class:a.$style.chapterArticleList},[t.articles.length?a._l(t.articles,function(t,e){var i;return A("div",{key:e,class:[a.$style.articleItem,(i={},i[a.$style.unsub]=a.isShowSubBtn&&!t.article_could_preview,i)],on:{click:function(e){return a.goDetail(t)}}},[t.article_could_preview?A("div",{class:[a.$style.playIcon,"iconfont"]},[a._v("")]):a._e(),a._v(" "),A("div",{class:a.$style.section},[A("div",{class:a.$style.left},[A("div",{class:[a.$style.txt]},[a._v(a._s(t.article_title))])]),a._v(" "),a.columnHadSub?a._e():A("div",{class:a.$style.right},[t.article_could_preview?A("div",{class:a.$style.trialBtn},[a._v("免费")]):a._e()])])])}):[A("div",{class:a.$style.articleItem},[A("div",{class:a.$style.left},[A("div",{class:[a.$style.txt,a.$style.noContent]},[a._v("该章节暂未更新内容,敬请期待")])])])]],2)])])}):a._l(a.articles,function(t,e){return A("div",{key:e,class:a.$style.articleItem,on:{click:function(e){return a.goDetail(t)}}},[A("div",{class:[a.$style.playIcon,"iconfont"]},[a._v("")]),a._v(" "),A("div",{class:a.$style.section},[A("div",{class:a.$style.left},[A("div",{class:a.$style.txt},[a._v(a._s(t.article_title))])]),a._v(" "),A("div",{class:a.$style.right},[!a.isShowSubBtn||t.article_could_preview?A("div",{class:a.$style.trialBtn},[a._v("免费")]):a._e()])])])})],2),a._v(" "),a.showAdModule?A("div",{class:a.$style.adWrapper,style:{bottom:a.adBottom}},[A("Marquee",{attrs:{data:a.marqueeData,themeStyle:a.marqueeTheme},on:{jump:a.jump}})],1):a._e(),a._v(" "),a.isBottomShow?A("div",{class:a.$style.bottom},[a.columnCouldSub?a.column.column_price_market>a.column.column_price?[a.couponRecomend?A("div",{class:a.$style.tip,on:{click:a.goCoupon}},[a._v("你有可用礼券,"),A("span",{class:a.$style.strong},[a._v("订阅立减 ¥"+a._s(a._f("columnPrice")(a.couponRecomend.amount)))]),a._v(","),A("span",[a._v("查看礼券")])]):a._e(),a._v(" "),A("div",{class:a.$style.oBtn,on:{click:function(t){return a.subscribe(1)}}},[A("span",{class:a.$style.num},[A("span",{class:a.$style.text},[a._v("限时")]),a._v(" "),A("span",{class:a.$style.price},[a._v("¥"+a._s(a._f("columnPrice")(a.column.column_price)))])]),a._v(" "),A("span",{class:a.$style.delete},[a._v("¥"+a._s(a._f("columnPrice")(a.column.column_price_market)))])])]:a.hadJoinGroupBuy?[A("div",{class:a.$style.oBtn,on:{click:function(t){return a.goGroupon(a.groupCode)}}},[a._v("已参与拼团,查看拼团进度")])]:a.couldGroupBuy?a.hadJoinGroupBuy?a._e():[A("div",{class:a.$style.tip,on:{click:a.goGroupRule}},[a._v("限时拼团"),A("span",{class:a.$style.strong},[a._v("立省 ¥"+a._s(a._f("columnPrice")(a.column.column_price_market-a.groupPrice)))]),a._v(","),A("span",[a._v("查看拼团规则")]),A("span",{class:[a.$style.arrowIcon,"iconfont"]},[a._v("")])]),a._v(" "),A("div",{class:a.$style.btnWrap},[A("div",{class:a.$style.wBtn,on:{click:function(t){return a.subscribe(1)}}},[a._v("单独订阅"),A("span",{class:a.$style.num},[a._v("¥"+a._s(a._f("columnPrice")(a.column.column_price_market)))])]),a._v(" "),A("div",{class:a.$style.oBtn,on:{click:a.createGroupon}},[a._v(a._s(a.groupCount)+"人成团"),A("span",{class:a.$style.num},[a._v("¥"+a._s(a._f("columnPrice")(a.groupPrice)))])])])]:[a.couponRecomend?A("div",{class:a.$style.tip,on:{click:a.goCoupon}},[a._v("你有可用礼券,"),A("span",{class:a.$style.strong},[a._v("订阅立减 ¥"+a._s(a._f("columnPrice")(a.couponRecomend.amount)))]),a._v(","),A("span",[a._v("查看礼券")])]):a._e(),a._v(" "),A("div",{class:a.$style.oBtn,on:{click:function(t){return a.subscribe(1)}}},[A("span",{class:a.$style.num},[A("span",{class:a.$style.text},[a._v(a._s(a.column.is_preorder?"预售":"订阅"))]),A("span",{class:a.$style.price},[a._v("¥"+a._s(a._f("columnPrice")(a.column.column_price)))])])])]:[A("div",{class:a.$style.gBtn},[a._v("已下架")])]],2):a._e(),a._v(" "),a.isShowMoreGroup?A("div",{class:a.$style.moreGroupWrap},[A("div",{class:a.$style.moreGroup},[A("div",{class:a.$style.hd},[a._v("正在开团")]),a._v(" "),A("div",{class:a.$style.bdWrapper},[A("div",{class:a.$style.bd},[a._l(a.groupbuyList,function(t,e){return[e<10?A("div",{key:e,class:a.$style.groupItem},[A("div",{class:a.$style.img},[A("img",{attrs:{src:t.host_avatar||i(226)}})]),a._v(" "),A("div",{class:a.$style.txt},[A("div",{class:a.$style.name},[a._v(a._s(t.host_nickname))]),a._v(" "),A("div",{class:a.$style.left},[a._v("仅剩"),A("span",[a._v(a._s(t.want_ucount))]),a._v("个名额,剩余"),A("span",[a._v(a._s(a._f("filterTime")(t.left_seconds)))]),a._v("结束")])]),a._v(" "),A("div",{class:a.$style.btn,on:{click:function(e){return a.goGroupon(t.code)}}},[a._v("去参团")])]):a._e()]})],2)]),a._v(" "),A("div",{class:a.$style.ft},[a._v("最多显示10个团")])]),a._v(" "),A("div",{class:[a.$style.close,"iconfont"],on:{click:function(t){a.isShowMoreGroup=!1}}},[a._v("")]),a._v(" "),A("div",{class:a.$style.mask})]):a._e(),a._v(" "),a.column.groupbuy&&a.groupbuyList.length?A("GrouponModal",{attrs:{"is-show":a.showGrouponModal,groupbuyList:a.groupbuyList,groupbuyPrice:a.column.groupbuy.price},on:{closemodal:function(t){a.showGrouponModal=!1},createGroupon:function(t){return a.subscribe(2)},goGroupon:a.goGroupon}}):a._e()],1)])],1)},staticRenderFns:[]}},608:function(t,e,i){var n=i(22)(i(1336),i(2004),null,null,null);t.exports=n.exports},620:function(t,e){t.exports=function(t){return"string"!=typeof t?t:(/^['"].*['"]$/.test(t)&&(t=t.slice(1,-1)),/["'() \t\n]/.test(t)?'"'+t.replace(/"/g,'\\"').replace(/\n/g,"\\n")+'"':t)}},621:function(t,e,i){"use strict";var n=i(224),r=i.n(n),o=i(99),a=i.n(o),s=i(43),A=i.n(s),l=i(146),c=i(102),u=i.n(c),d=i(65),h=i(218),f=i(623);e.a={request:function(t,e){return new A.a(function(i,n){l.a.post(t,e).then(function(t){200===t.status&&0===t.data.code?i(t.data.data):n(t)},function(t){n(t)})})},subscribe:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/column/subscribe",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},checkQrPay:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/trade/verify",{order_no:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getColumnInfo:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new A.a(function(i,n){l.a.post(h.a.timeServer+"/serv/v1/column/intro",{cid:t,with_groupbuy:e}).then(function(t){200===t.status&&0===t.data.code?i(t.data.data):n(t)}).catch(function(t){n(t)})})},getGroupBuyList:function(){return new A.a(function(t,e){l.a.post(h.a.timeServer+"/serv/v1/groupbuy/list",{}).then(function(i){200===i.status&&0===i.data.code?t(i.data.data):"-2000"===String(i.data.error.code)?d.a.login():e(i)}).catch(function(t){e(t)})})},getGroupBuyInfo:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/groupbuy/info",{code:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):"-2000"===String(t.data.error.code)?d.a.login():i(t)}).catch(function(t){i(t)})})},getCoupons:function(t){return new A.a(function(e,i){l.a.post("https://cashier.geekbang.org/serv/v1/coupons",{goods:[{sku:t.sku,num:1,amount:t.price}],rsp_list:!1,orderby:"discount_amount"}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):"-2000"===String(t.data.error.code)?d.a.login():i(t)}).catch(function(t){i(t)})})},checkPosterMd5:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/column/postersexist",{md5:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data.res_url):"-2000"===String(t.data.error.code)?d.a.login():i(t)}).catch(function(t){i(t)})})},uploadPoster:function(t,e){var n=this;return new A.a(function(e,r){var o=i.i(f.a)(t);n.checkPosterMd5(o).then(function(t){e(t)}).catch(function(i){l.a.post(h.a.timeServer+"/serv/v1/column/createposter",{file:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data.res_url):"-2000"===String(t.data.error.code)?d.a.login():r(t)}).catch(function(t){r(t)})})})},getChapters:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/chapters",{cid:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getArticles:function(t,e,i,n){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments[5],s={};return o&&o.length>0&&(s.chapter_ids=o),new A.a(function(o,A){l.a.post(h.a.timeServer+"/serv/v1/column/articles",a()({cid:t,size:n||20,prev:e,order:i,sample:r},s)).then(function(t){200===t.status&&0===t.data.code?o(t.data.data):A(t)}).catch(function(t){A(t)})})},getNewUpdate:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/column/articles/latest",{cid:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getArticle:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/article",d.a.camelCaseToUnderscore(t)).then(function(t){if(200===t.status&&0===t.data.code)e(t.data.data);else if(t.data&&t.data.error&&"-3371"===String(t.data.error.code)&&t.data.data.cid){var n=t.data.data;n.article_content=n.article_content_short,n.unavailable=!0,e(n)}else i(t)}).catch(function(t){i(t)})})},getArticleComments:function(t,e){return new A.a(function(i,n){l.a.post(h.a.timeServer+"/serv/v1/comments",{aid:t,prev:e||0}).then(function(t){200===t.status&&0===t.data.code?i(t.data.data):n(t)}).catch(function(t){n(t)})})},getRootDiscussions:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/discussion/v1/root_list",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getChildDiscussions:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/discussion/v1/child_list",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},addDiscussion:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/discussion/v1/add",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},deleteDiscussion:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/discussion/v1/delete",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},complainDiscussion:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/discussion/v1/complain",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},postArticleComment:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/comment/store",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},likeArticle:function(t,e,i){return new A.a(function(n,r){l.a.post(h.a.timeServer+"/serv/v1/like/store",{like_obj_id:t,like_obj:e,source:i}).then(function(t){200===t.status&&0===t.data.code?n(t.data.data):r(t)}).catch(function(t){r(t)})})},unlikeArticle:function(t,e,i){return new A.a(function(n,r){l.a.post(h.a.timeServer+"/serv/v1/like/destroy",{like_obj_id:t,like_obj:e,source:i}).then(function(t){200===t.status&&0===t.data.code?n(t.data.data):r(t)}).catch(function(t){r(t)})})},syncStudyProgress:function(t,e,i){return new A.a(function(n,r){var o={};3===i&&(o.video_play_seconds=e),2===i&&(o.audio_listen_seconds=e),1===i&&(o.text_read_percent=e.position,o.text_read_version=e.version),l.a.post(h.a.timeServer+"/serv/v1/article/progress/store",a()({article_type:i,article_id:t},o)).then(function(t){200===t.status&&0===t.data.code?n(t.data.data):r(t)}).catch(function(t){r(t)})})},getSpecial:function(){return new A.a(function(t,e){u.a.get("//static001.geekbang.org/static/special/special.json?v="+ +new Date).then(function(i){200===i.status?t(i.data):e(i)}).catch(function(t){e(t)})})},getEncryptVideoPlayAuth:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v3/source_auth/video_play_auth",{source_type:t.sourceType,aid:t.aid,video_id:t.encryptVideoId}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getGoods:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/columns",{column_type:t}).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getAllGoods:function(){return new A.a(function(t,e){l.a.post(h.a.timeServer+"/serv/v1/column/all").then(function(i){200===i.status&&0===i.data.code?t(i.data.data):e(i)}).catch(function(t){e(t)})})},requestColumnSaleShare:function(t,e){return new A.a(function(i,n){var r={cid:t};e&&(r.ignore_poster_data=e),l.a.post(h.a.timeServer+"/serv/v1/column/sharesale",r).then(function(t){200===t.status&&0===t.data.code?i(t.data.data):n(t)}).catch(function(t){n(t)})})},addNote:function(t,e,i,n,r,o,a){return this.request(h.a.timeServer+"/serv/v1/lineshare/store",{type:t,type_id:e,article_id:i,note:n,part:r,part_index:o,ext:a})},updateNote:function(t,e){return this.request(h.a.timeServer+"/serv/v1/lineshare/update",{id:t,note:e})},reportProgress:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"read";return this.request(h.a.timeServer+"/serv/v1/column/progress/store",{column_id:t,article_id:e,action:i})},delNote:function(t){return this.request(h.a.timeServer+"/serv/v1/lineshare/delete",{id:t})},getAllNote:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.request(h.a.timeServer+"/serv/v1/lineshare/getListAll",{type:t})},getNoteMore:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;return this.request(h.a.timeServer+"/serv/v1/lineshare/getListByType",{nav_id:t,prev:e,size:i})},getNoteList:function(t){return this.request(h.a.timeServer+"/serv/v1/lineshare/getListByTypeId",{type_id:t})},getNoteByAid:function(t){return this.request(h.a.timeServer+"/serv/v1/lineshare/getListByArticleId",{article_id:t})},getProducts:function(){return this.request(h.a.timeServer+"/serv/v1/my/products/all")},getProductsMore:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;return this.request(h.a.timeServer+"/serv/v1/my/products/list",{nav_id:t,prev:e,size:i})},deleteComment:function(t){return new A.a(function(e,i){l.a.post(h.a.timeServer+"/serv/v1/comment/destroy",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(t){i(t)})})},getAllComments:function(){return this.request(h.a.timeServer+"/serv/v1/my/comment/products/all")},getNavCommentsMore:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;return this.request(h.a.timeServer+"/serv/v1/my/comment/products",{nav_id:t,prev:e,size:i})},getColumnCommentsMore:function(t){var e,i=t.id,n=t.idName,o=t.prev,a=t.size,s=void 0===a?10:a,A=t.orderby;return this.request(h.a.timeServer+"/serv/v1/my/comments",(e={},r()(e,n,i),r()(e,"prev",o),r()(e,"size",s),r()(e,"orderby",A),e))},getCommentDetail:function(t){var e=t.id;return this.request(h.a.timeServer+"/serv/v1/comment",{id:e})},getColumnRelate:function(t){var e=t.sku,i=t.number,n=void 0===i?4:i;return this.request(h.a.timeServer+"/serv/v3/column/relate",{product_id:e,number:n})},getColumnInfoAd:function(){var t={key:"column_info_ad"};return this.request(h.a.timeServer+"/serv/v2/config/info",t)}}},623:function(t,e,i){"use strict";function n(t,e){var i=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(i>>16)<<16|65535&i}function r(t,e){return t<>>32-e}function o(t,e,i,o,a,s){return n(r(n(n(e,t),n(o,s)),a),i)}function a(t,e,i,n,r,a,s){return o(e&i|~e&n,t,e,r,a,s)}function s(t,e,i,n,r,a,s){return o(e&n|i&~n,t,e,r,a,s)}function A(t,e,i,n,r,a,s){return o(e^i^n,t,e,r,a,s)}function l(t,e,i,n,r,a,s){return o(i^(e|~n),t,e,r,a,s)}function c(t,e){t[e>>5]|=128<>>9<<4)]=e;var i,r,o,c,u,d=1732584193,h=-271733879,f=-1732584194,p=271733878;for(i=0;i>5]>>>e%32&255);return i}function d(t){var e,i=[];for(i[(t.length>>2)-1]=void 0,e=0;e>5]|=(255&t.charCodeAt(e/8))<16&&(r=c(r,8*t.length)),i=0;i<16;i+=1)o[i]=909522486^r[i],a[i]=1549556828^r[i];return n=c(o.concat(d(e)),512+8*e.length),u(c(a.concat(n),640))}function p(t){var e,i,n="0123456789abcdef",r="";for(i=0;i>>4&15)+n.charAt(15&e);return r}function g(t){return unescape(encodeURIComponent(t))}function m(t){return h(g(t))}function v(t){return p(m(t))}function w(t,e){return f(g(t),g(e))}function b(t,e){return p(w(t,e))}function y(t,e,i){return e?i?w(e,t):b(e,t):i?m(t):v(t)}e.a=y},624:function(t,e,i){"use strict";function n(t,e,i){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""];if(!t||!t&&t.childNodes)return null;for(var o=Number(window.getComputedStyle(t).lineHeight.replace("px","")),a=0;ae&&g.top-mi){for(var w=[],b=0;b1)p=f[1];else{if(1!==f.length)continue;p=f[0]}o=o||p.height;var m=(o-p.height)/2;if(p.top-m<=i&&p.bottom+m>=i){A={x:p.left,y:p.top-m,height:o,index:u,node:s};try{c.setStart(s,u+1),c.setEnd(s,u+2);var v=c.getClientRects();h=v.length>1?v[1]:1===v.length?v[0]:null}catch(t){h=null}var w=void 0===d||d&&d.bottom<=p.top,b=null===h||h&&h.top>=p.bottom;if(e1&&void 0!==arguments[1]?arguments[1]:{x:0,y:0};return{x:(t.clientX||t.changedTouches[0].clientX)+e.x,y:(t.clientY||t.changedTouches[0].clientY)+e.y}}function a(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function s(t){if("number"==typeof t)return t;if("string"==typeof t){if(t.indexOf("px")>-1)return Number(t.replace("px",""));if(t.indexOf("rem")>-1){var e=Number((document.documentElement.style.fontSize||"24px").replace("px",""));return Number(t.replace("rem",""))*e}return Number(t)}return 0}function A(t,e,i){var n=document.createRange(),r=void 0===e?0:e,o=void 0===i?t.textContent.length:i;try{return n.setStart(t,r),n.setEnd(t,o),h(n.getClientRects())}catch(t){return console.error("EasyMarkerError:",t),[]}}function l(t,e){return t.isSet?(t.y-=e.y,t.x-=e.x,t):t}function c(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[""],i=e.reduce(function(t,e){return""===e?t:""===t?"\\"+e:t+"|\\"+e},""),n=new RegExp("("+i+")"),r=t.split(n),o=[],a=0;a0&&o.push(s)}return o}function u(t,e,i,n){return i.top-n<=e&&i.bottom+n>=e&&i.left<=t&&i.right>=t}function d(t){return{bottom:t.bottom,height:t.height,left:t.left,right:t.right,top:t.top,width:t.width}}function h(t){for(var e=[],i=0;i0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i="",n=e.replace(/\s+/g,""),r=0,o=0;r=n.length)return i;t[r]===n[o]?(i+=t[r],o++):t[r].match(/\n|\r|\s/)?""!==i&&(i+=t[r]):(o=0,i="")}return i}e.c=n,e.b=r,e.e=o,e.j=a,e.h=s,e.g=A,e.d=l,e.i=u,e.f=d,e.a=f;var p=i(220),g=i.n(p),m=i(44),v=i.n(m)},625:function(t,e,i){"use strict";var n=i(43),r=i.n(n),o=i(146),a=i(218);e.a={getCategory:function(){return new r.a(function(t,e){o.a.post(a.a.timeServer+"/serv/v3/search/category").then(function(i){200===i.status&&0===i.data.code?t(i.data.data):e(i)}).catch(function(t){e(t)})})},getHotWords:function(){return new r.a(function(t,e){o.a.post(a.a.timeServer+"/serv/v3/search/hot_words").then(function(i){200===i.status&&0===i.data.code?t(i.data.data):e(i)}).catch(function(t){e(t)})})},getSearchResult:function(t){var e={keyword:t.keyword,category:t.category,size:t.size,prev:t.prev};return t.filters&&(e.filters=t.filters),new r.a(function(t,i){o.a.post(a.a.timeServer+"/serv/v3/search",e).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):i(e)}).catch(function(t){i(t)})})}}},627:function(t,e,i){"use strict";function n(t,e){e.close=function(){t.dispatch("removeGlobalLayer","bottom-menu-generate")};var i={name:"bottom-menu-generate",render:function(t){return t(u.a,{props:{data:e}})}};t.dispatch("addGlobalLayer",i)}function r(t,e){var i={component:{close:function(){t.dispatch("removeGlobalLayer","preview-img-generate")}},data:e},n={name:"preview-img-generate",render:function(t){return t(h.a,{props:i})}};t.dispatch("addGlobalLayer",n)}function o(t,e,i,n){var r=l()({close:function(){i.dispatch("removeGlobalLayer",e)}},n.on||{}),o={name:e,render:function(e){return e(t,{props:{data:n},on:r})}};i.dispatch("addGlobalLayer",o)}function a(t,e){o(m.a,"pc-modal",t,e)}function s(t,e){o(p.a,"mobile-modal",t,e)}e.b=n,e.c=r,e.d=a,e.a=s;var A=i(99),l=i.n(A),c=i(651),u=i.n(c),d=i(653),h=i.n(d),f=i(652),p=i.n(f),g=i(650),m=i.n(g)},628:function(t,e,i){"use strict";function n(t){var e=t.target;switch(t.type){case"touchstart":case"mousedown":x=[],m=!0,(!u.start||u.start.length<2)&&(u.start=F.getPosOfEvent(t)),F.getFingers(t)>=2&&(E=parseInt(F.getAngle180(u.start[0],u.start[1]),10)),d=Date.now(),g={};var i=e.getBoundingClientRect(),n=document.documentElement;g={top:i.top+(window.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(window.pageXOffset||n.scrollLeft)-(n.clientLeft||0)},S.hold(t);break;case"touchmove":case"mousemove":if(!m||!u.start)return;u.move=F.getPosOfEvent(t),F.getFingers(t)>=2?S.pinch(t):B?S.rotateSingleFinger(t):S.swipe(t);break;case"touchend":case"touchcancel":case"mouseup":case"mouseout":if(!m)return;f?S.pinch(t):B?S.rotateSingleFinger(t):h?S.swipe(t):S.tap(t),F.reset(),E=0,_=0,t.touches&&1===t.touches.length&&(m=!0,B=!0)}}function r(){var t,e,i,n,r=arguments;if(r.length<2||r>4)return console.error("unexpected arguments!");var o="string"===F.getType(r[0])?document.querySelectorAll(r[0]):r[0];if(o=o.length?Array.prototype.slice.call(o):[o],3===r.length&&"string"===F.getType(r[1]))return t=r[1].split(" "),e=r[2],void t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),o.forEach(function(i){k.bind(i,t,e)})});if(3!==r.length||"object"!==F.getType(r[1]))if(2!==r.length||"object"!==F.getType(r[1])){if(4===r.length&&"object"===F.getType(r[2]))return t=r[1].split(" "),e=r[3],void t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),o.forEach(function(i){k.bind(i,t,e)})});if(4===r.length){var a=o[0];return t=r[1].split(" "),n=r[2],e=r[3],void t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),k.delegate(a,t,n,e)})}}else{i=r[1];for(var s in i)!function(t){F.hasTouch||(t=F.getPCevts(t)),o.forEach(function(e){k.bind(e,t,i[t])})}(s)}else{i=r[1],n=r[2];for(var A in i)!function(t){F.hasTouch||(t=F.getPCevts(t)),o.forEach(function(e){k.delegate(e,t,n,i[t])})}(A)}}function o(){var t,e,i=arguments;if(i.length<1||i.length>4)return console.error("unexpected arguments!");var n="string"===F.getType(i[0])?document.querySelectorAll(i[0]):i[0];if(n=n.length?Array.prototype.slice.call(n):[n],1===i.length||2===i.length)return void n.forEach(function(e){t=i[1]?i[1].split(" "):A()(e.listeners),t.length&&t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),k.unbind(e,t),k.undelegate(e,t)})});if(3===i.length&&"function"===F.getType(i[2]))return e=i[2],void n.forEach(function(n){t=i[1].split(" "),t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),k.unbind(n,t,e)})});if(3===i.length&&"string"===F.getType(i[2])){var r=i[2];return void n.forEach(function(e){t=i[1].split(" "),t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),k.undelegate(e,t,r)})})}return 4===i.length?(e=i[3],void n.forEach(function(n){t=i[1].split(" "),t.forEach(function(t){F.hasTouch||(t=F.getPCevts(t)),k.undelegate(n,t,r,e)})})):void 0}function a(t,e,i){var n=arguments;F.hasTouch||(e=F.getPCevts(e));var r="string"===F.getType(n[0])?document.querySelectorAll(n[0]):n[0];r=r.length?Array.prototype.call(r):[r],r.forEach(function(t){k.trigger(t,e,i)})}var s=i(225),A=i.n(s),l=i(630),c=i.n(l),u={start:null,move:null,end:null},d=0,h=!1,f=!1,p=!1,g={},m=!1,v=null,w=!1,b=null,y=1,B=!1,x=[],E=0,_=0,C=0,T=null,U={tap:!0,doubleTap:!0,tapMaxDistance:10,hold:!0,tapTime:200,holdTime:650,maxDoubleTapInterval:300,swipe:!0,swipeTime:300,swipeMinDistance:18,swipeFactor:5,drag:!0,pinch:!0,minScaleRate:0,minRotationAngle:0},Q={TOUCH_START:"touchstart",TOUCH_MOVE:"touchmove",TOUCH_END:"touchend",TOUCH_CANCEL:"touchcancel",MOUSE_DOWN:"mousedown",MOUSE_MOVE:"mousemove",MOUSE_UP:"mouseup",CLICK:"click",PINCH_START:"pinchstart",PINCH_END:"pinchend",PINCH:"pinch",PINCH_IN:"pinchin",PINCH_OUT:"pinchout",ROTATION_LEFT:"rotateleft",ROTATION_RIGHT:"rotateright",ROTATION:"rotate",SWIPE_START:"swipestart",SWIPING:"swiping",SWIPE_END:"swipeend",SWIPE_LEFT:"swipeleft",SWIPE_RIGHT:"swiperight",SWIPE_UP:"swipeup",SWIPE_DOWN:"swipedown",SWIPE:"swipe",DRAG:"drag",DRAGSTART:"dragstart",DRAGEND:"dragend",HOLD:"hold",TAP:"tap",DOUBLE_TAP:"doubletap"},F={};F.PCevts={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",touchcancel:"mouseout"},F.hasTouch="ontouchstart"in window,F.getType=function(t){return Object.prototype.toString.call(t).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()},F.getSelector=function(t){if(t.id)return"#"+t.id;if(t.className){return"."+t.className.split(/\s+/).join(".")}return t===document?"body":t.tagName.toLowerCase()},F.matchSelector=function(t,e){return t.webkitMatchesSelector(e)},F.getEventListeners=function(t){return t.listeners},F.getPCevts=function(t){return this.PCevts[t]||t},F.forceReflow=function(){var t=document.getElementById("reflowDivBlock");t||(t=document.createElement("div"),t.id="reflowDivBlock",document.body.appendChild(t));var e=t.parentNode,i=t.nextSibling;e.removeChild(t),e.insertBefore(t,i)},F.simpleClone=function(t){return c()(t)},F.getPosOfEvent=function(t){if(this.hasTouch){for(var e=[],i=null,n=0,r=t.touches.length;n=2&&e.length>=2){var i=this.getDistance(t[1],t[0]);return this.getDistance(e[1],e[0])/i}return 1},F.getAngle=function(t,e){return 180*Math.atan2(e.y-t.y,e.x-t.x)/Math.PI},F.getAngle180=function(t,e){var i=Math.atan(-1*(e.y-t.y)/(e.x-t.x))*(180/Math.PI);return i<0?i+180:i},F.getDirectionFromAngle=function(t){var e={up:t<-45&&t>-135,down:t>=45&&t<135,left:t>=135||t<=-135,right:t>=-45&&t<=45};for(var i in e)if(e[i])return i;return null},F.getXYByElement=function(t){for(var e=0,i=0;t.offsetParent;)e+=t.offsetLeft,i+=t.offsetTop,t=t.offsetParent;return{left:e,top:i}},F.reset=function(){w=m=h=f=!1,p=!1,u={},B=!1},F.isTouchMove=function(t){return"touchmove"===t.type||"mousemove"===t.type},F.isTouchEnd=function(t){return"touchend"===t.type||"mouseup"===t.type||"touchcancel"===t.type},F.env=function(){var t={},e=navigator.userAgent,i=e.match(/(Android)[\s\/]+([\d\.]+)/),n=e.match(/(iPad|iPhone|iPod)\s+OS\s([\d_\.]+)/),r=e.match(/(Windows\s+Phone)\s([\d\.]+)/),o=/WebKit\/[\d.]+/i.test(e),a=!!n&&(navigator.standalone?o:/Safari/i.test(e)&&!/CriOS/i.test(e)&&!/MQQBrowser/i.test(e));return i&&(t.android=!0,t.version=i[2]),n&&(t.ios=!0,t.version=n[2].replace(/_/g,"."),t.ios7=/^7/.test(t.version),"iPad"===n[1]?t.ipad=!0:"iPhone"===n[1]?(t.iphone=!0,t.iphone5=568===screen.height):"iPod"===n[1]&&(t.ipod=!0)),r&&(t.wp=!0,t.version=r[2],t.wp8=/^8/.test(t.version)),o&&(t.webkit=!0),a&&(t.safari=!0),t}();var k={proxyid:0,proxies:[],trigger:function(t,e,i){i=i||{};var n,r={bubbles:!0,cancelable:!0,detail:i};try{"undefined"!=typeof CustomEvent?(n=new CustomEvent(e,r),t&&t.dispatchEvent(n)):(n=document.createEvent("CustomEvent"),n.initCustomEvent(e,!0,!0,i),t&&t.dispatchEvent(n))}catch(t){console.warn("Touch.js is not supported by environment.")}},bind:function(t,e,i){t.listeners=t.listeners||{},t.listeners[e]?t.listeners[e].push(i):t.listeners[e]=[i];var n=function(t){F.env.ios7&&F.forceReflow(),t.originEvent=t;for(var e in t.detail)"type"!==e&&(t[e]=t.detail[e]);t.startRotate=function(){B=!0};var n=i.call(t.target,t);void 0===n||n||(t.stopPropagation(),t.preventDefault())};i.proxy=i.proxy||{},i.proxy[e]?i.proxy[e].push(this.proxyid++):i.proxy[e]=[this.proxyid++],this.proxies.push(n),t.addEventListener&&t.addEventListener(e.split(".")[0],n,!1)},unbind:function(t,e,i){if(i){var n=i.proxy[e];n&&n.length&&n.forEach(function(i){t.removeEventListener&&t.removeEventListener(e.split(".")[0],this.proxies[this.proxyid],!1)})}else{var r=t.listeners[e];r&&r.length&&r.forEach(function(i){t.removeEventListener(e.split(".")[0],i,!1)})}},delegate:function(t,e,i,n){var r=function(e){var r,o;e.originEvent=e;for(var a in e.detail)"type"!==a&&(e[a]=e.detail[a]);e.startRotate=function(){B=!0};var s=F.getSelector(t)+" "+i,A=F.matchSelector(e.target,s),l=F.matchSelector(e.target,s+" "+e.target.nodeName);if(!A&&l){for(F.env.ios7&&F.forceReflow(),r=e.target;!F.matchSelector(r,s);)r=r.parentNode;o=n.call(e.target,e),void 0===o||o||(e.stopPropagation(),e.preventDefault())}else F.env.ios7&&F.forceReflow(),(A||l)&&(void 0===(o=n.call(e.target,e))||o||(e.stopPropagation(),e.preventDefault()))};n.proxy=n.proxy||{},n.proxy[e]?n.proxy[e].push(this.proxyid++):n.proxy[e]=[this.proxyid++],this.proxies.push(r),t.listeners=t.listeners||{},t.listeners[e]?t.listeners[e].push(r):t.listeners[e]=[r],t.addEventListener&&t.addEventListener(e,r,!1)},undelegate:function(t,e,i,n){if(n){var r=n.proxy[e];r.length&&r.forEach(function(i){t.removeEventListener&&t.removeEventListener(e,this.proxies[this.proxyid],!1)})}else{t.listeners[e].forEach(function(i){t.removeEventListener(e,i,!1)})}}},S={getAngleDiff:function(t){for(var e=parseInt(E-F.getAngle180(t[0],t[1]),10),i=0;Math.abs(e-_)>90&&i++<50;)_<0?e-=180:e+=180;return _=parseInt(e,10)},pinch:function(t){var e=t.target;if(U.pinch){if(!m)return;if(F.getFingers(t)<2&&!F.isTouchEnd(t))return;var i=F.calScale(u.start,u.move),n=this.getAngleDiff(u.move),r={type:"",originEvent:t,scale:i,rotation:n,direction:n>0?"right":"left",fingersCount:F.getFingers(t)};if(f?F.isTouchMove(t)?(r.fingerStatus="move",k.trigger(e,Q.PINCH,r)):F.isTouchEnd(t)&&(r.fingerStatus="end",k.trigger(e,Q.PINCH_END,r),F.reset()):(f=!0,r.fingerStatus="start",k.trigger(e,Q.PINCH_START,r)),Math.abs(1-i)>U.minScaleRate){var o=F.simpleClone(r);i>y?(y=i-1e-11,k.trigger(e,Q.PINCH_OUT,o,!1)):iU.minRotationAngle){var a,s=F.simpleClone(r);a=n>0?Q.ROTATION_RIGHT:Q.ROTATION_LEFT,k.trigger(e,a,s,!1),k.trigger(e,Q.ROTATION,r)}}},rotateSingleFinger:function(t){var e=t.target;if(B&&F.getFingers(t)<2){if(!u.move)return;if(x.length<2){var i=F.getXYByElement(e);x=[{x:i.left+e.offsetWidth/2,y:i.top+e.offsetHeight/2},u.move[0]],E=parseInt(F.getAngle180(x[0],x[1]),10)}var n=[x[0],u.move[0]],r=this.getAngleDiff(n),o={type:"",originEvent:t,rotation:r,direction:r>0?"right":"left",fingersCount:F.getFingers(t)};F.isTouchMove(t)?o.fingerStatus="move":(F.isTouchEnd(t)||"mouseout"===t.type)&&(o.fingerStatus="end",k.trigger(e,Q.PINCH_END,o),F.reset());var a=r>0?Q.ROTATION_RIGHT:Q.ROTATION_LEFT;k.trigger(e,a,o),k.trigger(e,Q.ROTATION,o)}},swipe:function(t){var e=t.target;if(m&&u.move&&!(F.getFingers(t)>1)){var i=Date.now(),n=i-d,r=F.getDistance(u.start[0],u.move[0]),o={x:u.move[0].x-g.left,y:u.move[0].y-g.top},a=F.getAngle(u.start[0],u.move[0]),s=F.getDirectionFromAngle(a),A=n/1e3,l=10*(10-U.swipeFactor)*A*A,c={type:Q.SWIPE,originEvent:t,position:o,direction:s,distance:r,distanceX:u.move[0].x-u.start[0].x,distanceY:u.move[0].y-u.start[0].y,x:u.move[0].x-u.start[0].x,y:u.move[0].y-u.start[0].y,angle:a,duration:n,fingersCount:F.getFingers(t),factor:l};if(U.swipe){var f=function(){var t=Q;switch(s){case"up":k.trigger(e,t.SWIPE_UP,c);break;case"down":k.trigger(e,t.SWIPE_DOWN,c);break;case"left":k.trigger(e,t.SWIPE_LEFT,c);break;case"right":k.trigger(e,t.SWIPE_RIGHT,c)}};h?F.isTouchMove(t)?(c.fingerStatus=c.swipe="move",k.trigger(e,Q.SWIPING,c),n>U.swipeTime&&nU.swipeMinDistance&&(f(),k.trigger(e,Q.SWIPE,c,!1))):(F.isTouchEnd(t)||"mouseout"===t.type)&&(c.fingerStatus=c.swipe="end",k.trigger(e,Q.SWIPE_END,c),U.swipeTime>n&&r>U.swipeMinDistance&&(f(),k.trigger(e,Q.SWIPE,c,!1))):(c.fingerStatus=c.swipe="start",h=!0,k.trigger(e,Q.SWIPE_START,c))}U.drag&&(p?F.isTouchMove(t)?(c.fingerStatus=c.swipe="move",k.trigger(e,Q.DRAG,c)):F.isTouchEnd(t)&&(c.fingerStatus=c.swipe="end",k.trigger(e,Q.DRAGEND,c)):(c.fingerStatus=c.swipe="start",p=!0,k.trigger(e,Q.DRAGSTART,c)))}},tap:function(t){var e=t.target;if(U.tap){var i=Date.now(),n=i-d,r=F.getDistance(u.start[0],u.move?u.move[0]:u.start[0]);clearTimeout(v);if(function(){if(T&&U.doubleTap&&d-Cn&&F.getFingers(t)<=1&&(w=!0,C=i,T=u.start[0],b=setTimeout(function(){k.trigger(e,Q.TAP,{type:Q.TAP,originEvent:t,fingersCount:F.getFingers(t),position:T})},U.tapTime))}},hold:function(t){var e=t.target;U.hold&&(clearTimeout(v),v=setTimeout(function(){if(u.start){var i=F.getDistance(u.start[0],u.move?u.move[0]:u.start[0]);U.tapMaxDistance1){if(o=t({path:"/"},n.defaults,o),"number"==typeof o.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*o.expires),o.expires=s}o.expires=o.expires?o.expires.toUTCString():"";try{a=JSON.stringify(r),/^[\{\[]/.test(a)&&(r=a)}catch(t){}r=i.write?i.write(r,e):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),e=e.replace(/[\(\)]/g,escape);var A="";for(var l in o)o[l]&&(A+="; "+l,!0!==o[l]&&(A+="="+o[l]));return document.cookie=e+"="+r+A}e||(a={});for(var c=document.cookie?document.cookie.split("; "):[],u=/(%[0-9A-Z]{2})+/g,d=0;dt?t:iA?s>1&&(o.height=e,o.width=Math.floor(a*e/r)):A>1&&(o.height=Math.floor(r*i/a),o.width=i),o.height=o.height+"px",o.width=o.width+"px",t.style=o,t.show=!0,t.imgUrl=t.data.imgUrl},n.src=this.data.imgUrl,this.bindEvent(this.$refs.img)},destroyed:function(){o()},watch:{$route:function(t,e){this.close()}},methods:{close:function(){this.component.close&&this.component.close(this)},resetZoom:function(){this.transform(0,0,1)},transform:function(t,e,i){var n="translateX("+t+"px) translateY("+e+"px) scale("+i+")";this.style={height:this.style.height,width:this.style.width,transform:n}},bindEvent:function(t){var e=this;s.a.on(t,"pinch",function(t){var i=t.scale-1;console.log(i,e.scale),e.transform(0,0,a(5,1,i+e.scale))}),s.a.on(t,"pinchend",function(t){var i=t.scale-1;e.scale=a(5,1,i+e.scale)}),s.a.on(t,"drag",function(t){e._x=t.x+e.x,e._y=t.y+e.y,console.log(t.x,t.y),e.transform(e._x,e._y,e.scale)}),s.a.on(t,"dragend",function(t){e.x=e._x,e.y=e._y,e._x=0,e._y=0})}}}},639:function(t,e,i){t.exports={default:i(731),__esModule:!0}},640:function(t,e,i){i(641);var n=i(10).Object;t.exports=function(t,e){return n.create(t,e)}},641:function(t,e,i){var n=i(28);n(n.S,"Object",{create:i(148)})},642:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._1uSorpRi_0{position:fixed;top:0;bottom:0;left:0;right:0;z-index:100;background:rgba(0,0,0,.4)}._3GAxhwIG_0{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background-color:hsla(0,0%,100%,.1)}._2_wQLMVs_0{background:#fff;-webkit-transition:all .3s ease;transition:all .3s ease;position:absolute;left:50%;top:50%;width:270px;z-index:100;border-radius:16px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translate(-50%,-80%);transform:translate(-50%,-80%);-webkit-box-shadow:0 5px 30px 0 rgba(140,163,191,.2);box-shadow:0 5px 30px 0 rgba(140,163,191,.2)}._2TotrwHd_0{padding:20px}.JL35Jvuj_0{font-size:18px;color:#000;font-weight:500;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}._11xf0swh_0,.JL35Jvuj_0{text-align:center;line-height:1.5}._11xf0swh_0{margin-top:6px;color:#888;font-size:14px;font-weight:400}.Lif9oOYw_0{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;border-top:.5px solid #e8e8e8}._244GZ-37_0,.Lif9oOYw_0{display:-webkit-box;display:-ms-flexbox;display:flex}._244GZ-37_0{width:84px;border-radius:3px;font-size:15px;font-weight:500;cursor:pointer;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-top:8px;padding-bottom:8px}._37EJMsXN_0{color:#fa8819;border-left:.5px solid #e8e8e8}._35dXRyPt_0,._37EJMsXN_0{-webkit-box-flex:1;-ms-flex:1;flex:1}._11m5vlcZ_0,._35dXRyPt_0{color:#b2b2b2}._11m5vlcZ_0{font-size:10px;position:absolute;text-align:center}",""]),e.locals={wrap:"_1uSorpRi_0",mask:"_3GAxhwIG_0",main:"_2_wQLMVs_0",content:"_2TotrwHd_0",con:"JL35Jvuj_0",desc:"_11xf0swh_0",btns:"Lif9oOYw_0",btn:"_244GZ-37_0",confirm:"_37EJMsXN_0",cancel:"_35dXRyPt_0",close:"_11m5vlcZ_0"}},643:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".DZrVeOXK_0{position:fixed;z-index:100}._3wRZmGVk_0,.DZrVeOXK_0{top:0;left:0;width:100%;height:100%}._3wRZmGVk_0{position:absolute;z-index:1;background-color:rgba(0,0,0,.5)}._3l-Yr_-o_0{background:#fff;-webkit-transition:all .3s ease;transition:all .3s ease;position:absolute;left:0;bottom:0;width:100%;z-index:100;border-top-left-radius:10px;border-top-right-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;transform:translateZ(0);-webkit-transform:translateZ(0);-webkit-box-shadow:0 -3px 15px 0 hsla(0,0%,53%,.23);box-shadow:0 -3px 15px 0 hsla(0,0%,53%,.23)}._1hIfba30_0{color:#888;font-size:15px;text-align:center;height:50px;line-height:50px}._2gineyxN_0{height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:15px;border-bottom:.5px solid #e8e8e8}._1o4oDofo_0{font-size:16px;margin-top:-2px;margin-left:8px;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16px;color:#888}._2qMN2vDD_0{margin-left:24px;font-size:15px;color:#353535}",""]),e.locals={"mask-layer-wrap":"DZrVeOXK_0",maskLayerWrap:"DZrVeOXK_0","mask-layer":"_3wRZmGVk_0",maskLayer:"_3wRZmGVk_0",main:"_3l-Yr_-o_0",bottom:"_1hIfba30_0",menu:"_2gineyxN_0",icon:"_1o4oDofo_0",txt:"_2qMN2vDD_0"}},644:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._3I_Jq5nz_0{position:fixed}._3I_Jq5nz_0,._3xvOGrxA_0{top:0;left:0;width:100%;height:100%;z-index:100}._3xvOGrxA_0{position:absolute;background-color:#000}._20ld22E9_0{position:relative;z-index:101;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}._20ld22E9_0 img{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;visibility:hidden}._20ld22E9_0 .hVX44oVP_0{visibility:visible}.DLfklZIn_0{color:#888;font-size:15px;text-align:center;height:50px;line-height:50px}._283MhL7F_0{height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:15px;border-bottom:1px solid #e8e8e8}._1nrI-43n_0{font-size:24px;height:26px;width:26px;color:#fff;text-align:center;line-height:26px;right:20px;top:20px;position:absolute;z-index:102;text-shadow:0 0 4px rgba(0,0,0,.3)}",""]),e.locals={maskLayerWrap:"_3I_Jq5nz_0",maskLayer:"_3xvOGrxA_0",main:"_20ld22E9_0",on:"hVX44oVP_0",bottom:"DLfklZIn_0",menu:"_283MhL7F_0",close:"_1nrI-43n_0"}},645:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._2jApm7Dx_0{position:fixed;z-index:100}._2jApm7Dx_0,._2RmGmLke_0{top:0;left:0;width:100%;height:100%}._2RmGmLke_0{position:absolute;z-index:1;background-color:hsla(0,0%,100%,.1)}._3H526-eT_0{background:#fff;-webkit-transition:all .3s ease;transition:all .3s ease;position:absolute;left:50%;top:50%;width:415px;z-index:100;padding-top:45px;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translate(-50%,-80%);transform:translate(-50%,-80%);-webkit-box-shadow:0 5px 30px 0 rgba(140,163,191,.2);box-shadow:0 5px 30px 0 rgba(140,163,191,.2)}._1Dxn1G_n_0{text-align:center;font-size:1rem;color:#353535;line-height:1.2rem;padding:1.5rem 0;font-weight:500}._2hi2MdOC_0{text-align:center;font-size:19px;color:#888;font-weight:500;line-height:1.5;height:100px;padding-left:20px;padding-right:20px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-font-smoothing:antialiased}._2hi2MdOC_0,.jAf-GG2g_0{display:-webkit-box;display:-ms-flexbox;display:flex}.jAf-GG2g_0{padding:18px 30px;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}._1PI0jCHO_0{width:84px;height:38px;display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:3px;font-size:15px;cursor:pointer;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}._16uwXDin_0{margin-left:20px;color:#fff;background:#fa8819;-webkit-box-shadow:0 4px 10px 0 rgba(255,227,200,.55);box-shadow:0 4px 10px 0 rgba(255,227,200,.55)}._1vfSbYJI_0{width:64px;color:#b2b2b2;background:#fff}._1lo5B6eA_0{font-size:10px;position:absolute;color:#b2b2b2;top:5px;right:5px;width:30px;height:30px;line-height:30px;text-align:center;cursor:pointer}",""]),e.locals={wrap:"_2jApm7Dx_0",mask:"_2RmGmLke_0",main:"_3H526-eT_0",tit:"_1Dxn1G_n_0",con:"_2hi2MdOC_0",btns:"jAf-GG2g_0",btn:"_1PI0jCHO_0",confirm:"_16uwXDin_0",cancel:"_1vfSbYJI_0",close:"_1lo5B6eA_0"}},646:function(t,e,i){var n=i(642);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("24fefdb5",n,!0,{})},647:function(t,e,i){var n=i(643);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("ef03b228",n,!0,{})},648:function(t,e,i){var n=i(644);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("df73f1e2",n,!0,{})},649:function(t,e,i){var n=i(645);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("5b1e029a",n,!0,{})},650:function(t,e,i){function n(t){this.$style=i(649)}var r=i(22)(i(635),i(658),n,null,null);t.exports=r.exports},651:function(t,e,i){function n(t){this.$style=i(647)}var r=i(22)(i(636),i(656),n,null,null);t.exports=r.exports},652:function(t,e,i){function n(t){this.$style=i(646)}var r=i(22)(i(637),i(655),n,null,null);t.exports=r.exports},653:function(t,e,i){function n(t){this.$style=i(648)}var r=i(22)(i(638),i(657),n,null,null);t.exports=r.exports},654:function(t,e,i){function n(t){this.$style=i(667)}var r=i(22)(i(664),i(675),n,null,null);t.exports=r.exports},655:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.$style.wrap},[i("div",{class:t.$style.mask,on:{click:function(e){return e.target!==e.currentTarget?null:t.close(e)}}}),t._v(" "),i("div",{class:t.$style.main},[i("div",{class:t.$style.content},[i("div",{class:t.$style.con},[t._v("\n "+t._s(t.data.content)+"\n ")]),t._v(" "),t.data.desc?i("div",{class:t.$style.desc},[t._v("\n "+t._s(t.data.desc)+"\n ")]):t._e()]),t._v(" "),i("div",{class:t.$style.btns},[i("div",{class:[t.$style.confirm,t.$style.btn],on:{click:t.confirm}},[t._v(t._s(t.data.confirmText||"确认"))]),t._v(" "),i("div",{class:[t.$style.cancel,t.$style.btn],on:{click:t.close}},[t._v(t._s(t.data.cancelText||"取消"))])])])])},staticRenderFns:[]}},656:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.$style.maskLayerWrap},[i("div",{class:t.$style.main},[t.data.remove?i("div",{class:t.$style.menu,on:{click:t.remove}},[i("span",{class:["iconfont",t.$style.icon]},[t._v("")]),t._v(" "),i("span",{class:t.$style.txt},[t._v("删除")])]):t._e(),t._v(" "),t.data.complain?i("div",{class:t.$style.menu,on:{click:t.complain}},[i("span",{class:["iconfont",t.$style.icon]},[t._v("")]),t._v(" "),i("span",{class:t.$style.txt},[t._v("投诉")])]):t._e(),t._v(" "),i("div",{class:t.$style.bottom,on:{click:t.close}},[t._v("取消")])]),t._v(" "),i("div",{class:t.$style.maskLayer,on:{click:t.close}})])},staticRenderFns:[]}},657:function(t,e){t.exports={render:function(){var t,e=this,i=e.$createElement,n=e._self._c||i;return n("div",{class:e.$style.maskLayerWrap},[n("div",{ref:"img",class:e.$style.main},[n("img",{class:[(t={},t[e.$style.on]=e.show,t)],style:e.style,attrs:{src:e.imgUrl}})]),e._v(" "),n("div",{class:[e.$style.close,"iconfont"],on:{click:e.close}},[e._v("")]),e._v(" "),n("div",{class:e.$style.maskLayer})])},staticRenderFns:[]}},658:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.$style.wrap},[i("div",{class:t.$style.mask,on:{click:function(e){return e.target!==e.currentTarget?null:t.close(e)}}}),t._v(" "),i("div",{class:t.$style.main},[i("div",{class:t.$style.con},[t._v("\n "+t._s(t.data.content)+"\n ")]),t._v(" "),i("div",{class:[t.$style.close,"iconfont"],on:{click:function(e){return e.target!==e.currentTarget?null:t.close(e)}}},[t._v("")]),t._v(" "),i("div",{class:t.$style.btns},[i("div",{class:[t.$style.confirm,t.$style.btn],on:{click:t.confirm}},[t._v(t._s(t.data.confirmText||"确认"))]),t._v(" "),i("div",{class:[t.$style.cancel,t.$style.btn],on:{click:t.close}},[t._v(t._s(t.data.cancelText||"取消"))])])])])},staticRenderFns:[]}},661:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAACsCAMAAACuLY/DAAADAFBMVEVMaXFZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVla+TRpZVlZZVlZZVlZZVla0Sxy8TRvAUBvCVR3eXRq1XCS6ThvTTxjJTxm8URzqizPbURXDTxrCby3nVBDmURG+ZCfeUBTLThngUxPQXh3PUBjdVRXGTxrHYSPQTxjYURbkVRLSZiLegjLMWh3haSDgWRTRVxq/Vx/SfDLDVhzoWBLoXhPNWBvqgi3YWRnRYR/layHIcy7OdC3Vei/iURPshzDETRrVXhzieyvkXhXZVhfVUxjseyfcayPDaCm8YibLXyHNZiTlhzPacCblYxvPUxnnVRHpaR3UWxvVZiLpYxfndCTUfDHlgi7seCXhWRXZXx3iZBzZaCHafjDUaSPcXhnlZhreWxfYWxnhbSHnXxPdfS7obSDqbh/DXCHtdCHiXBXwjjPkdSbqdCHbdSnEYSTDZCbkWxTviC7KZSTpZhfwijDbXBnvgirjbyHsciDugCjpZxvtgyzgeCnuhi7caiPsbBzlXhftbxznciLEWB5ZVlbrYQ/rYxDrZBHsZhPsaRXrYg/sZRHrYhDxiS3saBTsahbxjTDxjC/vfSTtbBftbxrwhyvsZxTzmDfwgijwhCnzljbvfiXvgCbtchzveyPucx3tbRjwhyzrYA/qVxDueiLueCHudx/xjjHxii7tcxztcRvtbhjsZRPxiCzxiy7yjzHrXw/ykjTwgynwhSrykDLykTPwhirvfybrZBDqVQ/ylDXykTLykjPykzTrXQ/vgSfsZxPsaxfzlzfylTXvfCPrXg/saRTqWQ/udB7qWg/ueSLqWxDwgiftcBvrXBDqURDudh/udR7saxbqUxDudB3udh7saRbtcBrrZBTvfSXsaBXrYBHrYhPrXhDrYRDudiLsZRTtbh7saRrueiPrXBPtcRzwhCrtciHtbhrrYhHrYRPqWhLsZhfudyHueCLtbBrxiC3taxztcR7xiy/vgCfveyTudCHucx7tbRvxiS7xjDDxjDHtch4TyfjSAAAAh3RSTlMAYOAwEPCgwECAINBQcFCQsBY9UE/NFim1hRTH0GIU9fU93ZbbSpPOdHWlweiljJbdy6Q8Sif09HDXsFzpJzhu6eV1j6vYwLP00U8qhZWqjeiB9PV+tfTYXLrz28Hbw31trce8nqnlnvX0Y/K58svksGNj5/OG8/Kc8bny8fPzzfPR/Ov9z1PpaScSAAAACXBIWXMAAAsSAAALEgHS3X78AAAeQElEQVR4nO2deXwUx5XHW8fovjlkMIcwGAgY1thgY+OLYJs4G9sx8Z3EsXNnk002597XX0KWY2xpA9EqEBxL40Q4YZeRBGhHa6QQ0EryhJG9453MaHRfgCQOgRDYZj/doxl11119TA92/f6yUVW97upvv3n16mjJoO5ef+/atder9MjatevvMdqqkJC1Wv+lR66vOXSotvZIY+Ox3bt37z52rLHxyJHa2kMHazZfv/bpRaL/heJR96y9/uCh2iONx3b/Qda/R6T83+7djY21hw5+uPmRewXAQvGlpx/5y0O1jbt3q6kFJCPceKS25sM7vnS3eHpCcaJpcvHczugPfzh25JDgVyg+dPfazQq5dHAjYcRuhd9nnhYPUMhWrX+kRo4WmMmN8NtYe7B8swh/hezT+utrlHBBh3Yfqz1Y/qO1Al8hW7T++pq3jigJMX1qrD34wb88KvAVirnufqb8kBF05STwkdoP3998r3h2QjHVorX7yt9qPGZUjbUHLlbd8Wnx7IRip/WbPzwgz6IZV+3B8vdHviFiB6EYadEzF2veqj1ikt468MH5zcL5CsVE6//6w0O1ZupQzcUq4XyFYqBvXKw5+Ja5OnTgg/N3iHVnQhZr0R0Xaw4eMl0HPnz/n0TaQchS3fOj8gP/bYUOlO+r/yvx7ISs073nyw8ctEYHyveN/LMIfIWs0trz5TUHrFJN+fmRp/5cPDshS3R/1cXyGgv1wfmRTy0Rj07IAt1fta/cWl08XyfoFbJA99e//4HF8H6wr0rQK2S+7q9/5d+sl6BXyHzdP3L+Ygzgvfh+VeWzgl4hM3V/XdW+/4yF9p2vn3xW5ByEzNO9I1Xv74uRzo9MPiXyvUJm6em6qvOvxExVI5PfFY9OyBzd87exZPeVV6rqGsRMsZApWnRHfdV/8KsqLD01D1cGnxfPTsgEPVN3uIpTh+vrR0bqZI2M1Ncf/jlv/ZFJkXIQMkFfaq7/ObsOH64fqatsnmwIRtTQMFlZVzdSf5ijlfq6oBi0CRnWPf8wwoydAu5kQ/DSYG/v1Mmwpnp7z14KBhuaufitbw6uEc9OyKDuqKw/zKb6X1Q2NwQHe6dOXujv77/roYceevjhJx566KH+/gsnp3oHg3smK3/B3FZdQ6/hfW3JaRolxS0K2utMi4MrMlEJqVolx870o5N19UwaqVPIlcG9ec0PNBHr3E8//Nw3+0/2Dob9L1tzzYN3zTV47WnFGqUabM46aa+zOG6vUyX2nk12aO8uN2bXePenKn/BpMrm4KXek/3933ziB2jmlvz4ZoXfyco6tgaDvUYDBwGvdeLo2Wzg9mL2y/LdBibUKisbgr0n+yf+9ROkxpas+ebJ3sE9zUzvQ93k4EmDgYOA1zrx9Gyq9vYyY3SJmy411zGosiF49mT/xBPU9NbcT9x1slcOHlgaDfbebOzqafAmpRmRsWvT6CMObxJwf+naP4NBsRGpxzXfC1YyqCE4ONU/8Rzbcpoff2vqbLChmaXZwZNER04VDV7AI/DJTD/+EYdXytXenyND89d0I48BkMqlPHqpgYpYcxjdu5h/4ueu6T/JhO9ksNfYmM1SeOPb8/L9oujIw5B7FhA4ZtOWtwbeRc/uaf4jRc17LvVemJh4mOfGl9zcPzUY/CWt6T82XJriaheUlfDinpeuOAR8AnqkvQxzboYgvvo5gMEc9R+tgffRYEMzRYrbHbiLdy53zYQS+lI0Gez9lhHXayW8OMdrtPd1y8hlWA4v2NWJ6mSvJfAuejbY8Euy9hw/c3Vi4Dl+wr7/uQu9l/bQmg8OXjXiei2EF/u4DHe/Xhm5DOvhzQAsqpO9lsD76KU9dHYvTAzoSscuUeiltN9w3JDrtRBebMRruPv1yshlWA8vRGgS/k9GFH0u3z6+p4EoOdwdGNCZEZh7c7885UZW8OwFAwkH6+DFPy0THwSfjFxGDOBNTtSaVCV7rYD3+bM/20NU8DUD7Cr0Tg3STAxO3aW3fSvhxacajPe/Thm5jBjACz6M4uzoX6yA96nBIJksJWYw4Bhlei+RTew5fqb/+7oNWAYvYY7IhAegT0YuIxbwSnlamzPJXgvgvaf3tZ+RdfbCwMBn+G97RnM/N3zmONnG8bNXn9PdPie82dgEFZBkL07A2zTxQfDJyGXEBN4MINmbF/2DoYnOTE2j0/B+jcLV8bevTow/wX/Xai353NWzNCuXJ3RvhOeEFx8LAPFaIsGmYQj1yshlxAReyMPmMNShS/sQp5/ht98mYyXnd79o1PInJqYGyWZem+rX7d3NgjcB6HWC4xXwEqR1ktpkr26h4N009cZxkt44c2HgSeOHg6wZ7iXbee3MBd3Lc8yCl8PxxnCZAtGS9oLTYdkBLzhmM2VlLwrev+sdfI2gwTNXJ8b/wrjpuTdfpRvS+46YBC/Y5yTHG5fwothCF8hlXtClqe+Y/kcajSnANZuxtwUF79+fJSH12ttT/QNfMMG0tKT/MsVSm+64wSR4walNos1rG15DS5WMLtDRJwS8m9p+/QZBb787PPCk0V06Ya3pp5nq1xtamwMvl+MV8BIFbqrIplWgCwHv1955mwSUHDT8mXHDsub+4zDR1htnrg7ofE3MgZfL8Qp4yQIMOIyP2RDwfq/3bYLOtvUPfNaw2Wl9ZuLqGZKxM1cndM6EmAIvn+OlwQsMnIwsCiZaojKFLmA5vOCmijxqDZpgeO+++s6vCXp3eCBgbJODWp/tbztDMHbm6hWd6WRT4OVzvBR4waSbkREL0RKVKXQBy+EFN1UYX9MPw/v8ZSJOl6+Mm+Z4FddLelXOtJ3QacwMeDkdLxkpUwcsREtUM+gCZsKrPTUj8pqCXUBzBlTB8H7t8ju/wUt2vCZFvJIS9Z5oI1j7TdsJPy3oTUBkMtPTgcwMlO4E8rdIeMEgjXYzwOPU/tFUt0O0hGeKWMBMeNPwfzJTMLxPkWh65/KJ8S5zUg1hrbnyJuVdoWWUDXb6zI2DAh1vOvk6yEiBm2GMPVCSpY81vCfa3sHr3b0TgTvNtH/rwDDJXtvwAM3PWwYv9+gYaFP9pyTgF7M40dAub4KljzW8Nw6/9394vXfC32XC5JpKXzz1K4K9d/eeo82HWAUvt+MlwJsMTO2bLMJlsMPLfpKFpn4mENgi+i528D4/3PYuXm9eGb/d3AvYcm4vwWDb3nO0EZtV8AJRM0NaEmhz5g8Ws2sOvOyi17cL3keHL7dhdXl4IGDKzPCMbh04QTDYtvfcONcd6BQML7htkO54JeC3PfrvprObh7OkiAoOtQBF9Pp2wfvl4V+9h9WvdvlHzUvyhvWTU2/iDb6398r4rTx3oFMwvPyOF6cMs9mlXAsVHGoBiuj1KfCiE0R0ZQDtoODFa++V8VEKS9z6wjmKxdnkFq2BV4fjxSgNHKsZFmVVAJUtagGK6PUp8Op9ZOBTguA9t5eA0vC5gMkhryRtGThBgveUn7KwzBp4TXO8Zu7SCouGG7UwV2u66tsG72/fxGuXf3QO/82SNdt/ai/e4t5TfkquzBJ4zXK8GaZcnUYO8McTlKb0xwreDVcI8O7d5R+9hf9myZo/foUE7y6/Dovgymfu6WGTHK/5bpdh+xf5xj/K8N54bngvVsNX/KMmzg1Pa/zcCYLJU34dvh7qHU54zXG8CcAcdDH/5ATcAme6+eMF7xUSvOfGRynDJx36ovnwQs+cE17Qc+fg8vUEj4xCtziFz4VnQ4O9FHol8o1/tD3vid9itevo+JD58M45ugtv8rdX9MAL3TYfvKDjxQt7BUh0ix1cy3EQATMDux9rz0uEN3BNwAsue+aFFwqZccI8+YxcbHosMYHZ98Jul4ndjzG8m87tOoHVKX9gyMwlZWF9wX8Kb/LEuXF+eMElXJzwJjP3JmrLbHICeVLCkcK0DB2Vp2BiVz+82ZpZAvzAkGrALni37Nz1J6x+5w8MMfUfl7b4f4c3+aednfzwwoN8LnjZcwTQA87IzmOolkl1v8moa2AcNpJvnFBAu+QYv1ScaoAPXvYBKw3ex4+e2oXV6/4uC+B9wf863uSuozo8L/xm88ALLvgnCEi5JrFPBKcQo19UxOygbeSIiHzjhAJAqI+1RzXABy/pXrTvMDXmJcMbGCog2Ypq4xz27Owc0+GF6eOBl93xQs4JOUrDVc7FzTbkoJrJZN7zRr5xUoE8alU2A7bBW0aA91QZ44DtztHRIeaEsOnwwuM1Hng5HC8Ug4KbLCnKzEaEDznIiJAjx0a+cVIBYAkz7nWhGrANXv/rv8NK9rws8L4QCARCP2QoqGiOfyfBZFkfN7wIhDjg5ZgVg8c0CPBS09Bps7DygPAXk2LjOVWRfOPEAlrjuPEh1YB98JJJGlpJshXWxr7Ozr7RMXrBsJ4kvi864EVkuqD+A8ZVM93C4XiLYW8Ibr8oDqcW0N40UiRKZnI2GvM8rqkN8o0TCwCvPcYs1YBt8HYefR2vsj6GaGDDT/x+//joGGtGOODfibe40x94kLGdqBAEwF2ck+LQ3HhEybjJtLS0tDxao0B/Js6EBRkphJfCofCbhCmSyLnRmHqN+ALAm4tJb1AN2AWvRIZ3PERH6cv+sqNlnV2s8M6mwNvFu5oCEfIiuzg5IRXbLWgBbwVqXe3MY3MACQVy/teRgvmrI513URD1xgkFtLBgNvtTDdgGb1/ZTrzKKkY/T7Il6/GKsqM7OeDd2OcnW+SFFzzRLdp/SXkJwAA/OhXGBC/4ViCzBeEOdaSgolScbyUohbYAEhaVLUIBpmwZ1YBt8H6WgtJYPrnrNvzEf3TnzqPs8H6V/Lr0hRaytYO5JVX/yV2amQ6MocP+kAleIJZGf1olqbg4MxfbnNrbMyhVz9EkRuAF7hF9i/EL75dJ8B71B8YoLM3pPLqTC94HOknw+vt4V1MgJ3ej8CoJVi2/aSmM8AJuE7MbJ4niKzNyWbPButA1eDI6MOJEXgGpPqqV2MH7QmfZUbz8gSHy7MPjAb9cuaxzdGwWsWBE87toBimuHhQy16qGV3mkGsIyQHfM1LD+LZk5LOGDTnSNfpNCG3ojs2XE+orsgndLRdn/4vVSX4gY9N7a1alUZ4d3Y+Algj05dmZqZkbIxQUAvPK/sM62RgX84Bs6oZMePjiYXiiUKA2jekYl4BVF/YwQ6yuyC94b+14qw8vfNzpWSDD2wHRtfwUrvF+h2VvB1ExU6LW4MLzFxQ7s/CxTw9zwq5SUzRL6OvKy+Ydrhr8GRM+WketLNsK7IUCEqTMwthRva0ug088H7/zRCj/B3kt9Ic4tbKhcAxpeTvcLHPNIPTMSp4yEPI6cQ2IKmCGhir3xYhRZ9GwZub5kI7zSk50EmMpe6uu+CWvq1q4IiczwbgyQzQVYpvTUQqdLMfDK0S9j6ArOvOn6FlNSdgrP2p3INfIBzNc4RBY9W0auL9kJ75zSl0gqDeGpfCDwaqRmacjJBO8DfZ0kaxVdY2zL2CJCzVCQ4JVTskxkgMM17h/0tHQejwsqMS+bNQbmaxiGT5stQyzrpdS3E94tNJyGcFHoV7sqosUY4Z09SnlVem5jaEUlzA4eArzUxbVhJSIaZFVSAm7+jE+p6TkMvxOcbUL1gfcf7ht6R9gG741dr5Jw6uwLYYZss7tUIDLCOydAM8Y3XsPt4FH6j3BoGDUvxXvEf7ReQi7TtERibg5bRJGYl025VpZWVHcON6C9YDirQqtvI7zSKNn1lnYNbUXZmf/1QKeaOhZ4Z4+WUmyNzaO3gr1ZqP+S8BMEFHw5v62ifNA8ndXfRqZNktIZK2SmZON33bM1Eb1vuAFatoxW3054vxIgAiWvdkRx+TeBCnUhJnjn0EyFOENeHJsz/ZeD3WRGwpfrpGkZW/ZZ4FRNPiw5gXn9Q2Jeeg41DUs3T+1FaGhKrW8jvI+f/v3/kFTR1Y34Lb/xdKmqzqv7WeDdpKkDqyLQzRfyYncyqPsPt2qWhC/b8U/JaQnpeTzRrSMFtRUzKZ1jAURqSnqaFmHsjTMXALJl4CVS69sI74ZQoOJVgir2h+Af8/lf11SqCHTT4QXqwNrfM4aMULDCBwXaGlj3i8EXnKBAzprybuhOJeUPcnJ5XgLNVZNunK0AMHIA43tqfbt2D8t6oIvMVEVX923gmO2FrlJNERZ4v6qtA9sJhJxcS8pUfUZbN44lLQ/1SwzmMJB5MlyLKKUyfAAzmR1gk+GlZMvo9e064lSOG3rIUL26//TYAm0zm3r2A9zR4Z3ds5/8kpR2DW2jtIG9GSCA4Ok/eK8jk+NlhpcF3IgYATYbXnK2jF7fRng3dHeVVpBUGgg5NZPE828HapR2DdHghepACoT4ogZVl6VyfgFTIwc4HGNyvCzw0vNcCCWnUWNgs+EFf9h569sIr/RAVx8ZK5DN74AVGOD9fA/VCEPooZYqQEowAm9xcaJmHwSYasDsqiV3vINthgEn8sSy6fACB2ZxjghthXdj6MXfk/VyyLNtJom1qedloHRpSRMFvDvpNno8+GUUCKkiBUeyMXiLi1Mz8GUxM8PYtmRu9SwPA5Wclp6HJth0eImb4On17YR3/u2n95cStf9099hNkVXi828vAYvvP+11E+G9s5vBhJNrhkLV3ym8H85GKLpih9HxIuHNTEknneGrQ0iCzYdXuzhPmy2j17cTXtktkslS6F02Te9XQhCHNHgf6z4doFgIhDxunk0U6pRghgnwRmMHcMSEc6I6n4guZWZrpkHMhxdYRJfNV99WeDcM0fxiaSBK72PdJQi2ifDeQmd3f0m3k2e4pu7tVMhd0voPveBLOewDnPjAnjM6/XdHam56WpI533nBKrxWIzqTZz68pGwZvb6t8ErrqK5XoVeOewtv74FBJ8N7J53d0kCP103as0Hq7ARueNFnihY7sqVk8DcaG70mpuam56RhDJgs1f1kpGVrd5SSb5wVXiA9mMNV3154Zw/1BPZTFDgd8t42S1oX6oLLyehlYbpl/rpuhsZ7hpwLMA3QuisRDlSp8EpSBnrzG7CBgvnbKjGDFxK1IFtL+GwZvT4XvKRvdGv9PyO80rruHS++TFPJjlDTd3pQ5V7Ew7vhhyGGpne4xnw4+lFSB6bZDPACMIS7nGE+gPmjVtc8vPhsGb2+fWsbFM3yhEqohL38YklJCRJEAryfdzGw+2KPl8vxqgfHCl988EZ2aiE+AwGI8ulUXMearRjAi8+W0evbDK+0onsHHV4SfBh4N3p7GN6KHd1jPo7FkBlq6NLh7oP6LwPz52TKt1QY1vEiO9ZsxQJe7JGR9Pp2w1swFip5UbdKQh7Mr/6dTT30dktCHvd1pJsi3EX4h50CL/Bn1W4BcuzAPrl77cOLPTKSXt9ueKWt3h4r4F3HAm9Pk7OII9WgyainI7oP6j9gg7xmFEY4XZrjoJFrH17sB1bo9W2Hd/5tBlwvHt4VXnqzJaExH+F0CFCaoGF6REWBF4gOtCtWsV+7pn6zGtuxxSmIM8O4RL4ftagFWVvCbYKn17cdXmmel8FHcsO73EOFt6TH67yPdEuke0hHdR/Uf0BsAK4KxwzcmEdr1O/D8ot8P2pRCzK3pE0e5rHXtx9eaV33T/9Lp0qqcfAWOqmt7nC18qTJNDcYSWWR4QU3GUNtIp0v+2jtIwKvXgPxAG9Bu6unRJ92uNpx/G31uHYQ29zh8rhXMfThtLQLpyO/bWR4c4h/VYRyvjwffxfw4ovEAl7pMS+FMwKAWHgLnU3biVWrvc772FfkaKdvo86RDC8wbYaEEnVECceXTQS8+CIxgVda11Stj14CvBTXu2M7X4o3D30DZHiB9QpIspAZX/ZP+Ql48UViA2/hbd1EL6kLXrLr7elud3NkGrQ5r5luIsILHmiGahj++LYi5i+iCXjxRWIDr7SwXR+9JHilW9rxrldmdzW57/C9pJqAJ8ILRA2o7G0GdqKYMeUg4MUXiRG80vKx7u06IgcivPnbvJhoZMf27nY3R8ALRLyq2JUILxA1oM4dI8yzYRf0aiTgxReJFbzS6rGm0A5u9XSPdeCzXcud6DZ7qpva3UVcBzwlqTxkomo4RYIXjAgQozBwIaS2MZZhm4AXXyRm8OYva+/mp5cMb/42j6sHza6zg/PLVQnoqyfBC05+wY1iAt6IMhnoFfDii8QMXmn+Nh30kuFFu94wu58k3QtK0ayA5kA4ArzgESLwTeMD3mk56EkHAS++SOzglQq2tbdU/5RP21taSfDmL253bQca3C7HDB0csxMRTYeniRp3SIAXyIHB82bJYMALs0ynV8CLLxJDeKWCbR5eeinwSvOcTUCLYXZ51kFGNL10T3vteHjBPBk8XIMyvGlpEL4O2unSAl58kVjCq8P30uCVbgJdr252p3EETpHFwwtQBe/rgb4nlC5JSfBhHxR6Bbz4IjGFl59eKrwrnV5NgwbYVXADx1BYeMGxGDQ1DA3WlDQwFErQ6BXw4ovEFl6FXjBINQSv7Ho15Q2wK0kpUAyKhZfmeJPACGH6tUBsECLSK+DFF4kxvFLB4tYm13ZmVTc5KfDKrjfamkv2u9x5hhklQ5O2rPCCAIKfW1MNzfjoFfDii8QaXjnf2+SqNg9eJeqdLmyUXYQY4QW/yQ9HB6rXAt4fRKBXwIsvYvGhIwjlP9jqbWGllwHeLGdTuLXqFm8r57waXYzwAtEGzK5mJQP8yQs8vQJefJHYwytPLXhYnS8DvNIKj/wuVLtaPE7fDTxH6rGIDV7wQzdQZADMvnHQK+DFF7EDXmnWYqenhQlfFnhnOT1NLS1NnlZdUxMUMcELBg0Qu1C3s9Mr4MUXsQVeKX+Bmy12YIFXWuBsbW9vdfuKOJczsIgFXjBFAbGLWMPATK+AF1/EHnglaZ7PyTJwY4I3y+d2u30dC8wOGSRGeAHsIHYTUetvYHrRM8XAA8okfbCJRbj7gaUp6EA0zdwSi4FrCV6pcIG71UPNmjHBKy28r6OjiO/7rKxigBeYnoDYxaxfgOhFl4uTQ0cMtcRi4JqCV5LmFTlbvRTnywavJBWYnGSIig4vMBZjZRdFL+osEgEvvoiN8Er51/loeQdWeC0TFV7d7CLoRa3vFfDii9gJryQVKLEDIfEQ9/DS2MVEsmHB9MJlBLz4IvbCK0lZC9zOdi8W33iHF0jwcq5bgBeewbsxBLz4Ikmkw9AJAn/g9MIrSVmr3U6s+41veIHFuMkwaLTVuhDt0J5iAa8RE2zSD68kFW5dLLtfFL8ubxzDC5wcwr3aUULRCy4NEvAaMcEmI/BKUv7KZW5na7u3pcVVrQa4Op7hBVJk8Dpzhh1q8N54sJKA14gJNhmDV3a/88L8yg7YVV2tMBxeJmZVFoxJWHjTAcgQO3yYjnSC/DWQcsg1OitBFLgoQy0BL1YLiz4JzogVzlvtkwH2yAS3tLhcLU0ep4/thN3C624w72ZUon1QJSJ4woyNXcSqdRJQsRTfIIj58DVV31LrJxs1wSbtwI/hPIL8GzqKlsITullLVxf5fG6n09na2trqdPuYzl/IWt1h8jpeISGC8u/r8BVdh4oJ8rOWrlpwQ4eiBQwR78plHR0dHIfqCQkZVUGRz+fzLVuJXU9TkJVFX2tTsGqxz9dhYN+akJAOFRT53E6327dV91LGwseWyQvKfIJdoVgrSw5uW1udzm16+C18bJlTltvXYfoGCiEhmj7pU5ILnvZWp3v1PJ6c2MJbbpKrKjUFu0J2aKXb6fG2tLQ0eT3tTudNTADnL1y+ztnq8TY1ydVaBbtCNmmlvB9InpRwKSQ6ne4Vq+bNwtFYsHD5g7LHnZ7JcLV42y3YdCkkxKaV0e1A0wC3t8px7IoVq5YvXzgronnLlz+44ianEmSEwZ2egBPsCtkohd7IWobqanlercnr9bS3K7MUiuT/aveEJ95cM6sfqi3Z7C4kxK6C29q1e9kUhF0tWrlcypIHdTGZ3dWCXSE7VbCtHbMTszoi1N9kdkV+V8hmFSxr5Ti/bHqlr7xox/xDRoSEOJW/zOlhPr9se+RcMrEWRygutNVN3QavcbvtTl+RravUhYSimudzMh8e6ZLd7g22LlIXElIpazFj6CDvDfJ1XCfSDELxo/wFTMeXKUeZWnS4k5CQXi2lnx05PasmQgaheFPBMrLzrZYTZG6xa0IoLrVcOTsSja+8EKfVLdyuULyqcHUYX4jf6TVkItoVimNlIU7fq652NXlbnb4OxIZjIaE4Uvj0vcjpI8pKM3mtr69oVaF4TELxrqyti8Nrd2V5ZXLdvvvmCa8rdE0of6V8/F5YbrfvhlVimCZ0Lalg4dJVCxasXrqU4fwGISEzJEnS/wNPjylCwxf4CwAAAABJRU5ErkJggg=="},662:function(t,e,i){t.exports=i.p+"static/time/img/logo_pc@2x.90583da.png"},663:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(65),a=i(223),s=i(625);e.default={props:{theme:{type:String,default:"white"},showMenu:{type:Boolean,default:!0},loginUser:{type:Object,default:null},wrapperClass:{type:String,default:""},isFixed:{type:Boolean,default:!1},showSearch:{type:Boolean,default:!0}},data:function(){return{isMenuMobileShow:!1,menu:[{link:"https://time.geekbang.org/",name:"讲堂",alias:"Index"},{link:"https://time.geekbang.org/college/algorithm/100034301?utm_source=time_web&utm_medium=menu&utm_term=timewebmenu",name:"算法训练营"},{link:"https://service.geekbang.org/?utm_source=geektimeWeb&utm_medium=menu&utm_campaign=qiyezhanghao",name:"企业服务"},{link:"https://www.infoq.cn/hotlist?tag=day&utm_source=geektime&utm_medium=menu",name:"热点资讯"},{link:"https://h5.youzan.com/v2/feature/TJe4bYhxyP?dc_ps=2293231415741009926.200001",name:"极客商城"},{link:"https://time.geekbang.org/download",name:"客户端下载",alias:"Download"},{link:"https://time.geekbang.org/service/exchange",name:"兑换中心",alias:"Code"}],couldReply:!1,showDropdown:!1,isShowSearch:!1,placeholder:"搜索课程、课程内容等",hotWords:"",query:""}},computed:{routerName:function(){return this.$route.name}},watch:{isMenuMobileShow:function(t){t?o.a.fixedBody.open():o.a.fixedBody.close()}},created:function(){this.$store.state.loginUser&&this.getUserData(),this.requestHotWords(),document.addEventListener("scroll",this.scrollHandler)},mounted:function(){document.body.addEventListener("click",this.closeDropdown)},beforeDestroy:function(){document.removeEventListener("scroll",this.scrollHandler)},methods:{getUserData:function(){var t=this;a.a.getUserData().then(function(e){t.couldReply=e.could_reply}).catch(function(t){console.log("get user type error: ",t)})},dropdownHandler:function(){this.showDropdown=!this.showDropdown},closeDropdown:function(t){this.checkParentsByClassName(t.target,"profile")||(this.showDropdown=!1)},checkParentsByClassName:function(t,e){for(var i=o.a.getParents(t),n=0;n-1)},jump:function(t){this.$ga.sendEvent("导航栏跳转","导航栏跳转成功","url:"+t.link),window.open(t.link)},login:function(){window.location.href="//account.geekbang.org/signin?redirect="+encodeURIComponent(window.location.href)},logout:function(){window.location.href="//account.geekbang.org/logout?redirect="+encodeURIComponent(window.location.href)},signup:function(){window.location.href="//account.geekbang.org/signup?redirect="+encodeURIComponent(window.location.href)},search:function(){this.isShowSearch?this.doSearch():(this.openSearch(),this.$refs.searchInput.focus())},openSearch:function(){this.isShowSearch=!0},closeSearch:function(){this.isShowSearch=!1,this.query="",this.$refs.searchInput&&this.$refs.searchInput.blur()},doSearch:function(t){this.query||this.hotWords===this.placeholder||(this.query=this.hotWords),this.query.trim()&&window.open("/search?q="+this.query)},blur:function(){var t=this;setTimeout(function(){t.isShowSearch&&t.closeSearch()},200)},scrollHandler:function(){this.closeSearch()},requestHotWords:function(){var t=this;return new r.a(function(e,i){s.a.getHotWords().then(function(i){t.hotWords=i.search_bar||t.placeholder,e(i)})})}}}},664:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(221),a=i.n(o),s=i(99),A=i.n(s),l=i(65),c=i(218),u=i(219),d=i(625);e.default={props:{customStyle:{type:Object,default:function(){return{}}},allshow:{type:Boolean,default:!1},routeParams:{type:Object,default:function(){return{}}}},data:function(){return{isShowDropPage:!1,params:null,defaultPlaceholder:"搜索课程、课程内容、每日一课等",placeholder:"",hotWords:""}},watch:{isShowDropPage:function(t){t?l.a.fixedBody.open():l.a.fixedBody.close()}},computed:A()({},i.i(u.a)({loginUser:"loginUser"}),{isShow:function(){return!l.a.isInApp()&&!this.$route.query.code},isPC:function(){return l.a.isPC()},routeRelatedData:function(){var t=this.params;return this.$route.query.utm_term&&(t.utm_term=this.$route.query.utm_term),{jump:this.$route.meta.appLink,data:t}},urlScheme:function(){var t=this,e="";if(this.$route.meta.urlscheme){var i=this.$route.meta.urlscheme.match(/{{\s*[\w]+\s*}}/gi);e=this.$route.meta.urlscheme,i&&i.forEach(function(i){e=e.replace(i,t.$route.params[i.match(/[\w]+/)[0]])}),this.$route.query.utm_term&&(e=l.a.addUrlParam(e,"utm_term",this.$route.query.utm_term)),this.routeParams.aid&&(e=l.a.addUrlParam(e,"aid",this.routeParams.aid),e=l.a.addUrlParam(e,"title",this.routeParams.title))}return e},appLink:function(){if(l.a.isPC())return"https://time.geekbang.org/download";if(l.a.isIOS()){var t=A()({},this.routeRelatedData);return this.urlScheme&&(t.urlscheme=this.urlScheme),"https://static001.geekbang.org/misc/download/zeus.html?params="+encodeURIComponent(a()(t))}var e=this.$route.meta.urlscheme?"views?urlscheme="+encodeURIComponent(this.urlScheme):"tab=1",i="geektime://time.geekbang.org:80/main?"+encodeURIComponent(e);return l.a.isInWeixin()?c.a.appstoreUrl+"&android_schema="+i:i}}),created:function(){this.params=this.$route.params||this.$route.query,this.requestHotWords()},methods:{goApp:function(){window.location.href=this.appLink},goArithmeticTraining:function(){window.location.href="https://time.geekbang.org/college/algorithm/100034301?utm_source=time_web&utm_medium=menu&utm_term=timewebmenu_h5"},goFrontEndTraining:function(){window.location.href="https://time.geekbang.org/training/100028201?utm_source=time_web&utm_medium=menu"},goLogin:function(){window.location.href="//account.geekbang.org/signin?redirect="+encodeURIComponent(window.location.href)},goAccount:function(){window.location.href="//account.geekbang.org/dashboard?redirect="+encodeURIComponent(window.location.href)},goGift:function(){window.location.href="//time.geekbang.org/service/exchange"},goIndex:function(){window.location.href="//time.geekbang.org"},goDownload:function(){window.location.href="//time.geekbang.org/download"},goService:function(){window.open("https://service.geekbang.org/")},goMall:function(){window.open("https://h5.youzan.com/v2/feature/TJe4bYhxyP?dc_ps=2293231415741009926.200001")},goInfoQ:function(){window.open("https://www.infoq.cn/?utm_source=geektime&utm_medium=menu")},goChannel:function(){window.open("https://jinshuju.net/f/7y04KD")},goRecomandAuthor:function(){window.open("https://jinshuju.net/f/MANYIf")},goHome:function(){window.location.href="//time.geekbang.org"},focus:function(){this.$router.push("/search?hotwords="+this.hotWords)},requestHotWords:function(){var t=this;return new r.a(function(e,i){d.a.getHotWords().then(function(e){t.hotWords=e.search_bar,t.placeholder=t.hotWords||t.defaultPlaceholder})})}}}},665:function(t,e,i){var n=i(620);e=t.exports=i(571)(!1),e.push([t.i,"._352wsGxH_0{height:63px}.Wz6esVdU_0{width:100%;height:63px;background:#fff;position:fixed;top:0;left:0;z-index:20;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 13px;-webkit-box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38);box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38)}._28dOln0j_0{height:40px;width:110px;background:url("+n(i(662))+") no-repeat 0;background-size:110px;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;cursor:pointer}._1k9ecCKw_0{width:50px;height:30px;padding-top:2px;padding-left:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:14px;color:#888;margin-left:-10px;cursor:pointer;background:transparent}._1U_jCCZU_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}._3oCJiu8W_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 13px;background:#fbf5ee;border-radius:15px;height:30px}._7Xrmrbox_0,.gBs4U5qC_0,.JjI7sqpW_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;color:#fa8919;font-size:13px;font-weight:500;cursor:pointer}.JjI7sqpW_0{font-size:14px}._3lsV2-l9_0{height:13px;width:1px;background:#fa8919;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:10px;margin-right:10px}._1UaW_Eq1_0{position:fixed;top:0;left:0;right:0;bottom:0;z-index:21;background:#fff;overflow:hidden;-webkit-transform:translateY(-20px);transform:translateY(-20px);opacity:0;visibility:hidden;-webkit-transition:all .3s ease;transition:all .3s ease}._1UaW_Eq1_0._2mIjHHvm_0{-webkit-transform:translateY(0);transform:translateY(0);opacity:1;visibility:visible}._33xATrPo_0{width:100%;height:calc(100% - 63px);overflow-x:hidden;--webkit-overflow-scrolling:touch}._1qHJ5OLn_0{height:63px;-ms-flex-align:center;padding-left:15px;padding-right:15px;-webkit-box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38);box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38)}._1qHJ5OLn_0,._2FYmyQEJ_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center}._2FYmyQEJ_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:35px;-ms-flex-align:center;background:#f6f7fb;border-radius:20px;padding-left:16px;padding-right:20px}._1CLulytQ_0{font-size:14px;color:#b2b2b2}._1reF0JJk_0{height:20px;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-left:10px}._1reF0JJk_0 input{background:transparent;border:0;color:#353535;height:20px;line-height:20px;font-size:14px;font-weight:400;width:100%;vertical-align:top;outline:none;outline-offset:0}._33xQ4nNG_0{font-size:16px;font-weight:400;color:#b2b2b2;height:30px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:20px;margin-right:10px}._1y_WRr3L_0{font-size:18px}._1y_WRr3L_0 ._2HnUZhdg_0{color:#888;font-weight:400;padding-left:28px;height:63px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:.5px solid #e8e8e8}._1y_WRr3L_0 ._2HnUZhdg_0._1r7t-t9P_0{color:#fa8919;font-weight:500}._3IeMxVb7_0{margin-top:60px;padding-bottom:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-sizing:border-box;box-sizing:border-box}._3IeMxVb7_0 ._2HnUZhdg_0{position:relative;padding-top:46px;font-size:13px;color:#888}._3IeMxVb7_0 ._339_Pvt6_0{position:absolute;color:#c3c3c3;height:46px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:36px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;top:0;left:0}",""]),e.locals={shim:"_352wsGxH_0",main:"Wz6esVdU_0",logo:"_28dOln0j_0",dropMenu:"_1k9ecCKw_0",space:"_1U_jCCZU_0",btns:"_3oCJiu8W_0",openApp:"_7Xrmrbox_0",login:"gBs4U5qC_0",user:"JjI7sqpW_0",split:"_3lsV2-l9_0",dropPage:"_1UaW_Eq1_0",on:"_2mIjHHvm_0",dropPageWrapper:"_33xATrPo_0",top:"_1qHJ5OLn_0",search:"_2FYmyQEJ_0",searchIcon:"_1CLulytQ_0",inputWrap:"_1reF0JJk_0",close:"_33xQ4nNG_0",menus:"_1y_WRr3L_0",item:"_2HnUZhdg_0",activedMenu:"_1r7t-t9P_0",bottomMenus:"_3IeMxVb7_0",icon:"_339_Pvt6_0"}},666:function(t,e,i){var n=i(620);e=t.exports=i(571)(!1),e.push([t.i,'@font-face{font-family:gc-iconfont;src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot");src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot?#iefix") format("embedded-opentype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.woff") format("woff"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.ttf") format("truetype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.svg#gc-iconfont") format("svg")}.gc-icon[data-v-702109a0]{font-family:gc-iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.common-header[data-v-702109a0]{height:65px;background:#fff;font-family:Avenir,Helvetica,Arial,sans-serif!important;border-bottom:1px solid #eaeaea}.common-header.fixed[data-v-702109a0]{position:fixed;top:0;left:0;right:0;z-index:10000}.common-header .common-header-wrapper[data-v-702109a0]{max-width:1080px;width:94vw;height:100%;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative}.common-header .common-header-wrapper .common-logo[data-v-702109a0]{width:151px;height:65px;background-image:url('+n(i(661))+');background-repeat:no-repeat;background-position:50%;background-size:contain}.common-header .common-header-wrapper .info[data-v-702109a0]{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .info .menu[data-v-702109a0]{opacity:1;-webkit-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.common-header .common-header-wrapper .info .menu.hide[data-v-702109a0]{opacity:0}.common-header .common-header-wrapper .info .menu a[data-v-702109a0]{position:relative;padding:8px 12px;font-weight:400;-webkit-transition:color .2s ease;transition:color .2s ease;white-space:nowrap}.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:link,.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:visited{color:#353535}.common-header .common-header-wrapper .info .menu a.on[data-v-702109a0],.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:hover{color:#fa8919}.common-header .common-header-wrapper .info .menu a img[data-v-702109a0]{position:absolute;width:20px;height:12px;left:calc(100% - 18px);top:0}.common-header .common-header-wrapper .info .search[data-v-702109a0]{position:absolute;right:15px;bottom:-1px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:4px}.common-header .common-header-wrapper .info .search .close[data-v-702109a0]{margin-right:10px;font-size:12px;font-weight:500;color:#e2e2e2;cursor:pointer}.common-header .common-header-wrapper .info .search .inputWrap[data-v-702109a0]{width:0;border-bottom:1px solid #d8d8d8;overflow:hidden;-webkit-transition:width .3s;transition:width .3s}.common-header .common-header-wrapper .info .search .inputWrap.open[data-v-702109a0]{width:300px}.common-header .common-header-wrapper .info .search .input[data-v-702109a0]{width:100%;font-size:12px;font-weight:400;color:#353535;outline:none;border:none;background:transparent}.common-header .common-header-wrapper .info .search .input[data-v-702109a0]::-webkit-input-placeholder{color:#b2b2b2}.common-header .common-header-wrapper .info .search .search-btn[data-v-702109a0]{position:relative;width:32px;height:32px;line-height:32px;color:#404040;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.common-header .common-header-wrapper .info .search .search-btn img[data-v-702109a0]{position:absolute;top:0;right:-10px;width:20px;height:12px}.common-header .common-header-wrapper .userinfo[data-v-702109a0]{height:65px;line-height:100%}.common-header .common-header-wrapper .userinfo .control[data-v-702109a0],.common-header .common-header-wrapper .userinfo[data-v-702109a0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .userinfo .control[data-v-702109a0]{margin-top:2px}.common-header .common-header-wrapper .userinfo .control a[data-v-702109a0]{font-size:16px;color:#888;display:block;height:65px;line-height:65px;font-weight:400;cursor:pointer}.common-header .common-header-wrapper .userinfo .control a.mobile[data-v-702109a0]{display:none}.common-header .common-header-wrapper .userinfo .control a[data-v-702109a0]:first-child:after{content:"|";margin-left:8px;margin-right:8px}.common-header .common-header-wrapper .userinfo .profile[data-v-702109a0]{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown[data-v-702109a0]{visibility:hidden;position:absolute;width:152px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 3px 10px 4px rgba(139,162,192,.13);box-shadow:0 3px 10px 4px rgba(139,162,192,.13);top:70px;right:-16px;border-radius:6px;z-index:200000;-webkit-transition:all .2s ease;transition:all .2s ease}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .arrow[data-v-702109a0]{-webkit-box-shadow:0 0 8px 3px rgba(139,162,192,.13);box-shadow:0 0 8px 3px rgba(139,162,192,.13);cursor:pointer;width:10px;height:10px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;right:32px;top:-5px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]{background:#fff;height:0;font-size:14px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:20px;padding-right:37px;color:#888;cursor:pointer;position:relative;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box;font-weight:300;overflow:hidden;-webkit-transition:height .2s ease;transition:height .2s ease}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.exit[data-v-702109a0]{border-top:1px solid #e9e9e9;border-radius:0 0 6px 6px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info[data-v-702109a0]{height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e9e9e9;border-radius:6px 6px 0 0}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info .username[data-v-702109a0]{width:110%;font-size:14px;color:#404040;font-weight:400;line-height:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info .cellphone[data-v-702109a0]{margin-top:7px;line-height:1em;font-size:12px;color:#b2b2b2;font-weight:400}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]:hover{background:#f6f7fb}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item .gc-icon[data-v-702109a0]{color:#888;font-size:16px;margin-right:13px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item .iconfont[data-v-702109a0]{display:inline-block;width:14px;text-align:center;margin-left:1px;font-size:13px;color:#999;margin-right:13px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.router-link-active[data-v-702109a0]{color:#ff5a05}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]:last-child{border-bottom:none}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show[data-v-702109a0]{visibility:visible}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show .navbar-item[data-v-702109a0]{height:48px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show .navbar-item.user-info[data-v-702109a0]{height:64px}.common-header .common-header-wrapper .userinfo i.icon-profile[data-v-702109a0]{color:#404040;font-size:17px;display:block;margin-top:-2px;margin-right:8px}.common-header.opacity[data-v-702109a0]{background:transparent;border-bottom:none}.common-header.black[data-v-702109a0]{background:#1e1e1e;border-bottom:none}.common-header.black .common-header-wrapper .common-logo[data-v-702109a0]{background-image:url(https://static001.geekbang.org/static/live/img/logo.bb6fd3f.png)}.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:link,.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:visited{color:#fff}.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:hover{color:#ff5a05}.common-header.black .common-header-wrapper .info .profile .profile-dropdown[data-v-702109a0]{background:#1e1e1e}.common-header.black .common-header-wrapper .info .profile .profile-dropdown .arrow[data-v-702109a0]{background-color:#1e1e1e}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]{border-bottom:1px solid #353535}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:link,.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:visited{color:#fff}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:hover{color:#ff5a05;background:#353535}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a .gc-icon[data-v-702109a0]{color:#888;font-size:20px}.fixed-rect[data-v-702109a0]{width:100%;height:66px}',""])},667:function(t,e,i){var n=i(665);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("1f3b662a",n,!0,{})},668:function(t,e,i){var n=i(666);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("493205de",n,!0,{})},669:function(t,e,i){!function(e,i){t.exports=i()}(0,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/dist/",e(e.s=8)}([function(t,e,i){"use strict";function n(){}function r(t,e){return e="["+t+"] > "+e}function o(t){var e=self.console[t];return e?function(){for(var i=arguments.length,n=Array(i),o=0;o1?e-1:0),n=1;n0)return e.subarray(n,n+r)},t._readSize=function(t,e){var i=0;return i=(127&t[e])<<21,i|=(127&t[e+1])<<14,i|=(127&t[e+2])<<7,i|=127&t[e+3]},t.getTimeStamp=function(e){for(var i=t.getID3Frames(e),n=0;n1&&void 0!==arguments[1]&&arguments[1],i=t.length,n=void 0,r=void 0,o=void 0,a="",s=0;s>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:a+=String.fromCharCode(n);break;case 12:case 13:r=t[s++],a+=String.fromCharCode((31&n)<<6|63&r);break;case 14:r=t[s++],o=t[s++],a+=String.fromCharCode((15&n)<<12|(63&r)<<6|(63&o)<<0)}}return a},t}(),o=r._utf8ArrayToStr;e.a=r},function(t,e,i){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var s=function(){function t(e,i){n(this,t),this.subtle=e,this.aesIV=i}return t.prototype.decrypt=function(t,e){return this.subtle.decrypt({name:"AES-CBC",iv:this.aesIV},e,t)},t}(),A=s,l=function(){function t(e,i){r(this,t),this.subtle=e,this.key=i}return t.prototype.expandKey=function(){return this.subtle.importKey("raw",this.key,{name:"AES-CBC"},!1,["encrypt","decrypt"])},t}(),c=l,u=function(){function t(){o(this,t),this.rcon=[0,1,2,4,8,16,32,64,128,27,54],this.subMix=[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],this.invSubMix=[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],this.sBox=new Uint32Array(256),this.invSBox=new Uint32Array(256),this.key=new Uint32Array(0),this.initTable()}return t.prototype.uint8ArrayToUint32Array_=function(t){for(var e=new DataView(t),i=new Uint32Array(4),n=0;n<4;n++)i[n]=e.getUint32(4*n);return i},t.prototype.initTable=function(){var t=this.sBox,e=this.invSBox,i=this.subMix,n=i[0],r=i[1],o=i[2],a=i[3],s=this.invSubMix,A=s[0],l=s[1],c=s[2],u=s[3],d=new Uint32Array(256),h=0,f=0,p=0;for(p=0;p<256;p++)d[p]=p<128?p<<1:p<<1^283;for(p=0;p<256;p++){var g=f^f<<1^f<<2^f<<3^f<<4;g=g>>>8^255&g^99,t[h]=g,e[g]=h;var m=d[h],v=d[m],w=d[v],b=257*d[g]^16843008*g;n[h]=b<<24|b>>>8,r[h]=b<<16|b>>>16,o[h]=b<<8|b>>>24,a[h]=b,b=16843009*w^65537*v^257*m^16843008*h,A[g]=b<<24|b>>>8,l[g]=b<<16|b>>>16,c[g]=b<<8|b>>>24,u[g]=b,h?(h=m^d[d[d[w^m]]],f^=d[d[f]]):h=f=1}},t.prototype.expandKey=function(t){for(var e=this.uint8ArrayToUint32Array_(t),i=!0,n=0;n0&&this._events[t].length>r&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(t,e){function i(){this.removeListener(t,i),r||(r=!0,e.apply(this,arguments))}if(!n(e))throw TypeError("listener must be a function");var r=!1;return i.listener=e,this.on(t,i),this},i.prototype.removeListener=function(t,e){var i,r,a,s;if(!n(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(i=this._events[t],a=i.length,r=-1,i===e||n(i.listener)&&i.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(i)){for(s=a;s-- >0;)if(i[s]===e||i[s].listener&&i[s].listener===e){r=s;break}if(r<0)return this;1===i.length?(i.length=0,delete this._events[t]):i.splice(r,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},i.prototype.removeAllListeners=function(t){var e,i;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(i=this._events[t],n(i))this.removeListener(t,i);else if(i)for(;i.length;)this.removeListener(t,i[i.length-1]);return delete this._events[t],this},i.prototype.listeners=function(t){return this._events&&this._events[t]?n(this._events[t])?[this._events[t]]:this._events[t].slice():[]},i.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(n(e))return 1;if(e)return e.length}return 0},i.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,i){!function(e){var i=/^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,n=/^([^\/;?#]*)(.*)$/,r=/(?:\/|^)\.(?=\/)/g,o=/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,a={buildAbsoluteURL:function(t,e,i){if(i=i||{},t=t.trim(),!(e=e.trim())){if(!i.alwaysNormalize)return t;var r=this.parseURL(t);if(!s)throw new Error("Error trying to parse base URL.");return r.path=a.normalizePath(r.path),a.buildURLFromParts(r)}var o=this.parseURL(e);if(!o)throw new Error("Error trying to parse relative URL.");if(o.scheme)return i.alwaysNormalize?(o.path=a.normalizePath(o.path),a.buildURLFromParts(o)):e;var s=this.parseURL(t);if(!s)throw new Error("Error trying to parse base URL.");if(!s.netLoc&&s.path&&"/"!==s.path[0]){var A=n.exec(s.path);s.netLoc=A[1],s.path=A[2]}s.netLoc&&!s.path&&(s.path="/");var l={scheme:s.scheme,netLoc:o.netLoc,path:null,params:o.params,query:o.query,fragment:o.fragment};if(!o.netLoc&&(l.netLoc=s.netLoc,"/"!==o.path[0]))if(o.path){var c=s.path,u=c.substring(0,c.lastIndexOf("/")+1)+o.path;l.path=a.normalizePath(u)}else l.path=s.path,o.params||(l.params=s.params,o.query||(l.query=s.query));return null===l.path&&(l.path=i.alwaysNormalize?a.normalizePath(o.path):o.path),a.buildURLFromParts(l)},parseURL:function(t){var e=i.exec(t);return e?{scheme:e[1]||"",netLoc:e[2]||"",path:e[3]||"",params:e[4]||"",query:e[5]||"",fragment:e[6]||""}:null},normalizePath:function(t){for(t=t.split("").reverse().join("").replace(r,"");t.length!==(t=t.replace(o,"")).length;);return t.split("").reverse().join("")},buildURLFromParts:function(t){return t.scheme+t.netLoc+t.path+t.params+t.query+t.fragment}};t.exports=a}()},function(t,e,i){"use strict";function n(t,e,i,n){var r,o,a,s,A,l=navigator.userAgent.toLowerCase(),c=n,u=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];return r=1+((192&e[i+2])>>>6),(o=(60&e[i+2])>>>2)>u.length-1?void t.trigger(Event.ERROR,{type:_.b.MEDIA_ERROR,details:_.a.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+o}):(s=(1&e[i+2])<<2,s|=(192&e[i+3])>>>6,T.b.log("manifest codec:"+n+",ADTS data:type:"+r+",sampleingIndex:"+o+"["+u[o]+"Hz],channelConfig:"+s),/firefox/i.test(l)?o>=6?(r=5,A=new Array(4),a=o-3):(r=2,A=new Array(2),a=o):-1!==l.indexOf("android")?(r=2,A=new Array(2),a=o):(r=5,A=new Array(4),n&&(-1!==n.indexOf("mp4a.40.29")||-1!==n.indexOf("mp4a.40.5"))||!n&&o>=6?a=o-3:((n&&-1!==n.indexOf("mp4a.40.2")&&(o>=6&&1===s||/vivaldi/i.test(l))||!n&&1===s)&&(r=2,A=new Array(2)),a=o)),A[0]=r<<3,A[0]|=(14&o)>>1,A[1]|=(1&o)<<7,A[1]|=s<<3,5===r&&(A[1]|=(14&a)>>1,A[2]=(1&a)<<7,A[2]|=8,A[3]=0),{config:A,samplerate:u[o],channelCount:s,codec:"mp4a.40."+r,manifestCodec:c})}function r(t,e){return 255===t[e]&&240==(246&t[e+1])}function o(t,e){return 1&t[e+1]?7:9}function a(t,e){return(3&t[e+3])<<11|t[e+4]<<3|(224&t[e+5])>>>5}function s(t,e){return!!(e+10&&e+s+A<=c)return l=i+n*r,{headerLength:s,frameLength:A,stamp:l}}function d(t,e,i,n,r){var o=c(t.samplerate),a=u(e,i,n,r,o);if(a){var s=a.stamp,A=a.headerLength,l=a.frameLength,d={unit:e.subarray(i+A,i+A+l),pts:s,dts:s};return t.samples.push(d),t.len+=l,{sample:d,length:l+A}}}function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function g(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function m(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function v(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function w(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function b(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function y(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function B(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function x(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var E=i(1),_=i(2),C=i(4),T=i(0),U=i(3),Q=function(){function t(e,i,n){h(this,t),this.observer=e,this.config=n,this.remuxer=i}return t.prototype.resetInitSegment=function(t,e,i,n){this._audioTrack={container:"audio/adts",type:"audio",id:0,sequenceNumber:0,isAAC:!0,samples:[],len:0,manifestCodec:e,duration:n,inputTimeScale:9e4}},t.prototype.resetTimeStamp=function(){},t.probe=function(t){if(!t)return!1;for(var e=U.a.getID3Data(t,0)||[],i=e.length,n=t.length;i0},t.bin2str=function(t){return String.fromCharCode.apply(null,t)},t.readUint32=function(t,e){t.data&&(e+=t.start,t=t.data);var i=t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3];return i<0?4294967296+i:i},t.writeUint32=function(t,e,i){t.data&&(e+=t.start,t=t.data),t[e]=i>>24,t[e+1]=i>>16&255,t[e+2]=i>>8&255,t[e+3]=255&i},t.findBox=function(e,i){var n,r,o,a,s,A,l,c=[];if(e.data?(A=e.start,a=e.end,e=e.data):(A=0,a=e.byteLength),!i.length)return null;for(n=A;n1?n+r:a,o===i[0]&&(1===i.length?c.push({data:e,start:n+8,end:l}):(s=t.findBox({data:e,start:n+8,end:l},i.slice(1)),s.length&&(c=c.concat(s)))),n=l;return c},t.parseInitSegment=function(e){var i=[];return t.findBox(e,["moov","trak"]).forEach(function(e){var n=t.findBox(e,["tkhd"])[0];if(n){var r=n.data[n.start],o=0===r?12:20,a=t.readUint32(n,o),s=t.findBox(e,["mdia","mdhd"])[0];if(s){r=s.data[s.start],o=0===r?12:20;var A=t.readUint32(s,o),l=t.findBox(e,["mdia","hdlr"])[0];if(l){var c=t.bin2str(l.data.subarray(l.start+8,l.start+12)),u={soun:"audio",vide:"video"}[c];if(u){var d=t.findBox(e,["mdia","minf","stbl","stsd"]);if(d.length){d=d[0];var h=t.bin2str(d.data.subarray(d.start+12,d.start+16));T.b.log("MP4Demuxer:"+u+":"+h+" found")}i[a]={timescale:A,type:u},i[u]={timescale:A,id:a}}}}}}),i},t.getStartDTS=function(e,i){var n,r,o;return n=t.findBox(i,["moof","traf"]),r=[].concat.apply([],n.map(function(i){return t.findBox(i,["tfhd"]).map(function(n){var r,o;return r=t.readUint32(n,4),o=e[r].timescale||9e4,t.findBox(i,["tfdt"]).map(function(e){var i,n;return i=e.data[e.start],n=t.readUint32(e,4),1===i&&(n*=Math.pow(2,32),n+=t.readUint32(e,8)),n})[0]/o})})),o=Math.min.apply(null,r),isFinite(o)?o:0},t.offsetStartDTS=function(e,i,n){t.findBox(i,["moof","traf"]).map(function(i){return t.findBox(i,["tfhd"]).map(function(r){var o=t.readUint32(r,4),a=e[o].timescale||9e4;t.findBox(i,["tfdt"]).map(function(e){var i=e.data[e.start],r=t.readUint32(e,4);if(0===i)t.writeUint32(e,4,r-n*a);else{r*=Math.pow(2,32),r+=t.readUint32(e,8),r-=n*a,r=Math.max(r,0);var o=Math.floor(r/(k+1)),s=Math.floor(r%(k+1));t.writeUint32(e,4,o),t.writeUint32(e,8,s)}})})})},t.prototype.append=function(e,i,n,r){var o=this.initData;o||(this.resetInitSegment(e,this.audioCodec,this.videoCodec),o=this.initData);var a=void 0,s=this.initPTS;if(void 0===s){var A=t.getStartDTS(o,e);this.initPTS=s=A-i,this.observer.trigger(E.a.INIT_PTS_FOUND,{initPTS:s})}t.offsetStartDTS(o,e,s),a=t.getStartDTS(o,e),this.remuxer.remux(o.audio,o.video,null,null,a,n,r,e)},t.prototype.destroy=function(){},t}(),I=S,R={BitratesMap:[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],SamplingRateMap:[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3],SamplesCoefficients:[[0,72,144,12],[0,0,0,0],[0,72,144,12],[0,144,144,12]],BytesInSlot:[0,1,1,4],appendFrame:function(t,e,i,n,r){if(!(i+24>e.length)){var o=this.parseHeader(e,i);if(o&&i+o.frameLength<=e.length){var a=9e4*o.samplesPerFrame/o.sampleRate,s=n+r*a,A={unit:e.subarray(i,i+o.frameLength),pts:s,dts:s};return t.config=[],t.channelCount=o.channelCount,t.samplerate=o.sampleRate,t.samples.push(A),t.len+=o.frameLength,{sample:A,length:o.frameLength}}}},parseHeader:function(t,e){var i=t[e+1]>>3&3,n=t[e+1]>>1&3,r=t[e+2]>>4&15,o=t[e+2]>>2&3,a=t[e+2]>>1&1;if(1!==i&&0!==r&&15!==r&&3!==o){var s=3===i?3-n:3===n?3:4,A=1e3*R.BitratesMap[14*s+r-1],l=3===i?0:2===i?1:2,c=R.SamplingRateMap[3*l+o],u=t[e+3]>>6==3?1:2,d=R.SamplesCoefficients[i][n],h=R.BytesInSlot[n],f=8*d*h;return{sampleRate:c,channelCount:u,frameLength:parseInt(d*A/c+a,10)*h,samplesPerFrame:f}}},isHeaderPattern:function(t,e){return 255===t[e]&&224==(224&t[e+1])&&0!=(6&t[e+1])},isHeader:function(t,e){return!!(e+1t?(this.word<<=t,this.bitsAvailable-=t):(t-=this.bitsAvailable,e=t>>3,t-=e>>3,this.bytesAvailable-=e,this.loadWord(),this.word<<=t,this.bitsAvailable-=t)},t.prototype.readBits=function(t){var e=Math.min(this.bitsAvailable,t),i=this.word>>>32-e;return t>32&&T.b.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=e,this.bitsAvailable>0?this.word<<=e:this.bytesAvailable>0&&this.loadWord(),e=t-e,e>0&&this.bitsAvailable?i<>>t))return this.word<<=t,this.bitsAvailable-=t,t;return this.loadWord(),t+this.skipLZ()},t.prototype.skipUEG=function(){this.skipBits(1+this.skipLZ())},t.prototype.skipEG=function(){this.skipBits(1+this.skipLZ())},t.prototype.readUEG=function(){var t=this.skipLZ();return this.readBits(t+1)-1},t.prototype.readEG=function(){var t=this.readUEG();return 1&t?1+t>>>1:-1*(t>>>1)},t.prototype.readBoolean=function(){return 1===this.readBits(1)},t.prototype.readUByte=function(){return this.readBits(8)},t.prototype.readUShort=function(){return this.readBits(16)},t.prototype.readUInt=function(){return this.readBits(32)},t.prototype.skipScalingList=function(t){var e,i,n=8,r=8;for(e=0;e=t.length)return void i();if(!(t[e].unit.length<32)){var n=this.decrypter.isSync();if(this.decryptAacSample(t,e,i,n),!n)return}}},t.prototype.getAvcEncryptedData=function(t){for(var e=16*Math.floor((t.length-48)/160)+16,i=new Int8Array(e),n=0,r=32;r<=t.length-16;r+=160,n+=16)i.set(t.subarray(r,r+16),n);return i},t.prototype.getAvcDecryptedUnit=function(t,e){e=new Uint8Array(e);for(var i=0,n=32;n<=t.length-16;n+=160,i+=16)t.set(e.subarray(i,i+16),n);return t},t.prototype.decryptAvcSample=function(t,e,i,n,r,o){var a=this.discardEPB(r.data),s=this.getAvcEncryptedData(a),A=this;this.decryptBuffer(s.buffer,function(s){r.data=A.getAvcDecryptedUnit(a,s),o||A.decryptAvcSamples(t,e,i+1,n)})},t.prototype.decryptAvcSamples=function(t,e,i,n){for(;;e++,i=0){if(e>=t.length)return void n();for(var r=t[e].units;!(i>=r.length);i++){var o=r[i];if(!(o.length<=48||1!==o.type&&5!==o.type)){var a=this.decrypter.isSync();if(this.decryptAvcSample(t,e,i,n,o,a),!a)return}}}},t}(),O=D,M={video:0,audio:1,id3:2,text:3},P=function(){function t(e,i,n,r){m(this,t),this.observer=e,this.config=n,this.typeSupported=r,this.remuxer=i,this.sampleAes=null}return t.prototype.setDecryptData=function(t){null!=t&&null!=t.key&&"SAMPLE-AES"===t.method?this.sampleAes=new O(this.observer,this.config,t,this.discardEPB):this.sampleAes=null},t.probe=function(e){var i=t._syncOffset(e);return!(i<0)&&(i&&T.b.warn("MPEG2-TS detected but first sync word found @ offset "+i+", junk ahead ?"),!0)},t._syncOffset=function(t){for(var e=Math.min(1e3,t.length-564),i=0;i>4>1){if((A=o+5+e[o+4])===o+188)continue}else A=o+4;switch(s){case g:a&&(b&&(l=U(b))&&Q(l,!1),b={data:[],size:0}),b&&(b.data.push(e.subarray(A,o+188)),b.size+=o+188-A);break;case m:a&&(y&&(l=U(y))&&(f.isAAC?F(l):k(l)),y={data:[],size:0}),y&&(y.data.push(e.subarray(A,o+188)),y.size+=o+188-A);break;case v:a&&(B&&(l=U(B))&&S(l),B={data:[],size:0}),B&&(B.data.push(e.subarray(A,o+188)),B.size+=o+188-A);break;case 0:a&&(A+=e[A]+1),w=this._pmtId=x(e,A);break;case w:a&&(A+=e[A]+1);var R=C(e,A,!0===this.typeSupported.mpeg||!0===this.typeSupported.mp3,null!=this.sampleAes);g=R.avc,g>0&&(h.pid=g),m=R.audio,m>0&&(f.pid=m,f.isAAC=R.isAAC),v=R.id3,v>0&&(p.pid=v),u&&!d&&(T.b.log("reparse from beginning"),u=!1,o=I-188),d=this.pmtParsed=!0;break;case 17:case 8191:break;default:u=!0}}else this.observer.trigger(E.a.ERROR,{type:_.b.MEDIA_ERROR,details:_.a.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});b&&(l=U(b))?(Q(l,!0),h.pesData=null):h.pesData=b,y&&(l=U(y))?(f.isAAC?F(l):k(l),f.pesData=null):(y&&y.size&&T.b.log("last AAC PES packet truncated,might overlap between fragments"),f.pesData=y),B&&(l=U(B))?(S(l),p.pesData=null):p.pesData=B,null==this.sampleAes?this.remuxer.remux(f,h,p,this._txtTrack,i,n,r):this.decryptAndRemux(f,h,p,this._txtTrack,i,n,r)},t.prototype.decryptAndRemux=function(t,e,i,n,r,o,a){if(t.samples&&t.isAAC){var s=this;this.sampleAes.decryptAacSamples(t.samples,0,function(){s.decryptAndRemuxAvc(t,e,i,n,r,o,a)})}else this.decryptAndRemuxAvc(t,e,i,n,r,o,a)},t.prototype.decryptAndRemuxAvc=function(t,e,i,n,r,o,a){if(e.samples){var s=this;this.sampleAes.decryptAvcSamples(e.samples,0,0,function(){s.remuxer.remux(t,e,i,n,r,o,a)})}else this.remuxer.remux(t,e,i,n,r,o,a)},t.prototype.destroy=function(){this._initPTS=this._initDTS=void 0,this._duration=0},t.prototype._parsePAT=function(t,e){return(31&t[e+10])<<8|t[e+11]},t.prototype._parsePMT=function(t,e,i,n){var r,o,a,s,A={audio:-1,avc:-1,id3:-1,isAAC:!0};for(r=(15&t[e+1])<<8|t[e+2],o=e+3+r-4,a=(15&t[e+10])<<8|t[e+11],e+=12+a;e1;){var u=new Uint8Array(c[0].length+c[1].length);u.set(c[0]),u.set(c[1],c[0].length),c[0]=u,c.splice(1,1)}if(e=c[0],1===(e[0]<<16)+(e[1]<<8)+e[2]){if((n=(e[4]<<8)+e[5])&&n>t.size-6)return null;i=e[7],192&i&&(a=536870912*(14&e[9])+4194304*(255&e[10])+16384*(254&e[11])+128*(255&e[12])+(254&e[13])/2,a>4294967295&&(a-=8589934592),64&i?(s=536870912*(14&e[14])+4194304*(255&e[15])+16384*(254&e[16])+128*(255&e[17])+(254&e[18])/2,s>4294967295&&(s-=8589934592),a-s>54e5&&(T.b.warn(Math.round((a-s)/9e4)+"s delta between PTS and DTS, align them"),a=s)):s=a),r=e[8],A=r+9,t.size-=A,o=new Uint8Array(t.size);for(var d=0,h=c.length;df){A-=f;continue}e=e.subarray(A),f-=A,A=0}o.set(e,l),l+=f}return n&&(n-=r+3),{data:o,pts:a,dts:s,len:n}}return null},t.prototype.pushAccesUnit=function(t,e){if(t.units.length&&t.frame){var i=e.samples,n=i.length;!this.config.forceKeyFrameOnDiscontinuity||!0===t.key||e.sps&&(n||this.contiguous)?(t.id=n,i.push(t)):e.dropped++}t.debug.length&&T.b.log(t.pts+"/"+t.dts+":"+t.debug)},t.prototype._parseAVCPES=function(t,e){var i,n,r,o=this,a=this._avcTrack,s=this._parseAVCNALu(t.data),A=this.avcSample,l=!1,c=this.pushAccesUnit.bind(this),u=function(t,e,i,n){return{key:t,pts:e,dts:i,units:[],debug:n}};t.data=null,A&&s.length&&!a.audFound&&(c(A,a),A=this.avcSample=u(!1,t.pts,t.dts,"")),s.forEach(function(e){switch(e.type){case 1:n=!0,A||(A=o.avcSample=u(!0,t.pts,t.dts,"")),A.frame=!0;var s=e.data;if(l&&s.length>4){var d=new H(s).readSliceType();2!==d&&4!==d&&7!==d&&9!==d||(A.key=!0)}break;case 5:n=!0,A||(A=o.avcSample=u(!0,t.pts,t.dts,"")),A.key=!0,A.frame=!0;break;case 6:n=!0,i=new H(o.discardEPB(e.data)),i.readUByte();for(var h=0,f=0,p=!1,g=0;!p&&i.bytesAvailable>1;){h=0;do{g=i.readUByte(),h+=g}while(255===g);f=0;do{g=i.readUByte(),f+=g}while(255===g);if(4===h&&0!==i.bytesAvailable){p=!0;if(181===i.readUByte()){if(49===i.readUShort()){if(1195456820===i.readUInt()){if(3===i.readUByte()){var m=i.readUByte(),v=i.readUByte(),w=31&m,b=[m,v];for(r=0;r0){if(e.pts>=t[i-1].pts)t.push(e);else for(var n=i-1;n>=0;n--)if(e.pts=0)n={data:t.subarray(d,a-l-1),type:o},u.push(n);else{var h=this._getLastNalUnit();if(h&&(c&&a<=4-c&&h.state&&(h.data=h.data.subarray(0,h.data.byteLength-c)),(i=a-l-1)>0)){var f=new Uint8Array(h.data.byteLength+i);f.set(h.data,0),f.set(t.subarray(0,i),h.data.byteLength),h.data=f}}a=0&&l>=0&&(n={data:t.subarray(d,s),type:o,state:l},u.push(n)),0===u.length){var p=this._getLastNalUnit();if(p){var g=new Uint8Array(p.data.byteLength+t.byteLength);g.set(p.data,0),g.set(t,p.data.byteLength),p.data=g}}return A.naluState=l,u},t.prototype.discardEPB=function(t){for(var e,i,n=t.byteLength,r=[],o=1;o1&&(T.b.log("AAC: align PTS for overlapping frames by "+Math.round((v-u)/90)),u=v)}for(;n>24&255,e[1]=n>>16&255,e[2]=n>>8&255,e[3]=255&n,e.set(t,4),r=0,n=8;r>24&255,e>>16&255,e>>8&255,255&e,n>>24,n>>16&255,n>>8&255,255&n,r>>24,r>>16&255,r>>8&255,255&r,85,196,0,0]))},t.mdia=function(e){return t.box(t.types.mdia,t.mdhd(e.timescale,e.duration),t.hdlr(e.type),t.minf(e))},t.mfhd=function(e){return t.box(t.types.mfhd,new Uint8Array([0,0,0,0,e>>24,e>>16&255,e>>8&255,255&e]))},t.minf=function(e){return"audio"===e.type?t.box(t.types.minf,t.box(t.types.smhd,t.SMHD),t.DINF,t.stbl(e)):t.box(t.types.minf,t.box(t.types.vmhd,t.VMHD),t.DINF,t.stbl(e))},t.moof=function(e,i,n){return t.box(t.types.moof,t.mfhd(e),t.traf(n,i))},t.moov=function(e){for(var i=e.length,n=[];i--;)n[i]=t.trak(e[i]);return t.box.apply(null,[t.types.moov,t.mvhd(e[0].timescale,e[0].duration)].concat(n).concat(t.mvex(e)))},t.mvex=function(e){for(var i=e.length,n=[];i--;)n[i]=t.trex(e[i]);return t.box.apply(null,[t.types.mvex].concat(n))},t.mvhd=function(e,i){i*=e;var n=Math.floor(i/(W+1)),r=Math.floor(i%(W+1)),o=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,e>>24&255,e>>16&255,e>>8&255,255&e,n>>24,n>>16&255,n>>8&255,255&n,r>>24,r>>16&255,r>>8&255,255&r,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return t.box(t.types.mvhd,o)},t.sdtp=function(e){var i,n,r=e.samples||[],o=new Uint8Array(4+r.length);for(n=0;n>>8&255),o.push(255&r),o=o.concat(Array.prototype.slice.call(n));for(i=0;i>>8&255),a.push(255&r),a=a.concat(Array.prototype.slice.call(n));var s=t.box(t.types.avcC,new Uint8Array([1,o[3],o[4],o[5],255,224|e.sps.length].concat(o).concat([e.pps.length]).concat(a))),A=e.width,l=e.height,c=e.pixelRatio[0],u=e.pixelRatio[1];return t.box(t.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,A>>8&255,255&A,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),s,t.box(t.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),t.box(t.types.pasp,new Uint8Array([c>>24,c>>16&255,c>>8&255,255&c,u>>24,u>>16&255,u>>8&255,255&u])))},t.esds=function(t){var e=t.config.length;return new Uint8Array([0,0,0,0,3,23+e,0,1,0,4,15+e,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([e]).concat(t.config).concat([6,1,2]))},t.mp4a=function(e){var i=e.samplerate;return t.box(t.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,e.channelCount,0,16,0,0,0,0,i>>8&255,255&i,0,0]),t.box(t.types.esds,t.esds(e)))},t.mp3=function(e){var i=e.samplerate;return t.box(t.types[".mp3"],new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,e.channelCount,0,16,0,0,0,0,i>>8&255,255&i,0,0]))},t.stsd=function(e){return"audio"===e.type?e.isAAC||"mp3"!==e.codec?t.box(t.types.stsd,t.STSD,t.mp4a(e)):t.box(t.types.stsd,t.STSD,t.mp3(e)):t.box(t.types.stsd,t.STSD,t.avc1(e))},t.tkhd=function(e){var i=e.id,n=e.duration*e.timescale,r=e.width,o=e.height,a=Math.floor(n/(W+1)),s=Math.floor(n%(W+1));return t.box(t.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,i>>24&255,i>>16&255,i>>8&255,255&i,0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a,s>>24,s>>16&255,s>>8&255,255&s,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,r>>8&255,255&r,0,0,o>>8&255,255&o,0,0]))},t.traf=function(e,i){var n=t.sdtp(e),r=e.id,o=Math.floor(i/(W+1)),a=Math.floor(i%(W+1));return t.box(t.types.traf,t.box(t.types.tfhd,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r])),t.box(t.types.tfdt,new Uint8Array([1,0,0,0,o>>24,o>>16&255,o>>8&255,255&o,a>>24,a>>16&255,a>>8&255,255&a])),t.trun(e,n.length+16+20+8+16+8+8),n)},t.trak=function(e){return e.duration=e.duration||4294967295,t.box(t.types.trak,t.tkhd(e),t.mdia(e))},t.trex=function(e){var i=e.id;return t.box(t.types.trex,new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))},t.trun=function(e,i){var n,r,o,a,s,A,l=e.samples||[],c=l.length,u=12+16*c,d=new Uint8Array(u);for(i+=8+u,d.set([0,0,15,1,c>>>24&255,c>>>16&255,c>>>8&255,255&c,i>>>24&255,i>>>16&255,i>>>8&255,255&i],0),n=0;n>>24&255,o>>>16&255,o>>>8&255,255&o,a>>>24&255,a>>>16&255,a>>>8&255,255&a,s.isLeading<<2|s.dependsOn,s.isDependedOn<<6|s.hasRedundancy<<4|s.paddingValue<<1|s.isNonSync,61440&s.degradPrio,15&s.degradPrio,A>>>24&255,A>>>16&255,A>>>8&255,255&A],12+16*n);return t.box(t.types.trun,d)},t.initSegment=function(e){t.types||t.init();var i,n=t.moov(e);return i=new Uint8Array(t.FTYP.byteLength+n.byteLength),i.set(t.FTYP),i.set(n,t.FTYP.byteLength),i},t}(),Y=j,J=function(){function t(e,i,n,r){y(this,t),this.observer=e,this.config=i,this.typeSupported=n;var o=navigator.userAgent;this.isSafari=r&&r.indexOf("Apple")>-1&&o&&!o.match("CriOS"),this.ISGenerated=!1}return t.prototype.destroy=function(){},t.prototype.resetTimeStamp=function(t){this._initPTS=this._initDTS=t},t.prototype.resetInitSegment=function(){this.ISGenerated=!1},t.prototype.remux=function(t,e,i,n,r,o,a){if(this.ISGenerated||this.generateIS(t,e,r),this.ISGenerated){var s=t.samples.length,A=e.samples.length,l=r,c=r;if(s&&A){var u=(t.samples[0].dts-e.samples[0].dts)/e.inputTimeScale;l+=Math.max(0,u),c+=Math.max(0,-u)}if(s){t.timescale||(T.b.warn("regenerate InitSegment as audio detected"),this.generateIS(t,e,r));var d=this.remuxAudio(t,l,o,a);if(A){var h=void 0;d&&(h=d.endPTS-d.startPTS),e.timescale||(T.b.warn("regenerate InitSegment as video detected"),this.generateIS(t,e,r)),this.remuxVideo(e,c,o,h,a)}}else{var f=void 0;A&&(f=this.remuxVideo(e,c,o,a)),f&&t.codec&&this.remuxEmptyAudio(t,l,o,f)}}i.samples.length&&this.remuxID3(i,r),n.samples.length&&this.remuxText(n,r),this.observer.trigger(E.a.FRAG_PARSED)},t.prototype.generateIS=function(t,e,i){var n,r,o=this.observer,a=t.samples,s=e.samples,A=this.typeSupported,l="audio/mp4",c={},u={tracks:c},d=void 0===this._initPTS;if(d&&(n=r=1/0),t.config&&a.length&&(t.timescale=t.samplerate,T.b.log("audio sampling rate : "+t.samplerate),t.isAAC||(A.mpeg?(l="audio/mpeg",t.codec=""):A.mp3&&(t.codec="mp3")),c.audio={container:l,codec:t.codec,initSegment:!t.isAAC&&A.mpeg?new Uint8Array:Y.initSegment([t]),metadata:{channelCount:t.channelCount}},d&&(n=r=a[0].pts-t.inputTimeScale*i)),e.sps&&e.pps&&s.length){var h=e.inputTimeScale;e.timescale=h,c.video={container:"video/mp4",codec:e.codec,initSegment:Y.initSegment([e]),metadata:{width:e.width,height:e.height}},d&&(n=Math.min(n,s[0].pts-h*i),r=Math.min(r,s[0].dts-h*i),this.observer.trigger(E.a.INIT_PTS_FOUND,{initPTS:n}))}Object.keys(c).length?(o.trigger(E.a.FRAG_PARSING_INIT_SEGMENT,u),this.ISGenerated=!0,d&&(this._initPTS=n,this._initDTS=r)):o.trigger(E.a.ERROR,{type:_.b.MEDIA_ERROR,details:_.a.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})},t.prototype.remuxVideo=function(t,e,i,n,r){var o,a,s,A,l,c,u,d=8,h=t.timescale,f=t.samples,p=[],g=f.length,m=this._PTSNormalize,v=this._initDTS,w=this.nextAvcDts,b=this.isSafari;b&&(i|=f.length&&w&&(r&&Math.abs(e-w/h)<.1||Math.abs(f[0].pts-w-v)1?T.b.log("AVC:"+C+" ms hole between fragments detected,filling it"):C<-1&&T.b.log("AVC:"+-C+" ms overlapping between fragments detected"),l=w,f[0].dts=l,A=Math.max(A-C,w),f[0].pts=A,T.b.log("Video/PTS/DTS adjusted: "+Math.round(A/90)+"/"+Math.round(l/90)+",delta:"+C+" ms")),x=f[f.length-1],u=Math.max(x.dts,0),c=Math.max(x.pts,0,u),b&&(o=Math.round((u-l)/(f.length-1)));for(var U=0,Q=0,F=0;F0?D-1:D].dts;if(j.stretchShortVideoTrack){var q=j.maxBufferHole,Z=j.maxSeekHole,$=Math.floor(Math.min(q,Z)*h),tt=(n?A+n*h:this.nextAudioPts)-O.pts;tt>$?(o=tt-J,o<0&&(o=J),T.b.log("It is approximately "+tt/90+" ms to the next segment; using duration "+o/90+" ms for the last video frame.")):o=J}else o=J}K=Math.round(O.pts-O.dts)}p.push({size:P,duration:o,cts:K,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:O.key?2:1,isNonSync:O.key?0:1}})}this.nextAvcDts=u+o;var et=t.dropped;if(t.len=0,t.nbNalu=0,t.dropped=0,p.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var it=p[0].flags;it.dependsOn=2,it.isNonSync=0}t.samples=p,s=Y.moof(t.sequenceNumber++,l,t),t.samples=[];var nt={data1:s,data2:a,startPTS:A/h,endPTS:(c+o)/h,startDTS:l/h,endDTS:this.nextAvcDts/h,type:"video",nb:p.length,dropped:et};return this.observer.trigger(E.a.FRAG_PARSING_DATA,nt),nt},t.prototype.remuxAudio=function(t,e,i,n){var r,o,a,s,A,l,c,u=t.inputTimeScale,d=t.timescale,h=u/d,f=t.isAAC?1024:1152,p=f*h,g=this._PTSNormalize,m=this._initDTS,v=!t.isAAC&&this.typeSupported.mpeg,w=t.samples,b=[],y=this.nextAudioPts;if(i|=w.length&&y&&(n&&Math.abs(e-y/u)<.1||Math.abs(w[0].pts-y-m)<20*p),w.forEach(function(t){t.pts=t.dts=g(t.pts-m,e*u)}),w=w.filter(function(t){return t.pts>=0}),0!==w.length){if(i||(y=n?e*u:w[0].pts),t.isAAC)for(var B=this.config.maxAudioFramesDrift,x=0,C=y;x=B*p&&k<1e4&&C){var S=Math.round(U/p);T.b.warn("Injecting "+S+" audio frame @ "+(C/u).toFixed(3)+"s due to "+Math.round(1e3*U/u)+" ms gap.");for(var I=0;I0&&M<1e4)P=Math.round((O-y)/p),T.b.log(M+" ms hole between AAC samples detected,filling it"),P>0&&(a=X.getSilentFrame(t.manifestCodec||t.codec,t.channelCount),a||(a=D.subarray()),t.len+=P*a.length);else if(M<-12){T.b.log("drop overlapping AAC sample, expected/parsed/delta:"+(y/u).toFixed(3)+"s/"+(O/u).toFixed(3)+"s/"+-M+"ms"),t.len-=D.byteLength;continue}O=y}if(l=O,!(t.len>0))return;var K=v?t.len:t.len+8;r=v?0:8;try{s=new Uint8Array(K)}catch(t){return void this.observer.trigger(E.a.ERROR,{type:_.b.MUX_ERROR,details:_.a.REMUX_ALLOC_ERROR,fatal:!1,bytes:K,reason:"fail allocating audio mdat "+K})}if(!v){new DataView(s.buffer).setUint32(0,K),s.set(Y.types.mdat,4)}for(var G=0;G=2&&(V=b[W-2].duration,o.duration=V),W){this.nextAudioPts=y=c+h*V,t.len=0,t.samples=b,A=v?new Uint8Array:Y.moof(t.sequenceNumber++,l/h,t),t.samples=[];var j=l/u,J=y/u,q={data1:A,data2:s,startPTS:j,endPTS:J,startDTS:j,endDTS:J,type:"audio",nb:W};return this.observer.trigger(E.a.FRAG_PARSING_DATA,q),q}return null}},t.prototype.remuxEmptyAudio=function(t,e,i,n){var r=t.inputTimeScale,o=t.samplerate?t.samplerate:r,a=r/o,s=this.nextAudioPts,A=(void 0!==s?s:n.startDTS*r)+this._initDTS,l=n.endDTS*r+this._initDTS,c=1024*a,u=Math.ceil((l-A)/c),d=X.getSilentFrame(t.manifestCodec||t.codec,t.channelCount);if(T.b.warn("remux empty Audio"),!d)return void T.b.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!");for(var h=[],f=0;f4294967296;)t+=i;return t},t}(),q=J,Z=function(){function t(e){B(this,t),this.observer=e}return t.prototype.destroy=function(){},t.prototype.resetTimeStamp=function(){},t.prototype.resetInitSegment=function(){},t.prototype.remux=function(t,e,i,n,r,o,a,s){var A=this.observer,l="";t&&(l+="audio"),e&&(l+="video"),A.trigger(E.a.FRAG_PARSING_DATA,{data1:s,startPTS:r,startDTS:r,type:l,nb:1,dropped:0}),A.trigger(E.a.FRAG_PARSED)},t}(),$=Z,tt=function(){function t(e,i,n,r){x(this,t),this.observer=e,this.typeSupported=i,this.config=n,this.vendor=r}return t.prototype.destroy=function(){var t=this.demuxer;t&&t.destroy()},t.prototype.push=function(t,e,i,n,r,o,a,s,A,l,c,u){if(t.byteLength>0&&null!=e&&null!=e.key&&"AES-128"===e.method){var d=this.decrypter;null==d&&(d=this.decrypter=new C.a(this.observer,this.config));var h,f=this;try{h=performance.now()}catch(t){h=Date.now()}d.decrypt(t,e.key.buffer,e.iv.buffer,function(t){var d;try{d=performance.now()}catch(t){d=Date.now()}f.observer.trigger(E.a.FRAG_DECRYPTED,{stats:{tstart:h,tdecrypt:d}}),f.pushDecrypted(new Uint8Array(t),e,new Uint8Array(i),n,r,o,a,s,A,l,c,u)})}else this.pushDecrypted(new Uint8Array(t),e,new Uint8Array(i),n,r,o,a,s,A,l,c,u)},t.prototype.pushDecrypted=function(t,e,i,n,r,o,a,s,A,l,c,u){var d=this.demuxer;if(!d||a&&!this.probe(t)){for(var h=this.observer,f=this.typeSupported,p=this.config,g=[{demux:K,remux:q},{demux:I,remux:$},{demux:F,remux:q},{demux:z,remux:q}],m=0,v=g.length;me?n.start+n.duration:Math.max(n.start-r.duration,0):i>e?(n.duration=o-n.start,n.duration<0&&It.b.warn("negative duration computed for frag "+n.sn+",level "+n.level+", there should be some duration drift between playlist and fragment!")):(r.duration=n.start-o,r.duration<0&&It.b.warn("negative duration computed for frag "+r.sn+",level "+r.level+", there should be some duration drift between playlist and fragment!"))}function b(t,e,i,n,r,o){var a=i;if(!isNaN(e.startPTS)){var s=Math.abs(e.startPTS-i);isNaN(e.deltaPTS)?e.deltaPTS=s:e.deltaPTS=Math.max(s,e.deltaPTS),a=Math.max(i,e.startPTS),i=Math.min(i,e.startPTS),n=Math.max(n,e.endPTS),r=Math.min(r,e.startDTS),o=Math.max(o,e.endDTS)}var A=i-e.start;e.start=e.startPTS=i,e.maxStartPTS=a,e.endPTS=n,e.startDTS=r,e.endDTS=o,e.duration=n-i;var l=e.sn;if(!t||lt.endSN)return 0;var c,u,d;for(c=l-t.startSN,u=t.fragments,u[c]=e,d=c;d>0;d--)w(u,d,d-1);for(d=c;d=0&&oe?-1:0})}function E(t,e,i){var n=!1;return e&&e.details&&i&&(i.endCC>i.startCC||t&&t.cc59?e(i[1],i[2],0,i[4]):e(0,i[1],i[2],i[4]):null}function st(){this.values=Object.create(null)}function At(t,e,i,n){var r=n?t.split(n):[t];for(var o in r)if("string"==typeof r[o]){var a=r[o].split(i);if(2===a.length){var s=a[0],A=a[1];e(s,A)}}}function lt(t,e,i){function n(){var e=at(t);if(null===e)throw new Error("Malformed timestamp: "+o);return t=t.replace(/^[^\sa-zA-Z-]+/,""),e}function r(){t=t.replace(/^\s+/,"")}var o=t;if(r(),e.startTime=n(),r(),"--\x3e"!==t.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): "+o);t=t.substr(3),r(),e.endTime=n(),r(),function(t,e){var n=new st;At(t,function(t,e){switch(t){case"region":for(var r=i.length-1;r>=0;r--)if(i[r].id===e){n.set(t,i[r].region);break}break;case"vertical":n.alt(t,e,["rl","lr"]);break;case"line":var o=e.split(","),a=o[0];n.integer(t,a),n.percent(t,a)&&n.set("snapToLines",!1),n.alt(t,a,["auto"]),2===o.length&&n.alt("lineAlign",o[1],["start",Ze,"end"]);break;case"position":o=e.split(","),n.percent(t,o[0]),2===o.length&&n.alt("positionAlign",o[1],["start",Ze,"end","line-left","line-right","auto"]);break;case"size":n.percent(t,e);break;case"align":n.alt(t,e,["start",Ze,"end","left","right"])}},/:/,/\s/),e.region=n.get("region",null),e.vertical=n.get("vertical","");var r=n.get("line","auto");"auto"===r&&-1===qe.line&&(r=-1),e.line=r,e.lineAlign=n.get("lineAlign","start"),e.snapToLines=n.get("snapToLines",!0),e.size=n.get("size",100),e.align=n.get("align",Ze);var o=n.get("position","auto");"auto"===o&&50===qe.position&&(o="start"===e.align||"left"===e.align?0:"end"===e.align||"right"===e.align?100:50),e.position=o}(t,e)}function ct(t){return t.replace(//gi,"\n")}function ut(t,e,i,n){for(var r,o,a,s,A,l=window.VTTCue||window.TextTrackCue,c=0;c=16?s--:s++,navigator.userAgent.match(/Firefox\//)?o.line=c+1:o.line=c>7?c-2:c+1,o.align="left",o.position=Math.max(0,Math.min(100,s/32*100+(navigator.userAgent.match(/Firefox\//)?50:0))),t.addCue(o)}}function dt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ht(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ft(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function pt(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function gt(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function mt(t){if(t&&t.cues)for(;t.cues.length>0;)t.removeCue(t.cues[0])}function vt(t,e){return t&&t.label===e.name&&!(t.textTrack1||t.textTrack2)}function wt(t,e,i,n){return Math.min(e,n)-Math.max(t,i)}function bt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function yt(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function Bt(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function xt(t){for(var e=[],i=0;i1?i-1:0),o=1;oNumber.MAX_SAFE_INTEGER?1/0:e},t.prototype.hexadecimalInteger=function(t){if(this[t]){var e=(this[t]||"0x").slice(2);e=(1&e.length?"0":"")+e;for(var i=new Uint8Array(e.length/2),n=0;nNumber.MAX_SAFE_INTEGER?1/0:e},t.prototype.decimalFloatingPoint=function(t){return parseFloat(this[t])},t.prototype.enumeratedString=function(t){return this[t]},t.prototype.decimalResolution=function(t){var e=Ht.exec(this[t]);if(null!==e)return{width:parseInt(e[1],10),height:parseInt(e[2],10)}},t.parseAttrList=function(t){var e,i={};for(Dt.lastIndex=0;null!==(e=Dt.exec(t));){var n=e[2];0===n.indexOf('"')&&n.lastIndexOf('"')===n.length-1&&(n=n.slice(1,-1)),i[e[1]]=n}return i},t}(),Mt=Ot,Pt={audio:{a3ds:!0,"ac-3":!0,"ac-4":!0,alac:!0,alaw:!0,dra1:!0,"dts+":!0,"dts-":!0,dtsc:!0,dtse:!0,dtsh:!0,"ec-3":!0,enca:!0,g719:!0,g726:!0,m4ae:!0,mha1:!0,mha2:!0,mhm1:!0,mhm2:!0,mlpa:!0,mp4a:!0,"raw ":!0,Opus:!0,samr:!0,sawb:!0,sawp:!0,sevc:!0,sqcp:!0,ssmv:!0,twos:!0,ulaw:!0},video:{avc1:!0,avc2:!0,avc3:!0,avc4:!0,avcp:!0,drac:!0,dvav:!0,dvhe:!0,encv:!0,hev1:!0,hvc1:!0,mjp2:!0,mp4v:!0,mvc1:!0,mvc2:!0,mvc3:!0,mvc4:!0,resv:!0,rv60:!0,s263:!0,svc1:!0,svc2:!0,"vc-1":!0,vp08:!0,vp09:!0}},Kt=function(){function t(t,e){for(var i=0;i>8*(15-i)&255;return e},t.prototype.fragmentDecryptdataFromLevelkey=function(t,e){var i=t;return t&&t.method&&t.uri&&!t.iv&&(i=new Wt,i.method=t.method,i.baseuri=t.baseuri,i.reluri=t.reluri,i.iv=this.createInitializationVector(e)),i},t.prototype.cloneObj=function(t){return JSON.parse(JSON.stringify(t))},Kt(t,[{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=Ft.a.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},set:function(t){this._url=t}},{key:"programDateTime",get:function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime}},{key:"byteRange",get:function(){if(!this._byteRange){var t=this._byteRange=[];if(this.rawByteRange){var e=this.rawByteRange.split("@",2);if(1===e.length){var i=this.lastByteRangeEndOffset;t[0]=i||0}else t[0]=parseInt(e[1]);t[1]=parseInt(e[0])+t[0]}}return this._byteRange}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}}]),t}(),Yt=function(t){function e(i){l(this,e);var n=s(this,t.call(this,i,kt.a.MANIFEST_LOADING,kt.a.LEVEL_LOADING,kt.a.AUDIO_TRACK_LOADING,kt.a.SUBTITLE_TRACK_LOADING));return n.loaders={},n}return A(e,t),e.prototype.destroy=function(){for(var t in this.loaders){var e=this.loaders[t];e&&e.destroy()}this.loaders={},Nt.prototype.destroy.call(this)},e.prototype.onManifestLoading=function(t){this.load(t.url,{type:"manifest"})},e.prototype.onLevelLoading=function(t){this.load(t.url,{type:"level",level:t.level,id:t.id})},e.prototype.onAudioTrackLoading=function(t){this.load(t.url,{type:"audioTrack",id:t.id})},e.prototype.onSubtitleTrackLoading=function(t){this.load(t.url,{type:"subtitleTrack",id:t.id})},e.prototype.load=function(t,e){var i=this.loaders[e.type];if(void 0!==i){var n=i.context;if(n&&n.url===t)return void It.b.trace("playlist request ongoing");It.b.warn("abort previous loader for type:"+e.type),i.abort()}var r=this.hls.config,o=void 0,a=void 0,s=void 0,A=void 0;"manifest"===e.type?(o=r.manifestLoadingMaxRetry,a=r.manifestLoadingTimeOut,s=r.manifestLoadingRetryDelay,A=r.manifestLoadingMaxRetryTimeout):"level"===e.type?(o=0,a=r.levelLoadingTimeOut):(o=r.levelLoadingMaxRetry,a=r.levelLoadingTimeOut,s=r.levelLoadingRetryDelay,A=r.levelLoadingMaxRetryTimeout,It.b.log("loading playlist for "+e.type+" "+(e.level||e.id))),i=this.loaders[e.type]=e.loader=void 0!==r.pLoader?new r.pLoader(r):new r.loader(r),e.url=t,e.responseType="";var l=void 0,c=void 0;l={timeout:a,maxRetry:o,retryDelay:s,maxRetryDelay:A},c={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},i.load(e,l,c)},e.prototype.resolve=function(t,e){return Ft.a.buildAbsoluteURL(e,t,{alwaysNormalize:!0})},e.prototype.parseMasterPlaylist=function(t,e){var i=[],n=void 0;for(Gt.lastIndex=0;null!=(n=Gt.exec(t));){var r={},a=r.attrs=new Mt(n[1]);r.url=this.resolve(n[2],e);var s=a.decimalResolution("RESOLUTION");s&&(r.width=s.width,r.height=s.height),r.bitrate=a.decimalInteger("AVERAGE-BANDWIDTH")||a.decimalInteger("BANDWIDTH"),r.name=a.NAME,function(t,e){["video","audio"].forEach(function(i){var n=t.filter(function(t){return o(t,i)});if(n.length){var r=n.filter(function(t){return 0===t.lastIndexOf("avc1",0)||0===t.lastIndexOf("mp4a",0)});e[i+"Codec"]=r.length>0?r[0]:n[0],t=t.filter(function(t){return-1===n.indexOf(t)})}}),e.unknownCodecs=t}([].concat((a.CODECS||"").split(/[ ,]+/)),r),r.videoCodec&&-1!==r.videoCodec.indexOf("avc1")&&(r.videoCodec=this.avc1toavcoti(r.videoCodec)),i.push(r)}return i},e.prototype.parseMasterPlaylistMedia=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=void 0,o=[],a=0;for(zt.lastIndex=0;null!==(r=zt.exec(t));){var s={},A=new Mt(r[1]);if(A.TYPE===i){if(s.groupId=A["GROUP-ID"],s.name=A.NAME,s.type=i,s.default="YES"===A.DEFAULT,s.autoselect="YES"===A.AUTOSELECT,s.forced="YES"===A.FORCED,A.URI&&(s.url=this.resolve(A.URI,e)),s.lang=A.LANGUAGE,s.name||(s.name=s.lang),n.length){var l=c(n,s.groupId);s.audioCodec=l?l.codec:n[0].codec}s.id=a++,o.push(s)}}return o},e.prototype.avc1toavcoti=function(t){var e,i=t.split(".");return i.length>2?(e=i.shift()+".",e+=parseInt(i.shift()).toString(16),e+=("000"+parseInt(i.shift()).toString(16)).substr(-4)):e=t,e},e.prototype.parseLevelPlaylist=function(t,e,i,n){var r,o,a=0,s=0,A={type:null,version:null,url:e,fragments:[],live:!0,startSN:0},l=new Wt,c=0,u=null,d=new jt;for(Vt.lastIndex=0;null!==(r=Vt.exec(t));){var h=r[1];if(h){d.duration=parseFloat(h);var f=(" "+r[2]).slice(1);d.title=f||null,d.tagList.push(f?["INF",h,f]:["INF",h])}else if(r[3]){if(!isNaN(d.duration)){var p=a++;d.type=n,d.start=s,d.levelkey=l,d.sn=p,d.level=i,d.cc=c,d.baseurl=e,d.relurl=(" "+r[3]).slice(1),A.fragments.push(d),u=d,s+=d.duration,d=new jt}}else if(r[4]){if(d.rawByteRange=(" "+r[4]).slice(1),u){var g=u.byteRangeEndOffset;g&&(d.lastByteRangeEndOffset=g)}}else if(r[5])d.rawProgramDateTime=(" "+r[5]).slice(1),d.tagList.push(["PROGRAM-DATE-TIME",d.rawProgramDateTime]),void 0===A.programDateTime&&(A.programDateTime=new Date(new Date(Date.parse(r[5]))-1e3*s));else{for(r=r[0].match(Xt),o=1;o=0&&(l.method=y,l.baseuri=e,l.reluri=B,l.key=null,l.iv=x));break;case"START":var E=m,_=new Mt(E),C=_.decimalFloatingPoint("TIME-OFFSET");isNaN(C)||(A.startTimeOffset=C);break;case"MAP":var T=new Mt(m);d.relurl=T.URI,d.rawByteRange=T.BYTERANGE,d.baseurl=e,d.level=i,d.type=n,d.sn="initSegment",A.initSegment=d,d=new jt;break;default:It.b.warn("line parsed but not handled: "+r)}}}return d=u,d&&!d.relurl&&(A.fragments.pop(),s-=d.duration),A.totalduration=s,A.averagetargetduration=s/A.fragments.length,A.endSN=a-1,A.startCC=A.fragments[0]?A.fragments[0].cc:0,A.endCC=c,A},e.prototype.loadsuccess=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=t.data,o=t.url,a=i.type,s=i.id,A=i.level,l=this.hls;if(this.loaders[a]=void 0,void 0!==o&&0!==o.indexOf("data:")||(o=i.url),e.tload=performance.now(),0===r.indexOf("#EXTM3U"))if(r.indexOf("#EXTINF:")>0){var c="audioTrack"!==a&&"subtitleTrack"!==a,u=isNaN(A)?isNaN(s)?0:s:A,d=this.parseLevelPlaylist(r,o,u,"audioTrack"===a?"audio":"subtitleTrack"===a?"subtitle":"main");d.tload=e.tload,"manifest"===a&&l.trigger(kt.a.MANIFEST_LOADED,{levels:[{url:o,details:d}],audioTracks:[],url:o,stats:e,networkDetails:n}),e.tparsed=performance.now(),d.targetduration?c?l.trigger(kt.a.LEVEL_LOADED,{details:d,level:A||0,id:s||0,stats:e,networkDetails:n}):"audioTrack"===a?l.trigger(kt.a.AUDIO_TRACK_LOADED,{details:d,id:s,stats:e,networkDetails:n}):"subtitleTrack"===a&&l.trigger(kt.a.SUBTITLE_TRACK_LOADED,{details:d,id:s,stats:e,networkDetails:n}):l.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.MANIFEST_PARSING_ERROR,fatal:!0,url:o,reason:"invalid targetduration",networkDetails:n})}else{var h=this.parseMasterPlaylist(r,o);if(h.length){var f=h.map(function(t){return{id:t.attrs.AUDIO,codec:t.audioCodec}}),p=this.parseMasterPlaylistMedia(r,o,"AUDIO",f),g=this.parseMasterPlaylistMedia(r,o,"SUBTITLES");if(p.length){var m=!1;p.forEach(function(t){t.url||(m=!0)}),!1===m&&h[0].audioCodec&&!h[0].attrs.AUDIO&&(It.b.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),p.unshift({type:"main",name:"main"}))}l.trigger(kt.a.MANIFEST_LOADED,{levels:h,audioTracks:p,subtitles:g,url:o,stats:e,networkDetails:n})}else l.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.MANIFEST_PARSING_ERROR,fatal:!0,url:o,reason:"no level found in manifest",networkDetails:n})}else l.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.MANIFEST_PARSING_ERROR,fatal:!0,url:o,reason:"no EXTM3U delimiter",networkDetails:n})},e.prototype.loaderror=function(t,e){var i,n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=e.loader;switch(e.type){case"manifest":i=St.a.MANIFEST_LOAD_ERROR,n=!0;break;case"level":i=St.a.LEVEL_LOAD_ERROR,n=!1;break;case"audioTrack":i=St.a.AUDIO_TRACK_LOAD_ERROR,n=!1}o&&(o.abort(),this.loaders[e.type]=void 0),this.hls.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:i,fatal:n,url:o.url,loader:o,response:t,context:e,networkDetails:r})},e.prototype.loadtimeout=function(t,e){var i,n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=e.loader;switch(e.type){case"manifest":i=St.a.MANIFEST_LOAD_TIMEOUT,n=!0;break;case"level":i=St.a.LEVEL_LOAD_TIMEOUT,n=!1;break;case"audioTrack":i=St.a.AUDIO_TRACK_LOAD_TIMEOUT,n=!1}o&&(o.abort(),this.loaders[e.type]=void 0),this.hls.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:i,fatal:n,url:o.url,loader:o,context:e,networkDetails:r})},e}(Nt),Jt=Yt,qt=function(t){function e(i){u(this,e);var n=d(this,t.call(this,i,kt.a.FRAG_LOADING));return n.loaders={},n}return h(e,t),e.prototype.destroy=function(){var t=this.loaders;for(var e in t){var i=t[e];i&&i.destroy()}this.loaders={},Nt.prototype.destroy.call(this)},e.prototype.onFragLoading=function(t){var e=t.frag,i=e.type,n=this.loaders[i],r=this.hls.config;e.loaded=0,n&&(It.b.warn("abort previous fragment loader for type:"+i),n.abort()),n=this.loaders[i]=e.loader=void 0!==r.fLoader?new r.fLoader(r):new r.loader(r);var o=void 0,a=void 0,s=void 0;o={url:e.url,frag:e,responseType:"arraybuffer",progressData:!1};var A=e.byteRangeStartOffset,l=e.byteRangeEndOffset;isNaN(A)||isNaN(l)||(o.rangeStart=A,o.rangeEnd=l),a={timeout:r.fragLoadingTimeOut,maxRetry:0,retryDelay:0,maxRetryDelay:r.fragLoadingMaxRetryTimeout},s={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this),onProgress:this.loadprogress.bind(this)},n.load(o,a,s)},e.prototype.loadsuccess=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=t.data,o=i.frag;o.loader=void 0,this.loaders[o.type]=void 0,this.hls.trigger(kt.a.FRAG_LOADED,{payload:r,frag:o,stats:e,networkDetails:n})},e.prototype.loaderror=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e.loader;n&&n.abort(),this.loaders[e.type]=void 0,this.hls.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.FRAG_LOAD_ERROR,fatal:!1,frag:e.frag,response:t,networkDetails:i})},e.prototype.loadtimeout=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e.loader;n&&n.abort(),this.loaders[e.type]=void 0,this.hls.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.FRAG_LOAD_TIMEOUT,fatal:!1,frag:e.frag,networkDetails:i})},e.prototype.loadprogress=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=e.frag;r.loaded=t.loaded,this.hls.trigger(kt.a.FRAG_LOAD_PROGRESS,{frag:r,stats:t,networkDetails:n})},e}(Nt),Zt=qt,$t=function(t){function e(i){f(this,e);var n=p(this,t.call(this,i,kt.a.KEY_LOADING));return n.loaders={},n.decryptkey=null,n.decrypturl=null,n}return g(e,t),e.prototype.destroy=function(){for(var t in this.loaders){var e=this.loaders[t];e&&e.destroy()}this.loaders={},Nt.prototype.destroy.call(this)},e.prototype.onKeyLoading=function(t){var e=t.frag,i=e.type,n=this.loaders[i],r=e.decryptdata,o=r.uri;if(o!==this.decrypturl||null===this.decryptkey){var a=this.hls.config;n&&(It.b.warn("abort previous key loader for type:"+i),n.abort()),e.loader=this.loaders[i]=new a.loader(a),this.decrypturl=o,this.decryptkey=null;var s=void 0,A=void 0,l=void 0;s={url:o,frag:e,responseType:"arraybuffer"},A={timeout:a.fragLoadingTimeOut,maxRetry:a.fragLoadingMaxRetry,retryDelay:a.fragLoadingRetryDelay,maxRetryDelay:a.fragLoadingMaxRetryTimeout},l={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},e.loader.load(s,A,l)}else this.decryptkey&&(r.key=this.decryptkey,this.hls.trigger(kt.a.KEY_LOADED,{frag:e}))},e.prototype.loadsuccess=function(t,e,i){var n=i.frag;this.decryptkey=n.decryptdata.key=new Uint8Array(t.data),n.loader=void 0,this.loaders[n.type]=void 0,this.hls.trigger(kt.a.KEY_LOADED,{frag:n})},e.prototype.loaderror=function(t,e){var i=e.frag,n=i.loader;n&&n.abort(),this.loaders[e.type]=void 0,this.hls.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.KEY_LOAD_ERROR,fatal:!1,frag:i,response:t})},e.prototype.loadtimeout=function(t,e){var i=e.frag,n=i.loader;n&&n.abort(),this.loaders[e.type]=void 0,this.hls.trigger(kt.a.ERROR,{type:St.b.NETWORK_ERROR,details:St.a.KEY_LOAD_TIMEOUT,fatal:!1,frag:i})},e}(Nt),te=$t,ee={search:function(t,e){for(var i=0,n=t.length-1,r=null,o=null;i<=n;){r=(i+n)/2|0,o=t[r];var a=e(o);if(a>0)i=r+1;else{if(!(a<0))return o;n=r-1}}return null}},ie=ee,ne={isBuffered:function(t,e){try{if(t)for(var i=t.buffered,n=0;n=i.start(n)&&e<=i.end(n))return!0}catch(t){}return!1},bufferInfo:function(t,e,i){try{if(t){var n,r=t.buffered,o=[];for(n=0;nc&&(A[l-1].end=t[s].end):A.push(t[s])}else A.push(t[s])}for(s=0,n=0,r=o=e;s=u&&e1?e-1:0),r=1;r1?e-1:0),r=1;r0&&-1===t&&(It.b.log("override startPosition with lastCurrentTime @"+e.toFixed(3)),t=e),this.state=ge.IDLE,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=t,this.tick()}else this.forceStartLoad=!0,this.state=ge.STOPPED},e.prototype.stopLoad=function(){var t=this.fragCurrent;t&&(t.loader&&t.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=ge.STOPPED,this.forceStartLoad=!1},e.prototype.tick=function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)},e.prototype.doTick=function(){switch(this.state){case ge.ERROR:break;case ge.BUFFER_FLUSHING:this.fragLoadError=0;break;case ge.IDLE:this._doTickIdle();break;case ge.WAITING_LEVEL:var t=this.levels[this.level];t&&t.details&&(this.state=ge.IDLE);break;case ge.FRAG_LOADING_WAITING_RETRY:var e=performance.now(),i=this.retryDate;(!i||e>=i||this.media&&this.media.seeking)&&(It.b.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=ge.IDLE);break;case ge.ERROR:case ge.STOPPED:case ge.FRAG_LOADING:case ge.PARSING:case ge.PARSED:case ge.ENDED:}this._checkBuffer(),this._checkFragmentChanged()},e.prototype._doTickIdle=function(){var t=this.hls,e=t.config,i=this.media;if(void 0!==this.levelLastLoaded&&(i||!this.startFragRequested&&e.startFragPrefetch)){var n=void 0;n=this.loadedmetadata?i.currentTime:this.nextLoadPosition;var r=t.nextLoadLevel,o=this.levels[r];if(o){var a=o.bitrate,s=void 0;s=a?Math.max(8*e.maxBufferSize/a,e.maxBufferLength):e.maxBufferLength,s=Math.min(s,e.maxMaxBufferLength);var A=re.bufferInfo(this.mediaBuffer?this.mediaBuffer:i,n,e.maxBufferHole),l=A.len;if(!(l>=s)){It.b.trace("buffer length of "+l.toFixed(3)+" is below max of "+s.toFixed(3)+". checking for more payload ..."),this.level=t.nextLoadLevel=r;var c=o.details;if(void 0===c||!0===c.live&&this.levelLastLoaded!==r)return void(this.state=ge.WAITING_LEVEL);var u=this.fragPrevious;if(!c.live&&u&&!u.backtracked&&u.sn===c.endSN&&!A.nextStart){if(Math.min(i.duration,u.start+u.duration)-Math.max(A.end,u.start)<=Math.max(.2,u.duration)){var d={};return this.altAudio&&(d.type="video"),this.hls.trigger(kt.a.BUFFER_EOS,d),void(this.state=ge.ENDED)}}this._fetchPayloadOrEos(n,A,c)}}}},e.prototype._fetchPayloadOrEos=function(t,e,i){var n=this.fragPrevious,r=this.level,o=i.fragments,a=o.length;if(0!==a){var s=o[0].start,A=o[a-1].start+o[a-1].duration,l=e.end,c=void 0;if(i.initSegment&&!i.initSegment.data)c=i.initSegment;else if(i.live){var u=this.config.initialLiveManifestSize;if(au&&(A.currentTime=u),this.nextLoadPosition=u}if(t.PTSKnown&&e>n&&A&&A.readyState)return null;if(this.startFragRequested&&!t.PTSKnown){if(r){var d=r.sn+1;if(d>=t.startSN&&d<=t.endSN){var h=o[d-t.startSN];r.cc===h.cc&&(l=h,It.b.log("live playlist, switching playlist, load frag with next SN: "+l.sn))}l||(l=ie.search(o,function(t){return r.cc-t.cc}))&&It.b.log("live playlist, switching playlist, load frag with same CC: "+l.sn)}l||(l=o[Math.min(a-1,Math.round(a/2))],It.b.log("live playlist, switching playlist, unknown, load middle frag : "+l.sn))}return l},e.prototype._findFragment=function(t,e,i,n,r,o,a){var s=this.hls.config,A=void 0,l=void 0,c=s.maxFragLookUpTolerance,u=e?n[e.sn-n[0].sn+1]:void 0,d=function(t){var e=Math.min(c,t.duration+(t.deltaPTS?t.deltaPTS:0));return t.start+t.duration-e<=r?1:t.start-e>r&&t.start?-1:0};if(ro-c&&(c=0),l=u&&!d(u)?u:ie.search(n,d)):l=n[i-1],l){A=l;var h=A.sn-a.startSN,f=e&&A.level===e.level,p=n[h-1],g=n[h+1];if(e&&A.sn===e.sn)if(f&&!A.backtracked)if(A.sns.maxBufferHole&&e.dropped&&h?(A=p,It.b.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),e.loadCounter--):(A=g,It.b.log("SN just loaded, load next one: "+A.sn))}else A=null;else A.backtracked&&(g&&g.backtracked?(It.b.warn("Already backtracked from fragment "+g.sn+", will not backtrack to fragment "+A.sn+". Loading fragment "+g.sn),A=g):(It.b.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),A.dropped=0,p?(p.loadCounter&&p.loadCounter--,A=p,A.backtracked=!0):h&&(A=null)))}return A},e.prototype._loadFragmentOrKey=function(t,e,i,n,r){var o=this.hls,a=o.config;if(!t.decryptdata||null==t.decryptdata.uri||null!=t.decryptdata.key){if(It.b.log("Loading "+t.sn+" of ["+i.startSN+" ,"+i.endSN+"],level "+e+", currentTime:"+n.toFixed(3)+",bufferEnd:"+r.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,t.loadCounter){t.loadCounter++;var s=a.fragLoadingLoopThreshold;if(t.loadCounter>s&&Math.abs(this.fragLoadIdx-t.loadIdx)e.endPTS?1:0})},e.prototype.followingBufferedFrag=function(t){return t?this.getBufferedFrag(t.endPTS+.5):null},e.prototype._checkFragmentChanged=function(){var t,e,i=this.media;if(i&&i.readyState&&!1===i.seeking&&(e=i.currentTime,e>i.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=e),re.isBuffered(i,e)?t=this.getBufferedFrag(e):re.isBuffered(i,e+.1)&&(t=this.getBufferedFrag(e+.1)),t)){var n=t;if(n!==this.fragPlaying){this.hls.trigger(kt.a.FRAG_CHANGED,{frag:n});var r=n.level;this.fragPlaying&&this.fragPlaying.level===r||this.hls.trigger(kt.a.LEVEL_SWITCHED,{level:r}),this.fragPlaying=n}}},e.prototype.immediateLevelSwitch=function(){if(It.b.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var t=this.media,e=void 0;t?(e=t.paused,t.pause()):e=!0,this.previouslyPaused=e}var i=this.fragCurrent;i&&i.loader&&i.loader.abort(),this.fragCurrent=null,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.flushMainBuffer(0,Number.POSITIVE_INFINITY)},e.prototype.immediateLevelSwitchEnd=function(){var t=this.media;t&&t.buffered.length&&(this.immediateSwitch=!1,re.isBuffered(t,t.currentTime)&&(t.currentTime-=1e-4),this.previouslyPaused||t.play())},e.prototype.nextLevelSwitch=function(){var t=this.media;if(t&&t.readyState){var e=void 0,i=void 0,n=void 0;if(void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),i=this.getBufferedFrag(t.currentTime),i&&i.startPTS>1&&this.flushMainBuffer(0,i.startPTS-1),t.paused)e=0;else{var r=this.hls.nextLoadLevel,o=this.levels[r],a=this.fragLastKbps;e=a&&this.fragCurrent?this.fragCurrent.duration*o.bitrate/(1e3*a)+1:0}if((n=this.getBufferedFrag(t.currentTime+e))&&(n=this.followingBufferedFrag(n))){var s=this.fragCurrent;s&&s.loader&&s.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(n.maxStartPTS,Number.POSITIVE_INFINITY)}}},e.prototype.flushMainBuffer=function(t,e){this.state=ge.BUFFER_FLUSHING;var i={startOffset:t,endOffset:e};this.altAudio&&(i.type="video"),this.hls.trigger(kt.a.BUFFER_FLUSHING,i)},e.prototype.onMediaAttached=function(t){var e=this.media=this.mediaBuffer=t.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),e.addEventListener("seeking",this.onvseeking),e.addEventListener("seeked",this.onvseeked),e.addEventListener("ended",this.onvended);var i=this.config;this.levels&&i.autoStartLoad&&this.hls.startLoad(i.startPosition)},e.prototype.onMediaDetaching=function(){var t=this.media;t&&t.ended&&(It.b.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var e=this.levels;e&&e.forEach(function(t){t.details&&t.details.fragments.forEach(function(t){t.loadCounter=void 0,t.backtracked=void 0})}),t&&(t.removeEventListener("seeking",this.onvseeking),t.removeEventListener("seeked",this.onvseeked),t.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()},e.prototype.onMediaSeeking=function(){var t=this.media,e=t?t.currentTime:void 0,i=this.config;isNaN(e)||It.b.log("media seeking to "+e.toFixed(3));var n=this.mediaBuffer?this.mediaBuffer:t,r=re.bufferInfo(n,e,this.config.maxBufferHole);if(this.state===ge.FRAG_LOADING){var o=this.fragCurrent;if(0===r.len&&o){var a=i.maxFragLookUpTolerance,s=o.start-a,A=o.start+o.duration+a;eA?(o.loader&&(It.b.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),o.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=ge.IDLE):It.b.log("seeking outside of buffer but within currently loaded fragment range")}}else this.state===ge.ENDED&&(0===r.len&&(this.fragPrevious=0),this.state=ge.IDLE);t&&(this.lastCurrentTime=e),this.state!==ge.FRAG_LOADING&&void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*i.fragLoadingLoopThreshold),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=e),this.tick()},e.prototype.onMediaSeeked=function(){var t=this.media,e=t?t.currentTime:void 0;isNaN(e)||It.b.log("media seeked to "+e.toFixed(3)),this.tick()},e.prototype.onMediaEnded=function(){It.b.log("media ended"),this.startPosition=this.lastCurrentTime=0},e.prototype.onManifestLoading=function(){It.b.log("trigger BUFFER_RESET"),this.hls.trigger(kt.a.BUFFER_RESET),this._bufferedFrags=[],this.stalled=!1,this.startPosition=this.lastCurrentTime=0},e.prototype.onManifestParsed=function(t){var e,i=!1,n=!1;t.levels.forEach(function(t){(e=t.audioCodec)&&(-1!==e.indexOf("mp4a.40.2")&&(i=!0),-1!==e.indexOf("mp4a.40.5")&&(n=!0))}),this.audioCodecSwitch=i&&n,this.audioCodecSwitch&&It.b.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=t.levels,this.startFragRequested=!1;var r=this.config;(r.autoStartLoad||this.forceStartLoad)&&this.hls.startLoad(r.startPosition)},e.prototype.onLevelLoaded=function(t){var e=t.details,i=t.level,n=this.levels[this.levelLastLoaded],r=this.levels[i],o=e.totalduration,a=0;if(It.b.log("level "+i+" loaded ["+e.startSN+","+e.endSN+"],duration:"+o),e.live){var s=r.details;s&&e.fragments.length>0?(y(s,e),a=e.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(a,s),e.PTSKnown&&!isNaN(a)?It.b.log("live playlist sliding:"+a.toFixed(3)):(It.b.log("live playlist - outdated PTS, unknown sliding"),T(this.fragPrevious,n,e))):(It.b.log("live playlist - first load, unknown sliding"),e.PTSKnown=!1,T(this.fragPrevious,n,e))}else e.PTSKnown=!1;if(r.details=e,this.levelLastLoaded=i,this.hls.trigger(kt.a.LEVEL_UPDATED,{details:e,level:i}),!1===this.startFragRequested){if(-1===this.startPosition||-1===this.lastCurrentTime){var A=e.startTimeOffset;isNaN(A)?e.live?(this.startPosition=this.computeLivePosition(a,e),It.b.log("configure startPosition to "+this.startPosition)):this.startPosition=0:(A<0&&(It.b.log("negative start time offset "+A+", count from end of last fragment"),A=a+o+A),It.b.log("start time offset found in playlist, adjust startPosition to "+A),this.startPosition=A),this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===ge.WAITING_LEVEL&&(this.state=ge.IDLE),this.tick()},e.prototype.onKeyLoaded=function(){this.state===ge.KEY_LOADING&&(this.state=ge.IDLE,this.tick())},e.prototype.onFragLoaded=function(t){var e=this.fragCurrent,i=t.frag;if(this.state===ge.FRAG_LOADING&&e&&"main"===i.type&&i.level===e.level&&i.sn===e.sn){var n=t.stats,r=this.levels[e.level],o=r.details;if(It.b.log("Loaded "+e.sn+" of ["+o.startSN+" ,"+o.endSN+"],level "+e.level),this.bitrateTest=!1,this.stats=n,!0===i.bitrateTest&&this.hls.nextLoadLevel)this.state=ge.IDLE,this.startFragRequested=!1,n.tparsed=n.tbuffered=performance.now(),this.hls.trigger(kt.a.FRAG_BUFFERED,{stats:n,frag:e,id:"main"}),this.tick();else if("initSegment"===i.sn)this.state=ge.IDLE,n.tparsed=n.tbuffered=performance.now(),o.initSegment.data=t.payload,this.hls.trigger(kt.a.FRAG_BUFFERED,{stats:n,frag:e,id:"main"}),this.tick();else{this.state=ge.PARSING;var a=o.totalduration,s=e.level,A=e.sn,l=this.config.defaultAudioCodec||r.audioCodec;this.audioCodecSwap&&(It.b.log("swapping playlist audio codec"),void 0===l&&(l=this.lastAudioCodec),l&&(l=-1!==l.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5")),this.pendingBuffering=!0,this.appended=!1,It.b.log("Parsing "+A+" of ["+o.startSN+" ,"+o.endSN+"],level "+s+", cc "+e.cc);var c=this.demuxer;c||(c=this.demuxer=new de(this.hls,"main"));var u=this.media,d=u&&u.seeking,h=!d&&(o.PTSKnown||!o.live),f=o.initSegment?o.initSegment.data:[];c.push(t.payload,f,l,r.videoCodec,e,a,h,void 0)}}this.fragLoadError=0},e.prototype.onFragParsingInitSegment=function(t){var e=this.fragCurrent,i=t.frag;if(e&&"main"===t.id&&i.sn===e.sn&&i.level===e.level&&this.state===ge.PARSING){var n,r,o=t.tracks;if(o.audio&&this.altAudio&&delete o.audio,r=o.audio){var a=this.levels[this.level].audioCodec,s=navigator.userAgent.toLowerCase();a&&this.audioCodecSwap&&(It.b.log("swapping playlist audio codec"),a=-1!==a.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==r.metadata.channelCount&&-1===s.indexOf("firefox")&&(a="mp4a.40.5"),-1!==s.indexOf("android")&&"audio/mpeg"!==r.container&&(a="mp4a.40.2",It.b.log("Android: force audio codec to "+a)),r.levelCodec=a,r.id=t.id}r=o.video,r&&(r.levelCodec=this.levels[this.level].videoCodec,r.id=t.id),this.hls.trigger(kt.a.BUFFER_CODECS,o);for(n in o){r=o[n],It.b.log("main track:"+n+",container:"+r.container+",codecs[level/parsed]=["+r.levelCodec+"/"+r.codec+"]");var A=r.initSegment;A&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(kt.a.BUFFER_APPENDING,{type:n,data:A,parent:"main",content:"initSegment"}))}this.tick()}},e.prototype.onFragParsingData=function(t){var e=this,i=this.fragCurrent,n=t.frag;if(i&&"main"===t.id&&n.sn===i.sn&&n.level===i.level&&("audio"!==t.type||!this.altAudio)&&this.state===ge.PARSING){var r=this.levels[this.level],o=i;if(isNaN(t.endPTS)&&(t.endPTS=t.startPTS+i.duration,t.endDTS=t.startDTS+i.duration),It.b.log("Parsed "+t.type+",PTS:["+t.startPTS.toFixed(3)+","+t.endPTS.toFixed(3)+"],DTS:["+t.startDTS.toFixed(3)+"/"+t.endDTS.toFixed(3)+"],nb:"+t.nb+",dropped:"+(t.dropped||0)),"video"===t.type)if(o.dropped=t.dropped,o.dropped)if(o.backtracked)It.b.warn("Already backtracked on this fragment, appending with the gap");else{var a=r.details;if(!a||o.sn!==a.startSN)return It.b.warn("missing video frame(s), backtracking fragment"),o.backtracked=!0,this.nextLoadPosition=t.startPTS,this.state=ge.IDLE,this.fragPrevious=o,void this.tick();It.b.warn("missing video frame(s) on first frag, appending with gap")}else o.backtracked=!1;var s=b(r.details,o,t.startPTS,t.endPTS,t.startDTS,t.endDTS),A=this.hls;A.trigger(kt.a.LEVEL_PTS_UPDATED,{details:r.details,level:this.level,drift:s,type:t.type,start:t.startPTS,end:t.endPTS}),[t.data1,t.data2].forEach(function(i){i&&i.length&&e.state===ge.PARSING&&(e.appended=!0,e.pendingBuffering=!0,A.trigger(kt.a.BUFFER_APPENDING,{type:t.type,data:i,parent:"main",content:"data"}))}),this.tick()}},e.prototype.onFragParsed=function(t){var e=this.fragCurrent,i=t.frag;e&&"main"===t.id&&i.sn===e.sn&&i.level===e.level&&this.state===ge.PARSING&&(this.stats.tparsed=performance.now(),this.state=ge.PARSED,this._checkAppendedParsed())},e.prototype.onAudioTrackSwitching=function(t){var e=!!t.url,i=t.id;if(!e){if(this.mediaBuffer!==this.media){It.b.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var n=this.fragCurrent;n.loader&&(It.b.log("switching to main audio track, cancel main fragment load"),n.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=ge.IDLE}var r=this.hls;r.trigger(kt.a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),r.trigger(kt.a.AUDIO_TRACK_SWITCHED,{id:i}),this.altAudio=!1}},e.prototype.onAudioTrackSwitched=function(t){var e=t.id,i=!!this.hls.audioTracks[e].url;if(i){var n=this.videoBuffer;n&&this.mediaBuffer!==n&&(It.b.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=n)}this.altAudio=i,this.tick()},e.prototype.onBufferCreated=function(t){var e=t.tracks,i=void 0,n=void 0,r=!1;for(var o in e){var a=e[o];"main"===a.id?(n=o,i=a,"video"===o&&(this.videoBuffer=e[o].buffer)):r=!0}r&&i?(It.b.log("alternate track found, use "+n+".buffered to schedule main fragment loading"),this.mediaBuffer=i.buffer):this.mediaBuffer=this.media},e.prototype.onBufferAppended=function(t){if("main"===t.parent){var e=this.state;e!==ge.PARSING&&e!==ge.PARSED||(this.pendingBuffering=t.pending>0,this._checkAppendedParsed())}},e.prototype._checkAppendedParsed=function(){if(!(this.state!==ge.PARSED||this.appended&&this.pendingBuffering)){var t=this.fragCurrent;if(t){var e=this.mediaBuffer?this.mediaBuffer:this.media;It.b.log("main buffered : "+fe.toString(e.buffered));var i=this._bufferedFrags.filter(function(t){return re.isBuffered(e,(t.startPTS+t.endPTS)/2)});i.push(t),this._bufferedFrags=i.sort(function(t,e){return t.startPTS-e.startPTS}),this.fragPrevious=t;var n=this.stats;n.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*n.total/(n.tbuffered-n.tfirst)),this.hls.trigger(kt.a.FRAG_BUFFERED,{stats:n,frag:t,id:"main"}),this.state=ge.IDLE}this.tick()}},e.prototype.onError=function(t){var e=t.frag||this.fragCurrent;if(!e||"main"===e.type){var i=!!this.media&&re.isBuffered(this.media,this.media.currentTime)&&re.isBuffered(this.media,this.media.currentTime+.5);switch(t.details){case St.a.FRAG_LOAD_ERROR:case St.a.FRAG_LOAD_TIMEOUT:case St.a.KEY_LOAD_ERROR:case St.a.KEY_LOAD_TIMEOUT:if(!t.fatal)if(this.fragLoadError+1<=this.config.fragLoadingMaxRetry){var n=Math.min(Math.pow(2,this.fragLoadError)*this.config.fragLoadingRetryDelay,this.config.fragLoadingMaxRetryTimeout);e.loadCounter=0,It.b.warn("mediaController: frag loading failed, retry in "+n+" ms"),this.retryDate=performance.now()+n,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.fragLoadError++,this.state=ge.FRAG_LOADING_WAITING_RETRY}else It.b.error("mediaController: "+t.details+" reaches max retry, redispatch as fatal ..."),t.fatal=!0,this.state=ge.ERROR;break;case St.a.FRAG_LOOP_LOADING_ERROR:t.fatal||(i?(this._reduceMaxBufferLength(e.duration),this.state=ge.IDLE):e.autoLevel&&0!==e.level||(t.fatal=!0,this.state=ge.ERROR));break;case St.a.LEVEL_LOAD_ERROR:case St.a.LEVEL_LOAD_TIMEOUT:this.state!==ge.ERROR&&(t.fatal?(this.state=ge.ERROR,It.b.warn("streamController: "+t.details+",switch to "+this.state+" state ...")):t.levelRetry||this.state!==ge.WAITING_LEVEL||(this.state=ge.IDLE));break;case St.a.BUFFER_FULL_ERROR:"main"!==t.parent||this.state!==ge.PARSING&&this.state!==ge.PARSED||(i?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=ge.IDLE):(It.b.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}},e.prototype._reduceMaxBufferLength=function(t){var e=this.config;e.maxMaxBufferLength>=t&&(e.maxMaxBufferLength/=2,It.b.warn("main:reduce max buffer length to "+e.maxMaxBufferLength+"s"),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*e.fragLoadingLoopThreshold))},e.prototype._checkBuffer=function(){var t=this.media,e=this.config;if(t&&t.readyState){var i=t.currentTime,n=this.mediaBuffer?this.mediaBuffer:t,r=n.buffered;if(!this.loadedmetadata&&r.length){this.loadedmetadata=!0;var o=t.seeking?i:this.startPosition,a=re.isBuffered(n,o),s=r.start(0),A=!a&&Math.abs(o-s)1e3*e.lowBufferWatchdogPeriod){this.stallReported||(this.stallReported=!0,It.b.warn("playback stalling in low buffer @"+i),h.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.BUFFER_STALLED_ERROR,fatal:!1,buffer:p}));var m=l.nextStart,v=m-i;if(m&&v0){this.nudgeRetry=++g;var w=g*e.nudgeOffset;It.b.log("adjust currentTime from "+t.currentTime+" to next buffered @ "+m+" + nudge "+w),t.currentTime=m+w,this.stalled=void 0,h.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:m+w-i})}}else if(p>.5&&f>1e3*e.highBufferWatchdogPeriod)if(this.stallReported||(this.stallReported=!0,It.b.warn("playback stalling in high buffer @"+i),h.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.BUFFER_STALLED_ERROR,fatal:!1,buffer:p})),this.stalled=void 0,this.nudgeRetry=++g,g"+t),this.hls.trigger(kt.a.STREAM_STATE_TRANSITION,{previousState:e,nextState:t})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var t=this.media;if(t){var e=this.getBufferedFrag(t.currentTime);if(e)return e.level}return-1}},{key:"nextBufferedFrag",get:function(){var t=this.media;return t?this.followingBufferedFrag(this.getBufferedFrag(t.currentTime)):null}},{key:"nextLevel",get:function(){var t=this.nextBufferedFrag;return t?t.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(t){this._liveSyncPosition=t}}]),e}(Nt),ve=me,we=function(){function t(t,e){for(var i=0;i0){i=e[0].bitrate,e.sort(function(t,e){return t.bitrate-e.bitrate}),this._levels=e;for(var c=0;c0})}else this.hls.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:this.hls.url,reason:"no level with compatible codecs found in manifest"})},e.prototype.setLevelInternal=function(t){var e=this._levels,i=this.hls;if(t>=0&&t1&&s.loadError0&&(e=t.urlId,this.hls.trigger(kt.a.LEVEL_LOADING,{url:t.url[e],level:this.currentLevelIndex,id:e}))},we(e,[{key:"levels",get:function(){return this._levels}},{key:"level",get:function(){return this.currentLevelIndex},set:function(t){var e=this._levels;e&&(t=Math.min(t,e.length-1),this.currentLevelIndex===t&&void 0!==e[t].details||this.setLevelInternal(t))}},{key:"manualLevel",get:function(){return this.manualLevelIndex},set:function(t){this.manualLevelIndex=t,void 0===this._startLevel&&(this._startLevel=t),-1!==t&&(this.level=t)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(t){this._firstLevel=t}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var t=this.hls.config.startLevel;return void 0!==t?t:this._firstLevel}return this._startLevel},set:function(t){this._startLevel=t}},{key:"nextLoadLevel",get:function(){return-1!==this.manualLevelIndex?this.manualLevelIndex:this.hls.nextAutoLevel},set:function(t){this.level=t,-1===this.manualLevelIndex&&(this.hls.nextAutoLevel=t)}}]),e}(Nt),ye=be,Be=i(3),xe=function(t){function e(i){R(this,e);var n=L(this,t.call(this,i,kt.a.MEDIA_ATTACHED,kt.a.MEDIA_DETACHING,kt.a.FRAG_PARSING_METADATA));return n.id3Track=void 0,n.media=void 0,n}return N(e,t),e.prototype.destroy=function(){Nt.prototype.destroy.call(this)},e.prototype.onMediaAttached=function(t){this.media=t.media,this.media},e.prototype.onMediaDetaching=function(){this.media=void 0},e.prototype.onFragParsingMetadata=function(t){var e=t.frag,i=t.samples;this.id3Track||(this.id3Track=this.media.addTextTrack("metadata","id3"),this.id3Track.mode="hidden");for(var n=window.WebKitDataCue||window.VTTCue||window.TextTrackCue,r=0;r=this.minWeight_},t.prototype.getEstimate=function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_},t.prototype.destroy=function(){},t}(),Ue=Te,Qe=function(){function t(t,e){for(var i=0;i500*i.duration/s){var A=t.levels,l=Math.max(1,o.bw?o.bw/8:1e3*o.loaded/a),c=A[i.level],u=c.realBitrate?Math.max(c.realBitrate,c.bitrate):c.bitrate,d=o.total?o.total:Math.max(o.loaded,Math.round(i.duration*u/8)),h=e.currentTime,f=(d-o.loaded)/l,p=(re.bufferInfo(e,h,t.config.maxBufferHole).end-h)/s;if(p<2*i.duration/s&&f>p){var g=void 0,m=void 0;for(m=i.level-1;m>r;m--){var v=A[m].realBitrate?Math.max(A[m].realBitrate,A[m].bitrate):A[m].bitrate;if((g=i.duration*v/(6.4*l))=n;l--){var c=A[l],u=c.details,d=u?u.totalduration/u.fragments.length:e,h=!!u&&u.live,f=void 0;f=l<=t?a*i:s*i;var p=A[l].realBitrate?Math.max(A[l].realBitrate,A[l].bitrate):A[l].bitrate,g=p*d/f;if(It.b.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+l+"/"+Math.round(f)+"/"+p+"/"+d+"/"+o+"/"+g),f>p&&(!g||h&&!this.bitrateTestDelay||g=0)return d;It.b.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var h=s?Math.min(s,n.maxStarvationDelay):n.maxStarvationDelay,f=n.abrBandWidthFactor,p=n.abrBandWidthUpFactor;if(0===u){var g=this.bitrateTestDelay;if(g){h=(s?Math.min(s,n.maxLoadingDelay):n.maxLoadingDelay)-g,It.b.trace("bitrate test took "+Math.round(1e3*g)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*h)+" ms"),f=p=1}}return d=this._findBestLevel(a,s,c,r,e,u+h,f,p,i),Math.max(d,0)}}]),e}(Nt),ke=Fe,Se=m(),Ie=function(t){function e(i){G(this,e);var n=z(this,t.call(this,i,kt.a.MEDIA_ATTACHING,kt.a.MEDIA_DETACHING,kt.a.MANIFEST_PARSED,kt.a.BUFFER_RESET,kt.a.BUFFER_APPENDING,kt.a.BUFFER_CODECS,kt.a.BUFFER_EOS,kt.a.BUFFER_FLUSHING,kt.a.LEVEL_PTS_UPDATED,kt.a.LEVEL_UPDATED));return n._msDuration=null,n._levelDuration=null,n._live=null,n._objectUrl=null,n.onsbue=n.onSBUpdateEnd.bind(n),n.onsbe=n.onSBUpdateError.bind(n),n.pendingTracks={},n.tracks={},n}return V(e,t),e.prototype.destroy=function(){Nt.prototype.destroy.call(this)},e.prototype.onLevelPtsUpdated=function(t){var e=t.type,i=this.tracks.audio;if("audio"===e&&i&&"audio/mpeg"===i.container){var n=this.sourceBuffer.audio;if(Math.abs(n.timestampOffset-t.start)>.1){var r=n.updating;try{n.abort()}catch(t){r=!0,It.b.warn("can not abort audio buffer: "+t)}r?this.audioTimestampOffset=t.start:(It.b.warn("change mpeg audio timestamp offset from "+n.timestampOffset+" to "+t.start),n.timestampOffset=t.start)}}},e.prototype.onManifestParsed=function(t){var e=t.audio,i=t.video||t.levels.length&&t.audio,n=0;t.altAudio&&(e||i)&&(n=(e?1:0)+(i?1:0),It.b.log(n+" sourceBuffer(s) expected")),this.sourceBufferNb=n},e.prototype.onMediaAttaching=function(t){var e=this.media=t.media;if(e){var i=this.mediaSource=new Se;this.onmso=this.onMediaSourceOpen.bind(this),this.onmse=this.onMediaSourceEnded.bind(this),this.onmsc=this.onMediaSourceClose.bind(this),i.addEventListener("sourceopen",this.onmso),i.addEventListener("sourceended",this.onmse),i.addEventListener("sourceclose",this.onmsc),e.src=URL.createObjectURL(i),this._objectUrl=e.src}},e.prototype.onMediaDetaching=function(){It.b.log("media source detaching");var t=this.mediaSource;if(t){if("open"===t.readyState)try{t.endOfStream()}catch(t){It.b.warn("onMediaDetaching:"+t.message+" while calling endOfStream")}t.removeEventListener("sourceopen",this.onmso),t.removeEventListener("sourceended",this.onmse),t.removeEventListener("sourceclose",this.onmsc),this.media&&(URL.revokeObjectURL(this._objectUrl),this.media.src===this._objectUrl?(this.media.removeAttribute("src"),this.media.load()):It.b.warn("media.src was changed by a third party - skip cleanup")),this.mediaSource=null,this.media=null,this._objectUrl=null,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.onmso=this.onmse=this.onmsc=null,this.hls.trigger(kt.a.MEDIA_DETACHED)},e.prototype.onMediaSourceOpen=function(){It.b.log("media source opened"),this.hls.trigger(kt.a.MEDIA_ATTACHED,{media:this.media});var t=this.mediaSource;t&&t.removeEventListener("sourceopen",this.onmso),this.checkPendingTracks()},e.prototype.checkPendingTracks=function(){var t=this.pendingTracks,e=Object.keys(t).length;e&&(this.sourceBufferNb<=e||0===this.sourceBufferNb)&&(this.createSourceBuffers(t),this.pendingTracks={},this.doAppending())},e.prototype.onMediaSourceClose=function(){It.b.log("media source closed")},e.prototype.onMediaSourceEnded=function(){It.b.log("media source ended")},e.prototype.onSBUpdateEnd=function(){if(this.audioTimestampOffset){var t=this.sourceBuffer.audio;It.b.warn("change mpeg audio timestamp offset from "+t.timestampOffset+" to "+this.audioTimestampOffset),t.timestampOffset=this.audioTimestampOffset,delete this.audioTimestampOffset}this._needsFlush&&this.doFlush(),this._needsEos&&this.checkEos(),this.appending=!1;var e=this.parent,i=this.segments.reduce(function(t,i){return i.parent===e?t+1:t},0);this.hls.trigger(kt.a.BUFFER_APPENDED,{parent:e,pending:i}),this._needsFlush||this.doAppending(),this.updateMediaElementDuration()},e.prototype.onSBUpdateError=function(t){It.b.error("sourceBuffer error:",t),this.hls.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.BUFFER_APPENDING_ERROR,fatal:!1})},e.prototype.onBufferReset=function(){var t=this.sourceBuffer;for(var e in t){var i=t[e];try{this.mediaSource.removeSourceBuffer(i),i.removeEventListener("updateend",this.onsbue),i.removeEventListener("error",this.onsbe)}catch(t){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0},e.prototype.onBufferCodecs=function(t){if(0===Object.keys(this.sourceBuffer).length){for(var e in t)this.pendingTracks[e]=t[e];var i=this.mediaSource;i&&"open"===i.readyState&&this.checkPendingTracks()}},e.prototype.createSourceBuffers=function(t){var e=this.sourceBuffer,i=this.mediaSource;for(var n in t)if(!e[n]){var r=t[n],o=r.levelCodec||r.codec,a=r.container+";codecs="+o;It.b.log("creating sourceBuffer("+a+")");try{var s=e[n]=i.addSourceBuffer(a);s.addEventListener("updateend",this.onsbue),s.addEventListener("error",this.onsbe),this.tracks[n]={codec:o,container:r.container},r.buffer=s}catch(t){It.b.error("error while trying to add sourceBuffer:"+t.message),this.hls.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:t,mimeType:a})}}this.hls.trigger(kt.a.BUFFER_CREATED,{tracks:t})},e.prototype.onBufferAppending=function(t){this._needsFlush||(this.segments?this.segments.push(t):this.segments=[t],this.doAppending())},e.prototype.onBufferAppendFail=function(t){It.b.error("sourceBuffer error:",t.event),this.hls.trigger(kt.a.ERROR,{type:St.b.MEDIA_ERROR,details:St.a.BUFFER_APPENDING_ERROR,fatal:!1})},e.prototype.onBufferEos=function(t){var e=this.sourceBuffer,i=t.type;for(var n in e)i&&n!==i||e[n].ended||(e[n].ended=!0,It.b.log(n+" sourceBuffer now EOS"));this.checkEos()},e.prototype.checkEos=function(){var t=this.sourceBuffer,e=this.mediaSource;if(!e||"open"!==e.readyState)return void(this._needsEos=!1);for(var i in t){var n=t[i];if(!n.ended)return;if(n.updating)return void(this._needsEos=!0)}It.b.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment");try{e.endOfStream()}catch(t){It.b.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1},e.prototype.onBufferFlushing=function(t){this.flushRange.push({start:t.startOffset,end:t.endOffset,type:t.type}),this.flushBufferCounter=0,this.doFlush()},e.prototype.onLevelUpdated=function(t){var e=t.details;e.fragments.length>0&&(this._levelDuration=e.totalduration+e.fragments[0].start,this._live=e.live,this.updateMediaElementDuration())},e.prototype.updateMediaElementDuration=function(){var t=this.hls.config,e=void 0;if(null!==this._levelDuration&&this.media&&this.mediaSource&&this.sourceBuffer&&0!==this.media.readyState&&"open"===this.mediaSource.readyState){for(var i in this.sourceBuffer)if(!0===this.sourceBuffer[i].updating)return;e=this.media.duration,null===this._msDuration&&(this._msDuration=this.mediaSource.duration),!0===this._live&&!0===t.liveDurationInfinity?(It.b.log("Media Source duration is set to Infinity"),this._msDuration=this.mediaSource.duration=1/0):(this._levelDuration>this._msDuration&&this._levelDuration>e||e===1/0||isNaN(e))&&(It.b.log("Updating Media Source duration to "+this._levelDuration.toFixed(3)),this._msDuration=this.mediaSource.duration=this._levelDuration)}},e.prototype.doFlush=function(){for(;this.flushRange.length;){var t=this.flushRange[0];if(!this.flushBuffer(t.start,t.end,t.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var e=0,i=this.sourceBuffer;try{for(var n in i)e+=i[n].buffered.length}catch(t){It.b.error("error while accessing sourceBuffer.buffered")}this.appended=e,this.hls.trigger(kt.a.BUFFER_FLUSHED)}},e.prototype.doAppending=function(){var t=this.hls,e=this.sourceBuffer,i=this.segments;if(Object.keys(e).length){if(this.media.error)return this.segments=[],void It.b.error("trying to append although a media error occured, flush segment and abort");if(this.appending)return;if(i&&i.length){var n=i.shift();try{var r=n.type,o=e[r];o?o.updating?i.unshift(n):(o.ended=!1,this.parent=n.parent,o.appendBuffer(n.data),this.appendError=0,this.appended++,this.appending=!0):this.onSBUpdateEnd()}catch(e){It.b.error("error while trying to append buffer:"+e.message),i.unshift(n);var a={type:St.b.MEDIA_ERROR,parent:n.parent};if(22===e.code)return this.segments=[],a.details=St.a.BUFFER_FULL_ERROR,a.fatal=!1,void t.trigger(kt.a.ERROR,a);if(this.appendError?this.appendError++:this.appendError=1,a.details=St.a.BUFFER_APPEND_ERROR,this.appendError>t.config.appendErrorMaxRetry)return It.b.log("fail "+t.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),i=[],a.fatal=!0,void t.trigger(kt.a.ERROR,a);a.fatal=!1,t.trigger(kt.a.ERROR,a)}}}},e.prototype.flushBuffer=function(t,e,i){var n,r,o,a,s,A,l=this.sourceBuffer;if(Object.keys(l).length){if(It.b.log("flushBuffer,pos/start/end: "+this.media.currentTime.toFixed(3)+"/"+t+"/"+e),this.flushBufferCounter.5)return this.flushBufferCounter++,It.b.log("flush "+c+" ["+s+","+A+"], of ["+o+","+a+"], pos:"+this.media.currentTime),n.remove(s,A),!1}catch(t){It.b.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource")}}}else It.b.warn("abort flushing too many retries");It.b.log("buffer flushed")}return!0},e}(Nt),Re=Ie,Le=function(){function t(t,e){for(var i=0;ithis.autoLevelCapping&&e.streamController.nextLevelSwitch(),this.autoLevelCapping=e.autoLevelCapping}}},e.prototype.getMaxLevel=function(t){var i=this;if(!this.levels)return-1;var n=this.levels.filter(function(n,r){return e.isLevelAllowed(r,i.restrictedLevels)&&r<=t});return e.getMaxLevelByMediaSize(n,this.mediaWidth,this.mediaHeight)},e.isLevelAllowed=function(t){return-1===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]).indexOf(t)},e.getMaxLevelByMediaSize=function(t,e,i){if(!t||t&&!t.length)return-1;for(var n=t.length-1,r=0;r=e||o.height>=i)&&function(t,e){return!e||(t.width!==e.width||t.height!==e.height)}(o,t[r+1])){n=r;break}}return n},Le(e,[{key:"mediaWidth",get:function(){var t=void 0,i=this.media;return i&&(t=i.width||i.clientWidth||i.offsetWidth,t*=e.contentScaleFactor),t}},{key:"mediaHeight",get:function(){var t=void 0,i=this.media;return i&&(t=i.height||i.clientHeight||i.offsetHeight,t*=e.contentScaleFactor),t}}],[{key:"contentScaleFactor",get:function(){var t=1;try{t=window.devicePixelRatio}catch(t){}return t}}]),e}(Nt),He=Ne,De=function(t){function e(i){return Y(this,e),J(this,t.call(this,i,kt.a.MEDIA_ATTACHING))}return q(e,t),e.prototype.destroy=function(){this.timer&&clearInterval(this.timer),this.isVideoPlaybackQualityAvailable=!1},e.prototype.onMediaAttaching=function(t){var e=this.hls.config;if(e.capLevelOnFPSDrop){"function"==typeof(this.video=t.media instanceof HTMLVideoElement?t.media:null).getVideoPlaybackQuality&&(this.isVideoPlaybackQualityAvailable=!0),clearInterval(this.timer),this.timer=setInterval(this.checkFPSInterval.bind(this),e.fpsDroppedMonitoringPeriod)}},e.prototype.checkFPS=function(t,e,i){var n=performance.now();if(e){if(this.lastTime){var r=n-this.lastTime,o=i-this.lastDroppedFrames,a=e-this.lastDecodedFrames,s=1e3*o/r,A=this.hls;if(A.trigger(kt.a.FPS_DROP,{currentDropped:o,currentDecoded:a,totalDroppedFrames:i}),s>0&&o>A.config.fpsDroppedMonitoringThreshold*a){var l=A.currentLevel;It.b.warn("drop FPS ratio greater than max allowed value for currentLevel: "+l),l>0&&(-1===A.autoLevelCapping||A.autoLevelCapping>=l)&&(l-=1,A.trigger(kt.a.FPS_DROP_LEVEL_CAPPING,{level:l,droppedLevel:A.currentLevel}),A.autoLevelCapping=l,A.streamController.nextLevelSwitch())}}this.lastTime=n,this.lastDroppedFrames=i,this.lastDecodedFrames=e}},e.prototype.checkFPSInterval=function(){var t=this.video;if(t)if(this.isVideoPlaybackQualityAvailable){var e=t.getVideoPlaybackQuality();this.checkFPS(t,e.totalVideoFrames,e.droppedVideoFrames)}else this.checkFPS(t,t.webkitDecodedFrameCount,t.webkitDroppedFrameCount)},e}(Nt),Oe=De,Me=function(){function t(e){Z(this,t),e&&e.xhrSetup&&(this.xhrSetup=e.xhrSetup)}return t.prototype.destroy=function(){this.abort(),this.loader=null},t.prototype.abort=function(){var t=this.loader;t&&4!==t.readyState&&(this.stats.aborted=!0,t.abort()),window.clearTimeout(this.requestTimeout),this.requestTimeout=null,window.clearTimeout(this.retryTimeout),this.retryTimeout=null},t.prototype.load=function(t,e,i){this.context=t,this.config=e,this.callbacks=i,this.stats={trequest:performance.now(),retry:0},this.retryDelay=e.retryDelay,this.loadInternal()},t.prototype.loadInternal=function(){var t,e=this.context;t=this.loader=new XMLHttpRequest;var i=this.stats;i.tfirst=0,i.loaded=0;var n=this.xhrSetup;try{if(n)try{n(t,e.url)}catch(i){t.open("GET",e.url,!0),n(t,e.url)}t.readyState||t.open("GET",e.url,!0)}catch(i){return void this.callbacks.onError({code:t.status,text:i.message},e,t)}e.rangeEnd&&t.setRequestHeader("Range","bytes="+e.rangeStart+"-"+(e.rangeEnd-1)),t.onreadystatechange=this.readystatechange.bind(this),t.onprogress=this.loadprogress.bind(this),t.responseType=e.responseType,this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),this.config.timeout),t.send()},t.prototype.readystatechange=function(t){var e=t.currentTarget,i=e.readyState,n=this.stats,r=this.context,o=this.config;if(!n.aborted&&i>=2)if(window.clearTimeout(this.requestTimeout),0===n.tfirst&&(n.tfirst=Math.max(performance.now(),n.trequest)),4===i){var a=e.status;if(a>=200&&a<300){n.tload=Math.max(n.tfirst,performance.now());var s=void 0,A=void 0;"arraybuffer"===r.responseType?(s=e.response,A=s.byteLength):(s=e.responseText,A=s.length),n.loaded=n.total=A;var l={url:e.responseURL,data:s};this.callbacks.onSuccess(l,n,r,e)}else n.retry>=o.maxRetry||a>=400&&a<499?(It.b.error(a+" while loading "+r.url),this.callbacks.onError({code:a,text:e.statusText},r,e)):(It.b.warn(a+" while loading "+r.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,o.maxRetryDelay),n.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),o.timeout)},t.prototype.loadtimeout=function(){It.b.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context,null)},t.prototype.loadprogress=function(t){var e=t.currentTarget,i=this.stats;i.loaded=t.loaded,t.lengthComputable&&(i.total=t.total);var n=this.callbacks.onProgress;n&&n(i,this.context,null,e)},t}(),Pe=Me,Ke=function(){function t(t,e){for(var i=0;i1&&setTimeout(this.tick,1),this.ticks=0)},e.prototype.doTick=function(){this.updateTrack(this.trackId)},e.prototype.onError=function(t){t.fatal&&t.type===St.b.NETWORK_ERROR&&this.cleanTimer()},e.prototype.onManifestLoading=function(){this.tracks=[],this.trackId=-1},e.prototype.onManifestParsed=function(t){var e=this,i=t.audioTracks||[],n=!1;this.tracks=i,this.hls.trigger(kt.a.AUDIO_TRACKS_UPDATED,{audioTracks:i});var r=0;i.forEach(function(t){if(t.default&&!n)return e.audioTrack=r,void(n=!0);r++}),!1===n&&i.length&&(It.b.log("no default audio track defined, use first audio track as default"),this.audioTrack=0)},e.prototype.onAudioTrackLoaded=function(t){t.id=0&&t=0&&t0&&-1===t?(It.b.log("audio:override startPosition with lastCurrentTime @"+e.toFixed(3)),this.state=Xe.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:t,this.state=Xe.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=t,this.state=Xe.STOPPED},e.prototype.stopLoad=function(){var t=this.fragCurrent;t&&(t.loader&&t.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=Xe.STOPPED},e.prototype.tick=function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)},e.prototype.doTick=function(){var t,e,i,n=this.hls,r=n.config;switch(this.state){case Xe.ERROR:case Xe.PAUSED:case Xe.BUFFER_FLUSHING:break;case Xe.STARTING:this.state=Xe.WAITING_TRACK,this.loadedmetadata=!1;break;case Xe.IDLE:var o=this.tracks;if(!o)break;if(!this.media&&(this.startFragRequested||!r.startFragPrefetch))break;if(this.loadedmetadata)t=this.media.currentTime;else if(void 0===(t=this.nextLoadPosition))break;var a=this.mediaBuffer?this.mediaBuffer:this.media,s=this.videoBuffer?this.videoBuffer:this.media,A=re.bufferInfo(a,t,r.maxBufferHole),l=re.bufferInfo(s,t,r.maxBufferHole),c=A.len,u=A.end,d=this.fragPrevious,h=Math.max(r.maxBufferLength,l.len),f=this.audioSwitch,p=this.trackId;if((cv||A.nextStart))return;It.b.log("alt audio track ahead of main track, seek to start of alt audio track"),this.media.currentTime=v+.05}if(i.initSegment&&!i.initSegment.data)b=i.initSegment;else if(u<=v){if(b=g[0],null!==this.videoTrackCC&&b.cc!==this.videoTrackCC&&(b=x(g,this.videoTrackCC)),i.live&&b.loadIdx&&b.loadIdx===this.fragLoadIdx){var y=A.nextStart?A.nextStart:v;return It.b.log("no alt audio available @currentTime:"+this.media.currentTime+", seeking @"+(y+.05)),void(this.media.currentTime=y+.05)}}else{var B=void 0,E=r.maxFragLookUpTolerance,_=d?g[d.sn-g[0].sn+1]:void 0,C=function(t){var e=Math.min(E,t.duration);return t.start+t.duration-e<=u?1:t.start-e>u&&t.start?-1:0};uw-E&&(E=0),B=_&&!C(_)?_:ie.search(g,C)):B=g[m-1],B&&(b=B,v=B.start,d&&b.level===d.level&&b.sn===d.sn&&(b.snT&&Math.abs(this.fragLoadIdx-b.loadIdx)=Q||F)&&(It.b.log("audioStreamController: retryDate reached, switch back to IDLE state"),this.state=Xe.IDLE);break;case Xe.WAITING_INIT_PTS:var k=this.videoTrackCC;if(void 0===this.initPTS[k])break;var S=this.waitingFragment;if(S){var I=S.frag.cc;k!==I?(e=this.tracks[this.trackId],e.details&&e.details.live&&(It.b.warn("Waiting fragment CC ("+I+") does not match video track CC ("+k+")"),this.waitingFragment=null,this.state=Xe.IDLE)):(this.state=Xe.FRAG_LOADING,this.onFragLoaded(this.waitingFragment),this.waitingFragment=null)}else this.state=Xe.IDLE;break;case Xe.STOPPED:case Xe.FRAG_LOADING:case Xe.PARSING:case Xe.PARSED:case Xe.ENDED:}},e.prototype.onMediaAttached=function(t){var e=this.media=this.mediaBuffer=t.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),e.addEventListener("seeking",this.onvseeking),e.addEventListener("ended",this.onvended);var i=this.config;this.tracks&&i.autoStartLoad&&this.startLoad(i.startPosition)},e.prototype.onMediaDetaching=function(){var t=this.media;t&&t.ended&&(It.b.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var e=this.tracks;e&&e.forEach(function(t){t.details&&t.details.fragments.forEach(function(t){t.loadCounter=void 0})}),t&&(t.removeEventListener("seeking",this.onvseeking),t.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=this.videoBuffer=null,this.loadedmetadata=!1,this.stopLoad()},e.prototype.onMediaSeeking=function(){this.state===Xe.ENDED&&(this.state=Xe.IDLE),this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()},e.prototype.onMediaEnded=function(){this.startPosition=this.lastCurrentTime=0},e.prototype.onAudioTracksUpdated=function(t){It.b.log("audio tracks updated"),this.tracks=t.audioTracks},e.prototype.onAudioTrackSwitching=function(t){var e=!!t.url;this.trackId=t.id,this.fragCurrent=null,this.state=Xe.PAUSED,this.waitingFragment=null,e?this.timer||(this.timer=setInterval(this.ontick,100)):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),e&&(this.audioSwitch=!0,this.state=Xe.IDLE,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold)),this.tick()},e.prototype.onAudioTrackLoaded=function(t){var e=t.details,i=t.id,n=this.tracks[i],r=e.totalduration,o=0;if(It.b.log("track "+i+" loaded ["+e.startSN+","+e.endSN+"],duration:"+r),e.live){var a=n.details;a&&e.fragments.length>0?(y(a,e),o=e.fragments[0].start,e.PTSKnown?It.b.log("live audio playlist sliding:"+o.toFixed(3)):It.b.log("live audio playlist - outdated PTS, unknown sliding")):(e.PTSKnown=!1,It.b.log("live audio playlist - first load, unknown sliding"))}else e.PTSKnown=!1;if(n.details=e,!this.startFragRequested){if(-1===this.startPosition){var s=e.startTimeOffset;isNaN(s)?this.startPosition=0:(It.b.log("start time offset found in playlist, adjust startPosition to "+s),this.startPosition=s)}this.nextLoadPosition=this.startPosition}this.state===Xe.WAITING_TRACK&&(this.state=Xe.IDLE),this.tick()},e.prototype.onKeyLoaded=function(){this.state===Xe.KEY_LOADING&&(this.state=Xe.IDLE,this.tick())},e.prototype.onFragLoaded=function(t){var e=this.fragCurrent,i=t.frag;if(this.state===Xe.FRAG_LOADING&&e&&"audio"===i.type&&i.level===e.level&&i.sn===e.sn){var n=this.tracks[this.trackId],r=n.details,o=r.totalduration,a=e.level,s=e.sn,A=e.cc,l=this.config.defaultAudioCodec||n.audioCodec||"mp4a.40.2",c=this.stats=t.stats;if("initSegment"===s)this.state=Xe.IDLE,c.tparsed=c.tbuffered=performance.now(),r.initSegment.data=t.payload,this.hls.trigger(kt.a.FRAG_BUFFERED,{stats:c,frag:e,id:"audio"}),this.tick();else{this.state=Xe.PARSING,this.appended=!1,this.demuxer||(this.demuxer=new de(this.hls,"audio"));var u=this.initPTS[A],d=r.initSegment?r.initSegment.data:[];if(r.initSegment||void 0!==u){this.pendingBuffering=!0,It.b.log("Demuxing "+s+" of ["+r.startSN+" ,"+r.endSN+"],track "+a);this.demuxer.push(t.payload,d,l,null,e,o,!1,u)}else It.b.log("unknown video PTS for continuity counter "+A+", waiting for video PTS before demuxing audio frag "+s+" of ["+r.startSN+" ,"+r.endSN+"],track "+a),this.waitingFragment=t,this.state=Xe.WAITING_INIT_PTS}}this.fragLoadError=0},e.prototype.onFragParsingInitSegment=function(t){var e=this.fragCurrent,i=t.frag;if(e&&"audio"===t.id&&i.sn===e.sn&&i.level===e.level&&this.state===Xe.PARSING){var n=t.tracks,r=void 0;if(n.video&&delete n.video,r=n.audio){r.levelCodec=r.codec,r.id=t.id,this.hls.trigger(kt.a.BUFFER_CODECS,n),It.b.log("audio track:audio,container:"+r.container+",codecs[level/parsed]=["+r.levelCodec+"/"+r.codec+"]");var o=r.initSegment;if(o){var a={type:"audio",data:o,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[a]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(kt.a.BUFFER_APPENDING,a))}this.tick()}}},e.prototype.onFragParsingData=function(t){var e=this,i=this.fragCurrent,n=t.frag;if(i&&"audio"===t.id&&"audio"===t.type&&n.sn===i.sn&&n.level===i.level&&this.state===Xe.PARSING){var r=this.trackId,o=this.tracks[r],a=this.hls;isNaN(t.endPTS)&&(t.endPTS=t.startPTS+i.duration,t.endDTS=t.startDTS+i.duration),It.b.log("parsed "+t.type+",PTS:["+t.startPTS.toFixed(3)+","+t.endPTS.toFixed(3)+"],DTS:["+t.startDTS.toFixed(3)+"/"+t.endDTS.toFixed(3)+"],nb:"+t.nb),b(o.details,i,t.startPTS,t.endPTS);var s=this.audioSwitch,A=this.media,l=!1;if(s&&A)if(A.readyState){var c=A.currentTime;It.b.log("switching audio track : currentTime:"+c),c>=t.startPTS&&(It.b.log("switching audio track : flushing all audio"),this.state=Xe.BUFFER_FLUSHING,a.trigger(kt.a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),l=!0,this.audioSwitch=!1,a.trigger(kt.a.AUDIO_TRACK_SWITCHED,{id:r}))}else this.audioSwitch=!1,a.trigger(kt.a.AUDIO_TRACK_SWITCHED,{id:r});var u=this.pendingData;this.audioSwitch||([t.data1,t.data2].forEach(function(e){e&&e.length&&u.push({type:t.type,data:e,parent:"audio",content:"data"})}),!l&&u.length&&(u.forEach(function(t){e.state===Xe.PARSING&&(e.pendingBuffering=!0,e.hls.trigger(kt.a.BUFFER_APPENDING,t))}),this.pendingData=[],this.appended=!0)),this.tick()}},e.prototype.onFragParsed=function(t){var e=this.fragCurrent,i=t.frag;e&&"audio"===t.id&&i.sn===e.sn&&i.level===e.level&&this.state===Xe.PARSING&&(this.stats.tparsed=performance.now(),this.state=Xe.PARSED,this._checkAppendedParsed())},e.prototype.onBufferReset=function(){this.mediaBuffer=this.videoBuffer=null,this.loadedmetadata=!1},e.prototype.onBufferCreated=function(t){var e=t.tracks.audio;e&&(this.mediaBuffer=e.buffer,this.loadedmetadata=!0),t.tracks.video&&(this.videoBuffer=t.tracks.video.buffer)},e.prototype.onBufferAppended=function(t){if("audio"===t.parent){var e=this.state;e!==Xe.PARSING&&e!==Xe.PARSED||(this.pendingBuffering=t.pending>0,this._checkAppendedParsed())}},e.prototype._checkAppendedParsed=function(){if(!(this.state!==Xe.PARSED||this.appended&&this.pendingBuffering)){var t=this.fragCurrent,e=this.stats,i=this.hls;if(t){this.fragPrevious=t,e.tbuffered=performance.now(),i.trigger(kt.a.FRAG_BUFFERED,{stats:e,frag:t,id:"audio"});var n=this.mediaBuffer?this.mediaBuffer:this.media;It.b.log("audio buffered : "+fe.toString(n.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,i.trigger(kt.a.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=Xe.IDLE}this.tick()}},e.prototype.onError=function(t){var e=t.frag;if(!e||"audio"===e.type)switch(t.details){case St.a.FRAG_LOAD_ERROR:case St.a.FRAG_LOAD_TIMEOUT:if(!t.fatal){var i=this.fragLoadError;i?i++:i=1;var n=this.config;if(i<=n.fragLoadingMaxRetry){this.fragLoadError=i,e.loadCounter=0;var r=Math.min(Math.pow(2,i-1)*n.fragLoadingRetryDelay,n.fragLoadingMaxRetryTimeout);It.b.warn("audioStreamController: frag loading failed, retry in "+r+" ms"),this.retryDate=performance.now()+r,this.state=Xe.FRAG_LOADING_WAITING_RETRY}else It.b.error("audioStreamController: "+t.details+" reaches max retry, redispatch as fatal ..."),t.fatal=!0,this.state=Xe.ERROR}break;case St.a.FRAG_LOOP_LOADING_ERROR:case St.a.AUDIO_TRACK_LOAD_ERROR:case St.a.AUDIO_TRACK_LOAD_TIMEOUT:case St.a.KEY_LOAD_ERROR:case St.a.KEY_LOAD_TIMEOUT:this.state!==Xe.ERROR&&(this.state=t.fatal?Xe.ERROR:Xe.IDLE,It.b.warn("audioStreamController: "+t.details+" while loading frag,switch to "+this.state+" state ..."));break;case St.a.BUFFER_FULL_ERROR:if("audio"===t.parent&&(this.state===Xe.PARSING||this.state===Xe.PARSED)){var o=this.mediaBuffer,a=this.media.currentTime;if(o&&re.isBuffered(o,a)&&re.isBuffered(o,a+.5)){var s=this.config;s.maxMaxBufferLength>=s.maxBufferLength&&(s.maxMaxBufferLength/=2,It.b.warn("audio:reduce max buffer length to "+s.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*s.fragLoadingLoopThreshold),this.state=Xe.IDLE}else It.b.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=Xe.BUFFER_FLUSHING,this.hls.trigger(kt.a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}},e.prototype.onBufferFlushed=function(){var t=this,e=this.pendingData;e&&e.length?(It.b.log("appending pending audio data on Buffer Flushed"),e.forEach(function(e){t.hls.trigger(kt.a.BUFFER_APPENDING,e)}),this.appended=!0,this.pendingData=[],this.state=Xe.PARSED):(this.state=Xe.IDLE,this.fragPrevious=null,this.tick())},Ve(e,[{key:"state",set:function(t){if(this.state!==t){var e=this.state;this._state=t,It.b.log("audio stream:"+e+"->"+t)}},get:function(){return this._state}}]),e}(Nt),je=We,Ye=function(){function t(t){return"string"==typeof t&&(!!o[t.toLowerCase()]&&t.toLowerCase())}function e(t){return"string"==typeof t&&(!!a[t.toLowerCase()]&&t.toLowerCase())}function i(t){for(var e=1;e100)throw new Error("Position must be between 0 and 100.");b=t,this.hasBeenReset=!0}})),Object.defineProperty(s,"positionAlign",i({},l,{get:function(){return y},set:function(t){var i=e(t);if(!i)throw new SyntaxError("An invalid or illegal string was specified.");y=i,this.hasBeenReset=!0}})),Object.defineProperty(s,"size",i({},l,{get:function(){return B},set:function(t){if(t<0||t>100)throw new Error("Size must be between 0 and 100.");B=t,this.hasBeenReset=!0}})),Object.defineProperty(s,"align",i({},l,{get:function(){return x},set:function(t){var i=e(t);if(!i)throw new SyntaxError("An invalid or illegal string was specified.");x=i,this.hasBeenReset=!0}})),s.displayState=void 0,A)return s}if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var r="auto",o={"":!0,lr:!0,rl:!0},a={start:!0,middle:!0,end:!0,left:!0,right:!0};return n.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},n}(),Je=function(){return{decode:function(t){if(!t)return"";if("string"!=typeof t)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(t))}}};st.prototype={set:function(t,e){this.get(t)||""===e||(this.values[t]=e)},get:function(t,e,i){return i?this.has(t)?this.values[t]:e[i]:this.has(t)?this.values[t]:e},has:function(t){return t in this.values},alt:function(t,e,i){for(var n=0;n=0&&e<=100)&&(this.set(t,e),!0)}};var qe=new Ye(0,0,0),Ze="middle"===qe.align?"middle":"center";ot.prototype={parse:function(t){function e(){var t=i.buffer,e=0;for(t=ct(t);e=i&&console.log(this.time+" ["+t+"] "+e)}},ci=function(t){for(var e=[],i=0;ini&&(li.log("ERROR","Too large cursor position "+this.pos),this.pos=ni)},t.prototype.moveCursor=function(t){var e=this.pos+t;if(t>1)for(var i=this.pos+1;i=144&&this.backSpace();var e=ei(t);if(this.pos>=ni)return void li.log("ERROR","Cannot insert "+t.toString(16)+" ("+e+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(e,this.currPenState),this.moveCursor(1)},t.prototype.clearFromPos=function(t){var e;for(e=t;e0&&(i=t?"["+e.join(" | ")+"]":e.join("\n")),i},t.prototype.getTextAndFormat=function(){return this.rows},t}(),pi=function(){function t(e,i){dt(this,t),this.chNr=e,this.outputFilter=i,this.mode=null,this.verbose=0,this.displayedMemory=new fi,this.nonDisplayedMemory=new fi,this.lastOutputScreen=new fi,this.currRollUpRow=this.displayedMemory.rows[ii-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}return t.prototype.reset=function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[ii-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null},t.prototype.getHandler=function(){return this.outputFilter},t.prototype.setHandler=function(t){this.outputFilter=t},t.prototype.setPAC=function(t){this.writeScreen.setPAC(t)},t.prototype.setBkgData=function(t){this.writeScreen.setBkgData(t)},t.prototype.setMode=function(t){t!==this.mode&&(this.mode=t,li.log("INFO","MODE="+t),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=t)},t.prototype.insertChars=function(t){for(var e=0;e=46,e.italics)e.foreground="white";else{var i=Math.floor(t/2)-16,n=["white","green","blue","cyan","red","yellow","magenta"];e.foreground=n[i]}li.log("INFO","MIDROW: "+JSON.stringify(e)),this.writeScreen.setPen(e)},t.prototype.outputDataUpdate=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=li.time;null!==e&&this.outputFilter&&(null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&(this.outputFilter.newCue(this.cueStartTime,e,this.lastOutputScreen),!0===t&&this.outputFilter.dispatchCue&&this.outputFilter.dispatchCue()),this.cueStartTime=this.displayedMemory.isEmpty()?null:e):this.cueStartTime=e,this.lastOutputScreen.copy(this.displayedMemory))},t.prototype.cueSplitAtTime=function(t){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,t,this.displayedMemory),this.cueStartTime=t))},t}(),gi=function(){function t(e,i,n){dt(this,t),this.field=e||1,this.outputs=[i,n],this.channels=[new pi(1,i),new pi(2,n)],this.currChNr=-1,this.lastCmdA=null,this.lastCmdB=null,this.bufferedData=[],this.startTime=null,this.lastTime=null,this.dataCounters={padding:0,char:0,cmd:0,other:0}}return t.prototype.getHandler=function(t){return this.channels[t].getHandler()},t.prototype.setHandler=function(t,e){this.channels[t].setHandler(e)},t.prototype.addData=function(t,e){var i,n,r,o=!1;this.lastTime=t,li.setTime(t);for(var a=0;a ("+ci([n,r])+")"),i=this.parseCmd(n,r),i||(i=this.parseMidrow(n,r)),i||(i=this.parsePAC(n,r)),i||(i=this.parseBackgroundAttributes(n,r)),!i&&(o=this.parseChars(n,r)))if(this.currChNr&&this.currChNr>=0){var s=this.channels[this.currChNr-1];s.insertChars(o)}else li.log("WARNING","No channel found yet. TEXT-MODE?");i?this.dataCounters.cmd+=2:o?this.dataCounters.char+=2:(this.dataCounters.other+=2,li.log("WARNING","Couldn't parse cleaned data "+ci([n,r])+" orig: "+ci([e[a],e[a+1]])))}else this.dataCounters.padding+=2},t.prototype.parseCmd=function(t,e){var i=null,n=(20===t||28===t)&&32<=e&&e<=47,r=(23===t||31===t)&&33<=e&&e<=35;if(!n&&!r)return!1;if(t===this.lastCmdA&&e===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,li.log("DEBUG","Repeated command ("+ci([t,e])+") is dropped"),!0;i=20===t||23===t?1:2;var o=this.channels[i-1];return 20===t||28===t?32===e?o.ccRCL():33===e?o.ccBS():34===e?o.ccAOF():35===e?o.ccAON():36===e?o.ccDER():37===e?o.ccRU(2):38===e?o.ccRU(3):39===e?o.ccRU(4):40===e?o.ccFON():41===e?o.ccRDC():42===e?o.ccTR():43===e?o.ccRTD():44===e?o.ccEDM():45===e?o.ccCR():46===e?o.ccENM():47===e&&o.ccEOC():o.ccTO(e-32),this.lastCmdA=t,this.lastCmdB=e,this.currChNr=i,!0},t.prototype.parseMidrow=function(t,e){var i=null;if((17===t||25===t)&&32<=e&&e<=47){if((i=17===t?1:2)!==this.currChNr)return li.log("ERROR","Mismatch channel in midrow parsing"),!1;return this.channels[i-1].ccMIDROW(e),li.log("DEBUG","MIDROW ("+ci([t,e])+")"),!0}return!1},t.prototype.parsePAC=function(t,e){var i=null,n=null,r=(17<=t&&t<=23||25<=t&&t<=31)&&64<=e&&e<=127,o=(16===t||24===t)&&64<=e&&e<=95;if(!r&&!o)return!1;if(t===this.lastCmdA&&e===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;i=t<=23?1:2,n=64<=e&&e<=95?1===i?ri[t]:ai[t]:1===i?oi[t]:si[t];var a=this.interpretPAC(n,e);return this.channels[i-1].setPAC(a),this.lastCmdA=t,this.lastCmdB=e,this.currChNr=i,!0},t.prototype.interpretPAC=function(t,e){var i=e,n={color:null,italics:!1,indent:null,underline:!1,row:t};return i=e>95?e-96:e-64,n.underline=1==(1&i),i<=13?n.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(i/2)]:i<=15?(n.italics=!0,n.color="white"):n.indent=4*Math.floor((i-16)/2),n},t.prototype.parseChars=function(t,e){var i=null,n=null,r=null;if(t>=25?(i=2,r=t-8):(i=1,r=t),17<=r&&r<=19){var o=e;o=17===r?e+80:18===r?e+112:e+144,li.log("INFO","Special char '"+ei(o)+"' in channel "+i),n=[o]}else 32<=t&&t<=127&&(n=0===e?[t]:[t,e]);if(n){var a=ci(n);li.log("DEBUG","Char codes = "+a.join(",")),this.lastCmdA=null,this.lastCmdB=null}return n},t.prototype.parseBackgroundAttributes=function(t,e){var i,n,r,o,a=(16===t||24===t)&&32<=e&&e<=47,s=(23===t||31===t)&&45<=e&&e<=47;return!(!a&&!s)&&(i={},16===t||24===t?(n=Math.floor((e-32)/2),i.background=Ai[n],e%2==1&&(i.background=i.background+"_semi")):45===e?i.background="transparent":(i.foreground="black",47===e&&(i.underline=!0)),r=t<24?1:2,o=this.channels[r-1],o.setBkgData(i),this.lastCmdA=null,this.lastCmdB=null,!0)},t.prototype.reset=function(){for(var t=0;tt)&&(this.startTime=t),this.endTime=e,this.screen=i,this.timelineController.createCaptionsTrack(this.track)},t}(),wi=vi,bi=function(t,e,i){return t.substr(i||0,e.length)===e},yi=function(t){var e=parseInt(t.substr(-3)),i=parseInt(t.substr(-6,2)),n=parseInt(t.substr(-9,2)),r=t.length>9?parseInt(t.substr(0,t.indexOf(":"))):0;return isNaN(e)||isNaN(i)||isNaN(n)||isNaN(r)?-1:(e+=1e3*i,e+=6e4*n,e+=36e5*r)},Bi=function(t){for(var e=5381,i=t.length;i;)e=33*e^t.charCodeAt(--i);return(e>>>0).toString()},xi=function(t,e,i){var n=t[e],r=t[n.prevCC];if(!r||!r.new&&n.new)return t.ccOffset=t.presentationOffset=n.start,void(n.new=!1);for(;r&&r.new;)t.ccOffset+=n.start-r.start,n.new=!1,n=r,r=t[n.prevCC];t.presentationOffset=i},Ei={parse:function(t,e,i,n,r,o){var a=/\r\n|\n\r|\n|\r/g,s=Object(Be.b)(new Uint8Array(t)).trim().replace(a,"\n").split("\n"),A="00:00.000",l=0,c=0,u=0,d=[],h=void 0,f=!0,p=new $e;p.oncue=function(t){var e=i[n],r=i.ccOffset;e&&e.new&&(void 0!==c?r=i.ccOffset=e.start:xi(i,n,u)),u&&(r=u+i.ccOffset-i.presentationOffset),t.startTime+=r-c,t.endTime+=r-c,t.id=Bi(t.startTime.toString())+Bi(t.endTime.toString())+Bi(t.text),t.text=decodeURIComponent(encodeURIComponent(t.text)),t.endTime>0&&d.push(t)},p.onparsingerror=function(t){h=t},p.onflush=function(){if(h&&o)return void o(h);r(d)},s.forEach(function(t){if(f){if(bi(t,"X-TIMESTAMP-MAP=")){f=!1,t.substr(16).split(",").forEach(function(t){bi(t,"LOCAL:")?A=t.substr(6):bi(t,"MPEGTS:")&&(l=parseInt(t.substr(7)))});try{e=e<0?e+8589934592:e,l-=e,c=yi(A)/1e3,u=l/9e4,-1===c&&(h=new Error("Malformed X-TIMESTAMP-MAP: "+t))}catch(e){h=new Error("Malformed X-TIMESTAMP-MAP: "+t)}return}""===t&&(f=!1)}p.parse(t+"\n")}),p.flush()}},_i=Ei,Ci=function(t){function e(i){ft(this,e);var n=pt(this,t.call(this,i,kt.a.MEDIA_ATTACHING,kt.a.MEDIA_DETACHING,kt.a.FRAG_PARSING_USERDATA,kt.a.FRAG_DECRYPTED,kt.a.MANIFEST_LOADING,kt.a.MANIFEST_LOADED,kt.a.FRAG_LOADED,kt.a.LEVEL_SWITCHING,kt.a.INIT_PTS_FOUND));if(n.hls=i,n.config=i.config,n.enabled=!0,n.Cues=i.config.cueHandler,n.textTracks=[],n.tracks=[],n.unparsedVttFrags=[],n.initPTS=void 0,n.cueRanges=[],n.config.enableCEA708Captions){var r=new wi(n,1),o=new wi(n,2);n.cea608Parser=new mi(0,r,o)}return n}return gt(e,t),e.prototype.addCues=function(t,e,i,n){for(var r=this.cueRanges,o=!1,a=r.length;a--;){var s=r[a],A=wt(s[0],s[1],e,i);if(A>=0&&(s[0]=Math.min(s[0],e),s[1]=Math.max(s[1],i),o=!0,A/(i-e)>.5))return}o||r.push([e,i]),this.Cues.newCue(this[t],e,i,n)},e.prototype.onInitPtsFound=function(t){var e=this;void 0===this.initPTS&&(this.initPTS=t.initPTS),this.unparsedVttFrags.length&&(this.unparsedVttFrags.forEach(function(t){e.onFragLoaded(t)}),this.unparsedVttFrags=[])},e.prototype.getExistingTrack=function(t){var e=this.media;if(e)for(var i=0;i=this.tracks.length)){this.timer&&(clearInterval(this.timer),this.timer=null);var e=xt(this.media.textTracks);if(-1!==this.trackId&&this.subtitleDisplay&&(e[this.trackId].mode="hidden"),this.trackId=t,It.b.log("switching to subtitle track "+t),this.hls.trigger(kt.a.SUBTITLE_TRACK_SWITCH,{id:t}),-1!==t){var i=this.tracks[t];this.subtitleDisplay&&(e[t].mode="showing");var n=i.details;void 0!==n&&!0!==n.live||(It.b.log("(re)loading playlist for subtitle track "+t),this.hls.trigger(kt.a.SUBTITLE_TRACK_LOADING,{url:i.url,id:t}))}}},Ui(e,[{key:"subtitleTracks",get:function(){return this.tracks}},{key:"subtitleTrack",get:function(){return this.trackId},set:function(t){this.trackId!==t&&this.setSubtitleTrackInternal(t)}}]),e}(Nt),Fi=Qi,ki=i(4),Si={STOPPED:"STOPPED",IDLE:"IDLE",KEY_LOADING:"KEY_LOADING",FRAG_LOADING:"FRAG_LOADING"},Ii=function(t){function e(i){Et(this,e);var n=_t(this,t.call(this,i,kt.a.MEDIA_ATTACHED,kt.a.ERROR,kt.a.KEY_LOADED,kt.a.FRAG_LOADED,kt.a.SUBTITLE_TRACKS_UPDATED,kt.a.SUBTITLE_TRACK_SWITCH,kt.a.SUBTITLE_TRACK_LOADED,kt.a.SUBTITLE_FRAG_PROCESSED));return n.config=i.config,n.vttFragSNsProcessed={},n.vttFragQueues=void 0,n.currentlyProcessing=null,n.state=Si.STOPPED,n.currentTrackId=-1,n.ticks=0,n.decrypter=new ki.a(i.observer,i.config),n}return Ct(e,t),e.prototype.destroy=function(){Nt.prototype.destroy.call(this),this.state=Si.STOPPED},e.prototype.clearVttFragQueues=function(){var t=this;this.vttFragQueues={},this.tracks.forEach(function(e){t.vttFragQueues[e.id]=[]})},e.prototype.nextFrag=function(){if(null===this.currentlyProcessing&&this.currentTrackId>-1&&this.vttFragQueues[this.currentTrackId].length){var t=this.currentlyProcessing=this.vttFragQueues[this.currentTrackId].shift();this.fragCurrent=t,this.hls.trigger(kt.a.FRAG_LOADING,{frag:t}),this.state=Si.FRAG_LOADING}},e.prototype.onSubtitleFragProcessed=function(t){t.success&&this.vttFragSNsProcessed[t.frag.trackId].push(t.frag.sn),this.currentlyProcessing=null,this.state=Si.IDLE,this.nextFrag()},e.prototype.onMediaAttached=function(){this.state=Si.IDLE},e.prototype.onError=function(t){var e=t.frag;e&&"subtitle"!==e.type||this.currentlyProcessing&&(this.currentlyProcessing=null,this.nextFrag())},e.prototype.tick=function(){var t=this;1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(function(){t.tick()},1),this.ticks=0)},e.prototype.doTick=function(){var t=this;switch(this.state){case Si.IDLE:var e=this.tracks,i=this.currentTrackId,n=this.vttFragSNsProcessed[i],r=this.vttFragQueues[i],o=this.currentlyProcessing?this.currentlyProcessing.sn:-1,a=function(t){return n.indexOf(t.sn)>-1},s=function(t){return r.some(function(e){return e.sn===t.sn})};if(!e)break;var A;if(i0&&null!=i&&null!=i.key&&"AES-128"===i.method){var o;try{o=performance.now()}catch(t){o=Date.now()}this.decrypter.decrypt(t.payload,i.key.buffer,i.iv.buffer,function(t){var e;try{e=performance.now()}catch(t){e=Date.now()}r.trigger(kt.a.FRAG_DECRYPTED,{frag:n,payload:t,stats:{tstart:o,tdecrypt:e}})})}},e}(Nt),Ri=Ii,Li={autoStartLoad:!0,startPosition:-1,defaultAudioCodec:void 0,debug:!1,capLevelOnFPSDrop:!1,capLevelToPlayerSize:!1,initialLiveManifestSize:1,maxBufferLength:30,maxBufferSize:6e7,maxBufferHole:.5,maxSeekHole:2,lowBufferWatchdogPeriod:.5,highBufferWatchdogPeriod:3,nudgeOffset:.1,nudgeMaxRetry:3,maxFragLookUpTolerance:.25,liveSyncDurationCount:3,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,liveDurationInfinity:!1,maxMaxBufferLength:600,enableWorker:!0,enableSoftwareAES:!0,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,startLevel:void 0,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3,fragLoadingLoopThreshold:3,startFragPrefetch:!1,fpsDroppedMonitoringPeriod:5e3,fpsDroppedMonitoringThreshold:.2,appendErrorMaxRetry:3,loader:Pe,fLoader:void 0,pLoader:void 0,xhrSetup:void 0,fetchSetup:void 0,abrController:ke,bufferController:Re,capLevelController:He,fpsController:Oe,stretchShortVideoTrack:!1,maxAudioFramesDrift:1,forceKeyFrameOnDiscontinuity:!0,abrEwmaFastLive:3,abrEwmaSlowLive:9,abrEwmaFastVoD:3,abrEwmaSlowVoD:9,abrEwmaDefaultEstimate:5e5,abrBandWidthFactor:.95,abrBandWidthUpFactor:.7,abrMaxWithRealBitrate:!1,maxStarvationDelay:4,maxLoadingDelay:4,minAutoBitrate:0};Li.subtitleStreamController=Ri,Li.subtitleTrackController=Fi,Li.timelineController=Ti,Li.cueHandler=Ut,Li.enableCEA708Captions=!0,Li.enableWebVTT=!0,Li.captionsTextTrack1Label="English",Li.captionsTextTrack1LanguageCode="en",Li.captionsTextTrack2Label="Spanish",Li.captionsTextTrack2LanguageCode="es",Li.audioStreamController=je,Li.audioTrackController=ze;var Ni=function(){function t(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};Tt(this,t);var n=t.DefaultConfig;if((i.liveSyncDurationCount||i.liveMaxLatencyDurationCount)&&(i.liveSyncDuration||i.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");for(var r in n)r in i||(i[r]=n[r]);if(void 0!==i.liveMaxLatencyDurationCount&&i.liveMaxLatencyDurationCount<=i.liveSyncDurationCount)throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');if(void 0!==i.liveMaxLatencyDuration&&(i.liveMaxLatencyDuration<=i.liveSyncDuration||void 0===i.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');Object(It.a)(i.debug),this.config=i,this._autoLevelCapping=-1;var o=this.observer=new se.a;o.trigger=function(t){for(var e=arguments.length,i=Array(e>1?e-1:0),n=1;n1?e-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:-1;It.b.log("startLoad("+t+")"),this.networkControllers.forEach(function(e){e.startLoad(t)})},t.prototype.stopLoad=function(){It.b.log("stopLoad"),this.networkControllers.forEach(function(t){t.stopLoad()})},t.prototype.swapAudioCodec=function(){It.b.log("swapAudioCodec"),this.streamController.swapAudioCodec()},t.prototype.recoverMediaError=function(){It.b.log("recoverMediaError");var t=this.media;this.detachMedia(),this.attachMedia(t)},Ni(t,[{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(t){It.b.log("set currentLevel:"+t),this.loadLevel=t,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(t){It.b.log("set nextLevel:"+t),this.levelController.manualLevel=t,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(t){It.b.log("set loadLevel:"+t),this.levelController.manualLevel=t}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(t){this.levelController.nextLoadLevel=t}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(t){It.b.log("set firstLevel:"+t),this.levelController.firstLevel=t}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(t){It.b.log("set startLevel:"+t);var e=this;-1!==t&&(t=Math.max(t,e.minAutoLevel)),e.levelController.startLevel=t}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(t){It.b.log("set autoLevelCapping:"+t),this._autoLevelCapping=t}},{key:"autoLevelEnabled",get:function(){return-1===this.levelController.manualLevel}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){for(var t=this,e=t.levels,i=t.config.minAutoBitrate,n=e?e.length:0,r=0;ri)return r}return 0}},{key:"maxAutoLevel",get:function(){var t=this,e=t.levels,i=t.autoLevelCapping;return-1===i&&e&&e.length?e.length-1:i}},{key:"nextAutoLevel",get:function(){var t=this;return Math.min(Math.max(t.abrController.nextAutoLevel,t.minAutoLevel),t.maxAutoLevel)},set:function(t){var e=this;e.abrController.nextAutoLevel=Math.max(e.minAutoLevel,t)}},{key:"audioTracks",get:function(){var t=this.audioTrackController;return t?t.audioTracks:[]}},{key:"audioTrack",get:function(){var t=this.audioTrackController;return t?t.audioTrack:-1},set:function(t){var e=this.audioTrackController;e&&(e.audioTrack=t)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var t=this.subtitleTrackController;return t?t.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var t=this.subtitleTrackController;return t?t.subtitleTrack:-1},set:function(t){var e=this.subtitleTrackController;e&&(e.subtitleTrack=t)}},{key:"subtitleDisplay",get:function(){var t=this.subtitleTrackController;return!!t&&t.subtitleDisplay},set:function(t){var e=this.subtitleTrackController;e&&(e.subtitleDisplay=t)}}]),t}();e.default=Hi},function(t,e,i){function n(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};e.m=t,e.c=i,e.i=function(t){return t},e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/",e.oe=function(t){throw console.error(t),t};var n=e(e.s=ENTRY_MODULE);return n.default||n}function r(t){return(t+"").replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}function o(t){var e=[],i=t.toString(),n=i.match(/^function\s?\(\w+,\s*\w+,\s*(\w+)\)/);if(!n)return e;for(var o,a=n[1],s=new RegExp("(\\\\n|\\W)"+r(a)+"\\((/\\*.*?\\*/)?s?.*?([\\.|\\-|\\w|/|@]+).*?\\)","g");o=s.exec(i);)e.push(o[3]);return e}function a(t,e){for(var i=[e],n=[],r={};i.length;){var a=i.pop();if(!r[a]&&t[a]){r[a]=!0,n.push(a);var s=o(t[a]);i=i.concat(s)}}return n}t.exports=function(t,e){e=e||{};var r=i.m,o=e.all?Object.keys(r):a(r,t),s="("+n.toString().replace("ENTRY_MODULE",JSON.stringify(t))+")({"+o.map(function(t){return JSON.stringify(t)+": "+r[t].toString()}).join(",")+"})(self);",A=new window.Blob([s],{type:"text/javascript"});if(e.bare)return A;var l=window.URL||window.webkitURL||window.mozURL||window.msURL,c=l.createObjectURL(A),u=new window.Worker(c);return u.objectURL=c,u}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(7),r=i(1),o=i(0),a=i(5),s=i.n(a),A=function(t){var e=new s.a;e.trigger=function(t){for(var i=arguments.length,n=Array(i>1?i-1:0),r=1;r1?i-1:0),r=1;r0){var m=h.shift();f=Number(window.getComputedStyle(t.node.parentElement).lineHeight.replace("px",""))||m.height,n.x=m.left,n.width=m.width,n.y=m.top-(f-m.height)/2,n.height=f,p.push(n.x),g.push(m.right)}var v=0;if(h.length>0){var w=h.pop();v=Number(window.getComputedStyle(e.node.parentElement).lineHeight.replace("px",""))||w.height,s.x=w.left,s.width=w.width,s.y=w.top-(v-w.height)/2,s.height=v,p.push(s.x),g.push(w.right)}if(h.length>0){var b=0;h.forEach(function(t){o.x&&o.width?(t.lefto.width&&(o.width=t.width),b0&&"SCRIPT"!==t.nodeName&&"STYLE"!==t.nodeName){var s,A=t.childNodes[0],l=this.getSelectNodeRectAndText(A,e,0,o),c=l.text,d=l.rects;return(s=a.rects).push.apply(s,r()(d)),a.text+=c,a}if("#text"===t.nodeName){var h,f=t===e?o:t.textContent.length;(h=a.rects).push.apply(h,r()(i.i(u.g)(t,n,f))),a.text+=t.textContent.substring(n,f)}if(t===e)return a;var p=t.nextSibling;if(p){var g,m=this.getSelectNodeRectAndText(p,e,0,o),v=m.text,w=m.rects;(g=a.rects).push.apply(g,r()(w)),a.text+=v}else{for(var b=t.parentNode;b&&null===b.nextSibling;)b=b.parentNode;if(!b)throw new Error("Invalid end node");var y,B=this.getSelectNodeRectAndText(b.nextSibling,e,0,o),x=B.text,E=B.rects;(y=a.rects).push.apply(y,r()(E)),a.text+=x}return a}}]),t}();e.a=h},690:function(t,e,i){"use strict";var n=i(100),r=i.n(n),o=i(101),a=i.n(o),s=function(){function t(){r()(this,t),this.middleware=[],this.after=[],this.finished=!1,this.index=0}return a()(t,[{key:"use",value:function(t){return this.middleware.push(t),this}},{key:"ready",value:function(t){this.finished?t():this.after.push(t)}},{key:"next",value:function(){var t=this,e=this.middleware[this.index];e&&e(function(){t.index=t.index+1,t.next()})}},{key:"clear",value:function(){this.middleware=[],this.after=[],this.finished=!1,this.index=0}},{key:"load",value:function(){var t=this;this.middleware.push(function(){t.finished=!0,t.after.length>0&&(t.middleware=t.after,t.index=0,t.next())}),this.next()}}]),t}();e.a=s},691:function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var r=i(726),o=n(r),a=i(725),s=n(a);e.default=function(){function t(t,e){var i=[],n=!0,r=!1,o=void 0;try{for(var a,A=(0,s.default)(t);!(n=(a=A.next()).done)&&(i.push(a.value),!e||i.length!==e);n=!0);}catch(t){r=!0,o=t}finally{try{!n&&A.return&&A.return()}finally{if(r)throw o}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,o.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},692:function(t,e,i){var n=i(37);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},693:function(t,e){t.exports={L:1,M:0,Q:3,H:2}},694:function(t,e,i){function n(t,e){if(void 0==t.length)throw new Error(t.length+"/"+e);for(var i=0;i=256;)t-=255;return i.EXP_TABLE[t]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},n=0;n<8;n++)i.EXP_TABLE[n]=1<e){for(var n="",r=0,o=i.length;r
    {6}
    ',[w,m,b,y,v,r+1,i[r].length>0?i[r]:" "]);return d('{1}
    ',[g,n])}return t}function s(t){var e=t.childNodes;for(var i in e)if(e.hasOwnProperty(i)){var n=e[i];c(n.textContent)>0&&(n.childNodes.length>0?s(n):A(n.parentNode))}}function A(t){var e=t.className;if(/hljs-/.test(e)){for(var i=l(t.innerHTML),n=0,r="";n{1}\n',[e,i[n]]);t.innerHTML=r.trim()}}function l(t){return 0===t.length?[]:t.split(B)}function c(t){return(t.trim().match(B)||[]).length}function u(t){window.setTimeout(t,0)}function d(t,e){return t.replace(/\{(\d+)\}/g,function(t,i){return e[i]?e[i]:t})}var h=i(147),f=i.n(h),p={},g="hljs-ln",m="hljs-ln-line",v="hljs-ln-code",w="hljs-ln-numbers",b="hljs-ln-n",y="data-line-number",B=/\r\n|\r|\n/g;p?(p.initLineNumbersOnLoad=n,p.lineNumbersBlock=o,function(){var t=document.createElement("style");t.type="text/css",t.innerHTML=d(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[g,b,y]),document.getElementsByTagName("head")[0].appendChild(t)}()):window.console.error("highlight.js not detected!"),e.a=p},700:function(t,e,i){"use strict";var n=i(220),r=i.n(n),o=i(44),a=i.n(o),s=i(100),A=i.n(s),l=i(101),c=i.n(l),u=i(720),d=i(723),h=i(722),f=i(721),p=i(689),g=i(724),m=i(624),v={NONE:"none",SELECTING:"selecting",FINISH:"finish"},w={menuItems:[],menuTopOffset:0,cursor:{same:!1}},b=function(t){return t.preventDefault()},y=function(){function t(e){A()(this,t),this.options=a()({},w,e),this.$selectStatus=v.NONE,this.container=null,this.scrollContainer=null,this.excludeElements=[],this.highlight=null,this.movingCursor=null,this.touchEvent=null,this.cursor={start:null,end:null},this.textNode={start:null,end:null},this.mask=null,this.menu=null}return c()(t,[{key:"create",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];this.container=t,this.adjustTextStyle(),this.container.oncontextmenu=function(t){t.returnValue=!1},this.excludeElements=[].concat(r()(i)),this.scrollContainer=e||document.body,this.container.addEventListener("contextmenu",b),this.scrollContainer.onscroll=this.handleScroll.bind(this),this.container.style.userSelect="none",this.container.style.webkitUserSelect="none",this.container.style.position="relative",this.touchEvent=new g.a(this.container),this.touchEvent.registerEvent(g.b.TOUCH_START,this.handleTouchStart.bind(this)),this.touchEvent.registerEvent(g.b.TOUCH_MOVE,this.handleTouchMove.bind(this)),this.touchEvent.registerEvent(g.b.TOUCH_MOVE_THROTTLE,this.handleTouchMoveThrottle.bind(this)),this.touchEvent.registerEvent(g.b.TOUCH_END,this.handleTouchEnd.bind(this)),this.touchEvent.registerEvent(g.b.TAP,this.handleTap.bind(this)),this.touchEvent.registerEvent(g.b.LONG_TAP,this.handleLongTap.bind(this)),this.options.cursor.same?this.cursor.start=new u.a(this.container,u.b.END):this.cursor.start=new u.a(this.container,u.b.START),this.cursor.end=new u.a(this.container,u.b.END),this.movingCursor=this.cursor.end,this.mask=new h.a(this.container),this.highlight=new f.a(this.container),this.menu=new d.a(this.container,{menuItems:this.options.menuItems,topOffset:this.options.menuTopOffset,style:this.options.menuStyle}),this.menu.easyMarker=this}},{key:"getSelectText",value:function(){var t=p.a.getSelectText(this.textNode.start,this.textNode.end)||"";return i.i(m.a)(this.container.innerText,t)||t}},{key:"highlightLine",value:function(t,e,i){this.highlight.highlightLine(t,e,i,this.screenRelativeOffset)}},{key:"highlightLines",value:function(t){this.highlight.highlightLines(t,this.screenRelativeOffset)}},{key:"cancelHighlightLine",value:function(t){this.highlight.cancelHighlightLine(t)}},{key:"onHighlightLineClick",value:function(t){this.highlight.onClick=t}},{key:"registerEventHook",value:function(t){this.touchEvent.registerHook(t)}},{key:"destroy",value:function(){this.container.oncontextmenu=null,this.container.removeEventListener("contextmenu",b),this.scrollContainer.onscroll=null,this.touchEvent.destroy(),this.cursor.start.destroy(),this.cursor.end.destroy(),this.mask.destroy(),this.highlight.destroy(),this.menu.destroy(),this.$selectStatus=v.NONE,this.container=null,this.scrollContainer=null,this.excludeElements=[],this.highlight=null,this.movingCursor=null,this.touchEvent=null,this.cursor={start:null,end:null},this.textNode={start:null,end:null},this.mask=null,this.menu=null}},{key:"reset",value:function(){this.selectStatus=v.NONE,this.cursor.start.hide(),this.cursor.end.hide(),this.textNode={start:null,end:null},this.mask.reset()}},{key:"adjustTextStyle",value:function(){for(var t=this.container.children,e=0;er.y||n===r.y&&i>=r.x?(this.cursor.start.position=this.cursor.end.position,this.movingCursor=this.cursor.end,this.textNode.start=new p.a(this.textNode.end.node,this.textNode.end.offset),this.textNode.end=new p.a(t.node,t.index)):this.textNode.start=new p.a(t.node,t.index)}else{var o=this.cursor.start.position;n2&&void 0!==arguments[2]?arguments[2]:[],n=new this;return n.create(t,e,i),n}}]),t}();e.a=y},701:function(t,e,i){"use strict";function n(t,e,i){var r="";if(e.childNodes.length>0&&"SCRIPT"!==e.nodeName.toUpperCase()&&"STYLE"!==e.nodeName.toUpperCase()){return r=n(t,e.childNodes[e.childNodes.length-1],void 0)+r}"#text"===e.nodeName&&(r=e.textContent.substr(0,i));var o=e.previousSibling;if(o)r=n(t,o,void 0)+r;else{for(var a=e.parentNode;a&&null===a.previousSibling;)if((a=a.parentNode)===t)return r;if(a){r=n(t,a.previousSibling,void 0)+r}}return r}function r(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i="",n=e.replace(/\s+/g,""),r=0,o=0;r=n.length)return i;t[r]===n[o]?(i+=t[r],o++):t[r].match(/\n|\r|\s/)?""!==i&&(i+=t[r]):(o=0,i="")}return i}function o(t){return a(t.childNodes[0],t)}function a(t,e){var i=[];if(t.childNodes.length>0&&"SCRIPT"!==t.nodeName.toUpperCase()&&"SCRIPT"!==t.nodeName.toUpperCase()&&"STYLE"!==t.nodeName.toUpperCase()){var n=t.childNodes[0],r=a(n,e);return i=[].concat(l()(i),l()(r))}"#text"===t.nodeName&&i.push(t);var o=t.nextSibling;if(o){var s=a(o,e);i=[].concat(l()(i),l()(s))}else{for(var A=t.parentNode;A&&null===A.nextSibling;)A=A.parentNode;if(A===e)return i;if(A){var c=a(A.nextSibling,e);i=[].concat(l()(i),l()(c))}}return i}function s(t,e,i){for(var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o="",a=[],s=0,A=e.length;s-1){var c=o.indexOf(i),u=o.length-i.length-c;for(a.push({node:l,index:s,offset:u}),o=o.substr(c+i.length);o.length>0&&o.indexOf(i)>-1;)c=o.indexOf(i),u=o.length-i.length-c,a.push({node:l,index:s,offset:u}),o=o.substr(c+i.length)}if(a.length>=n+1)break}if(a.length-10?(d=a[n-1],d.offset=e[d.index].textContent.length-d.offset):d={node:e[0],index:0,offset:0};var h=a[n],f=e[h.index].textContent;h.offset=Math.max(0,r(t,f).length-h.offset),h.offset=Math.min(f.length,h.offset),o="";for(var p=h.index;p>=d.index;p--){var g=e[p];if(o=p===d.index?g.textContent.substr(d.offset)+o:g.textContent+o,o=r(t,o)||o,o.indexOf(i)>-1){var m=o.indexOf(i);p===d.index&&(m+=d.offset),m=Math.max(0,m),d={node:g,index:p,offset:m};break}}return d.index>h.index||d.index===h.index&&d.offset>h.offset||d.offset<0||h.offset<0?{start:null,end:null}:{start:d,end:h}}i.d(e,"a",function(){return n}),i.d(e,"b",function(){return o}),i.d(e,"c",function(){return s});var A=i(220),l=i.n(A)},709:function(t,e,i){/*! + * html2canvas 1.0.0-rc.3 + * Copyright (c) 2019 Niklas von Hertzen + * Released under MIT License + */ +!function(e,i){t.exports=i()}(0,function(){"use strict";function t(t,e){function i(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function e(t,e,i,n){return new(i||(i=Promise))(function(r,o){function a(t){try{A(n.next(t))}catch(t){o(t)}}function s(t){try{A(n.throw(t))}catch(t){o(t)}}function A(t){t.done?r(t.value):new i(function(e){e(t.value)}).then(a,s)}A((n=n.apply(t,e||[])).next())})}function i(t,e){function i(t){return function(e){return n([t,e])}}function n(i){if(r)throw new TypeError("Generator is already executing.");for(;A;)try{if(r=1,o&&(a=2&i[0]?o.return:i[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,i[1])).done)return a;switch(o=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return A.label++,{value:i[1],done:!1};case 5:A.label++,o=i[1],i=[0];continue;case 7:i=A.ops.pop(),A.trys.pop();continue;default:if(a=A.trys,!(a=a.length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){A=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]=1&&(i-=1),i<1/6?(e-t)*i*6+t:i<.5?e:i<2/3?6*(e-t)*(2/3-i)+t:t}for(var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},o=function(){return o=Object.assign||function(t){for(var e,i=1,n=arguments.length;i=55296&&r<=56319&&i>10),a%1024+56320)),(r+1===i||n.length>16384)&&(o+=String.fromCharCode.apply(String,n),n.length=0)}return o},u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d="undefined"==typeof Uint8Array?[]:new Uint8Array(256),h=0;h>4,c[A++]=(15&n)<<4|r>>2,c[A++]=(3&r)<<6|63&o;return l},g=function(t){for(var e=t.length,i=[],n=0;n=0){if(t<55296||t>56319&&t<=65535)return e=this.index[t>>5],e=(e<<2)+(31&t),this.data[e];if(t<=65535)return e=this.index[2048+(t-55296>>5)],e=(e<<2)+(31&t),this.data[e];if(t>11),e=this.index[e],e+=t>>5&63,e=this.index[e],e=(e<<2)+(31&t),this.data[e];if(t<=1114111)return this.data[this.highValueIndex]}return this.errorValue},t}(),y="!",B=function(t){var e=p(t),i=Array.isArray(e)?m(e):new Uint32Array(e),n=Array.isArray(e)?g(e):new Uint16Array(e),r=v(n,12,i[4]/2),o=2===i[5]?v(n,(24+i[4])/2):w(i,Math.ceil((24+i[4])/4));return new b(i[0],i[1],i[2],i[3],r,o)}("KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA"),x=[30,36],E=[1,2,3,5],_=[10,8],C=[27,26],T=E.concat(_),U=[38,39,40,34,35],Q=[15,13],F=function(t,e){void 0===e&&(e="strict");var i=[],n=[],r=[];return t.forEach(function(t,o){var a=B.get(t);if(a>50?(r.push(!0),a-=50):r.push(!1),-1!==["normal","auto","loose"].indexOf(e)&&-1!==[8208,8211,12316,12448].indexOf(t))return n.push(o),i.push(16);if(4===a||11===a){if(0===o)return n.push(o),i.push(30);var s=i[o-1];return-1===T.indexOf(s)?(n.push(n[o-1]),i.push(s)):(n.push(o),i.push(30))}return n.push(o),31===a?i.push("strict"===e?21:37):42===a?i.push(30):29===a?i.push(30):43===a?t>=131072&&t<=196605||t>=196608&&t<=262141?i.push(37):i.push(30):void i.push(a)}),[n,i,r]},k=function(t,e,i,n){var r=n[i];if(Array.isArray(t)?-1!==t.indexOf(r):t===r)for(var o=i;o<=n.length;){o++;var a=n[o];if(a===e)return!0;if(10!==a)break}if(10===r)for(var o=i;o>0;){o--;var s=n[o];if(Array.isArray(t)?-1!==t.indexOf(s):t===s)for(var A=i;A<=n.length;){A++;var a=n[A];if(a===e)return!0;if(10!==a)break}if(10!==s)break}return!1},S=function(t,e){for(var i=t;i>=0;){var n=e[i];if(10!==n)return n;i--}return 0},I=function(t,e,i,n,r){if(0===i[n])return"×";var o=n-1;if(Array.isArray(r)&&!0===r[o])return"×";var a=o-1,s=o+1,A=e[o],l=a>=0?e[a]:0,c=e[s];if(2===A&&3===c)return"×";if(-1!==E.indexOf(A))return y;if(-1!==E.indexOf(c))return"×";if(-1!==_.indexOf(c))return"×";if(8===S(o,e))return"÷";if(11===B.get(t[o])&&(37===c||32===c||33===c))return"×";if(7===A||7===c)return"×";if(9===A)return"×";if(-1===[10,13,15].indexOf(A)&&9===c)return"×";if(-1!==[17,18,19,24,28].indexOf(c))return"×";if(22===S(o,e))return"×";if(k(23,22,o,e))return"×";if(k([17,18],21,o,e))return"×";if(k(12,12,o,e))return"×";if(10===A)return"÷";if(23===A||23===c)return"×";if(16===c||16===A)return"÷";if(-1!==[13,15,21].indexOf(c)||14===A)return"×";if(36===l&&-1!==Q.indexOf(A))return"×";if(28===A&&36===c)return"×";if(20===c&&-1!==x.concat(20,19,25,37,32,33).indexOf(A))return"×";if(-1!==x.indexOf(c)&&25===A||-1!==x.indexOf(A)&&25===c)return"×";if(27===A&&-1!==[37,32,33].indexOf(c)||-1!==[37,32,33].indexOf(A)&&26===c)return"×";if(-1!==x.indexOf(A)&&-1!==C.indexOf(c)||-1!==C.indexOf(A)&&-1!==x.indexOf(c))return"×";if(-1!==[27,26].indexOf(A)&&(25===c||-1!==[22,15].indexOf(c)&&25===e[s+1])||-1!==[22,15].indexOf(A)&&25===c||25===A&&-1!==[25,28,24].indexOf(c))return"×";if(-1!==[25,28,24,17,18].indexOf(c))for(var u=o;u>=0;){var d=e[u];if(25===d)return"×";if(-1===[28,24].indexOf(d))break;u--}if(-1!==[27,26].indexOf(c))for(var u=-1!==[17,18].indexOf(A)?a:o;u>=0;){var d=e[u];if(25===d)return"×";if(-1===[28,24].indexOf(d))break;u--}if(38===A&&-1!==[38,39,34,35].indexOf(c)||-1!==[39,34].indexOf(A)&&-1!==[39,40].indexOf(c)||-1!==[40,35].indexOf(A)&&40===c)return"×";if(-1!==U.indexOf(A)&&-1!==[20,26].indexOf(c)||-1!==U.indexOf(c)&&27===A)return"×";if(-1!==x.indexOf(A)&&-1!==x.indexOf(c))return"×";if(24===A&&-1!==x.indexOf(c))return"×";if(-1!==x.concat(25).indexOf(A)&&22===c||-1!==x.concat(25).indexOf(c)&&18===A)return"×";if(41===A&&41===c){for(var h=i[o],f=1;h>0&&(h--,41===e[h]);)f++;if(f%2!=0)return"×"}return 32===A&&33===c?"×":"÷"},R=function(t,e){e||(e={lineBreak:"normal",wordBreak:"normal"});var i=F(t,e.lineBreak),n=i[0],r=i[1],o=i[2];return"break-all"!==e.wordBreak&&"break-word"!==e.wordBreak||(r=r.map(function(t){return-1!==[25,30,42].indexOf(t)?37:t})),[n,r,"keep-all"===e.wordBreak?o.map(function(e,i){return e&&t[i]>=19968&&t[i]<=40959}):void 0]},L=function(){function t(t,e,i,n){this.codePoints=t,this.required=e===y,this.start=i,this.end=n}return t.prototype.slice=function(){return c.apply(void 0,this.codePoints.slice(this.start,this.end))},t}(),N=function(t,e){var i=l(t),n=R(i,e),r=n[0],o=n[1],a=n[2],s=i.length,A=0,c=0;return{next:function(){if(c>=s)return{done:!0,value:null};for(var t="×";c=48&&t<=57},O=function(t){return t>=55296&&t<=57343},M=function(t){return D(t)||t>=65&&t<=70||t>=97&&t<=102},P=function(t){return t>=97&&t<=122},K=function(t){return t>=65&&t<=90},G=function(t){return P(t)||K(t)},z=function(t){return t>=128},V=function(t){return 10===t||9===t||32===t},X=function(t){return G(t)||z(t)||95===t},W=function(t){return X(t)||D(t)||45===t},j=function(t){return t>=0&&t<=8||11===t||t>=14&&t<=31||127===t},Y=function(t,e){return 92===t&&10!==e},J=function(t,e,i){return 45===t?X(e)||Y(e,i):!!X(t)||!(92!==t||!Y(t,e))},q=function(t,e,i){return 43===t||45===t?!!D(e)||46===e&&D(i):D(46===t?e:t)},Z=function(t){var e=0,i=1;43!==t[e]&&45!==t[e]||(45===t[e]&&(i=-1),e++);for(var n=[];D(t[e]);)n.push(t[e++]);var r=n.length?parseInt(c.apply(void 0,n),10):0;46===t[e]&&e++;for(var o=[];D(t[e]);)o.push(t[e++]);var a=o.length,s=a?parseInt(c.apply(void 0,o),10):0;69!==t[e]&&101!==t[e]||e++;var A=1;43!==t[e]&&45!==t[e]||(45===t[e]&&(A=-1),e++);for(var l=[];D(t[e]);)l.push(t[e++]);var u=l.length?parseInt(c.apply(void 0,l),10):0;return i*(r+s*Math.pow(10,-a))*Math.pow(10,A*u)},$={type:f.LEFT_PARENTHESIS_TOKEN},tt={type:f.RIGHT_PARENTHESIS_TOKEN},et={type:f.COMMA_TOKEN},it={type:f.SUFFIX_MATCH_TOKEN},nt={type:f.PREFIX_MATCH_TOKEN},rt={type:f.COLUMN_TOKEN},ot={type:f.DASH_MATCH_TOKEN},at={type:f.INCLUDE_MATCH_TOKEN},st={type:f.LEFT_CURLY_BRACKET_TOKEN},At={type:f.RIGHT_CURLY_BRACKET_TOKEN},lt={type:f.SUBSTRING_MATCH_TOKEN},ct={type:f.BAD_URL_TOKEN},ut={type:f.BAD_STRING_TOKEN},dt={type:f.CDO_TOKEN},ht={type:f.CDC_TOKEN},ft={type:f.COLON_TOKEN},pt={type:f.SEMICOLON_TOKEN},gt={type:f.LEFT_SQUARE_BRACKET_TOKEN},mt={type:f.RIGHT_SQUARE_BRACKET_TOKEN},vt={type:f.WHITESPACE_TOKEN},wt={type:f.EOF_TOKEN},bt=function(){function t(){this._value=[]}return t.prototype.write=function(t){this._value=this._value.concat(l(t))},t.prototype.read=function(){for(var t=[],e=this.consumeToken();e!==wt;)t.push(e),e=this.consumeToken();return t},t.prototype.consumeToken=function(){var t=this.consumeCodePoint();switch(t){case 34:return this.consumeStringToken(34);case 35:var e=this.peekCodePoint(0),i=this.peekCodePoint(1),n=this.peekCodePoint(2);if(W(e)||Y(i,n)){var r=J(e,i,n)?2:1,o=this.consumeName();return{type:f.HASH_TOKEN,value:o,flags:r}}break;case 36:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),it;break;case 39:return this.consumeStringToken(39);case 40:return $;case 41:return tt;case 42:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),lt;break;case 43:if(q(t,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(t),this.consumeNumericToken();break;case 44:return et;case 45:var a=t,s=this.peekCodePoint(0),A=this.peekCodePoint(1);if(q(a,s,A))return this.reconsumeCodePoint(t),this.consumeNumericToken();if(J(a,s,A))return this.reconsumeCodePoint(t),this.consumeIdentLikeToken();if(45===s&&62===A)return this.consumeCodePoint(),this.consumeCodePoint(),ht;break;case 46:if(q(t,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(t),this.consumeNumericToken();break;case 47:if(42===this.peekCodePoint(0))for(this.consumeCodePoint();;){var l=this.consumeCodePoint();if(42===l&&47===(l=this.consumeCodePoint()))return this.consumeToken();if(-1===l)return this.consumeToken()}break;case 58:return ft;case 59:return pt;case 60:if(33===this.peekCodePoint(0)&&45===this.peekCodePoint(1)&&45===this.peekCodePoint(2))return this.consumeCodePoint(),this.consumeCodePoint(),dt;break;case 64:var u=this.peekCodePoint(0),d=this.peekCodePoint(1),h=this.peekCodePoint(2);if(J(u,d,h)){var o=this.consumeName();return{type:f.AT_KEYWORD_TOKEN,value:o}}break;case 91:return gt;case 92:if(Y(t,this.peekCodePoint(0)))return this.reconsumeCodePoint(t),this.consumeIdentLikeToken();break;case 93:return mt;case 61:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),nt;break;case 123:return st;case 125:return At;case 117:case 85:var p=this.peekCodePoint(0),g=this.peekCodePoint(1);return 43!==p||!M(g)&&63!==g||(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(t),this.consumeIdentLikeToken();case 124:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),ot;if(124===this.peekCodePoint(0))return this.consumeCodePoint(),rt;break;case 126:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),at;break;case-1:return wt}return V(t)?(this.consumeWhiteSpace(),vt):D(t)?(this.reconsumeCodePoint(t),this.consumeNumericToken()):X(t)?(this.reconsumeCodePoint(t),this.consumeIdentLikeToken()):{type:f.DELIM_TOKEN,value:c(t)}},t.prototype.consumeCodePoint=function(){var t=this._value.shift();return void 0===t?-1:t},t.prototype.reconsumeCodePoint=function(t){this._value.unshift(t)},t.prototype.peekCodePoint=function(t){return t>=this._value.length?-1:this._value[t]},t.prototype.consumeUnicodeRangeToken=function(){for(var t=[],e=this.consumeCodePoint();M(e)&&t.length<6;)t.push(e),e=this.consumeCodePoint();for(var i=!1;63===e&&t.length<6;)t.push(e),e=this.consumeCodePoint(),i=!0;if(i){var n=parseInt(c.apply(void 0,t.map(function(t){return 63===t?48:t})),16),r=parseInt(c.apply(void 0,t.map(function(t){return 63===t?70:t})),16);return{type:f.UNICODE_RANGE_TOKEN,start:n,end:r}}var o=parseInt(c.apply(void 0,t),16);if(45===this.peekCodePoint(0)&&M(this.peekCodePoint(1))){this.consumeCodePoint(),e=this.consumeCodePoint();for(var a=[];M(e)&&a.length<6;)a.push(e),e=this.consumeCodePoint();var r=parseInt(c.apply(void 0,a),16);return{type:f.UNICODE_RANGE_TOKEN,start:o,end:r}}return{type:f.UNICODE_RANGE_TOKEN,start:o,end:o}},t.prototype.consumeIdentLikeToken=function(){var t=this.consumeName();return"url"===t.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:f.FUNCTION_TOKEN,value:t}):{type:f.IDENT_TOKEN,value:t}},t.prototype.consumeUrlToken=function(){var t=[];if(this.consumeWhiteSpace(),-1===this.peekCodePoint(0))return{type:f.URL_TOKEN,value:""};var e=this.peekCodePoint(0);if(39===e||34===e){var i=this.consumeStringToken(this.consumeCodePoint());return i.type===f.STRING_TOKEN&&(this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:f.URL_TOKEN,value:i.value}):(this.consumeBadUrlRemnants(),ct)}for(;;){var n=this.consumeCodePoint();if(-1===n||41===n)return{type:f.URL_TOKEN,value:c.apply(void 0,t)};if(V(n))return this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:f.URL_TOKEN,value:c.apply(void 0,t)}):(this.consumeBadUrlRemnants(),ct);if(34===n||39===n||40===n||j(n))return this.consumeBadUrlRemnants(),ct;if(92===n){if(!Y(n,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),ct;t.push(this.consumeEscapedCodePoint())}else t.push(n)}},t.prototype.consumeWhiteSpace=function(){for(;V(this.peekCodePoint(0));)this.consumeCodePoint()},t.prototype.consumeBadUrlRemnants=function(){for(;;){var t=this.consumeCodePoint();if(41===t||-1===t)return;Y(t,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},t.prototype.consumeStringSlice=function(t){for(var e="";t>0;){var i=Math.min(6e4,t);e+=c.apply(void 0,this._value.splice(0,i)),t-=i}return this._value.shift(),e},t.prototype.consumeStringToken=function(t){for(var e="",i=0;;){var n=this._value[i];if(-1===n||void 0===n||n===t)return e+=this.consumeStringSlice(i),{type:f.STRING_TOKEN,value:e};if(10===n)return this._value.splice(0,i),ut;if(92===n){var r=this._value[i+1];-1!==r&&void 0!==r&&(10===r?(e+=this.consumeStringSlice(i),i=-1,this._value.shift()):Y(n,r)&&(e+=this.consumeStringSlice(i),e+=c(this.consumeEscapedCodePoint()),i=-1))}i++}},t.prototype.consumeNumber=function(){var t=[],e=4,i=this.peekCodePoint(0);for(43!==i&&45!==i||t.push(this.consumeCodePoint());D(this.peekCodePoint(0));)t.push(this.consumeCodePoint());i=this.peekCodePoint(0);var n=this.peekCodePoint(1);if(46===i&&D(n))for(t.push(this.consumeCodePoint(),this.consumeCodePoint()),e=8;D(this.peekCodePoint(0));)t.push(this.consumeCodePoint());i=this.peekCodePoint(0),n=this.peekCodePoint(1);var r=this.peekCodePoint(2);if((69===i||101===i)&&((43===n||45===n)&&D(r)||D(n)))for(t.push(this.consumeCodePoint(),this.consumeCodePoint()),e=8;D(this.peekCodePoint(0));)t.push(this.consumeCodePoint());return[Z(t),e]},t.prototype.consumeNumericToken=function(){var t=this.consumeNumber(),e=t[0],i=t[1],n=this.peekCodePoint(0),r=this.peekCodePoint(1),o=this.peekCodePoint(2);if(J(n,r,o)){var a=this.consumeName();return{type:f.DIMENSION_TOKEN,number:e,flags:i,unit:a}}return 37===n?(this.consumeCodePoint(),{type:f.PERCENTAGE_TOKEN,number:e,flags:i}):{type:f.NUMBER_TOKEN,number:e,flags:i}},t.prototype.consumeEscapedCodePoint=function(){var t=this.consumeCodePoint();if(M(t)){for(var e=c(t);M(this.peekCodePoint(0))&&e.length<6;)e+=c(this.consumeCodePoint());V(this.peekCodePoint(0))&&this.consumeCodePoint();var i=parseInt(e,16);return 0===i||O(i)||i>1114111?65533:i}return-1===t?65533:t},t.prototype.consumeName=function(){for(var t="";;){var e=this.consumeCodePoint();if(W(e))t+=c(e);else{if(!Y(e,this.peekCodePoint(0)))return this.reconsumeCodePoint(e),t;t+=c(this.consumeEscapedCodePoint())}}},t}(),yt=function(){function t(t){this._tokens=t}return t.create=function(e){var i=new bt;return i.write(e),new t(i.read())},t.parseValue=function(e){return t.create(e).parseComponentValue()},t.parseValues=function(e){return t.create(e).parseComponentValues()},t.prototype.parseComponentValue=function(){for(var t=this.consumeToken();t.type===f.WHITESPACE_TOKEN;)t=this.consumeToken();if(t.type===f.EOF_TOKEN)throw new SyntaxError("Error parsing CSS component value, unexpected EOF");this.reconsumeToken(t);var e=this.consumeComponentValue();do{t=this.consumeToken()}while(t.type===f.WHITESPACE_TOKEN);if(t.type===f.EOF_TOKEN)return e;throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one")},t.prototype.parseComponentValues=function(){for(var t=[];;){var e=this.consumeComponentValue();if(e.type===f.EOF_TOKEN)return t;t.push(e),t.push()}},t.prototype.consumeComponentValue=function(){var t=this.consumeToken();switch(t.type){case f.LEFT_CURLY_BRACKET_TOKEN:case f.LEFT_SQUARE_BRACKET_TOKEN:case f.LEFT_PARENTHESIS_TOKEN:return this.consumeSimpleBlock(t.type);case f.FUNCTION_TOKEN:return this.consumeFunction(t)}return t},t.prototype.consumeSimpleBlock=function(t){for(var e={type:t,values:[]},i=this.consumeToken();;){if(i.type===f.EOF_TOKEN||Ft(i,t))return e;this.reconsumeToken(i),e.values.push(this.consumeComponentValue()),i=this.consumeToken()}},t.prototype.consumeFunction=function(t){for(var e={name:t.value,values:[],type:f.FUNCTION};;){var i=this.consumeToken();if(i.type===f.EOF_TOKEN||i.type===f.RIGHT_PARENTHESIS_TOKEN)return e;this.reconsumeToken(i),e.values.push(this.consumeComponentValue())}},t.prototype.consumeToken=function(){var t=this._tokens.shift();return void 0===t?wt:t},t.prototype.reconsumeToken=function(t){this._tokens.unshift(t)},t}(),Bt=function(t){return t.type===f.DIMENSION_TOKEN},xt=function(t){return t.type===f.NUMBER_TOKEN},Et=function(t){return t.type===f.IDENT_TOKEN},_t=function(t){return t.type===f.STRING_TOKEN},Ct=function(t,e){return Et(t)&&t.value===e},Tt=function(t){return t.type!==f.WHITESPACE_TOKEN},Ut=function(t){return t.type!==f.WHITESPACE_TOKEN&&t.type!==f.COMMA_TOKEN},Qt=function(t){var e=[],i=[];return t.forEach(function(t){if(t.type===f.COMMA_TOKEN){if(0===i.length)throw new Error("Error parsing function args, zero tokens for arg");return e.push(i),void(i=[])}t.type!==f.WHITESPACE_TOKEN&&i.push(t)}),i.length&&e.push(i),e},Ft=function(t,e){return e===f.LEFT_CURLY_BRACKET_TOKEN&&t.type===f.RIGHT_CURLY_BRACKET_TOKEN||(e===f.LEFT_SQUARE_BRACKET_TOKEN&&t.type===f.RIGHT_SQUARE_BRACKET_TOKEN||e===f.LEFT_PARENTHESIS_TOKEN&&t.type===f.RIGHT_PARENTHESIS_TOKEN)},kt=function(t){return t.type===f.NUMBER_TOKEN||t.type===f.DIMENSION_TOKEN},St=function(t){return t.type===f.PERCENTAGE_TOKEN||kt(t)},It=function(t){return t.length>1?[t[0],t[1]]:[t[0]]},Rt={type:f.NUMBER_TOKEN,number:0,flags:4},Lt={type:f.PERCENTAGE_TOKEN,number:50,flags:4},Nt={type:f.PERCENTAGE_TOKEN,number:100,flags:4},Ht=function(t,e,i){var n=t[0],r=t[1];return[Dt(n,e),Dt(void 0!==r?r:n,i)]},Dt=function(t,e){if(t.type===f.PERCENTAGE_TOKEN)return t.number/100*e;if(Bt(t))switch(t.unit){case"rem":case"em":return 16*t.number;case"px":default:return t.number}return t.number},Ot={name:"angle",parse:function(t){if(t.type===f.DIMENSION_TOKEN)switch(t.unit){case"deg":return Math.PI*t.number/180;case"grad":return Math.PI/200*t.number;case"rad":return t.number;case"turn":return 2*Math.PI*t.number}throw new Error("Unsupported angle type")}},Mt=function(t){return t.type===f.DIMENSION_TOKEN&&("deg"===t.unit||"grad"===t.unit||"rad"===t.unit||"turn"===t.unit)},Pt=function(t){switch(t.filter(Et).map(function(t){return t.value}).join(" ")){case"to bottom right":case"to right bottom":case"left top":case"top left":return[Rt,Rt];case"to top":case"bottom":return Kt(0);case"to bottom left":case"to left bottom":case"right top":case"top right":return[Rt,Nt];case"to right":case"left":return Kt(90);case"to top left":case"to left top":case"right bottom":case"bottom right":return[Nt,Nt];case"to bottom":case"top":return Kt(180);case"to top right":case"to right top":case"left bottom":case"bottom left":return[Nt,Rt];case"to left":case"right":return Kt(270)}return 0},Kt=function(t){return Math.PI*t/180},Gt={name:"color",parse:function(t){if(t.type===f.FUNCTION){var e=Jt[t.name];if(void 0===e)throw new Error('Attempting to parse an unsupported color function "'+t.name+'"');return e(t.values)}if(t.type===f.HASH_TOKEN){if(3===t.value.length){var i=t.value.substring(0,1),n=t.value.substring(1,2),r=t.value.substring(2,3);return Xt(parseInt(i+i,16),parseInt(n+n,16),parseInt(r+r,16),1)}if(4===t.value.length){var i=t.value.substring(0,1),n=t.value.substring(1,2),r=t.value.substring(2,3),o=t.value.substring(3,4);return Xt(parseInt(i+i,16),parseInt(n+n,16),parseInt(r+r,16),parseInt(o+o,16)/255)}if(6===t.value.length){var i=t.value.substring(0,2),n=t.value.substring(2,4),r=t.value.substring(4,6);return Xt(parseInt(i,16),parseInt(n,16),parseInt(r,16),1)}if(8===t.value.length){var i=t.value.substring(0,2),n=t.value.substring(2,4),r=t.value.substring(4,6),o=t.value.substring(6,8);return Xt(parseInt(i,16),parseInt(n,16),parseInt(r,16),parseInt(o,16)/255)}}if(t.type===f.IDENT_TOKEN){var a=qt[t.value.toUpperCase()];if(void 0!==a)return a}return qt.TRANSPARENT}},zt=function(t){return 0==(255&t)},Vt=function(t){var e=255&t,i=255&t>>8,n=255&t>>16,r=255&t>>24;return e<255?"rgba("+r+","+n+","+i+","+e/255+")":"rgb("+r+","+n+","+i+")"},Xt=function(t,e,i,n){return(t<<24|e<<16|i<<8|Math.round(255*n)<<0)>>>0},Wt=function(t,e){if(t.type===f.NUMBER_TOKEN)return t.number;if(t.type===f.PERCENTAGE_TOKEN){var i=3===e?1:255;return 3===e?t.number/100*i:Math.round(t.number/100*i)}return 0},jt=function(t){var e=t.filter(Ut);if(3===e.length){var i=e.map(Wt),n=i[0],r=i[1],o=i[2];return Xt(n,r,o,1)}if(4===e.length){var a=e.map(Wt),n=a[0],r=a[1],o=a[2],s=a[3];return Xt(n,r,o,s)}return 0},Yt=function(t){var e=t.filter(Ut),i=e[0],r=e[1],o=e[2],a=e[3],s=(i.type===f.NUMBER_TOKEN?Kt(i.number):Ot.parse(i))/(2*Math.PI),A=St(r)?r.number/100:0,l=St(o)?o.number/100:0,c=void 0!==a&&St(a)?Dt(a,1):1;if(0===A)return Xt(255*l,255*l,255*l,1);var u=l<=.5?l*(A+1):l+A-l*A,d=2*l-u,h=n(d,u,s+1/3),p=n(d,u,s),g=n(d,u,s-1/3);return Xt(255*h,255*p,255*g,c)},Jt={hsl:Yt,hsla:Yt,rgb:jt,rgba:jt},qt={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199};!function(t){t[t.VALUE=0]="VALUE",t[t.LIST=1]="LIST",t[t.IDENT_VALUE=2]="IDENT_VALUE",t[t.TYPE_VALUE=3]="TYPE_VALUE",t[t.TOKEN_VALUE=4]="TOKEN_VALUE"}(H||(H={}));var Zt;!function(t){t[t.BORDER_BOX=0]="BORDER_BOX",t[t.PADDING_BOX=1]="PADDING_BOX",t[t.CONTENT_BOX=2]="CONTENT_BOX"}(Zt||(Zt={}));var $t,te={name:"background-clip",initialValue:"border-box",prefix:!1,type:H.LIST,parse:function(t){return t.map(function(t){if(Et(t))switch(t.value){case"padding-box":return Zt.PADDING_BOX;case"content-box":return Zt.CONTENT_BOX}return Zt.BORDER_BOX})}},ee={name:"background-color",initialValue:"transparent",prefix:!1,type:H.TYPE_VALUE,format:"color"},ie=function(t){var e=Gt.parse(t[0]),i=t[1];return i&&St(i)?{color:e,stop:i}:{color:e,stop:null}},ne=function(t,e){var i=t[0],n=t[t.length-1];null===i.stop&&(i.stop=Rt),null===n.stop&&(n.stop=Nt);for(var r=[],o=0,a=0;ao?r.push(A):r.push(o),o=A}else r.push(null)}for(var l=null,a=0;at.optimumDistance)?{optimumCorner:e,optimumDistance:s}:t},{optimumDistance:r?1/0:-1/0,optimumCorner:null}).optimumCorner},Ae=function(t,e,i,n,r){var o=0,a=0;switch(t.size){case He.CLOSEST_SIDE:t.shape===Re.CIRCLE?o=a=Math.min(Math.abs(e),Math.abs(e-n),Math.abs(i),Math.abs(i-r)):t.shape===Re.ELLIPSE&&(o=Math.min(Math.abs(e),Math.abs(e-n)),a=Math.min(Math.abs(i),Math.abs(i-r)));break;case He.CLOSEST_CORNER:if(t.shape===Re.CIRCLE)o=a=Math.min(ae(e,i),ae(e,i-r),ae(e-n,i),ae(e-n,i-r));else if(t.shape===Re.ELLIPSE){var s=Math.min(Math.abs(i),Math.abs(i-r))/Math.min(Math.abs(e),Math.abs(e-n)),A=se(n,r,e,i,!0),l=A[0],c=A[1];o=ae(l-e,(c-i)/s),a=s*o}break;case He.FARTHEST_SIDE:t.shape===Re.CIRCLE?o=a=Math.max(Math.abs(e),Math.abs(e-n),Math.abs(i),Math.abs(i-r)):t.shape===Re.ELLIPSE&&(o=Math.max(Math.abs(e),Math.abs(e-n)),a=Math.max(Math.abs(i),Math.abs(i-r)));break;case He.FARTHEST_CORNER:if(t.shape===Re.CIRCLE)o=a=Math.max(ae(e,i),ae(e,i-r),ae(e-n,i),ae(e-n,i-r));else if(t.shape===Re.ELLIPSE){var s=Math.max(Math.abs(i),Math.abs(i-r))/Math.max(Math.abs(e),Math.abs(e-n)),u=se(n,r,e,i,!1),l=u[0],c=u[1];o=ae(l-e,(c-i)/s),a=s*o}}return Array.isArray(t.size)&&(o=Dt(t.size[0],n),a=2===t.size.length?Dt(t.size[1],r):o),[o,a]},le=function(t){var e=Kt(180),i=[];return Qt(t).forEach(function(t,n){if(0===n){var r=t[0];if(r.type===f.IDENT_TOKEN&&"to"===r.value)return void(e=Pt(t));if(Mt(r))return void(e=Ot.parse(r))}var o=ie(t);i.push(o)}),{angle:e,stops:i,type:$t.LINEAR_GRADIENT}},ce=function(t){var e=Kt(180),i=[];return Qt(t).forEach(function(t,n){if(0===n){var r=t[0];if(r.type===f.IDENT_TOKEN&&-1!==["top","left","right","bottom"].indexOf(r.value))return void(e=Pt(t));if(Mt(r))return void(e=(Ot.parse(r)+Kt(270))%Kt(360))}var o=ie(t);i.push(o)}),{angle:e,stops:i,type:$t.LINEAR_GRADIENT}},ue=function(t){if(t.createRange){var e=t.createRange();if(e.getBoundingClientRect){var i=t.createElement("boundtest");i.style.height="123px",i.style.display="block",t.body.appendChild(i),e.selectNode(i);var n=e.getBoundingClientRect(),r=Math.round(n.height);if(t.body.removeChild(i),123===r)return!0}}return!1},de=function(){return void 0!==(new Image).crossOrigin},he=function(){return"string"==typeof(new XMLHttpRequest).responseType},fe=function(t){var e=new Image,i=t.createElement("canvas"),n=i.getContext("2d");if(!n)return!1;e.src="data:image/svg+xml,";try{n.drawImage(e,0,0),i.toDataURL()}catch(t){return!1}return!0},pe=function(t){return 0===t[0]&&255===t[1]&&0===t[2]&&255===t[3]},ge=function(t){var e=t.createElement("canvas");e.width=100,e.height=100;var i=e.getContext("2d");if(!i)return Promise.reject(!1);i.fillStyle="rgb(0, 255, 0)",i.fillRect(0,0,100,100);var n=new Image,r=e.toDataURL();n.src=r;var o=me(100,100,0,0,n);return i.fillStyle="red",i.fillRect(0,0,100,100),ve(o).then(function(e){i.drawImage(e,0,0);var n=i.getImageData(0,0,100,100).data;i.fillStyle="red",i.fillRect(0,0,100,100);var o=t.createElement("div");return o.style.backgroundImage="url("+r+")",o.style.height="100px",pe(n)?ve(me(100,100,0,0,o)):Promise.reject(!1)}).then(function(t){return i.drawImage(t,0,0),pe(i.getImageData(0,0,100,100).data)}).catch(function(){return!1})},me=function(t,e,i,n,r){var o="http://www.w3.org/2000/svg",a=document.createElementNS(o,"svg"),s=document.createElementNS(o,"foreignObject");return a.setAttributeNS(null,"width",t.toString()),a.setAttributeNS(null,"height",e.toString()),s.setAttributeNS(null,"width","100%"),s.setAttributeNS(null,"height","100%"),s.setAttributeNS(null,"x",i.toString()),s.setAttributeNS(null,"y",n.toString()),s.setAttributeNS(null,"externalResourcesRequired","true"),a.appendChild(s),s.appendChild(r),a},ve=function(t){return new Promise(function(e,i){var n=new Image;n.onload=function(){return e(n)},n.onerror=i,n.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent((new XMLSerializer).serializeToString(t))})},we={get SUPPORT_RANGE_BOUNDS(){var t=ue(document);return Object.defineProperty(we,"SUPPORT_RANGE_BOUNDS",{value:t}),t},get SUPPORT_SVG_DRAWING(){var t=fe(document);return Object.defineProperty(we,"SUPPORT_SVG_DRAWING",{value:t}),t},get SUPPORT_FOREIGNOBJECT_DRAWING(){var t="function"==typeof Array.from&&"function"==typeof window.fetch?ge(document):Promise.resolve(!1);return Object.defineProperty(we,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:t}),t},get SUPPORT_CORS_IMAGES(){var t=de();return Object.defineProperty(we,"SUPPORT_CORS_IMAGES",{value:t}),t},get SUPPORT_RESPONSE_TYPE(){var t=he();return Object.defineProperty(we,"SUPPORT_RESPONSE_TYPE",{value:t}),t},get SUPPORT_CORS_XHR(){var t="withCredentials"in new XMLHttpRequest;return Object.defineProperty(we,"SUPPORT_CORS_XHR",{value:t}),t}},be=function(){function t(t){this.id=t,this.start=Date.now()}return t.prototype.debug=function(){for(var t=[],e=0;e0&&setTimeout(function(){return e("Timed out ("+a._options.imageTimeout+"ms) loading image")},a._options.imageTimeout)})];case 3:return[2,i.sent()]}})})},t.prototype.has=function(t){return void 0!==this._cache[t]},t.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},t.prototype.proxy=function(t){var e=this,i=this._options.proxy;if(!i)throw new Error("No proxy defined");var n=t.substring(0,256);return new Promise(function(r,o){var a=we.SUPPORT_RESPONSE_TYPE?"blob":"text",s=new XMLHttpRequest;if(s.onload=function(){if(200===s.status)if("text"===a)r(s.response);else{var t=new FileReader;t.addEventListener("load",function(){return r(t.result)},!1),t.addEventListener("error",function(t){return o(t)},!1),t.readAsDataURL(s.response)}else o("Failed to proxy resource "+n+" with status code "+s.status)},s.onerror=o,s.open("GET",i+"?url="+encodeURIComponent(t)+"&responseType="+a),"text"!==a&&s instanceof XMLHttpRequest&&(s.responseType=a),e._options.imageTimeout){var A=e._options.imageTimeout;s.timeout=A,s.ontimeout=function(){return o("Timed out ("+A+"ms) proxying "+n)}}s.send()})},t}(),xe=/^data:image\/svg\+xml/i,Ee=/^data:image\/.*;base64,/i,_e=/^data:image\/.*/i,Ce=function(t){return we.SUPPORT_SVG_DRAWING||!Fe(t)},Te=function(t){return _e.test(t)},Ue=function(t){return Ee.test(t)},Qe=function(t){return"blob"===t.substr(0,4)},Fe=function(t){return"svg"===t.substr(-3).toLowerCase()||xe.test(t)},ke=function(t){var e=Kt(180),i=[],n=$t.LINEAR_GRADIENT,r=Re.CIRCLE,o=He.FARTHEST_CORNER,a=[];return Qt(t).forEach(function(t,e){var r=t[0];if(0===e){if(Et(r)&&"linear"===r.value)return void(n=$t.LINEAR_GRADIENT);if(Et(r)&&"radial"===r.value)return void(n=$t.RADIAL_GRADIENT)}if(r.type===f.FUNCTION)if("from"===r.name){var o=Gt.parse(r.values[0]);i.push({stop:Rt,color:o})}else if("to"===r.name){var o=Gt.parse(r.values[0]);i.push({stop:Nt,color:o})}else if("color-stop"===r.name){var a=r.values.filter(Ut);if(2===a.length){var o=Gt.parse(a[1]),s=a[0];xt(s)&&i.push({stop:{type:f.PERCENTAGE_TOKEN,number:100*s.number,flags:s.flags},color:o})}}}),n===$t.LINEAR_GRADIENT?{angle:(e+Kt(180))%Kt(360),stops:i,type:n}:{size:o,shape:r,stops:i,position:a,type:n}},Se=function(t){var e=Re.CIRCLE,i=He.FARTHEST_CORNER,n=[],r=[];return Qt(t).forEach(function(t,o){var a=!0;if(0===o){var s=!1;a=t.reduce(function(t,n){if(s)if(Et(n))switch(n.value){case"center":return r.push(Lt),t;case"top":case"left":return r.push(Rt),t;case"right":case"bottom":return r.push(Nt),t}else(St(n)||kt(n))&&r.push(n);else if(Et(n))switch(n.value){case"circle":return e=Re.CIRCLE,!1;case"ellipse":return e=Re.ELLIPSE,!1;case"at":return s=!0,!1;case"closest-side":return i=He.CLOSEST_SIDE,!1;case"cover":case"farthest-side":return i=He.FARTHEST_SIDE,!1;case"contain":case"closest-corner":return i=He.CLOSEST_CORNER,!1;case"farthest-corner":return i=He.FARTHEST_CORNER,!1}else if(kt(n)||St(n))return Array.isArray(i)||(i=[]),i.push(n),!1;return t},a)}if(a){var A=ie(t);n.push(A)}}),{size:i,shape:e,stops:n,position:r,type:$t.RADIAL_GRADIENT}},Ie=function(t){var e=Re.CIRCLE,i=He.FARTHEST_CORNER,n=[],r=[];return Qt(t).forEach(function(t,o){var a=!0;if(0===o?a=t.reduce(function(t,e){if(Et(e))switch(e.value){case"center":return r.push(Lt),!1;case"top":case"left":return r.push(Rt),!1;case"right":case"bottom":return r.push(Nt),!1}else if(St(e)||kt(e))return r.push(e),!1;return t},a):1===o&&(a=t.reduce(function(t,n){if(Et(n))switch(n.value){case"circle":return e=Re.CIRCLE,!1;case"ellipse":return e=Re.ELLIPSE,!1;case"contain":case"closest-side":return i=He.CLOSEST_SIDE,!1;case"farthest-side":return i=He.FARTHEST_SIDE,!1;case"closest-corner":return i=He.CLOSEST_CORNER,!1;case"cover":case"farthest-corner":return i=He.FARTHEST_CORNER,!1}else if(kt(n)||St(n))return Array.isArray(i)||(i=[]),i.push(n),!1;return t},a)),a){var s=ie(t);n.push(s)}}),{size:i,shape:e,stops:n,position:r,type:$t.RADIAL_GRADIENT}};!function(t){t[t.URL=0]="URL",t[t.LINEAR_GRADIENT=1]="LINEAR_GRADIENT",t[t.RADIAL_GRADIENT=2]="RADIAL_GRADIENT"}($t||($t={}));var Re,Le=function(t){return t.type===$t.LINEAR_GRADIENT},Ne=function(t){return t.type===$t.RADIAL_GRADIENT};!function(t){t[t.CIRCLE=0]="CIRCLE",t[t.ELLIPSE=1]="ELLIPSE"}(Re||(Re={}));var He;!function(t){t[t.CLOSEST_SIDE=0]="CLOSEST_SIDE",t[t.FARTHEST_SIDE=1]="FARTHEST_SIDE",t[t.CLOSEST_CORNER=2]="CLOSEST_CORNER",t[t.FARTHEST_CORNER=3]="FARTHEST_CORNER"}(He||(He={}));var De,Oe={name:"image",parse:function(t){if(t.type===f.URL_TOKEN){var e={url:t.value,type:$t.URL};return ye.getInstance().addImage(t.value),e}if(t.type===f.FUNCTION){var i=Me[t.name];if(void 0===i)throw new Error('Attempting to parse an unsupported image function "'+t.name+'"');return i(t.values)}throw new Error("Unsupported image type")}},Me={"linear-gradient":le,"-moz-linear-gradient":ce,"-ms-linear-gradient":ce,"-o-linear-gradient":ce,"-webkit-linear-gradient":ce,"radial-gradient":Se,"-moz-radial-gradient":Ie,"-ms-radial-gradient":Ie,"-o-radial-gradient":Ie,"-webkit-radial-gradient":Ie,"-webkit-gradient":ke},Pe={name:"background-image",initialValue:"none",type:H.LIST,prefix:!1,parse:function(t){if(0===t.length)return[];var e=t[0];return e.type===f.IDENT_TOKEN&&"none"===e.value?[]:t.filter(Ut).map(Oe.parse)}},Ke={name:"background-origin",initialValue:"border-box",prefix:!1,type:H.LIST,parse:function(t){return t.map(function(t){if(Et(t))switch(t.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},Ge={name:"background-position",initialValue:"0% 0%",type:H.LIST,prefix:!1,parse:function(t){return Qt(t).map(function(t){return t.filter(St)}).map(It)}};!function(t){t[t.REPEAT=0]="REPEAT",t[t.NO_REPEAT=1]="NO_REPEAT",t[t.REPEAT_X=2]="REPEAT_X",t[t.REPEAT_Y=3]="REPEAT_Y"}(De||(De={}));var ze,Ve={name:"background-repeat",initialValue:"repeat",prefix:!1,type:H.LIST,parse:function(t){return Qt(t).map(function(t){return t.filter(Et).map(function(t){return t.value}).join(" ")}).map(Xe)}},Xe=function(t){switch(t){case"no-repeat":return De.NO_REPEAT;case"repeat-x":case"repeat no-repeat":return De.REPEAT_X;case"repeat-y":case"no-repeat repeat":return De.REPEAT_Y;case"repeat":default:return De.REPEAT}};!function(t){t.AUTO="auto",t.CONTAIN="contain",t.COVER="cover"}(ze||(ze={}));var We,je={name:"background-size",initialValue:"0",prefix:!1,type:H.LIST,parse:function(t){return Qt(t).map(function(t){return t.filter(Ye)})}},Ye=function(t){return Et(t)||St(t)},Je=function(t){return{name:"border-"+t+"-color",initialValue:"transparent",prefix:!1,type:H.TYPE_VALUE,format:"color"}},qe=Je("top"),Ze=Je("right"),$e=Je("bottom"),ti=Je("left"),ei=function(t){return{name:"border-radius-"+t,initialValue:"0 0",prefix:!1,type:H.LIST,parse:function(t){return It(t.filter(St))}}},ii=ei("top-left"),ni=ei("top-right"),ri=ei("bottom-right"),oi=ei("bottom-left");!function(t){t[t.NONE=0]="NONE",t[t.SOLID=1]="SOLID"}(We||(We={}));var ai,si=function(t){return{name:"border-"+t+"-style",initialValue:"solid",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"none":return We.NONE}return We.SOLID}}},Ai=si("top"),li=si("right"),ci=si("bottom"),ui=si("left"),di=function(t){return{name:"border-"+t+"-width",initialValue:"0",type:H.VALUE,prefix:!1,parse:function(t){return Bt(t)?t.number:0}}},hi=di("top"),fi=di("right"),pi=di("bottom"),gi=di("left"),mi={name:"color",initialValue:"transparent",prefix:!1,type:H.TYPE_VALUE,format:"color"},vi={name:"display",initialValue:"inline-block",prefix:!1,type:H.LIST,parse:function(t){return t.filter(Et).reduce(function(t,e){return t|wi(e.value)},0)}},wi=function(t){switch(t){case"block":return 2;case"inline":return 4;case"run-in":return 8;case"flow":return 16;case"flow-root":return 32;case"table":return 64;case"flex":case"-webkit-flex":return 128;case"grid":return 256;case"ruby":return 512;case"subgrid":return 1024;case"list-item":return 2048;case"table-row-group":return 4096;case"table-header-group":return 8192;case"table-footer-group":return 16384;case"table-row":return 32768;case"table-cell":return 65536;case"table-column-group":return 131072;case"table-column":return 262144;case"table-caption":return 524288;case"ruby-base":return 1048576;case"ruby-text":return 2097152;case"ruby-base-container":return 4194304;case"ruby-text-container":return 8388608;case"contents":return 16777216;case"inline-block":return 33554432;case"inline-list-item":return 67108864;case"inline-table":return 134217728;case"inline-flex":return 268435456;case"inline-grid":return 536870912}return 0};!function(t){t[t.NONE=0]="NONE",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.INLINE_START=3]="INLINE_START",t[t.INLINE_END=4]="INLINE_END"}(ai||(ai={}));var bi,yi={name:"float",initialValue:"none",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"left":return ai.LEFT;case"right":return ai.RIGHT;case"inline-start":return ai.INLINE_START;case"inline-end":return ai.INLINE_END}return ai.NONE}},Bi={name:"letter-spacing",initialValue:"0",prefix:!1,type:H.VALUE,parse:function(t){return t.type===f.IDENT_TOKEN&&"normal"===t.value?0:t.type===f.NUMBER_TOKEN?t.number:t.type===f.DIMENSION_TOKEN?t.number:0}};!function(t){t.NORMAL="normal",t.STRICT="strict"}(bi||(bi={}));var xi,Ei={name:"line-break",initialValue:"normal",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"strict":return bi.STRICT;case"normal":default:return bi.NORMAL}}},_i={name:"line-height",initialValue:"normal",prefix:!1,type:H.TOKEN_VALUE},Ci=function(t,e){return Et(t)&&"normal"===t.value?1.2*e:t.type===f.NUMBER_TOKEN?e*t.number:St(t)?Dt(t,e):e},Ti={name:"list-style-image",initialValue:"none",type:H.VALUE,prefix:!1,parse:function(t){return t.type===f.IDENT_TOKEN&&"none"===t.value?null:Oe.parse(t)}};!function(t){t[t.INSIDE=0]="INSIDE",t[t.OUTSIDE=1]="OUTSIDE"}(xi||(xi={}));var Ui,Qi={name:"list-style-position",initialValue:"outside",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"inside":return xi.INSIDE;case"outside":default:return xi.OUTSIDE}}};!function(t){t[t.NONE=-1]="NONE",t[t.DISC=0]="DISC",t[t.CIRCLE=1]="CIRCLE",t[t.SQUARE=2]="SQUARE",t[t.DECIMAL=3]="DECIMAL",t[t.CJK_DECIMAL=4]="CJK_DECIMAL",t[t.DECIMAL_LEADING_ZERO=5]="DECIMAL_LEADING_ZERO",t[t.LOWER_ROMAN=6]="LOWER_ROMAN",t[t.UPPER_ROMAN=7]="UPPER_ROMAN",t[t.LOWER_GREEK=8]="LOWER_GREEK",t[t.LOWER_ALPHA=9]="LOWER_ALPHA",t[t.UPPER_ALPHA=10]="UPPER_ALPHA",t[t.ARABIC_INDIC=11]="ARABIC_INDIC",t[t.ARMENIAN=12]="ARMENIAN",t[t.BENGALI=13]="BENGALI",t[t.CAMBODIAN=14]="CAMBODIAN",t[t.CJK_EARTHLY_BRANCH=15]="CJK_EARTHLY_BRANCH",t[t.CJK_HEAVENLY_STEM=16]="CJK_HEAVENLY_STEM",t[t.CJK_IDEOGRAPHIC=17]="CJK_IDEOGRAPHIC",t[t.DEVANAGARI=18]="DEVANAGARI",t[t.ETHIOPIC_NUMERIC=19]="ETHIOPIC_NUMERIC",t[t.GEORGIAN=20]="GEORGIAN",t[t.GUJARATI=21]="GUJARATI",t[t.GURMUKHI=22]="GURMUKHI",t[t.HEBREW=22]="HEBREW",t[t.HIRAGANA=23]="HIRAGANA",t[t.HIRAGANA_IROHA=24]="HIRAGANA_IROHA",t[t.JAPANESE_FORMAL=25]="JAPANESE_FORMAL",t[t.JAPANESE_INFORMAL=26]="JAPANESE_INFORMAL",t[t.KANNADA=27]="KANNADA",t[t.KATAKANA=28]="KATAKANA",t[t.KATAKANA_IROHA=29]="KATAKANA_IROHA",t[t.KHMER=30]="KHMER",t[t.KOREAN_HANGUL_FORMAL=31]="KOREAN_HANGUL_FORMAL",t[t.KOREAN_HANJA_FORMAL=32]="KOREAN_HANJA_FORMAL",t[t.KOREAN_HANJA_INFORMAL=33]="KOREAN_HANJA_INFORMAL",t[t.LAO=34]="LAO",t[t.LOWER_ARMENIAN=35]="LOWER_ARMENIAN",t[t.MALAYALAM=36]="MALAYALAM",t[t.MONGOLIAN=37]="MONGOLIAN",t[t.MYANMAR=38]="MYANMAR",t[t.ORIYA=39]="ORIYA",t[t.PERSIAN=40]="PERSIAN",t[t.SIMP_CHINESE_FORMAL=41]="SIMP_CHINESE_FORMAL",t[t.SIMP_CHINESE_INFORMAL=42]="SIMP_CHINESE_INFORMAL",t[t.TAMIL=43]="TAMIL",t[t.TELUGU=44]="TELUGU",t[t.THAI=45]="THAI",t[t.TIBETAN=46]="TIBETAN",t[t.TRAD_CHINESE_FORMAL=47]="TRAD_CHINESE_FORMAL",t[t.TRAD_CHINESE_INFORMAL=48]="TRAD_CHINESE_INFORMAL",t[t.UPPER_ARMENIAN=49]="UPPER_ARMENIAN",t[t.DISCLOSURE_OPEN=50]="DISCLOSURE_OPEN",t[t.DISCLOSURE_CLOSED=51]="DISCLOSURE_CLOSED"}(Ui||(Ui={}));var Fi,ki={name:"list-style-type",initialValue:"none",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"disc":return Ui.DISC;case"circle":return Ui.CIRCLE;case"square":return Ui.SQUARE;case"decimal":return Ui.DECIMAL;case"cjk-decimal":return Ui.CJK_DECIMAL;case"decimal-leading-zero":return Ui.DECIMAL_LEADING_ZERO;case"lower-roman":return Ui.LOWER_ROMAN;case"upper-roman":return Ui.UPPER_ROMAN;case"lower-greek":return Ui.LOWER_GREEK;case"lower-alpha":return Ui.LOWER_ALPHA;case"upper-alpha":return Ui.UPPER_ALPHA;case"arabic-indic":return Ui.ARABIC_INDIC;case"armenian":return Ui.ARMENIAN;case"bengali":return Ui.BENGALI;case"cambodian":return Ui.CAMBODIAN;case"cjk-earthly-branch":return Ui.CJK_EARTHLY_BRANCH;case"cjk-heavenly-stem":return Ui.CJK_HEAVENLY_STEM;case"cjk-ideographic":return Ui.CJK_IDEOGRAPHIC;case"devanagari":return Ui.DEVANAGARI;case"ethiopic-numeric":return Ui.ETHIOPIC_NUMERIC;case"georgian":return Ui.GEORGIAN;case"gujarati":return Ui.GUJARATI;case"gurmukhi":return Ui.GURMUKHI;case"hebrew":return Ui.HEBREW;case"hiragana":return Ui.HIRAGANA;case"hiragana-iroha":return Ui.HIRAGANA_IROHA;case"japanese-formal":return Ui.JAPANESE_FORMAL;case"japanese-informal":return Ui.JAPANESE_INFORMAL;case"kannada":return Ui.KANNADA;case"katakana":return Ui.KATAKANA;case"katakana-iroha":return Ui.KATAKANA_IROHA;case"khmer":return Ui.KHMER;case"korean-hangul-formal":return Ui.KOREAN_HANGUL_FORMAL;case"korean-hanja-formal":return Ui.KOREAN_HANJA_FORMAL;case"korean-hanja-informal":return Ui.KOREAN_HANJA_INFORMAL;case"lao":return Ui.LAO;case"lower-armenian":return Ui.LOWER_ARMENIAN;case"malayalam":return Ui.MALAYALAM;case"mongolian":return Ui.MONGOLIAN;case"myanmar":return Ui.MYANMAR;case"oriya":return Ui.ORIYA;case"persian":return Ui.PERSIAN;case"simp-chinese-formal":return Ui.SIMP_CHINESE_FORMAL;case"simp-chinese-informal":return Ui.SIMP_CHINESE_INFORMAL;case"tamil":return Ui.TAMIL;case"telugu":return Ui.TELUGU;case"thai":return Ui.THAI;case"tibetan":return Ui.TIBETAN;case"trad-chinese-formal":return Ui.TRAD_CHINESE_FORMAL;case"trad-chinese-informal":return Ui.TRAD_CHINESE_INFORMAL;case"upper-armenian":return Ui.UPPER_ARMENIAN;case"disclosure-open":return Ui.DISCLOSURE_OPEN;case"disclosure-closed":return Ui.DISCLOSURE_CLOSED;case"none":default:return Ui.NONE}}},Si=function(t){return{name:"margin-"+t,initialValue:"0",prefix:!1,type:H.TOKEN_VALUE}},Ii=Si("top"),Ri=Si("right"),Li=Si("bottom"),Ni=Si("left");!function(t){t[t.VISIBLE=0]="VISIBLE",t[t.HIDDEN=1]="HIDDEN",t[t.SCROLL=2]="SCROLL",t[t.AUTO=3]="AUTO"}(Fi||(Fi={}));var Hi,Di={name:"overflow",initialValue:"visible",prefix:!1,type:H.LIST,parse:function(t){return t.filter(Et).map(function(t){switch(t.value){case"hidden":return Fi.HIDDEN;case"scroll":return Fi.SCROLL;case"auto":return Fi.AUTO;case"visible":default:return Fi.VISIBLE}})}};!function(t){t.NORMAL="normal",t.BREAK_WORD="break-word"}(Hi||(Hi={}));var Oi,Mi={name:"overflow-wrap",initialValue:"normal",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"break-word":return Hi.BREAK_WORD;case"normal":default:return Hi.NORMAL}}},Pi=function(t){return{name:"padding-"+t,initialValue:"0",prefix:!1,type:H.TYPE_VALUE,format:"length-percentage"}},Ki=Pi("top"),Gi=Pi("right"),zi=Pi("bottom"),Vi=Pi("left");!function(t){t[t.LEFT=0]="LEFT",t[t.CENTER=1]="CENTER",t[t.RIGHT=2]="RIGHT"}(Oi||(Oi={}));var Xi,Wi={name:"text-align",initialValue:"left",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"right":return Oi.RIGHT;case"center":case"justify":return Oi.CENTER;case"left":default:return Oi.LEFT}}};!function(t){t[t.STATIC=0]="STATIC",t[t.RELATIVE=1]="RELATIVE",t[t.ABSOLUTE=2]="ABSOLUTE",t[t.FIXED=3]="FIXED",t[t.STICKY=4]="STICKY"}(Xi||(Xi={}));var ji,Yi={name:"position",initialValue:"static",prefix:!1,type:H.IDENT_VALUE,parse:function(t){switch(t){case"relative":return Xi.RELATIVE;case"absolute":return Xi.ABSOLUTE;case"fixed":return Xi.FIXED;case"sticky":return Xi.STICKY}return Xi.STATIC}},Ji={name:"text-shadow",initialValue:"none",type:H.LIST,prefix:!1,parse:function(t){return 1===t.length&&Ct(t[0],"none")?[]:Qt(t).map(function(t){for(var e={color:qt.TRANSPARENT,offsetX:Rt,offsetY:Rt,blur:Rt},i=0,n=0;n1?1:0],this.overflowWrap=Sn(Mi,t.overflowWrap),this.paddingTop=Sn(Ki,t.paddingTop),this.paddingRight=Sn(Gi,t.paddingRight),this.paddingBottom=Sn(zi,t.paddingBottom),this.paddingLeft=Sn(Vi,t.paddingLeft),this.position=Sn(Yi,t.position),this.textAlign=Sn(Wi,t.textAlign),this.textDecorationColor=Sn(hn,t.textDecorationColor||t.color),this.textDecorationLine=Sn(fn,t.textDecorationLine),this.textShadow=Sn(Ji,t.textShadow),this.textTransform=Sn(Zi,t.textTransform),this.transform=Sn($i,t.transform),this.transformOrigin=Sn(an,t.transformOrigin),this.visibility=Sn(An,t.visibility),this.wordBreak=Sn(cn,t.wordBreak),this.zIndex=Sn(un,t.zIndex)}return t.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===qi.VISIBLE},t.prototype.isTransparent=function(){return zt(this.backgroundColor)},t.prototype.isTransformed=function(){return null!==this.transform},t.prototype.isPositioned=function(){return this.position!==Xi.STATIC},t.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},t.prototype.isFloating=function(){return this.float!==ai.NONE},t.prototype.isInlineLevel=function(){return Bn(this.display,4)||Bn(this.display,33554432)||Bn(this.display,268435456)||Bn(this.display,536870912)||Bn(this.display,67108864)||Bn(this.display,134217728)},t}(),Fn=function(){function t(t){this.content=Sn(xn,t.content),this.quotes=Sn(Cn,t.quotes)}return t}(),kn=function(){function t(t){this.counterIncrement=Sn(En,t.counterIncrement),this.counterReset=Sn(_n,t.counterReset)}return t}(),Sn=function(t,e){var i=new bt,n=null!==e&&void 0!==e?e.toString():t.initialValue;i.write(n);var r=new yt(i.read());switch(t.type){case H.IDENT_VALUE:var o=r.parseComponentValue();return t.parse(Et(o)?o.value:t.initialValue);case H.VALUE:return t.parse(r.parseComponentValue());case H.LIST:return t.parse(r.parseComponentValues());case H.TOKEN_VALUE:return r.parseComponentValue();case H.TYPE_VALUE:switch(t.format){case"angle":return Ot.parse(r.parseComponentValue());case"color":return Gt.parse(r.parseComponentValue());case"image":return Oe.parse(r.parseComponentValue());case"length":var a=r.parseComponentValue();return kt(a)?a:Rt;case"length-percentage":var s=r.parseComponentValue();return St(s)?s:Rt}}throw new Error("Attempting to parse unsupported css format type "+t.format)},In=function(){function t(t){this.styles=new Qn(window.getComputedStyle(t,null)),this.textNodes=[],this.elements=[],null!==this.styles.transform&&pr(t)&&(t.style.transform="none"),this.bounds=s(t),this.flags=0}return t}(),Rn=function(){function t(t,e){this.text=t,this.bounds=e}return t}(),Ln=function(t,e,i){var n=Dn(t,e),r=[],o=0;return n.forEach(function(t){if(e.textDecorationLine.length||t.trim().length>0)if(we.SUPPORT_RANGE_BOUNDS)r.push(new Rn(t,Hn(i,o,t.length)));else{var n=i.splitText(t.length);r.push(new Rn(t,Nn(i))),i=n}else we.SUPPORT_RANGE_BOUNDS||(i=i.splitText(t.length));o+=t.length}),r},Nn=function(t){var e=t.ownerDocument;if(e){var i=e.createElement("html2canvaswrapper");i.appendChild(t.cloneNode(!0));var n=t.parentNode;if(n){n.replaceChild(i,t);var r=s(i);return i.firstChild&&n.replaceChild(i.firstChild,i),r}}return new a(0,0,0,0)},Hn=function(t,e,i){var n=t.ownerDocument;if(!n)throw new Error("Node has no owner document");var r=n.createRange();return r.setStart(t,e),r.setEnd(t,e+i),a.fromClientRect(r.getBoundingClientRect())},Dn=function(t,e){return 0!==e.letterSpacing?l(t).map(function(t){return c(t)}):On(t,e)},On=function(t,e){for(var i,n=N(t,{lineBreak:e.lineBreak,wordBreak:e.overflowWrap===Hi.BREAK_WORD?"break-word":e.wordBreak}),r=[];!(i=n.next()).done;)i.value&&r.push(i.value.slice());return r},Mn=function(){function t(t,e){this.text=Pn(t.data,e.textTransform),this.textBounds=Ln(this.text,e,t)}return t}(),Pn=function(t,e){switch(e){case ji.LOWERCASE:return t.toLowerCase();case ji.CAPITALIZE:return t.replace(Kn,Gn);case ji.UPPERCASE:return t.toUpperCase();default:return t}},Kn=/(^|\s|:|-|\(|\))([a-z])/g,Gn=function(t,e,i){return t.length>0?e+i.toUpperCase():t},zn=function(e){function i(t){var i=e.call(this,t)||this;return i.src=t.currentSrc||t.src,i.intrinsicWidth=t.naturalWidth,i.intrinsicHeight=t.naturalHeight,ye.getInstance().addImage(i.src),i}return t(i,e),i}(In),Vn=function(e){function i(t){var i=e.call(this,t)||this;return i.canvas=t,i.intrinsicWidth=t.width,i.intrinsicHeight=t.height,i}return t(i,e),i}(In),Xn=function(e){function i(t){var i=e.call(this,t)||this,n=new XMLSerializer;return i.svg="data:image/svg+xml,"+encodeURIComponent(n.serializeToString(t)),i.intrinsicWidth=t.width.baseVal.value,i.intrinsicHeight=t.height.baseVal.value,ye.getInstance().addImage(i.svg),i}return t(i,e),i}(In),Wn=function(e){function i(t){var i=e.call(this,t)||this;return i.value=t.value,i}return t(i,e),i}(In),jn=function(e){function i(t){var i=e.call(this,t)||this;return i.start=t.start,i.reversed="boolean"==typeof t.reversed&&!0===t.reversed,i}return t(i,e),i}(In),Yn=[{type:f.DIMENSION_TOKEN,flags:0,unit:"px",number:3}],Jn=[{type:f.PERCENTAGE_TOKEN,flags:0,number:50}],qn=function(t){return t.width>t.height?new a(t.left+(t.width-t.height)/2,t.top,t.height,t.height):t.width0)e.textNodes.push(new Mn(n,e.styles));else if(fr(n)){var o=lr(n);o.styles.isVisible()&&(ur(n,o,i)?o.flags|=4:dr(o.styles)&&(o.flags|=2),-1!==sr.indexOf(n.tagName)&&(o.flags|=8),e.elements.push(o),Tr(n)||br(n)||Ur(n)||Ar(n,o,i))}},lr=function(t){return xr(t)?new zn(t):Br(t)?new Vn(t):br(t)?new Xn(t):gr(t)?new Wn(t):mr(t)?new jn(t):vr(t)?new ir(t):Ur(t)?new nr(t):Tr(t)?new rr(t):Er(t)?new ar(t):new In(t)},cr=function(t){var e=lr(t);return e.flags|=4,Ar(t,e,e),e},ur=function(t,e,i){return e.styles.isPositionedWithZIndex()||e.styles.opacity<1||e.styles.isTransformed()||yr(t)&&i.styles.isTransparent()},dr=function(t){return t.isPositioned()||t.isFloating()},hr=function(t){return t.nodeType===Node.TEXT_NODE},fr=function(t){return t.nodeType===Node.ELEMENT_NODE},pr=function(t){return void 0!==t.style},gr=function(t){return"LI"===t.tagName},mr=function(t){return"OL"===t.tagName},vr=function(t){return"INPUT"===t.tagName},wr=function(t){return"HTML"===t.tagName},br=function(t){return"svg"===t.tagName},yr=function(t){return"BODY"===t.tagName},Br=function(t){return"CANVAS"===t.tagName},xr=function(t){return"IMG"===t.tagName},Er=function(t){return"IFRAME"===t.tagName},_r=function(t){return"STYLE"===t.tagName},Cr=function(t){return"SCRIPT"===t.tagName},Tr=function(t){return"TEXTAREA"===t.tagName},Ur=function(t){return"SELECT"===t.tagName},Qr=function(){function t(){this.counters={}}return t.prototype.getCounterValue=function(t){var e=this.counters[t];return e&&e.length?e[e.length-1]:1},t.prototype.getCounterValues=function(t){var e=this.counters[t];return e||[]},t.prototype.pop=function(t){var e=this;t.forEach(function(t){return e.counters[t].pop()})},t.prototype.parse=function(t){var e=this,i=t.counterIncrement,n=t.counterReset;null!==i&&i.forEach(function(t){var i=e.counters[t.counter];i&&(i[Math.max(0,i.length-1)]+=t.increment)});var r=[];return n.forEach(function(t){var i=e.counters[t.counter];r.push(t.counter),i||(i=e.counters[t.counter]=[]),i.push(t.reset)}),r},t}(),Fr={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]},kr={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["Ք","Փ","Ւ","Ց","Ր","Տ","Վ","Ս","Ռ","Ջ","Պ","Չ","Ո","Շ","Ն","Յ","Մ","Ճ","Ղ","Ձ","Հ","Կ","Ծ","Խ","Լ","Ի","Ժ","Թ","Ը","Է","Զ","Ե","Դ","Գ","Բ","Ա"]},Sr={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:["י׳","ט׳","ח׳","ז׳","ו׳","ה׳","ד׳","ג׳","ב׳","א׳","ת","ש","ר","ק","צ","פ","ע","ס","נ","מ","ל","כ","יט","יח","יז","טז","טו","י","ט","ח","ז","ו","ה","ד","ג","ב","א"]},Ir={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["ჵ","ჰ","ჯ","ჴ","ხ","ჭ","წ","ძ","ც","ჩ","შ","ყ","ღ","ქ","ფ","ჳ","ტ","ს","რ","ჟ","პ","ო","ჲ","ნ","მ","ლ","კ","ი","თ","ჱ","ზ","ვ","ე","დ","გ","ბ","ა"]},Rr=function(t,e,i,n,r,o){return ti?Or(t,r,o.length>0):n.integers.reduce(function(e,i,r){for(;t>=i;)t-=i,e+=n.values[r];return e},"")+o},Lr=function(t,e,i,n){var r="";do{i||t--,r=n(t)+r,t/=e}while(t*e>=e);return r},Nr=function(t,e,i,n,r){var o=i-e+1;return(t<0?"-":"")+(Lr(Math.abs(t),o,n,function(t){return c(Math.floor(t%o)+e)})+r)},Hr=function(t,e,i){void 0===i&&(i=". ");var n=e.length;return Lr(Math.abs(t),n,!1,function(t){return e[Math.floor(t%n)]})+i},Dr=function(t,e,i,n,r,o){if(t<-9999||t>9999)return Or(t,Ui.CJK_DECIMAL,r.length>0);var a=Math.abs(t),s=r;if(0===a)return e[0]+s;for(var A=0;a>0&&A<=4;A++){var l=a%10;0===l&&Bn(o,1)&&""!==s?s=e[l]+s:l>1||1===l&&0===A||1===l&&1===A&&Bn(o,2)||1===l&&1===A&&Bn(o,4)&&t>100||1===l&&A>1&&Bn(o,8)?s=e[l]+(A>0?i[A-1]:"")+s:1===l&&A>0&&(s=i[A-1]+s),a=Math.floor(a/10)}return(t<0?n:"")+s},Or=function(t,e,i){var n=i?". ":"",r=i?"、":"",o=i?", ":"",a=i?" ":"";switch(e){case Ui.DISC:return"•"+a;case Ui.CIRCLE:return"◦"+a;case Ui.SQUARE:return"◾"+a;case Ui.DECIMAL_LEADING_ZERO:var s=Nr(t,48,57,!0,n);return s.length<4?"0"+s:s;case Ui.CJK_DECIMAL:return Hr(t,"〇一二三四五六七八九",r);case Ui.LOWER_ROMAN:return Rr(t,1,3999,Fr,Ui.DECIMAL,n).toLowerCase();case Ui.UPPER_ROMAN:return Rr(t,1,3999,Fr,Ui.DECIMAL,n);case Ui.LOWER_GREEK:return Nr(t,945,969,!1,n);case Ui.LOWER_ALPHA:return Nr(t,97,122,!1,n);case Ui.UPPER_ALPHA:return Nr(t,65,90,!1,n);case Ui.ARABIC_INDIC:return Nr(t,1632,1641,!0,n);case Ui.ARMENIAN:case Ui.UPPER_ARMENIAN:return Rr(t,1,9999,kr,Ui.DECIMAL,n);case Ui.LOWER_ARMENIAN:return Rr(t,1,9999,kr,Ui.DECIMAL,n).toLowerCase();case Ui.BENGALI:return Nr(t,2534,2543,!0,n);case Ui.CAMBODIAN:case Ui.KHMER:return Nr(t,6112,6121,!0,n);case Ui.CJK_EARTHLY_BRANCH:return Hr(t,"子丑寅卯辰巳午未申酉戌亥",r);case Ui.CJK_HEAVENLY_STEM:return Hr(t,"甲乙丙丁戊己庚辛壬癸",r);case Ui.CJK_IDEOGRAPHIC:case Ui.TRAD_CHINESE_INFORMAL:return Dr(t,"零一二三四五六七八九","十百千萬","負",r,14);case Ui.TRAD_CHINESE_FORMAL:return Dr(t,"零壹貳參肆伍陸柒捌玖","拾佰仟萬","負",r,15);case Ui.SIMP_CHINESE_INFORMAL:return Dr(t,"零一二三四五六七八九","十百千萬","负",r,14);case Ui.SIMP_CHINESE_FORMAL:return Dr(t,"零壹贰叁肆伍陆柒捌玖","拾佰仟萬","负",r,15);case Ui.JAPANESE_INFORMAL:return Dr(t,"〇一二三四五六七八九","十百千万","マイナス",r,0);case Ui.JAPANESE_FORMAL:return Dr(t,"零壱弐参四伍六七八九","拾百千万","マイナス",r,7);case Ui.KOREAN_HANGUL_FORMAL:return Dr(t,"영일이삼사오육칠팔구","십백천만","마이너스",o,7);case Ui.KOREAN_HANJA_INFORMAL:return Dr(t,"零一二三四五六七八九","十百千萬","마이너스",o,0);case Ui.KOREAN_HANJA_FORMAL:return Dr(t,"零壹貳參四五六七八九","拾百千","마이너스",o,7);case Ui.DEVANAGARI:return Nr(t,2406,2415,!0,n);case Ui.GEORGIAN:return Rr(t,1,19999,Ir,Ui.DECIMAL,n);case Ui.GUJARATI:return Nr(t,2790,2799,!0,n);case Ui.GURMUKHI:return Nr(t,2662,2671,!0,n);case Ui.HEBREW:return Rr(t,1,10999,Sr,Ui.DECIMAL,n);case Ui.HIRAGANA:return Hr(t,"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん");case Ui.HIRAGANA_IROHA:return Hr(t,"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす");case Ui.KANNADA:return Nr(t,3302,3311,!0,n);case Ui.KATAKANA:return Hr(t,"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン",r);case Ui.KATAKANA_IROHA:return Hr(t,"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス",r);case Ui.LAO:return Nr(t,3792,3801,!0,n);case Ui.MONGOLIAN:return Nr(t,6160,6169,!0,n);case Ui.MYANMAR:return Nr(t,4160,4169,!0,n);case Ui.ORIYA:return Nr(t,2918,2927,!0,n);case Ui.PERSIAN:return Nr(t,1776,1785,!0,n);case Ui.TAMIL:return Nr(t,3046,3055,!0,n);case Ui.TELUGU:return Nr(t,3174,3183,!0,n);case Ui.THAI:return Nr(t,3664,3673,!0,n);case Ui.TIBETAN:return Nr(t,3872,3881,!0,n);case Ui.DECIMAL:default:return Nr(t,48,57,!0,n)}},Mr=function(){function t(t,e){if(this.options=e,this.scrolledElements=[],this.referenceElement=t,this.counters=new Qr,this.quoteDepth=0,!t.ownerDocument)throw new Error("Cloned element does not have an owner document");this.documentElement=this.cloneNode(t.ownerDocument.documentElement)}return t.prototype.toIFrame=function(t,e){var i=this,n=Kr(t,e);if(!n.contentWindow)return Promise.reject("Unable to find iframe window");var r=t.defaultView.pageXOffset,o=t.defaultView.pageYOffset,a=n.contentWindow,s=a.document,A=Gr(n).then(function(){i.scrolledElements.forEach(Wr),a&&(a.scrollTo(e.left,e.top),!/(iPad|iPhone|iPod)/g.test(navigator.userAgent)||a.scrollY===e.top&&a.scrollX===e.left||(s.documentElement.style.top=-e.top+"px",s.documentElement.style.left=-e.left+"px",s.documentElement.style.position="absolute"));var t=i.options.onclone;return void 0===i.clonedReferenceElement?Promise.reject("Error finding the "+i.referenceElement.nodeName+" in the cloned document"):"function"==typeof t?Promise.resolve().then(function(){return t(s)}).then(function(){return n}):n});return s.open(),s.write(Vr(document.doctype)+""),Xr(this.referenceElement.ownerDocument,r,o),s.replaceChild(s.adoptNode(this.documentElement),s.documentElement),s.close(),A},t.prototype.createElementClone=function(t){return Br(t)?this.createCanvasClone(t):_r(t)?this.createStyleClone(t):t.cloneNode(!1)},t.prototype.createStyleClone=function(t){try{var e=t.sheet;if(e&&e.cssRules){var i=[].slice.call(e.cssRules,0).reduce(function(t,e){return e&&"string"==typeof e.cssText?t+e.cssText:t},""),n=t.cloneNode(!1);return n.textContent=i,n}}catch(t){if(be.getInstance(this.options.id).error("Unable to access cssRules property",t),"SecurityError"!==t.name)throw t}return t.cloneNode(!1)},t.prototype.createCanvasClone=function(t){if(this.options.inlineImages&&t.ownerDocument){var e=t.ownerDocument.createElement("img");try{return e.src=t.toDataURL(),e}catch(t){be.getInstance(this.options.id).info("Unable to clone canvas contents, canvas is tainted")}}var i=t.cloneNode(!1);try{i.width=t.width,i.height=t.height;var n=t.getContext("2d"),r=i.getContext("2d");return r&&(n?r.putImageData(n.getImageData(0,0,t.width,t.height),0,0):r.drawImage(t,0,0)),i}catch(t){}return i},t.prototype.cloneNode=function(t){if(hr(t))return document.createTextNode(t.data);if(!t.ownerDocument)return t.cloneNode(!1);var e=t.ownerDocument.defaultView;if(pr(t)&&e){var i=this.createElementClone(t),n=e.getComputedStyle(t),r=e.getComputedStyle(t,":before"),o=e.getComputedStyle(t,":after");this.referenceElement===t&&(this.clonedReferenceElement=i),yr(i)&&Jr(i);for(var a=this.counters.parse(new kn(n)),s=this.resolvePseudoContent(t,i,r,bn.BEFORE),A=t.firstChild;A;A=A.nextSibling)fr(A)&&(Cr(A)||A.hasAttribute("data-html2canvas-ignore")||"function"==typeof this.options.ignoreElements&&this.options.ignoreElements(A))||this.options.copyStyles&&fr(A)&&_r(A)||i.appendChild(this.cloneNode(A));s&&i.insertBefore(s,i.firstChild);var l=this.resolvePseudoContent(t,i,o,bn.AFTER);return l&&i.appendChild(l),this.counters.pop(a),n&&this.options.copyStyles&&!Er(t)&&zr(n,i),0===t.scrollTop&&0===t.scrollLeft||this.scrolledElements.push([i,t.scrollLeft,t.scrollTop]),(Tr(t)||Ur(t))&&(Tr(i)||Ur(i))&&(i.value=t.value),i}return t.cloneNode(!1)},t.prototype.resolvePseudoContent=function(t,e,i,n){var r=this;if(i){var o=i.content,a=e.ownerDocument;if(a&&o&&"none"!==o&&"-moz-alt-content"!==o&&"none"!==i.display){this.counters.parse(new kn(i));var s=new Fn(i),A=a.createElement("html2canvaspseudoelement");return zr(i,A),s.content.forEach(function(e){if(e.type===f.STRING_TOKEN)A.appendChild(a.createTextNode(e.value));else if(e.type===f.URL_TOKEN){var i=a.createElement("img");i.src=e.value,i.style.opacity="1",A.appendChild(i)}else if(e.type===f.FUNCTION){if("attr"===e.name){var n=e.values.filter(Et);n.length&&A.appendChild(a.createTextNode(t.getAttribute(n[0].value)||""))}else if("counter"===e.name){var o=e.values.filter(Ut),l=o[0],c=o[1];if(l&&Et(l)){var u=r.counters.getCounterValue(l.value),d=c&&Et(c)?ki.parse(c.value):Ui.DECIMAL;A.appendChild(a.createTextNode(Or(u,d,!1)))}}else if("counters"===e.name){var h=e.values.filter(Ut),l=h[0],p=h[1],c=h[2];if(l&&Et(l)){var g=r.counters.getCounterValues(l.value),m=c&&Et(c)?ki.parse(c.value):Ui.DECIMAL,v=p&&p.type===f.STRING_TOKEN?p.value:"",w=g.map(function(t){return Or(t,m,!1)}).join(v);A.appendChild(a.createTextNode(w))}}}else if(e.type===f.IDENT_TOKEN)switch(e.value){case"open-quote":A.appendChild(a.createTextNode(Tn(s.quotes,r.quoteDepth++,!0)));break;case"close-quote":A.appendChild(a.createTextNode(Tn(s.quotes,--r.quoteDepth,!1)))}}),A.className=jr+" "+Yr,e.className+=n===bn.BEFORE?" "+jr:" "+Yr,A}}},t}();!function(t){t[t.BEFORE=0]="BEFORE",t[t.AFTER=1]="AFTER"}(bn||(bn={}));var Pr,Kr=function(t,e){var i=t.createElement("iframe");return i.className="html2canvas-container",i.style.visibility="hidden",i.style.position="fixed",i.style.left="-10000px",i.style.top="0px",i.style.border="0",i.width=e.width.toString(),i.height=e.height.toString(),i.scrolling="no",i.setAttribute("data-html2canvas-ignore","true"),t.body.appendChild(i),i},Gr=function(t){return new Promise(function(e,i){var n=t.contentWindow;if(!n)return i("No window assigned for iframe");var r=n.document;n.onload=t.onload=r.onreadystatechange=function(){n.onload=t.onload=r.onreadystatechange=null;var i=setInterval(function(){r.body.childNodes.length>0&&"complete"===r.readyState&&(clearInterval(i),e(t))},50)}})},zr=function(t,e){for(var i=t.length-1;i>=0;i--){var n=t.item(i);"content"!==n&&e.style.setProperty(n,t.getPropertyValue(n))}return e},Vr=function(t){var e="";return t&&(e+=""),e},Xr=function(t,e,i){t&&t.defaultView&&(e!==t.defaultView.pageXOffset||i!==t.defaultView.pageYOffset)&&t.defaultView.scrollTo(e,i)},Wr=function(t){var e=t[0],i=t[1],n=t[2];e.scrollLeft=i,e.scrollTop=n},jr="___html2canvas___pseudoelement_before",Yr="___html2canvas___pseudoelement_after",Jr=function(t){qr(t,"."+jr+':before{\n content: "" !important;\n display: none !important;\n}\n .'+Yr+':after{\n content: "" !important;\n display: none !important;\n}')},qr=function(t,e){var i=t.ownerDocument;if(i){var n=i.createElement("style");n.textContent=e,t.appendChild(n)}};!function(t){t[t.VECTOR=0]="VECTOR",t[t.BEZIER_CURVE=1]="BEZIER_CURVE"}(Pr||(Pr={}));var Zr,$r=function(t,e){return t.length===e.length&&t.some(function(t,i){return t===e[i]})},to=function(t,e,i,n,r){return t.map(function(t,o){switch(o){case 0:return t.add(e,i);case 1:return t.add(e+n,i);case 2:return t.add(e+n,i+r);case 3:return t.add(e,i+r)}return t})},eo=function(){function t(t,e){this.type=Pr.VECTOR,this.x=t,this.y=e}return t.prototype.add=function(e,i){return new t(this.x+e,this.y+i)},t}(),io=function(t,e,i){return new eo(t.x+(e.x-t.x)*i,t.y+(e.y-t.y)*i)},no=function(){function t(t,e,i,n){this.type=Pr.BEZIER_CURVE,this.start=t,this.startControl=e,this.endControl=i,this.end=n}return t.prototype.subdivide=function(e,i){var n=io(this.start,this.startControl,e),r=io(this.startControl,this.endControl,e),o=io(this.endControl,this.end,e),a=io(n,r,e),s=io(r,o,e),A=io(a,s,e);return i?new t(this.start,n,a,A):new t(A,s,o,this.end)},t.prototype.add=function(e,i){return new t(this.start.add(e,i),this.startControl.add(e,i),this.endControl.add(e,i),this.end.add(e,i))},t.prototype.reverse=function(){return new t(this.end,this.endControl,this.startControl,this.start)},t}(),ro=function(t){return t.type===Pr.BEZIER_CURVE},oo=function(){function t(t){var e=t.styles,i=t.bounds,n=Ht(e.borderTopLeftRadius,i.width,i.height),r=n[0],o=n[1],a=Ht(e.borderTopRightRadius,i.width,i.height),s=a[0],A=a[1],l=Ht(e.borderBottomRightRadius,i.width,i.height),c=l[0],u=l[1],d=Ht(e.borderBottomLeftRadius,i.width,i.height),h=d[0],f=d[1],p=[];p.push((r+s)/i.width),p.push((h+c)/i.width),p.push((o+f)/i.height),p.push((A+u)/i.height);var g=Math.max.apply(Math,p);g>1&&(r/=g,o/=g,s/=g,A/=g,c/=g,u/=g,h/=g,f/=g);var m=i.width-s,v=i.height-u,w=i.width-c,b=i.height-f,y=e.borderTopWidth,B=e.borderRightWidth,x=e.borderBottomWidth,E=e.borderLeftWidth,_=Dt(e.paddingTop,t.bounds.width),C=Dt(e.paddingRight,t.bounds.width),T=Dt(e.paddingBottom,t.bounds.width),U=Dt(e.paddingLeft,t.bounds.width);this.topLeftBorderBox=r>0||o>0?ao(i.left,i.top,r,o,Zr.TOP_LEFT):new eo(i.left,i.top),this.topRightBorderBox=s>0||A>0?ao(i.left+m,i.top,s,A,Zr.TOP_RIGHT):new eo(i.left+i.width,i.top),this.bottomRightBorderBox=c>0||u>0?ao(i.left+w,i.top+v,c,u,Zr.BOTTOM_RIGHT):new eo(i.left+i.width,i.top+i.height),this.bottomLeftBorderBox=h>0||f>0?ao(i.left,i.top+b,h,f,Zr.BOTTOM_LEFT):new eo(i.left,i.top+i.height),this.topLeftPaddingBox=r>0||o>0?ao(i.left+E,i.top+y,Math.max(0,r-E),Math.max(0,o-y),Zr.TOP_LEFT):new eo(i.left+E,i.top+y),this.topRightPaddingBox=s>0||A>0?ao(i.left+Math.min(m,i.width+E),i.top+y,m>i.width+E?0:s-E,A-y,Zr.TOP_RIGHT):new eo(i.left+i.width-B,i.top+y),this.bottomRightPaddingBox=c>0||u>0?ao(i.left+Math.min(w,i.width-E),i.top+Math.min(v,i.height+y),Math.max(0,c-B),u-x,Zr.BOTTOM_RIGHT):new eo(i.left+i.width-B,i.top+i.height-x),this.bottomLeftPaddingBox=h>0||f>0?ao(i.left+E,i.top+b,Math.max(0,h-E),f-x,Zr.BOTTOM_LEFT):new eo(i.left+E,i.top+i.height-x),this.topLeftContentBox=r>0||o>0?ao(i.left+E+U,i.top+y+_,Math.max(0,r-(E+U)),Math.max(0,o-(y+_)),Zr.TOP_LEFT):new eo(i.left+E+U,i.top+y+_),this.topRightContentBox=s>0||A>0?ao(i.left+Math.min(m,i.width+E+U),i.top+y+_,m>i.width+E+U?0:s-E+U,A-(y+_),Zr.TOP_RIGHT):new eo(i.left+i.width-(B+C),i.top+y+_),this.bottomRightContentBox=c>0||u>0?ao(i.left+Math.min(w,i.width-(E+U)),i.top+Math.min(v,i.height+y+_),Math.max(0,c-(B+C)),u-(x+T),Zr.BOTTOM_RIGHT):new eo(i.left+i.width-(B+C),i.top+i.height-(x+T)),this.bottomLeftContentBox=h>0||f>0?ao(i.left+E+U,i.top+b,Math.max(0,h-(E+U)),f-(x+T),Zr.BOTTOM_LEFT):new eo(i.left+E+U,i.top+i.height-(x+T))}return t}();!function(t){t[t.TOP_LEFT=0]="TOP_LEFT",t[t.TOP_RIGHT=1]="TOP_RIGHT",t[t.BOTTOM_RIGHT=2]="BOTTOM_RIGHT",t[t.BOTTOM_LEFT=3]="BOTTOM_LEFT"}(Zr||(Zr={}));var ao=function(t,e,i,n,r){var o=(Math.sqrt(2)-1)/3*4,a=i*o,s=n*o,A=t+i,l=e+n;switch(r){case Zr.TOP_LEFT:return new no(new eo(t,l),new eo(t,l-s),new eo(A-a,e),new eo(A,e));case Zr.TOP_RIGHT:return new no(new eo(t,e),new eo(t+a,e),new eo(A,l-s),new eo(A,l));case Zr.BOTTOM_RIGHT:return new no(new eo(A,e),new eo(A,e+s),new eo(t+a,l),new eo(t,l));case Zr.BOTTOM_LEFT:default:return new no(new eo(A,l),new eo(A-a,l),new eo(t,e+s),new eo(t,e))}},so=function(t){return[t.topLeftBorderBox,t.topRightBorderBox,t.bottomRightBorderBox,t.bottomLeftBorderBox]},Ao=function(t){return[t.topLeftContentBox,t.topRightContentBox,t.bottomRightContentBox,t.bottomLeftContentBox]},lo=function(t){return[t.topLeftPaddingBox,t.topRightPaddingBox,t.bottomRightPaddingBox,t.bottomLeftPaddingBox]},co=function(){function t(t,e,i){this.type=0,this.offsetX=t,this.offsetY=e,this.matrix=i,this.target=6}return t}(),uo=function(){function t(t,e){this.type=1,this.target=e,this.path=t}return t}(),ho=function(t){return 0===t.type},fo=function(t){return 1===t.type},po=function(){function t(t){this.element=t,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]}return t}(),go=function(){function t(t,e){if(this.container=t,this.effects=e.slice(0),this.curves=new oo(t),null!==t.styles.transform){var i=t.bounds.left+t.styles.transformOrigin[0].number,n=t.bounds.top+t.styles.transformOrigin[1].number,r=t.styles.transform;this.effects.push(new co(i,n,r))}if(t.styles.overflowX!==Fi.VISIBLE){var o=so(this.curves),a=lo(this.curves);$r(o,a)?this.effects.push(new uo(o,6)):(this.effects.push(new uo(o,2)),this.effects.push(new uo(a,4)))}}return t.prototype.getParentEffects=function(){var t=this.effects.slice(0);if(this.container.styles.overflowX!==Fi.VISIBLE){var e=so(this.curves),i=lo(this.curves);$r(e,i)||t.push(new uo(i,6))}return t},t}(),mo=function(t,e,i,n){t.container.elements.forEach(function(r){var o=Bn(r.flags,4),a=Bn(r.flags,2),s=new go(r,t.getParentEffects());Bn(r.styles.display,2048)&&n.push(s);var A=Bn(r.flags,8)?[]:n;if(o||a){var l=o||r.styles.isPositioned()?i:e,c=new po(s);if(r.styles.isPositioned()||r.styles.opacity<1||r.styles.isTransformed()){var u=r.styles.zIndex.order;if(u<0){var d=0;l.negativeZIndex.some(function(t,e){return u>t.element.container.styles.zIndex.order&&(d=e,!0)}),l.negativeZIndex.splice(d,0,c)}else if(u>0){var h=0;l.positiveZIndex.some(function(t,e){return u>t.element.container.styles.zIndex.order&&(h=e+1,!0)}),l.positiveZIndex.splice(h,0,c)}else l.zeroOrAutoZIndexOrTransformedOrOpacity.push(c)}else r.styles.isFloating()?l.nonPositionedFloats.push(c):l.nonPositionedInlineLevel.push(c);mo(s,c,o?c:i,A)}else r.styles.isInlineLevel()?e.inlineLevel.push(s):e.nonInlineLevel.push(s),mo(s,e,i,A);Bn(r.flags,8)&&vo(r,A)})},vo=function(t,e){for(var i=t instanceof jn?t.start:1,n=t instanceof jn&&t.reversed,r=0;r0&&t.intrinsicHeight>0){var n=xo(t),r=lo(e);this.path(r),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(i,0,0,t.intrinsicWidth,t.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},t.prototype.renderNodeContent=function(n){return e(this,void 0,void 0,function(){var e,r,o,s,A,l,c,u,c,d,h,f,p,g,m,v,w,c,b,y,g;return i(this,function(i){switch(i.label){case 0:this.applyEffects(n.effects,4),e=n.container,r=n.curves,o=e.styles,s=0,A=e.textNodes,i.label=1;case 1:return s0&&F>0&&(S=r.ctx.createRadialGradient(C+c,T+u,0,C+c,T+u,F),ne(n.stops,2*F).forEach(function(t){return S.addColorStop(t.stop,Vt(t.color))}),r.path(l),r.ctx.fillStyle=S,F!==k?(I=t.bounds.left+.5*t.bounds.width,R=t.bounds.top+.5*t.bounds.height,L=k/F,N=1/L,r.ctx.save(),r.ctx.translate(I,R),r.ctx.transform(1,0,0,L,0,0),r.ctx.translate(-I,-R),r.ctx.fillRect(C,N*(T-R)+R,d,h*N),r.ctx.restore()):r.ctx.fill())),i.label=6;case 6:return e--,[2]}})},r=this,o=0,a=t.styles.backgroundImage.slice(0).reverse(),A.label=1;case 1:return o0?i=s:e=s}while(Math.abs(a)>m&&++A=g?A(e,u,t,i):0===d?u:s(e,n,n+b,t,i)}if(!(0<=t&&t<=1&&0<=i&&i<=1))throw new Error("bezier x values must be in [0, 1] range");if(t===e&&i===n)return l;for(var c=y?new Float32Array(w):new Array(w),u=0;u3&&void 0!==arguments[3]?arguments[3]:{passive:!1};e instanceof Array||(e=[e]);for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:{};if("object"===t(o)?a=o:"number"==typeof o&&(a.duration=o),!(s=C.$(r)))return console.warn("[vue-scrollto warn]: Trying to scroll to an element that is not on the page: "+r);A=C.$(a.container||U.container),l=a.duration||U.duration,c=a.easing||U.easing,u=a.offset||U.offset,d=a.hasOwnProperty("force")?!1!==a.force:U.force,h=a.hasOwnProperty("cancelable")?!1!==a.cancelable:U.cancelable,f=a.onStart||U.onStart,p=a.onDone||U.onDone,g=a.onCancel||U.onCancel,m=void 0===a.x?U.x:a.x,v=void 0===a.y?U.y:a.y;var I=C.cumulativeOffset(A),R=C.cumulativeOffset(s);if("function"==typeof u&&(u=u()),y=e(A),E=R.top-I.top+u,w=i(A),b=R.left-I.left+u,F=!1,Q=E-y,_=b-w,!d){var L=y,H=L+A.offsetHeight,D=E,O=D+s.offsetHeight;if(D>=L&&O<=H)return void p(s)}return"string"==typeof c&&(c=x[c]||x.ease),S=B.apply(B,c),Q||_?(f&&f(s),C.on(A,T,N,{passive:!0}),window.requestAnimationFrame(n),function(){k=null,F=!0}):void 0}var s,A,l,c,u,d,h,f,p,g,m,v,w,b,y,E,_,Q,F,k,S,I,R,L,N=function(t){h&&(k=t,F=!0)};return a}(),F=[],k={bind:function(t,e){h(t).binding=e,C.on(t,"click",f)},unbind:function(t){u(t),C.off(t,"click",f)},update:function(t,e){h(t).binding=e},scrollTo:Q,bindings:F},S=function(t,e){e&&c(e),t.directive("scroll-to",k),t.prototype.$scrollTo=k.scrollTo};return"undefined"!=typeof window&&window.Vue&&(window.VueScrollTo=k,window.VueScrollTo.setDefaults=c,window.Vue.use(S)),k.install=S,k})},717:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(716),r=i.n(n);e.default={name:"return-top",components:{},props:{},data:function(){return{scrollY:0}},created:function(){},mounted:function(){this.listenerScroll(),window.addEventListener("scroll",this.listenerScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.listenerScroll)},methods:{listenerScroll:function(t){this.scrollY=window.pageYOffset},route:function(){r.a.scrollTo("#app")}}}},718:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(65),r=i(697),o=i(700),a=i(701),s=i(669),A=i.n(s),l=i(627),c=i(628),u=i(227);e.default={props:{content:{type:String,default:""},canNote:{type:Boolean,default:!1},noteEnable:{type:Boolean,default:!0},notes:{type:Array,default:function(){return[]}},noteid:{type:String,default:""},customColor:{type:String,default:"white"},customSize:{type:String,default:"middle"}},created:function(){this.richContent=n.a.formatContent(this.content),document.addEventListener("notify",this.notifyHandler),c.a.on(document,"audio:play",this.notifyHandler)},data:function(){return{preViewImg:!1,imgUrl:"",isInAndroidApp:n.a.isInAndroidApp(),posterImg:"",posterContent:"",richContent:"",noteSelections:[],newVideos:[],markerInited:!1,hadScroll:!1}},mounted:function(){var t=this;window.addEventListener("mathjaxfini",function(){clearTimeout(t.eTimer),t.eTimer=setTimeout(function(){console.log("mathjax fini"),t.highLightNotes()},300)}),n.a.isPC()?this.$el.addEventListener("mousedown",this.handleClick):(this.$el.addEventListener("touchstart",this.onTouchStart),this.$el.addEventListener("touchend",this.onTouchEnd)),n.a.isInApp()||c.a.on(document,"globalmedia",this.notifyHandler),this.initVideo(),this.$el.addEventListener("copy",this.copyHandler),this.canNote?this.initMarker():this.noteEnable&&n.a.isInApp()&&this.initMarkerWhenNoLogin(),this.$nextTick(function(){t.$el.querySelectorAll("a").forEach(function(t){t.href.match(/^time:\/\//)&&t.setAttribute("onclick","event.preventDefault()")})})},beforeDestroy:function(){var t=this;this.$el.removeEventListener("copy",this.copyHandler),this.$el.removeEventListener("touchstart",this.onTouchStart),this.$el.removeEventListener("touchend",this.onTouchEnd),this.$el.removeEventListener("mousedown",this.handleClick),document.removeEventListener("notify",this.notifyHandler),this.newVideos.forEach(function(e){e.removeEventListener("play",t.videoPlayHandle)}),c.a.off(document,"audio:play"),this.em&&this.em.destroy()},updated:function(){var t=this;this.$nextTick(function(){t.initVideo()})},methods:{initPrecodecopy:function(){document.querySelectorAll("pre").forEach(function(t){t.style.position="relative";var e=t.querySelector("code");if(e){var i=e.textContent,r=document.createElement("div");r.innerHTML='复制代码',r.classList.add("richcontent-pre-copy"),t.appendChild(r),r.addEventListener("touchstart",function(t){t.stopPropagation()}),r.addEventListener("click",function(t){var e=document.createElement("textarea");e.setAttribute("readonly","readonly"),e.style.position="absolute";var r=(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0);e.style.top=r+256+"px",e.style.opacity="0",document.body.appendChild(e),e.textContent=i,n.a.isInApp()&&!n.a.isInAndroidApp()||e.focus(),e.setSelectionRange(0,e.textContent.length),document.execCommand("copy")?n.a.isPC()||n.a.success("复制成功"):n.a.error("复制失败"),document.body.removeChild(e)})}})},copyHandler:function(t){var e=window.getSelection(),i="

    极客时间版权所有: "+document.location.href+"

    ",r=n.a.getSelectionText();if(r){var o=r.substr(0,30),a="

    "+o+(o===r?"":"...")+"

    "+i,s=document.createElement("div");s.style.position="absolute",s.style.left="-99999px",document.body.appendChild(s),s.innerHTML=a,e.selectAllChildren(s),window.setTimeout(function(){document.body.removeChild(s)},200)}},initMarkerWhenNoLogin:function(){var t=this;this.markerInited||(this.markerInited=!0,this.$nextTick(function(){t.em=new o.a({menuTopOffset:"2rem",disableTapHighlight:!0,menuItems:[{text:"划线笔记",handler:function(t){n.a.login()}},{text:"分享",handler:function(t){n.a.login()}},{text:"拷贝",noborder:!0,handler:function(t){n.a.login()}}],menuStyle:{menu:{fontSize:"14px",borderRadius:"4px",padding:"8px 0",backgroundColor:"#262626"},item:{padding:"4px 16px",borderRight:"1px solid #636363"},triangle:{borderTop:"10px solid #262626",borderRight:"12px solid transparent",borderLeft:"12px solid transparent"}}}),t.em.create(t.$refs.container,document.body)}))},initMarker:function(){var t=this;this.canNote&&!this.markerInited&&(this.markerInited=!0,this.container=this.$refs.container,this.textContainer=this.$refs.text,this.$nextTick(function(){t.em=new o.a({menuTopOffset:"2rem",disableTapHighlight:!0,menuItems:[{text:"划线笔记",handler:function(e){var r=i.i(a.a)(t.textContainer,e.anchorNode,e.anchorOffset),o=e.toString(),s=r.split(o).length-1;if(t.notes.findIndex(function(t){return t.part===o&&t.part_index===s})>-1)return void n.a.error("该笔记已存在");t.$emit("note",o,s)}},{text:"分享",handler:function(e){var i=e.toString();i.length>4e3&&(i=i.slice(0,3997)+"..."),t.$emit("share",i)}},{text:"拷贝",noborder:!0,handler:function(t){n.a.notifyApp({type:"copy",data:t.toString()})}}],menuStyle:{menu:{fontSize:"14px",borderRadius:"4px",padding:"8px 0",backgroundColor:"#262626"},item:{padding:"4px 16px",borderRight:"1px solid #636363"},triangle:{borderTop:"10px solid #262626",borderRight:"12px solid transparent",borderLeft:"12px solid transparent"}}}),t.em.create(t.container,document.body),t.em.onHighlightLineClick(function(e,i,n){t.$emit("highlightclicked",e),t.jumpNoteDetail(e)}),t.notes.length&&(clearTimeout(t.eTimer),t.eTimer=setTimeout(function(){t.highLightNotes()},300))}))},getSelections:function(){var t=this,e=[];if(this.notes.length>0)for(var n=i.i(a.b)(this.container),r=this.container.innerText,o=0;o-1&&n.a.handleMathJax(this.$el)},getTouchPosition:function(t){return{x:t.clientX||t.changedTouches[0].clientX,y:t.clientY||t.changedTouches[0].clientY}},getDistance:function(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))},onTouchStart:function(t){this.touchStartPosition=this.getTouchPosition(t),this.touchStartTime=Date.now(),"img"!==t.target.nodeName.toLowerCase()&&"video"!==t.target.nodeName.toLowerCase()&&"audio"!==t.target.nodeName.toLowerCase()||t.stopPropagation()},onTouchEnd:function(t){if(Date.now()-this.touchStartTime<500){var e=this.getTouchPosition(t);this.getDistance(e,this.touchStartPosition)<20&&this.handleClick(t)}},preventAllAnodeJump:function(){n.a.isInApp()&&this.$el.querySelectorAll("a").forEach(function(t){t.onclick=function(t){t.preventDefault()}})},initVideo:function(){var t=this.$refs.text.querySelectorAll("video");t.length>0&&Array.prototype.slice.call(t).forEach(function(t){if(!t.attributes["x5-playsinline"]){var e=t.attributes.poster;e=e?e.value:"";var i=t.parentElement,r=i.offsetWidth,o=Math.floor(186/331*r),a=document.createElement("div"),s=t.lastChild.attributes.src.value;a.innerHTML='',i.insertBefore(a,t),i.removeChild(t);var l=i.querySelector("video"),c=new A.a;c.loadSource(s),c.attachMedia(l),n.a.isInAndroidApp()&&l.addEventListener("click",function(){setTimeout(function(){l.paused?l.play():l.pause()},200)})}})},videoPlayHandle:function(){c.a.trigger(document,"globalmedia",{type:"video:play"})},notifyHandler:function(t){try{switch(t.detail.type){case"audio:play":this.newVideos.forEach(function(t){t&&t.pause&&t.pause()})}}catch(t){console.log(t)}}},watch:{content:function(t,e){var i=this;this.richContent=n.a.formatContent(t),this.markerInited&&this.em&&"none"!==this.em.$selectStatus&&this.em.reset(),this.$nextTick(function(){i.$el.querySelectorAll("a").forEach(function(t){t.href.match(/^time:\/\//)&&t.setAttribute("onclick","event.preventDefault()")})})},customSize:function(){var t=this;this.noteSelections.length>0&&this.$nextTick(function(){t.noteSelections.forEach(function(e){t.em.cancelHighlightLine(e.id)}),t.em.highlightLines(t.noteSelections)})},richContent:function(t,e){var i=this;this.$nextTick(function(){i.initPrecodecopy()});var n=this.$el.querySelectorAll("pre code");Array.prototype.forEach.call(n,function(t){r.a.lineNumbersBlock(t,{singleLine:!0})}),this.handleMathJax(this.richContent),this.preventAllAnodeJump()},notes:function(t){var e=this;clearTimeout(this.eTimer),this.eTimer=setTimeout(function(){e.highLightNotes()},300)},canNote:function(t){t&&this.initMarker()}}}},719:function(t,e,i){"use strict";function n(t){return t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1}Object.defineProperty(e,"__esModule",{value:!0});var r=i(760),o=i.n(r);e.default={name:"QrCode",props:{val:{type:String,required:!0},size:{type:Number,default:100},padding:{type:Number,default:0},level:{type:String,default:"L"},bgColor:{type:String,default:"#FFFFFF"},fgColor:{type:String,default:"#000000"}},computed:{style:function(){return{background:this.bgColor,padding:this.padding+"px"}}},watch:{size:function(){this.update()},val:function(){this.update()},level:function(){this.update()},bgColor:function(){this.update()},fgColor:function(){this.update()}},mounted:function(){this.update()},methods:{update:function(){var t=this.size,e=this.bgColor,i=this.fgColor,r=this.$el.querySelector("canvas"),a=o()(this.val,{errorCorrectLevel:1}),s=r.getContext("2d"),A=a.modules,l=t/A.length,c=t/A.length,u=(window.devicePixelRatio||1)/n(s);r.height=r.width=t*u,s.scale(u,u),A.forEach(function(t,n){t.forEach(function(t,r){s.fillStyle=t?i:e;var o=Math.ceil((r+1)*l)-Math.floor(r*l),a=Math.ceil((n+1)*c)-Math.floor(n*c);s.fillRect(Math.round(r*l),Math.round(n*c),o,a)})})}}}},720:function(t,e,i){"use strict";i.d(e,"b",function(){return w});var n=i(727),r=i.n(n),o=i(44),a=i.n(o),s=i(631),A=i.n(s),l=i(100),c=i.n(l),u=i(101),d=i.n(u),h=i(633),f=i.n(h),p=i(632),g=i.n(p),m=i(629),v=i(624),w={START:"start",END:"end"},b={},y=function(t){function e(t,i,n){c()(this,e);var r=f()(this,(e.__proto__||A()(e)).call(this));return r.container=t,r.type=i,r.options=a()({},b,n),r.$position={x:0,y:0},r.$height=0,r.touchCallbackStack=[],r.topPoint=null,r.lineElement=null,r.bottomPoint=null,r.createElement(),r.mount(),r}return g()(e,t),d()(e,[{key:"moveTo",value:function(t,e){this.style.top=e-this.width+"px",this.style.left=t-this.width/2+"px"}},{key:"createElement",value:function(){this.element=document.createElement("div"),this.style.userSelect="none",this.style.webkitUserSelect="none",this.style.zIndex="2",this.style.transition="top 0.1s, left 0.1s",this.style.display="none",this.style.position="absolute",this.topPoint=document.createElement("div"),this.topPoint.style.borderRadius="50%",this.topPoint.style.margin="auto",this.lineElement=document.createElement("div"),this.lineElement.style.margin="auto",this.lineElement.style.backgroundColor="#fa8919",this.bottomPoint=document.createElement("div"),this.bottomPoint.style.borderRadius="50%",this.bottomPoint.style.margin="auto",this.type===w.START?this.topPoint.style.backgroundColor="#fa8919":this.bottomPoint.style.backgroundColor="#fa8919",this.element.appendChild(this.topPoint),this.element.appendChild(this.lineElement),this.element.appendChild(this.bottomPoint)}},{key:"setCursorSize",value:function(t){var e=this.width+"px";this.style.width=e,this.topPoint.style.height=e,this.topPoint.style.width=e,this.bottomPoint.style.height=e,this.bottomPoint.style.width=e,this.lineElement.style.height=t+"px",this.lineElement.style.width=t/15+"px"}},{key:"inRegion",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.height,n=r.a;return t.y>this.position.y&&t.y=this.position.y+this.with&&(n=i.i(v.j)(t,{x:this.position.x,y:this.position.y+this.height})),t.y<=this.position.y&&(n=i.i(v.j)(t,this.position)),{inRegion:n<=e,distance:n}}},{key:"position",set:function(t){var e=t.x,i=t.y;this.$position={x:e,y:i},this.moveTo(e,i)},get:function(){return this.$position}},{key:"height",get:function(){return this.$height},set:function(t){t!==this.$height&&(this.$height=t,this.setCursorSize(t))}},{key:"width",get:function(){return this.height/4}}]),e}(m.a);e.a=y},721:function(t,e,i){"use strict";var n=i(691),r=i.n(n),o=i(639),a=i.n(o),s=i(44),A=i.n(s),l=i(631),c=i.n(l),u=i(100),d=i.n(u),h=i(101),f=i.n(h),p=i(633),g=i.n(p),m=i(632),v=i.n(m),w=i(629),b=i(689),y=i(624),B=function(t){function e(t,n){d()(this,e);var r=g()(this,(e.__proto__||c()(e)).call(this)),o={color:"fa8919",opacity:.1};return r.container=t,r.option=A()(o,n),r.option.margin=i.i(y.h)(r.option.margin),r.lineMap=new a.a,r.onClick=function(){},r.createElement(),r.mount(),r.id=0,r}return v()(e,t),f()(e,[{key:"getID",value:function(){return this.id++}},{key:"highlight",value:function(t,e){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments[3],a=void 0===e||null===e?this.getID():e,s=new b.a(t.anchorNode,t.anchorOffset),A=new b.a(t.focusNode,t.focusOffset),l=Number(window.getComputedStyle(t.anchorNode.parentElement).lineHeight.replace("px","")),c=void 0;try{var u=b.a.getSelectNodeRectAndText(s.node,A.node,s.offset,A.offset);c=u.rects}catch(t){console.error("EasyMarkerError:",t),c=[]}var d=[],h=c.map(function(t){var e={top:t.top-o.y,bottom:t.bottom-o.y,height:t.height,width:t.width,left:t.left-o.x,right:t.right-o.x};d.push(e),l=l||t.height;var n=i.option.margin||(l-t.height)/4;return i.constructor.rectToPointArray(t,o,n).reduce(function(t,e){var i=r()(e,2);return t+" "+i[0]+","+i[1]},"")});return this.lineMap.set(a,{selection:t,points:h,relativeRects:d,meta:n,lineHeight:l}),a}},{key:"render",value:function(){var t=this;this.removeAllRectangle(),this.lineMap.forEach(function(e){e.points.forEach(function(e){t.element.appendChild(t.createRectangle(e))})})}},{key:"highlightLines",value:function(t,e){var i=this;this.lineMap.clear();var n=t.map(function(t){var n=t.selection,r=t.id,o=t.meta;return i.highlight(n,r,o,e)});return this.render(),n}},{key:"highlightLine",value:function(t,e,i,n){var r=this.highlight(t,e,i,n);return this.render(),r}},{key:"cancelHighlightLine",value:function(t){this.lineMap.delete(t),this.render()}},{key:"createElement",value:function(){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.style.zIndex="1",t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.overflow="visible",this.element=t}},{key:"createRectangle",value:function(t){var e=document.createElementNS("http://www.w3.org/2000/svg","polygon");return e.style.fill=this.option.color,e.style.strokeWidth=0,e.style.strokeOpacity=this.option.opacity,e.style.opacity=this.option.opacity,e.setAttribute("points",t),e}},{key:"handleTap",value:function(t){var e=i.i(y.e)(t),n=e.x,r=e.y,o=this.container.getBoundingClientRect(),a=o.top,s=o.left,A=void 0;return this.lineMap.forEach(function(t,e){for(var o=0;oe.right?t[0]=e.right-e.x:t[0]-=e.x,t[1]-=e.y}),n)}}]),e}(w.a);e.a=B},722:function(t,e,i){"use strict";var n=i(691),r=i.n(n),o=i(44),a=i.n(o),s=i(631),A=i.n(s),l=i(100),c=i.n(l),u=i(101),d=i.n(u),h=i(633),f=i.n(h),p=i(632),g=i.n(p),m=i(629),v=i(688),w=function(t){function e(t,i){c()(this,e);var n=f()(this,(e.__proto__||A()(e)).call(this)),r={color:"fa8919",opacity:.1,animateDuration:100};return n.container=t,n.option=a()(r,i),n.paths=[],n.position={header:new v.a,body:new v.a,footer:new v.a},n.animating=!1,n.animateStartTime=0,n.animateEndTime=0,n.animatePercent=0,n.polygonElement=null,n.createElement(),n.mount(),n}return g()(e,t),d()(e,[{key:"createElement",value:function(){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.overflow="visible";var e=document.createElementNS("http://www.w3.org/2000/svg","polygon");e.style.fill=this.option.color,e.style.strokeWidth=0,e.style.strokeOpacity=this.option.opacity,e.style.opacity=this.option.opacity,e.style.transition="opacity 0.2s ease",t.appendChild(e),this.element=t,this.polygonElement=e}},{key:"render",value:function(t,e,i){var n=this.position,r=n.header,o=n.body,a=n.footer;if(!(0!==this.paths.length&&r.equal(t)&&o.equal(e)&&a.equal(i))){this.polygonElement.style.opacity=this.option.opacity;var s=this.position;this.position.header.setAll(t),this.position.body.setAll(e),this.position.footer.setAll(i),this.animateStartTime=Date.now(),this.animateEndTime=this.animateStartTime+this.option.animateDuration,this.animatePercent=0,this.animating||(this.animating=!0,this.animated(s))}}},{key:"animated",value:function(t){var e=this,i=(Date.now()-this.animateStartTime)/(this.animateEndTime-this.animateStartTime),n=0;if(i>=1)n=1,this.animatePercent=1;else{var o=1e3/60/this.option.animateDuration+1.3*(i-this.animatePercent);this.animatePercent+=o,n=o/(1-i),n=o>1?1:o}var a=this.constructor.getAnimateFrame(t.header,this.position.header,n),s=this.constructor.getAnimateFrame(t.body,this.position.body,n),A=this.constructor.getAnimateFrame(t.footer,this.position.footer,n),l={header:a,body:s,footer:A};this.paths=this.constructor.getPaths(l);var c=this.paths.map(function(t){var e=r()(t,2);return e[0]+","+e[1]}).join(" ");if(this.polygonElement.setAttribute("points",c),i>=1)return void(this.animating=!1);window.requestAnimationFrame(function(){return e.animated(l)})}},{key:"reset",value:function(){this.paths=[],this.polygonElement.style.opacity="0",this.polygonElement.setAttribute("points","")}},{key:"top",get:function(){return this.position.header.y}},{key:"height",get:function(){return this.position.header.height+this.position.body.height+this.position.footer.height}}],[{key:"getAnimateFrame",value:function(t,e,i){var n=new v.a;return n.x=t.x+(e.x-t.x)*i,n.y=t.y+(e.y-t.y)*i,n.height=t.height+(e.height-t.height)*i,n.width=t.width+(e.width-t.width)*i,n}},{key:"getPaths",value:function(t){var e=t.header,i=t.body,n=t.footer,r=[];return e.isSet&&(r.push([e.x,e.y]),r.push([e.x+e.width,e.y]),r.push([e.x+e.width,e.y+e.height])),i.isSet&&(r.push([i.x+i.width,i.y]),r.push([i.x+i.width,i.y+i.height])),n.isSet&&(r.push([n.x+n.width,n.y]),r.push([n.x+n.width,n.y+n.height]),r.push([n.x,n.y+n.height]),r.push([n.x,n.y])),i.isSet&&(r.push([i.x,i.y+i.height]),r.push([i.x,i.y])),e.isSet&&r.push([e.x,e.y+e.height]),r}}]),e}(m.a);e.a=w},723:function(t,e,i){"use strict";var n=i(639),r=i.n(n),o=i(44),a=i.n(o),s=i(631),A=i.n(s),l=i(100),c=i.n(l),u=i(101),d=i.n(u),h=i(633),f=i.n(h),p=i(632),g=i.n(p),m=i(629),v=i(624),w=function(t){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};c()(this,e);var o=f()(this,(e.__proto__||A()(e)).call(this));return o.container=t,o.option={items:n.menuItems,topOffset:i.i(v.h)(n.topOffset),style:{menu:{fontSize:"0.4rem",backgroundColor:"#262626",fontColor:"#fff",borderRadius:"0.1rem",color:"#fff",border:"0px",display:"inline-block",padding:"0 0.2rem",margin:"auto"},triangle:{marginLeft:"auto",marginRight:"auto",borderTop:"0.2rem solid #262626",borderRight:"0.2rem solid transparent",borderLeft:"0.2rem solid transparent",width:"0",height:"0",marginTop:"-1px"},item:{lineHeight:"1.24rem",padding:"0 0.3rem",color:"#fff",display:"inline-block"}}},n.style&&(a()(o.option.style.menu,n.style.menu),a()(o.option.style.triangle,n.style.triangle),a()(o.option.style.item,n.style.item)),o.easyMarker=null,o.menuElement=null,o.itemMap=new r.a,o.positionRange={top:0,bottom:0},o.ticking=!1,o.height=0,o.createElement(),o.mount(),o.hide(!1),o}return g()(e,t),d()(e,[{key:"createElement",value:function(){var t=this,e=document.createElement("div");e.style.position="absolute",e.style.width="100%",e.style.textAlign="center",e.style.lineHeight="0",e.style.left="0",e.style.zIndex="10",e.style.transform="translateY(-100%)",e.style.webkitTransform="translateY(-100%)",e.style.transition="transform 0.2s ease, opacity 0.2s ease";var i=document.createElement("div");a()(i.style,this.option.style.menu);var n=document.createElement("div");a()(n.style,this.option.style.triangle),e.appendChild(i),e.appendChild(n),this.option.items.forEach(function(e){var n=t.createMenuItemElement(e.text,e.noborder);t.itemMap.set(n,e),i.appendChild(n)}),this.menuElement=i,this.element=e}},{key:"createMenuItemElement",value:function(t,e){var i=document.createElement("span");a()(i.style,this.option.style.item,e?{border:"none"}:null);var n=document.createTextNode(t);return i.appendChild(n),i}},{key:"setPosition",value:function(t,e){this.positionRange.top=t,this.positionRange.bottom=e}},{key:"hide",value:function(){this.style.visibility="hidden",this.style.opacity="0"}},{key:"show",value:function(){var t=0;this.height||(this.height=Number((window.getComputedStyle(this.menuElement).height||"").replace("px","")));var e=this.container.getBoundingClientRect(),i=e.top;i<0&&this.positionRange.bottom<-i?(t=this.positionRange.bottom,this.style.position="absolute"):this.positionRange.top-this.height-this.option.topOffset>-i?(t=this.positionRange.top,this.style.position="absolute"):(this.style.position="fixed",t=this.option.topOffset+this.height),this.style.visibility="visible",this.style.top=t+"px",this.style.opacity="1"}},{key:"handleTap",value:function(t,e){var i=e.start,n=e.end,r=e.content;if(!this.itemMap.has(t.target))return!1;var o={anchorNode:i.node,anchorOffset:i.offset,focusNode:n.node,focusOffset:n.offset,toString:function(){return r}};return this.itemMap.get(t.target).handler.call(this.easyMarker,o),!0}},{key:"handleScroll",value:function(){var t=this;this.ticking||(window.requestAnimationFrame(function(){t.show(),t.ticking=!1}),this.ticking=!0)}}]),e}(m.a);e.a=w},724:function(t,e,i){"use strict";i.d(e,"b",function(){return c});var n=i(44),r=i.n(n),o=i(100),a=i.n(o),s=i(101),A=i.n(s),l=i(624),c={TOUCH_START:"touchstart",TOUCH_MOVE:"touchmove",TOUCH_MOVE_THROTTLE:"touchmovethrottle",TOUCH_END:"touchend",TAP:"tap",LONG_TAP:"longtap"},u=function(){function t(e,i){a()(this,t),this.options={longTapTime:600,tapTime:500,slideDistance:20,throttleTime:50},this.element=e,this.options=r()(this.options,i),this.touchStartCallbacks=[],this.touchMoveCallbacks=[],this.touchMoveThrottleCallbacks=[],this.touchEndCallbacks=[],this.tapCallbacks=[],this.longTapCallbacks=[],this.hook=function(){return!0},this.touchStartPosition={x:0,y:0},this.longTapTimerHandler=null,this.touchMoveTimerHandler=null,this.touchStartTime=Date.now(),this.lastMoveTime=Date.now(),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),this.element.addEventListener("touchstart",this.onTouchStart),this.element.addEventListener("touchmove",this.onTouchMove),this.element.addEventListener("touchend",this.onTouchEnd)}return A()(t,[{key:"registerEvent",value:function(t,e){if("function"==typeof e)switch(t){case c.TOUCH_START:this.touchStartCallbacks.push(e);break;case c.TOUCH_MOVE:this.touchMoveCallbacks.push(e);break;case c.TOUCH_MOVE_THROTTLE:this.touchMoveThrottleCallbacks.push(e);break;case c.TOUCH_END:this.touchEndCallbacks.push(e);break;case c.TAP:this.tapCallbacks.push(e);break;case c.LONG_TAP:this.longTapCallbacks.push(e)}}},{key:"registerHook",value:function(t){this.hook=t}},{key:"onTouchStart",value:function(t){var e=this;this.hook("touchstart",t)&&(this.touchStartCallbacks.forEach(function(e){return e(t)}),this.longTapTimerHandler=setTimeout(function(){e.onLongTap(t)},this.options.longTapTime),this.touchStartPosition=i.i(l.e)(t),this.touchStartTime=Date.now())}},{key:"onTouchMove",value:function(t){var e=this;if(this.hook("touchmove",t)){this.touchMoveCallbacks.forEach(function(e){return e(t)}),clearTimeout(this.touchMoveTimerHandler),this.touchMoveTimerHandler=setTimeout(function(){e.onTouchMoveThrottle(t)},this.options.throttleTime),Date.now()-this.lastMoveTime>this.options.throttleTime&&(this.lastMoveTime=Date.now(),this.onTouchMoveThrottle(t));var n=i.i(l.e)(t);i.i(l.j)(n,this.touchStartPosition)>this.options.slideDistance&&(clearTimeout(this.longTapTimerHandler),this.longTapTimerHandler=null)}}},{key:"onTouchEnd",value:function(t){if(this.hook("touchmove",t)&&(this.touchEndCallbacks.forEach(function(e){return e(t)}),clearTimeout(this.longTapTimerHandler),this.longTapTimerHandler=null,Date.now()-this.touchStartTimey;y++)if((d||y in v)&&(p=v[y],g=w(p,y,m),t))if(i)B[y]=g;else if(g)switch(t){case 3:return!0;case 5:return p;case 6:return y;case 2:B.push(p)}else if(c)return!1;return u?-1:l||c?c:B}}},737:function(t,e,i){var n=i(37),r=i(231),o=i(13)("species");t.exports=function(t){var e;return r(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!r(e.prototype)||(e=void 0),n(e)&&null===(e=e[o])&&(e=void 0)),void 0===e?Array:e}},738:function(t,e,i){var n=i(737);t.exports=function(t,e){return new(n(t))(e)}},739:function(t,e,i){"use strict";var n=i(34).f,r=i(148),o=i(230),a=i(66),s=i(228),A=i(222),l=i(152),c=i(232),u=i(236),d=i(33),h=i(229).fastKey,f=i(692),p=d?"_s":"size",g=function(t,e){var i,n=h(e);if("F"!==n)return t._i[n];for(i=t._f;i;i=i.n)if(i.k==e)return i};t.exports={getConstructor:function(t,e,i,l){var c=t(function(t,n){s(t,c,e,"_i"),t._t=e,t._i=r(null),t._f=void 0,t._l=void 0,t[p]=0,void 0!=n&&A(n,i,t[l],t)});return o(c.prototype,{clear:function(){for(var t=f(this,e),i=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete i[n.i];t._f=t._l=void 0,t[p]=0},delete:function(t){var i=f(this,e),n=g(i,t);if(n){var r=n.n,o=n.p;delete i._i[n.i],n.r=!0,o&&(o.n=r),r&&(r.p=o),i._f==n&&(i._f=r),i._l==n&&(i._l=o),i[p]--}return!!n},forEach:function(t){f(this,e);for(var i,n=a(t,arguments.length>1?arguments[1]:void 0,3);i=i?i.n:this._f;)for(n(i.v,i.k,this);i&&i.r;)i=i.p},has:function(t){return!!g(f(this,e),t)}}),d&&n(c.prototype,"size",{get:function(){return f(this,e)[p]}}),c},def:function(t,e,i){var n,r,o=g(t,e);return o?o.v=i:(t._l=o={i:r=h(e,!0),k:e,v:i,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[p]++,"F"!==r&&(t._i[r]=o)),t},getEntry:g,setStrong:function(t,e,i){l(t,e,function(t,i){this._t=f(t,e),this._k=i,this._l=void 0},function(){for(var t=this,e=t._k,i=t._l;i&&i.r;)i=i.p;return t._t&&(t._l=i=i?i.n:t._t._f)?"keys"==e?c(0,i.k):"values"==e?c(0,i.v):c(0,[i.k,i.v]):(t._t=void 0,c(1))},i?"entries":"values",!i,!0),u(e)}}},740:function(t,e,i){var n=i(150),r=i(735);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return r(this)}}},741:function(t,e,i){"use strict";var n=i(12),r=i(28),o=i(229),a=i(58),s=i(45),A=i(230),l=i(222),c=i(228),u=i(37),d=i(79),h=i(34).f,f=i(736)(0),p=i(33);t.exports=function(t,e,i,g,m,v){var w=n[t],b=w,y=m?"set":"add",B=b&&b.prototype,x={};return p&&"function"==typeof b&&(v||B.forEach&&!a(function(){(new b).entries().next()}))?(b=e(function(e,i){c(e,b,t,"_c"),e._c=new w,void 0!=i&&l(i,m,e[y],e)}),f("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(t){var e="add"==t||"set"==t;t in B&&(!v||"clear"!=t)&&s(b.prototype,t,function(i,n){if(c(this,b,t),!e&&v&&!u(i))return"get"==t&&void 0;var r=this._c[t](0===i?0:i,n);return e?this:r})}),v||h(b.prototype,"size",{get:function(){return this._c.size}})):(b=g.getConstructor(e,t,m,y),A(b.prototype,i),o.NEED=!0),d(b,t),x[t]=b,r(r.G+r.W+r.F,x),v||g.setStrong(b,t,m),b}},742:function(t,e,i){"use strict";var n=i(28),r=i(78),o=i(66),a=i(222);t.exports=function(t){n(n.S,t,{from:function(t){var e,i,n,s,A=arguments[1];return r(this),e=void 0!==A,e&&r(A),void 0==t?new this:(i=[],e?(n=0,s=o(A,arguments[2],2),a(t,!1,function(t){i.push(s(t,n++))})):a(t,!1,i.push,i),new this(i))}})}},743:function(t,e,i){"use strict";var n=i(28);t.exports=function(t){n(n.S,t,{of:function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},744:function(t,e,i){var n=i(37),r=i(38),o=function(t,e){if(r(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{n=i(66)(Function.call,i(233).f(Object.prototype,"__proto__").set,2),n(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return o(t,i),e?t.__proto__=i:n(t,i),t}}({},!1):void 0),check:o}},745:function(t,e,i){var n=i(38),r=i(153);t.exports=i(10).getIterator=function(t){var e=r(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return n(e.call(t))}},746:function(t,e,i){var n=i(150),r=i(13)("iterator"),o=i(68);t.exports=i(10).isIterable=function(t){var e=Object(t);return void 0!==e[r]||"@@iterator"in e||o.hasOwnProperty(n(e))}},747:function(t,e,i){"use strict";var n=i(739),r=i(692);t.exports=i(741)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=n.getEntry(r(this,"Map"),t);return e&&e.v},set:function(t,e){return n.def(r(this,"Map"),0===t?0:t,e)}},n,!0)},748:function(t,e,i){var n=i(28);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},749:function(t,e,i){var n=i(67),r=i(234);i(235)("getPrototypeOf",function(){return function(t){return r(n(t))}})},750:function(t,e,i){var n=i(28);n(n.S,"Object",{setPrototypeOf:i(744).set})},751:function(t,e,i){i(742)("Map")},752:function(t,e,i){i(743)("Map")},753:function(t,e,i){var n=i(28);n(n.P+n.R,"Map",{toJSON:i(740)("Map")})},754:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'._29HP61GA_0{font-weight:400;color:#353535;line-height:1.76;white-space:normal;word-break:normal;font-size:17px;-webkit-transition:background-color .3s ease;transition:background-color .3s ease}._29HP61GA_0 .MathJax_Display{overflow:auto}._29HP61GA_0 .poster{position:fixed;left:-10000px;top:-10000px;overflow:hidden;padding:1rem;background:#ececec}._29HP61GA_0 .richcontent-pre-copy{font-size:13px;color:#888;position:absolute;right:1em;top:.5em;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}._29HP61GA_0 .richcontent-pre-copy .iconfont{font-size:12px;margin-right:.2em}._29HP61GA_0 a{color:#fa8919;border-bottom:1px solid #fa8919}._29HP61GA_0 img{display:block;max-width:100%;position:relative;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#eee;vertical-align:top;border-radius:0}._29HP61GA_0 audio,._29HP61GA_0 video{width:100%;background-color:#eee}._29HP61GA_0 pre{margin-top:16px;padding:34px 0 0;margin-bottom:30px;position:relative;border-radius:6px;background:rgba(246,247,251,.749);border:0}._29HP61GA_0 code{word-break:break-all}._29HP61GA_0 pre code{font-size:12px;font-family:Consolas,Liberation Mono,Menlo,monospace,Courier;display:block;word-break:normal;-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:16px;margin-right:16px;overflow-x:scroll}._29HP61GA_0 pre code:after{content:"";height:30px;width:100%;display:block}._29HP61GA_0 hr{border:none;margin-top:1.5rem;margin-bottom:1.5rem;border-top:1px solid #f5f5f5;height:1px;background:none}._29HP61GA_0 h1,._29HP61GA_0 h2,._29HP61GA_0 h3,._29HP61GA_0 h4,._29HP61GA_0 h5{margin-bottom:20px;margin-top:0;font-weight:700;color:#353535}._29HP61GA_0 b,._29HP61GA_0 strong{font-weight:700;color:#353535}._29HP61GA_0 h1{font-size:21px}._29HP61GA_0 h2{font-size:20px}._29HP61GA_0 h3{font-size:19px}._29HP61GA_0 h4{font-size:18px}._29HP61GA_0 h5{font-size:17px}._29HP61GA_0 center,._29HP61GA_0 p{font-weight:400;color:#353535;margin-top:0;margin-bottom:30px;word-break:break-word}._29HP61GA_0 center{text-align:center}._29HP61GA_0 blockquote{margin-top:0;margin-bottom:34px;border-left:3px solid #e8e8e8;padding-left:17px;color:#353535}._29HP61GA_0 blockquote p{margin-top:0;margin-bottom:0}._29HP61GA_0 ol,._29HP61GA_0 ul{margin-bottom:30px}._29HP61GA_0 ol p,._29HP61GA_0 ul p{margin-top:0;margin-bottom:0}._29HP61GA_0 ol{list-style:decimal;margin-left:30px}._29HP61GA_0 ul li{padding-left:17px;position:relative;margin-bottom:10px}._29HP61GA_0 ul li:after{content:"";height:6px;width:6px;border-radius:50%;background:#353535;position:absolute;top:10px;left:0}._29HP61GA_0 .orange{color:#fa8919}._29HP61GA_0 .reference{color:#888}._29HP61GA_0 .m-right{text-align:right}._29HP61GA_0 .m-center{text-align:center;display:block}._29HP61GA_0 .m-gray{color:#888}._29HP61GA_0 .m-small{font-size:15px}._29HP61GA_0 table.hljs-ln{margin-bottom:0;border-spacing:0;border-collapse:collapse}._29HP61GA_0 table.hljs-ln,._29HP61GA_0 table.hljs-ln tbody,._29HP61GA_0 table.hljs-ln td,._29HP61GA_0 table.hljs-ln tr{-webkit-box-sizing:border-box;box-sizing:border-box}._29HP61GA_0 table.hljs-ln td{padding:0;border:0}._29HP61GA_0 table.hljs-ln td.hljs-ln-numbers{min-width:15px;font-size:12px;color:rgba(27,31,35,.3);text-align:right;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}._29HP61GA_0 table.hljs-ln td.hljs-ln-code,._29HP61GA_0 table.hljs-ln td.hljs-ln-numbers{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:20px;vertical-align:top}._29HP61GA_0 table.hljs-ln td.hljs-ln-code{position:relative;padding-right:10px;padding-left:10px;overflow:visible;font-size:13px;color:#666;word-wrap:normal;white-space:pre}._2gMcXXSK_0{font-size:15px}._2gMcXXSK_0 h1{font-size:19px}._2gMcXXSK_0 h2{font-size:18px}._2gMcXXSK_0 h3{font-size:17px}._2gMcXXSK_0 h4{font-size:16px}._2gMcXXSK_0 h5{font-size:15px}._2gMcXXSK_0 p{margin-bottom:26px}._2gMcXXSK_0 blockquote{margin-bottom:30px}._2gMcXXSK_0 ol,._2gMcXXSK_0 ul{margin-bottom:26px}._2gMcXXSK_0 .m-small{font-size:13px}._1-IhkAAb_0{font-size:19px}._1-IhkAAb_0 h1{font-size:23px}._1-IhkAAb_0 h2{font-size:22px}._1-IhkAAb_0 h3{font-size:21px}._1-IhkAAb_0 h4{font-size:20px}._1-IhkAAb_0 h5{font-size:19px}._1-IhkAAb_0 .m-small{font-size:17px}._1Xjr5LRK_0 table.hljs-ln td.hljs-ln-code,._1Xjr5LRK_0 table.hljs-ln td.hljs-ln-numbers{font-family:monospace}._1XhbM4Sp_0 pre{background:hsla(43,50%,87%,.749)}._1XhbM4Sp_0 blockquote{border-color:#efe6cf}._2wERfXHe_0 h1,._2wERfXHe_0 h2,._2wERfXHe_0 h3,._2wERfXHe_0 h4,._2wERfXHe_0 h5,._2wERfXHe_0 p{color:silver}._2wERfXHe_0 blockquote{border-color:#3e3e3e}._2wERfXHe_0 li,._2wERfXHe_0 strong{color:silver}._2wERfXHe_0 pre{background:rgba(62,62,62,.749)}._2wERfXHe_0 center{color:silver}._2wERfXHe_0 img{opacity:.9}._2wERfXHe_0 ul li:after{background:silver}._2wERfXHe_0 table.hljs-ln td.hljs-ln-numbers{color:#b2b2b2}._2wERfXHe_0 table.hljs-ln td.hljs-ln-code{color:silver}',""]),e.locals={white:"_29HP61GA_0",small:"_2gMcXXSK_0",big:"_1-IhkAAb_0",android:"_1Xjr5LRK_0",yellow:"_1XhbM4Sp_0",black:"_2wERfXHe_0"}},755:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".return-top[data-v-57b648e1]{position:fixed;right:50px;bottom:100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:60px;height:60px;background:#ccc;border-radius:60px;opacity:.3;-webkit-transition:all .3s ease;transition:all .3s ease;cursor:pointer}.return-top[data-v-57b648e1]:hover{opacity:1}.return-top .iconfont[data-v-57b648e1]{font-size:26px;font-weight:700;-webkit-transform:rotate(180deg) translateY(-2px);transform:rotate(180deg) translateY(-2px);color:#fff}",""])},756:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".qrcode canvas[data-v-beaca6f6]{display:block}",""])},757:function(t,e,i){var n=i(754);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("4029d6ca",n,!0,{})},758:function(t,e,i){var n=i(755);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("474fbf35",n,!0,{})},759:function(t,e,i){var n=i(756);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("db594e3c",n,!0,{})},760:function(t,e,i){var n=i(763),r=i(693),o=function(t,e){e=e||{};var i=new n(e.typeNumber||-1,e.errorCorrectLevel||r.H);return i.addData(t),i.make(),i};o.ErrorCorrectLevel=r,t.exports=o},761:function(t,e,i){function n(t){this.mode=r.MODE_8BIT_BYTE,this.data=t}var r=i(696);n.prototype={getLength:function(t){return this.data.length},write:function(t){for(var e=0;e>>7-t%8&1)},put:function(t,e){for(var i=0;i>>e-i-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},t.exports=i},763:function(t,e,i){function n(t,e){this.typeNumber=t,this.errorCorrectLevel=e,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}var r=i(761),o=i(764),a=i(762),s=i(765),A=i(694),l=n.prototype;l.addData=function(t){var e=new r(t);this.dataList.push(e),this.dataCache=null},l.isDark=function(t,e){if(t<0||this.moduleCount<=t||e<0||this.moduleCount<=e)throw new Error(t+","+e);return this.modules[t][e]},l.getModuleCount=function(){return this.moduleCount},l.make=function(){if(this.typeNumber<1){var t=1;for(t=1;t<40;t++){for(var e=o.getRSBlocks(t,this.errorCorrectLevel),i=new a,n=0,r=0;r=7&&this.setupTypeNumber(t),null==this.dataCache&&(this.dataCache=n.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,e)},l.setupPositionProbePattern=function(t,e){for(var i=-1;i<=7;i++)if(!(t+i<=-1||this.moduleCount<=t+i))for(var n=-1;n<=7;n++)e+n<=-1||this.moduleCount<=e+n||(this.modules[t+i][e+n]=0<=i&&i<=6&&(0==n||6==n)||0<=n&&n<=6&&(0==i||6==i)||2<=i&&i<=4&&2<=n&&n<=4)},l.getBestMaskPattern=function(){for(var t=0,e=0,i=0;i<8;i++){this.makeImpl(!0,i);var n=s.getLostPoint(this);(0==i||t>n)&&(t=n,e=i)}return e},l.createMovieClip=function(t,e,i){var n=t.createEmptyMovieClip(e,i);this.make();for(var r=0;r>i&1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=n}for(var i=0;i<18;i++){var n=!t&&1==(e>>i&1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=n}},l.setupTypeInfo=function(t,e){for(var i=this.errorCorrectLevel<<3|e,n=s.getBCHTypeInfo(i),r=0;r<15;r++){var o=!t&&1==(n>>r&1);r<6?this.modules[r][8]=o:r<8?this.modules[r+1][8]=o:this.modules[this.moduleCount-15+r][8]=o}for(var r=0;r<15;r++){var o=!t&&1==(n>>r&1);r<8?this.modules[8][this.moduleCount-r-1]=o:r<9?this.modules[8][15-r-1+1]=o:this.modules[8][15-r-1]=o}this.modules[this.moduleCount-8][8]=!t},l.mapData=function(t,e){for(var i=-1,n=this.moduleCount-1,r=7,o=0,a=this.moduleCount-1;a>0;a-=2)for(6==a&&a--;;){for(var A=0;A<2;A++)if(null==this.modules[n][a-A]){var l=!1;o>>r&1));var c=s.getMask(e,n,a-A);c&&(l=!l),this.modules[n][a-A]=l,r--,-1==r&&(o++,r=7)}if((n+=i)<0||this.moduleCount<=n){n-=i,i=-i;break}}},n.PAD0=236,n.PAD1=17,n.createData=function(t,e,i){for(var r=o.getRSBlocks(t,e),A=new a,l=0;l8*u)throw new Error("code length overflow. ("+A.getLengthInBits()+">"+8*u+")");for(A.getLengthInBits()+4<=8*u&&A.put(0,4);A.getLengthInBits()%8!=0;)A.putBit(!1);for(;;){if(A.getLengthInBits()>=8*u)break;if(A.put(n.PAD0,8),A.getLengthInBits()>=8*u)break;A.put(n.PAD1,8)}return n.createBytes(A,r)},n.createBytes=function(t,e){for(var i=0,n=0,r=0,o=new Array(e.length),a=new Array(e.length),l=0;l=0?p.get(g):0}}for(var m=0,d=0;d=0;)e^=s.G15<=0;)e^=s.G18<>>=1;return e},getPatternPosition:function(t){return s.PATTERN_POSITION_TABLE[t-1]},getMask:function(t,e,i){switch(t){case a.PATTERN000:return(e+i)%2==0;case a.PATTERN001:return e%2==0;case a.PATTERN010:return i%3==0;case a.PATTERN011:return(e+i)%3==0;case a.PATTERN100:return(Math.floor(e/2)+Math.floor(i/3))%2==0;case a.PATTERN101:return e*i%2+e*i%3==0;case a.PATTERN110:return(e*i%2+e*i%3)%2==0;case a.PATTERN111:return(e*i%3+(e+i)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}},getErrorCorrectPolynomial:function(t){for(var e=new r([1],0),i=0;i5&&(i+=3+o-5)}for(var n=0;n0?i("div",{staticClass:"return-top",on:{click:t.route}},[i("i",{staticClass:"iconfont"},[t._v("")])]):t._e()])},staticRenderFns:[]}},768:function(t,e){t.exports={render:function(){var t,e,i,n,r,o=this,a=o.$createElement,s=o._self._c||a;return s("div",{ref:"container"},[s("div",{directives:[{name:"show",rawName:"v-show",value:o.content,expression:"content"}],ref:"text",class:[o.$style.white,(t={},t[o.$style.android]=o.isInAndroidApp,t),(e={},e[o.$style.yellow]="yellow"===o.customColor,e),(i={},i[o.$style.black]="black"===o.customColor,i),(n={},n[o.$style.small]="small"===o.customSize,n),(r={},r[o.$style.big]="big"===o.customSize,r)],domProps:{innerHTML:o._s(o.richContent)}})])},staticRenderFns:[]}},769:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"qrcode",style:t.style},[i("canvas",{style:{height:t.size+"px",width:t.size+"px"},attrs:{height:t.size,width:t.size,"ref:qr":""}})])},staticRenderFns:[]}},782:function(t,e,i){function n(t){i(786)}var r=i(22)(i(783),i(788),n,null,null);t.exports=r.exports},783:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={}},785:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".bottom{width:100%;background-color:#f5f5f5;position:fixed;bottom:0;left:0;z-index:10}.bottom,.bottom .bottom-wrapper{height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.bottom .bottom-wrapper{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.bottom .bottom-wrapper a{height:50px;line-height:50px;-webkit-box-sizing:border-box;box-sizing:border-box}",""])},786:function(t,e,i){var n=i(785);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("619c609b",n,!0,{})},787:function(t,e,i){function n(t){i(861)}var r=i(22)(i(827),i(923),n,null,null);t.exports=r.exports},788:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"bottom"},[i("div",{staticClass:"bottom-wrapper"},[t._t("default")],2)])},staticRenderFns:[]}},797:function(t,e,i){function n(t){i(811)}var r=i(22)(i(799),i(816),n,null,null);t.exports=r.exports},798:function(t,e,i){function n(t){i(810)}var r=i(22)(i(801),i(815),n,"data-v-0462bf2e",null);t.exports=r.exports},799:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=(i(218),i(65));e.default={props:["list"],data:function(){return{isInApp:n.a.isInApp()}}}},800:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(43),r=i.n(n),o=i(99),a=i.n(o),s=i(803),A=i(802),l=i(219),c=i(621);e.default={props:["config"],data:function(){return{source:null,encryptVideoId:null,paused:!0,progressTimer:null,currentDuration:0,videoHeight:0,playing:!1,volume:50}},created:function(){this.normalProps(this.config)},mounted:function(){this.videoHeight=this.$refs.player.offsetWidth*(9/16),this.bindEvent(),this.initPlayer()},computed:a()({},i.i(l.a)({loginUser:"loginUser"}),{videoStyle:function(){return{height:this.videoHeight+"px"}}}),methods:{normalProps:function(t){this.source=t.source;var e=[];t.urls&&t.urls.HD&&e.push({desc:"高清",definition:"HD",url:t.urls.HD}),t.urls&&t.urls.SD&&e.push({desc:"标清",definition:"SD",url:t.urls.SD}),t.urls&&t.urls.LD&&e.push({desc:"普清",definition:"LD",url:t.urls.LD}),this.urls=e,this.quality=t.quality,this.cover=t.cover||"",this.encryptVideoId=null,t.encryptInfo&&"string"==typeof t.encryptInfo.encryptVideoId&&t.encryptInfo.encryptVideoId.length>0&&(this.encryptVideoId=t.encryptInfo.encryptVideoId),this.encryptInfo=t.encryptInfo,this.speed=t.speed||1,this.currentDuration=t.currentDuration||0},initPlayer:function(){var t=this;(this.source||this.encryptVideoId)&&(this.player||(this.player={},this.encryptVideoId?this.initEncryptVideo(function(e){t.currentDuration>0&&e.seek(t.currentDuration),e.setSpeed(t.speed)}):this.initNormalVideo(function(e){t.currentDuration>0&&e.seek(t.currentDuration),e.setSpeed(t.speed)})))},playerEventRegist:function(){var t=this;this.player.on("timeupdate",function(e){t.currentDuration=Math.floor(t.player.tag.currentTime),t.$emit("timeupdate",t.currentDuration)}),this.player.on("ended",function(){t.$emit("ended")}),this.player.on("pause",function(e){t.$emit("pause")}),this.player.on("playing",function(e){t.$emit("playing")})},initNormalVideo:function(t){var e=this;this.player=new window.Aliplayer({id:"aliyunPlayerCon",source:this.source,width:"100%",height:"100%",useH5Prism:!0,components:[{name:"SpeedComponent",type:s.a},{name:"QualityComponent",type:A.a}],speedComponent:{speed:this.speed},qualityComponent:{quality:this.quality,urls:this.urls},componentChangeHandle:function(t,i){"SpeedComponent"===t&&(console.log(i),e.$emit("changespeed",i)),"QualityComponent"===t&&(console.log(i),e.$emit("changequality",i))}},function(e){t(e)}),this.playerEventRegist()},initEncryptVideo:function(t){var e=this;return new r.a(function(i,n){var r={sourceType:e.encryptInfo.sourceType,aid:e.encryptInfo.aid,encryptVideoId:e.encryptVideoId,sku:e.encryptInfo.sku};c.a.getEncryptVideoPlayAuth(r).then(function(i){e.player=new window.Aliplayer({id:"aliyunPlayerCon",vid:e.encryptVideoId,playauth:i.play_auth,encryptType:1,width:"100%",height:"100%",useH5Prism:!0,components:[{name:"SpeedComponent",type:s.a},{name:"QualityComponent",type:A.a}],speedComponent:{speed:e.speed},qualityComponent:{quality:e.quality,urls:e.urls},componentChangeHandle:function(t,i){"SpeedComponent"===t&&(console.log(i),e.$emit("changespeed",i)),"QualityComponent"===t&&(console.log(i),e.$emit("changequality",i))}},function(e){t(e)}),e.playerEventRegist()})})},switchVideo:function(t){this.encryptVideoId?this.switchEncryptVideo():(this.player._options.urls=[{desc:"高清",definition:"HD",Url:this.urls.hd},{desc:"标清",definition:"SD",Url:this.urls.sd}],this.player.loadByUrl(t.source))},switchEncryptVideo:function(){this.player&&this.player.dispose&&this.player.dispose(),this.player=null,window.document.getElementById("aliyunPlayerCon").innerHTML="",this.initPlayer()},bindEvent:function(){var t=this;window.addEventListener("resize",function(e){t.videoHeight=t.$refs.player.offsetWidth*(9/16)})},toggle:function(){this.player.paused?this.player.play():this.player.pause()},destroy:function(){this.player&&this.player.dispose&&this.player.dispose(),this.player=null,window.document.getElementById("aliyunPlayerCon").innerHTML=""},replay:function(){var t=this;if(this.encryptVideoId){var e={sourceType:this.encryptInfo.sourceType,aid:this.encryptInfo.aid,encryptVideoId:this.encryptVideoId,sku:this.encryptInfo.sku};c.a.getEncryptVideoPlayAuth(e).then(function(e){e.play_auth&&t.player.replayByVidAndPlayAuth(t.encryptVideoId,e.play_auth)})}else this.player.replay()},storagePlayerRate:function(t){window.localStorage.setItem("VdPlayerRate",t)}}}},801:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"groupon-item",props:{data:{type:Object,default:function(){return{}}},border:{type:Boolean,default:!1}},data:function(){return{time:this.data.left_seconds}},created:function(){this.startTime()},methods:{startTime:function(){var t=this;this.timer=setTimeout(function(){t.time=Math.max(0,t.time-1),t.time>0&&t.startTime()},1e3)},handleClick:function(){this.$emit("join",this.data.code)}},filters:{formatTime:function(t){var e=Math.floor(t/60/60/24),i=Math.floor(t/60/60-24*e),n=Math.floor(t/60-24*e*60-60*i),r=Math.floor(t%60);return e+"天"+(i>9?i:"0"+i)+":"+(n>9?n:"0"+n)+":"+(r>9?r:"0"+r)}}}},802:function(t,e,i){"use strict";function n(t){var e=document.createElement("div");return e.innerHTML=t,e.childNodes[0]}var r=i(100),o=i.n(r),a=i(101),s=i.n(a),A=function(){function t(){o()(this,t),this.html=n(''),this.modalHtml=n('
    \n 正在为您切换到 , 请稍后...\n
    '),this.hasCreated=!1,this.definition=""}return s()(t,[{key:"createEl",value:function(t,e){if(e._options.qualityComponent.quality){t.querySelector(".prism-controlbar").appendChild(this.html),t.appendChild(this.modalHtml)}}},{key:"setCurrentQuality",value:function(t,e){var i=this.html.querySelector(".current-quality");i.innerText=t,i.dataset.def=e,this.definition=e;var n=this.html.querySelector(".quality-list"),r=n.querySelector(".current");r&&(r.className="");var o=n.querySelector("li[data-def="+e+"]");o&&(o.className="current")}},{key:"created",value:function(t){var e=this;if(this._urls=null,t._options.qualityComponent.quality&&(t._options.vid&&t._urls&&(this._urls=t._urls),this._urls||(this._urls=t._options.qualityComponent.urls),this._urls)){var i=this.html.querySelector(".current-quality"),n=this.html.querySelector(".quality-list"),r=this._urls.map(function(t){return'
  • '+t.desc+"
  • "});this.html.querySelector(".quality-list").innerHTML=r.join("");var o=this._urls.find(function(e){return e.definition===t._options.qualityComponent.quality});if(this.setCurrentQuality(o.desc,o.definition),t._options.vid&&t.loadByUrl(o.Url,t.getCurrentTime(),!0,!0),console.log(this.definition),!1===this.hasCreated&&this.definition){n.querySelector("li[data-def="+this.definition+"]").className="current"}this.hasCreated=!0,this.html.style.display="block";var a=null;i.onclick=function(){n.style.display="block"},i.onmouseleave=function(){a=setTimeout(function(){n.style.display="none"},100)},n.onmouseenter=function(){clearTimeout(a)},n.onmouseleave=function(){n.style.display="none"},n.onclick=function(i){var r=i.target,o=r.dataset.def;if(n.style.display="none",o&&"current"!==r.className){var a=e._urls.find(function(t){return t.definition===o});a.url=a.url||a.Url,t.loadByUrl(a.url,t.getCurrentTime(),!0,!0),e.setCurrentQuality(a.desc,a.definition),t._options.componentChangeHandle("QualityComponent",o),e.modalHtml.style.display="block",e.modalHtml.querySelector("span").innerText=a.desc}}}}},{key:"ready",value:function(t){this.modalHtml.style.display="none",document.querySelector(".prism-setting-item.prism-setting-quality").classList.add("player-hidden")}}]),t}();e.a=A},803:function(t,e,i){"use strict";function n(t,e){var i=e.querySelector(".rate-list"),n=e.querySelector(".current-rate"),r=i.querySelector('[data-rate="'+t+'"]'),o=i.querySelector(".current");o&&(o.className=""),r&&(r.className="current"),i.style.display="none",n.innerText=t+"x"}function r(t){var e=document.createElement("div");return e.innerHTML=t,e.childNodes[0]}var o=i(100),a=i.n(o),s=i(101),A=i.n(s),l=function(){function t(){a()(this,t),this.html=r('')}return A()(t,[{key:"createEl",value:function(t){t.querySelector(".prism-controlbar").appendChild(this.html)}},{key:"ready",value:function(t,e){var i=this,r=this.html.querySelector(".current-rate"),o=this.html.querySelector(".rate-list"),a=null;r.onclick=function(){o.style.display="block"},r.onmouseleave=function(){a=setTimeout(function(){o.style.display="none"},100)},o.onmouseenter=function(){clearTimeout(a)},o.onmouseleave=function(){o.style.display="none"},o.onclick=function(e){var r=e.target,o=r.dataset.rate;o&&(t.setSpeed(o),t._options.componentChangeHandle("SpeedComponent",o),n(o,i.html))},n(t._options.speedComponent.speed||1,this.html),this.html.style.display="block"}}]),t}();e.a=l},806:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'._1nR2QoBp_0{width:100%}._2bANKMWm_0,._3SED450Z_0{width:100%;position:relative;overflow:hidden}._2bANKMWm_0{background:#000}._2qNFVz21_0{position:absolute;padding-top:1rem;padding-left:1rem;padding-right:1rem;top:0;left:0;right:0;color:#fff;font-weight:400;font-size:.875rem;word-break:break-all;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background:linear-gradient(180deg,rgba(0,0,0,.5),transparent);height:68px}._3SED450Z_0 .player-hidden,._3SED450Z_0 .prism-cc-btn,._3SED450Z_0 .prism-setting-btn,._3SED450Z_0 .prism-volume{display:none!important}._3SED450Z_0 .prism-progress-played{background-color:#fa8919!important}._3SED450Z_0 .prism-controlbar-bg{background:rgba(0,0,0,.5)!important}._3SED450Z_0 .prism-progress-cursor{background:#fa8919!important;height:9px!important;width:9px!important;margin-top:2px}._3SED450Z_0 .prism-progress-cursor img{display:none}._3SED450Z_0 .prism-loading{width:46px!important;height:46px!important}._3SED450Z_0 .circle{width:40px!important;height:40px!important;border:3px solid!important;border-color:rgba(250,137,25,.2) rgba(250,137,25,.5) rgba(250,137,25,.7) rgba(250,137,25,.1)!important;-webkit-animation:spinoffPulse .8s infinite linear!important;animation:spinoffPulse .8s infinite linear!important}._3SED450Z_0 .cursor-hover{display:block!important}._3SED450Z_0 .prism-progress{height:3px!important}._3SED450Z_0 .prism-big-play-btn{left:50%!important;top:50%!important;margin-top:-25px;margin-left:-25px;border-radius:25px;height:50px!important;width:50px!important;background:rgba(0,0,0,.3)!important}._3SED450Z_0 .prism-big-play-btn:after{font-family:iconfont;content:"\\E67B";font-size:20px;position:absolute;height:30px;width:30px;top:10px;left:12px;line-height:30px;text-align:center;color:#fff}._3SED450Z_0 .prism-animation,._3SED450Z_0 .prism-big-play-btn .outter{display:none!important}._3SED450Z_0 .rate-components{float:right;color:#fff;height:40px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:4px;margin-right:8px}._3SED450Z_0 .current-rate{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:50px;cursor:pointer}._3SED450Z_0 .rate-list{position:absolute;bottom:46px;display:none;padding:0;margin:0;list-style:none}._3SED450Z_0 .rate-list li{text-align:center;width:70px;line-height:30px;background-color:rgba(0,0,0,.6);cursor:pointer}._3SED450Z_0 .rate-list li.current{color:#00c1de}._3SED450Z_0 .rate-list li+li{border-top:1px solid rgba(78,78,78,.3)}._3SED450Z_0 .rate-list li:hover{background-color:rgba(0,0,0,.5)}._3SED450Z_0 .quality-components{float:right;color:#fff;height:40px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:4px;margin-right:3px}._3SED450Z_0 .current-quality{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:50px;cursor:pointer}._3SED450Z_0 .quality-list{position:absolute;bottom:46px;display:none;padding:0;margin:0;list-style:none}._3SED450Z_0 .quality-list li{text-align:center;width:70px;line-height:30px;background-color:rgba(0,0,0,.6);cursor:pointer}._3SED450Z_0 .quality-list li.current{color:#00c1de}._3SED450Z_0 .quality-list li+li{border-top:1px solid rgba(78,78,78,.3)}._3SED450Z_0 .quality-list li:hover{background-color:rgba(0,0,0,.5)}._3SED450Z_0 .quality-modal{position:absolute;bottom:20%;left:5%;background-color:rgba(0,0,0,.6);border-radius:5px;color:#fff;padding:10px 15px;font-size:14px;display:none}._3SED450Z_0 .quality-modal span{color:#00c1de}',""]),e.locals={wrap:"_1nR2QoBp_0",main:"_3SED450Z_0",videoPlaceholder:"_2bANKMWm_0",title:"_2qNFVz21_0"}},807:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".groupon-item[data-v-0462bf2e]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:14px 0;margin:0 1.375rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.groupon-item.withborder[data-v-0462bf2e]{border-bottom:1px solid #e8e8e8}.groupon-item .groupon-avatar[data-v-0462bf2e]{width:36px;height:36px;border-radius:50%;-ms-flex-negative:0;flex-shrink:0;margin-right:8px}.groupon-item .groupon-item-info[data-v-0462bf2e]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.groupon-item .groupon-item-info h2[data-v-0462bf2e]{color:#888;font-size:14px;font-weight:400}.groupon-item .groupon-item-info p[data-v-0462bf2e]{color:#888;font-size:12px}.groupon-item .groupon-item-info p span[data-v-0462bf2e]{color:#fa8919}.groupon-item .groupon-join[data-v-0462bf2e]{-ms-flex-negative:0;flex-shrink:0;background-color:#fa8919;height:28px;font-size:15px;line-height:28px;color:#fff;border:none;padding:0 12px;border-radius:13px;margin-left:4px;outline:none}",""])},808:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".breadcrumb{padding:30px 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#fff}.breadcrumb a.title{color:#e57c39;font-size:15px;font-weight:400}.breadcrumb span.title{color:#888;font-size:15px;font-weight:400}.breadcrumb .split{color:#ccc;font-size:10px;margin-right:5px}",""])},809:function(t,e,i){var n=i(806);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("b1c9e480",n,!0,{})},810:function(t,e,i){var n=i(807);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("1b39e982",n,!0,{})},811:function(t,e,i){var n=i(808);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("225d00f2",n,!0,{})},813:function(t,e,i){function n(t){this.$style=i(853)}var r=i(22)(i(826),i(921),n,null,null);t.exports=r.exports},814:function(t,e,i){function n(t){this.$style=i(809)}var r=i(22)(i(800),i(817),n,null,null);t.exports=r.exports},815:function(t,e,i){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"groupon-item",class:{withborder:t.border}},[n("img",{staticClass:"groupon-avatar",attrs:{src:t.data.host_avatar||i(226),alt:"avatar"}}),t._v(" "),n("div",{staticClass:"groupon-item-info"},[n("h2",[t._v(t._s(t.data.host_nickname||"nickname"))]),t._v(" "),n("p",[t._v("还差"),n("span",[t._v(t._s(t.data.want_ucount))]),t._v("人成团,剩余 "),n("span",[t._v(t._s(t._f("formatTime")(t.time)))]),t._v(" 结束")])]),t._v(" "),n("button",{staticClass:"groupon-join",on:{click:t.handleClick}},[t._v("去参团")])])},staticRenderFns:[]}},816:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return t.isInApp?t._e():i("div",{staticClass:"breadcrumb"},t._l(t.list,function(e,n){return i("span",[e.link?i("router-link",{staticClass:"title",attrs:{to:e.link}},[t._v(t._s(e.title))]):i("span",{staticClass:"title"},[t._v(t._s(e.title))]),t._v(" "),n复制代码',r.classList.add("richcontent-pre-copy"),t.appendChild(r),r.addEventListener("click",function(t){var e=document.createElement("textarea");e.setAttribute("readonly","readonly"),e.style.position="absolute";var r=(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0);e.style.top=r+256+"px",e.style.opacity="0",document.body.appendChild(e),e.textContent=i,e.focus(),e.setSelectionRange(0,e.textContent.length),document.execCommand("copy")?n.a.success("复制成功"):n.a.error("复制失败"),document.body.removeChild(e)})}})},copyHandler:function(t){var e=window.getSelection(),i="

    极客时间版权所有: "+document.location.href+"

    ",r=n.a.getSelectionText();if(r){var o=r.substr(0,30),a="

    "+o+(o===r?"":"...")+"

    "+i,s=document.createElement("div");s.style.position="absolute",s.style.left="-99999px",document.body.appendChild(s),s.innerHTML=a,e.selectAllChildren(s),window.setTimeout(function(){document.body.removeChild(s)},200)}},initMarker:function(){var t=this;this.canNote&&!this.markerInited&&(this.markerInited=!0,this.container=document.getElementById("article-content"),this.textContainer=this.container.querySelector(".text"),this.$nextTick(function(){var e=t;t.em=new o.a({menuTopOffset:"2rem",disableTapHighlight:!0,menuItems:[{text:"划线笔记",handler:function(t){var r=i.i(a.a)(e.textContainer,t.anchorNode,t.anchorOffset),o=t.toString(),s=r.split(o).length-1;if(e.notes.findIndex(function(t){return t.part===o&&t.part_index===s})>-1)return void n.a.error("该笔记已存在");e.$emit("note",o,s)}},{text:"分享",handler:function(t){var i=t.toString();i.length>4e3&&(i=i.slice(0,3997)+"..."),e.$emit("share",i)}},{text:"拷贝",noborder:!0,handler:function(t){n.a.notifyApp({type:"copy",data:t.toString()})}}],menuStyle:{menu:{fontSize:"14px",borderRadius:"4px",padding:"8px 0",backgroundColor:"#262626"},item:{padding:"4px 16px",borderRight:"1px solid #636363"},triangle:{borderTop:"10px solid #262626",borderRight:"12px solid transparent",borderLeft:"12px solid transparent"}}}),t.em.create(t.container,document.body,document.querySelectorAll("#article-content>:not(.text)")),t.em.onHighlightLineClick(function(e,i,n){t.jumpNoteDetail(e)}),t.notes.length&&(clearTimeout(t.eTimer),t.eTimer=setTimeout(function(){t.highLightNotes()},300))}))},highLightNotes:function(){var t=this;if(this.em&&this.canNote&&this.markerInited){var e=[];if(this.notes.length>0)for(var n=i.i(a.b)(this.container),r=this.container.innerText,o=0;o-1&&n.a.handleMathJax(this.$el)},getTouchPosition:function(t){return{x:t.clientX||t.changedTouches[0].clientX,y:t.clientY||t.changedTouches[0].clientY}},getDistance:function(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))},onTouchStart:function(t){this.touchStartPosition=this.getTouchPosition(t),this.touchStartTime=Date.now()},onTouchEnd:function(t){if(Date.now()-this.touchStartTime<500){var e=this.getTouchPosition(t);this.getDistance(e,this.touchStartPosition)<20&&this.handleClick(t)}},preventAllAnodeJump:function(){n.a.isInApp()&&this.$el.querySelectorAll("a").forEach(function(t){t.onclick=function(t){t.preventDefault()}})},initVideo:function(){var t=this.$refs.richText.querySelectorAll("video");t.length>0&&Array.prototype.slice.call(t).forEach(function(t){if(!t.attributes["x5-playsinline"]){var e=t.attributes.poster;e=e?e.value:"";var i=t.parentElement,r=document.createElement("div"),o=t.lastChild.attributes.src.value;r.innerHTML='',i.insertBefore(r,t),i.removeChild(t);var a=i.querySelector("video");d.loadSource(o),d.attachMedia(a),n.a.isInAndroidApp()&&a.addEventListener("click",function(){setTimeout(function(){a.paused?a.play():a.pause()},200)})}})}},watch:{content:function(t,e){this.richContent=n.a.formatContent(t),this.markerInited&&"none"!==this.em.$selectStatus&&this.em.reset()},richContent:function(t,e){var i=this;n.a.isInApp()||this.$nextTick(function(){i.initPrecodecopy()});var o=this.$el.querySelectorAll("pre code");Array.prototype.forEach.call(o,function(t){r.a.lineNumbersBlock(t,{singleLine:!0})}),this.handleMathJax(this.richContent),this.preventAllAnodeJump()},notes:function(t){var e=this;clearTimeout(this.eTimer),this.eTimer=setTimeout(function(){e.highLightNotes()},300)},canNote:function(t){t&&this.initMarker()}}}},828:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(99),r=i.n(n),o=i(65),a=i(814),s=i.n(a),A=i(911),l=i.n(A),c=i(219),u=-1,d="";e.default={props:{videoList:{type:Array,default:[]},index:{type:Number,default:0},quality:{type:Number|String,default:1},hadJoinGroupon:{type:Boolean,default:!1}},data:function(){return{paused:!0,isIgnoreWifiTips:window.localStorage.getItem("ignoreWifiTips"),isWifi:!0,isBuyShow:!1,isAutoSwitch:!0,isShowCounter:!0,isVideoError:!1,progressTimer:null,isFinished:!1,currentIndex:0,currentVideo:{},currentDuration:0,speed:1,timer:null,countTimer:null,showTitle:!0,playing:!1,counterPercent:0,volume:50,videoConfig:null,videoHeight:0}},components:{RoundProgress:l.a,AliyunPlayer:s.a},created:function(){var t=this;this.currentIndex=this.index,this.currentVideo=this.videoList.length>0?this.videoList[this.index]:{};var e=window.localStorage.getItem("VdPlayerRate");this.speed=/\d\.\d{1,2}/.test(e)?e:"1.0",o.a.isInWeixin()&&window.wx&&window.wx.ready(function(){window.wx.getNetworkType({success:function(e){t.isWifi="wifi"===e.networkType}})}),this.isShowCounter=!1,this.isAutoSwitch=!1},mounted:function(){this.bindEvent(),this.videoHeight=this.$refs.player.offsetWidth*(9/16),this.videoList.length>0?(this.reInitMedia(),this.preparePlayer(this.currentIndex)):this.initPlayer()},computed:r()({isInAndroidApp:function(){return o.a.isInAndroidApp()}},i.i(c.a)({loginUser:"loginUser"}),{videoStyle:function(){return{height:this.videoHeight+"px"}}}),watch:{index:function(t,e){this.currentIndex=t},videoList:{handler:function(t,e){this.videoList.length>0&&this.preparePlayer(this.currentIndex)},deep:!0},currentIndex:function(t,e){var i=this;this.videoList.length&&(this.videoConfig=null,this.$nextTick(function(){i.preparePlayer(t)})),this.$emit("videoSwitch",{index:t})}},methods:{preparePlayer:function(t){if(t!==u)u=t,d=this.videoList?this.videoList[t].media:"";else{var e=this.videoList?this.videoList[t].media:"";if(d===e)return}if(this.currentVideo=this.videoList&&this.videoList[t]||{},this.currentDuration=this.currentVideo.played||0,this.duration=this.currentVideo.totalSecond||0,this.isBuyShow=!1,this.isVideoError=!1,this.paused=!0,this.videoList[this.currentIndex].media){if("FORBIDDEN"===this.videoList[this.currentIndex].media)return void(this.isBuyShow=!0);if("VIDEOERROR"===this.videoList[this.currentIndex].media)return void(this.isVideoError=!0);this.initPlayer()}},initPlayer:function(){var t=this.videoList[this.currentIndex];if(t){var e="sd";"string"==typeof this.quality&&/^[hsl]d$/i.test(this.quality)&&(e=this.quality.toLowerCase());var i={},n=void 0,r=void 0;t.media.hd&&(i.HD=t.media.hd.url,n="hd"),t.media.sd&&(i.SD=t.media.sd.url,n="sd"),t.media.ld&&(i.LD=t.media.ld.url,n="ld"),t.media[e]&&(r=t.media[e].url),!r&&n&&(r=t.media[n].url,e=n),(r||t.encryptVideoId)&&(this.videoConfig={quality:e.toUpperCase(),source:r,cover:t.cover,encryptInfo:{encryptVideoId:t.encryptVideoId,sku:t.sku,aid:t.aid,sourceType:t.sourceType},speed:this.speed,urls:i,currentDuration:this.currentDuration})}},bindEvent:function(){document.addEventListener("notify",this.notifyHandler)},count:function(t){var e=this;t>0?(this.counterPercent=(3-t)/3*100,this.countTimer=setTimeout(function(){e.count(t-1)},1e3)):(this.counterPercent=0,this.next())},replay:function(){this.currentDuration=0,this.isBuyShow=!1,this.$refs.aliyunPlayer.replay(),clearTimeout(this.timer),clearTimeout(this.countTimer)},notifyHandler:function(t){try{var e=t.detail.data;switch(t.detail.type){case"network":this.isWifi="wifi"===e.type;break;case"media:isPlaying":e.data.isPlaying?this.player.pause():this.player.play()}}catch(t){console.log(t)}},next:function(){this.currentIndex=this.drawPercent||(this.speed+=1)}}}},839:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'._3sSXTUpc_0{position:relative;width:100%;height:220px;padding-left:25px;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}._3sSXTUpc_0 ._3Tr57CN7_0{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-filter:blur(40px);filter:blur(40px);background-repeat:no-repeat;background-size:cover;background-position:25% 35%;-webkit-transform:scale(1.5);transform:scale(1.5)}._3sSXTUpc_0 ._3Tr57CN7_0:after{content:"";position:absolute;left:0;top:0;right:0;bottom:0;z-index:20;background:rgba(0,0,0,.25)}._1RasNBHW_0{position:relative;height:100%;z-index:30}.dJvDkXqh_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:158px;-webkit-box-sizing:border-box;box-sizing:border-box}.wXKEHvTX_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:108px;border-radius:4px;position:relative;overflow:hidden;-webkit-transform-origin:top left;transform-origin:top left}.wXKEHvTX_0 img{width:82px;height:100%}._1CbzU_gu_0{position:absolute;top:114px;left:55px;width:27px;height:19px}._1qg3MriS_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:calc(100% - 100px);height:110px;margin-left:15px;color:#fff}._1qg3MriS_0 ._2TqouovA_0{font-size:17px;font-weight:500;min-width:0}._1qg3MriS_0 ._2TqouovA_0,._1qg3MriS_0 ._3AX-t4yp_0{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._1qg3MriS_0 ._3AX-t4yp_0{margin-right:10px;font-size:14px;font-weight:400}.OEdy1Sul_0{position:absolute;top:110px;left:97px;font-size:12px;font-weight:500;color:#fff}.OEdy1Sul_0 ._11KAOYC-_0{width:240px;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}._25q6khRB_0{position:relative;color:#fff}._25q6khRB_0,._25q6khRB_0 ._28hbagir_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._25q6khRB_0 ._28hbagir_0{min-width:50%;padding-right:50px;-webkit-box-sizing:border-box;box-sizing:border-box}._25q6khRB_0 ._28hbagir_0 ._1yYWyZ7__0{margin-left:2px}._25q6khRB_0 ._2v529AWL_0{-webkit-box-flex:1;-ms-flex:1 1 50%;flex:1 1 50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._25q6khRB_0 ._3KlnBZD2_0{font-size:14px;color:#c7c7c7}._25q6khRB_0 ._2q-8BNAY_0{margin-left:10px;font-size:18px;font-weight:500}._25q6khRB_0 ._1yYWyZ7__0{font-size:12px;font-weight:500;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-top:2px;-webkit-transform:scale(.9);transform:scale(.9)}._25q6khRB_0 ._1yYWyZ7__0._37M6XZI4_0{margin-left:0}',""]),e.locals={wrap:"_3sSXTUpc_0",blurBox:"_3Tr57CN7_0",box:"_1RasNBHW_0",infoWrap:"dJvDkXqh_0",avatar:"wXKEHvTX_0",videoIcon:"_1CbzU_gu_0",titleWrap:"_1qg3MriS_0",title:"_2TqouovA_0",subTitle:"_3AX-t4yp_0",authorWrap:"OEdy1Sul_0",author:"_11KAOYC-_0",columnShortInfo:"_25q6khRB_0",left:"_28hbagir_0",txt:"_1yYWyZ7__0",right:"_2v529AWL_0",icon:"_3KlnBZD2_0",num:"_2q-8BNAY_0",frequency:"_37M6XZI4_0"}},842:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'#iv-container{position:fixed;background:#0d0d0d;width:100%;height:100%;top:0;left:0;display:none;z-index:1000}.iv-container{overflow:hidden}.iv-close{width:26px;height:26px;position:absolute;right:20px;top:20px;cursor:pointer;text-align:center;overflow:hidden;text-shadow:0 0 3px #6d6d6d;-webkit-transition:all .2s ease;-moz-transition:all ease .2s;-o-transition:all ease .2s;transition:all .2s ease}.iv-close:after,.iv-close:before{content:"";height:2px;width:26px;background:#fff;position:absolute;left:0;top:50%;margin-top:-2px;border-radius:2px}.iv-close:before{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.iv-close:after{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.iv-close:hover{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.iv-image-view{position:absolute;height:100%;width:100%}.iv-image-wrap{display:inline-block}.iv-image-wrap:active{cursor:move}.iv-large-image{cursor:move;max-width:100%;max-height:100%;background-color:#ececec;-moz-transform:translateZ(0);-o-transform:translateZ(0)}.iv-large-image,.iv-loader{position:absolute;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0)}.iv-loader{top:50%;left:50%;border-radius:50%;width:32px;height:32px;z-index:100;margin-top:-16px;margin-left:-16px;font-size:5px;text-indent:-9999em;border-top:1em solid hsla(0,0%,100%,.2);border-right:1em solid hsla(0,0%,100%,.2);border-bottom:1em solid hsla(0,0%,100%,.2);border-left:1em solid #fff;-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear}.iv-loader:after{width:10em;height:10em;border-radius:50%}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}',""])},845:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".round-progress{display:-webkit-box;display:-ms-flexbox;display:flex;display:-webkit-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative}",""])},847:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".groupbuy-list-poster-box{width:750px;height:auto;background:#fff;padding:50px;padding-top:110px;padding-bottom:88px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;position:absolute;left:-5000px}.groupbuy-list-poster-box h2{color:#f98925;font-size:56px;font-weight:700}.groupbuy-list-poster-box .desc{color:#f98925;font-size:44px;font-weight:500;margin-top:21px}.groupbuy-list-poster-box .code,.groupbuy-list-poster-box img{width:220px;height:220px;margin:70px auto}.groupbuy-list-poster-box p{color:#888;font-size:33px;font-weight:400}.code-box-wrapper{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background:rgba(0,0,0,.8)}.code-box-wrapper .code-box{position:fixed;top:50%;left:50%;width:74.6vw;max-width:400px;height:auto;background:#fff;padding:5vw;padding-top:11vw;padding-bottom:8.8vw;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center}.code-box-wrapper .code-box img{width:100%}@media (min-width:769px){.code-box-wrapper .code-box{width:360px;padding:60px 20px}}",""])},848:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'@font-face{font-family:player-font;src:url("//at.alicdn.com/t/font_509397_9fpjwjp73uqsemi.eot");src:url("//at.alicdn.com/t/font_509397_9fpjwjp73uqsemi.eot?#iefix") format("embedded-opentype"),url("//at.alicdn.com/t/font_509397_9fpjwjp73uqsemi.woff") format("woff"),url("//at.alicdn.com/t/font_509397_9fpjwjp73uqsemi.ttf") format("truetype"),url("//at.alicdn.com/t/font_509397_9fpjwjp73uqsemi.svg#player-font") format("svg")}.player-font{font-family:player-font!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.vplayer{position:relative;overflow:hidden}.vplayer,.vplayer video{width:100%}.vplayer .title{position:absolute;padding-top:1rem;padding-left:1rem;padding-right:1rem;top:0;left:0;right:0;color:#fff;font-weight:400;font-size:.875rem;word-break:break-all;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background:linear-gradient(180deg,rgba(0,0,0,.5),transparent);height:68px}.vplayer .finish-control,.vplayer .loading{position:absolute;top:0;left:0;background:rgba(0,0,0,.5);color:#fff;width:100%;height:100%;z-index:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.vplayer .finish-control h3,.vplayer .loading h3{position:absolute;color:#fff;top:1rem;left:50%;font-size:1rem;font-weight:400;-webkit-transform:translate(-50%);transform:translate(-50%)}.vplayer .finish-control p,.vplayer .loading p{cursor:pointer;max-height:6rem;text-align:center}.vplayer .finish-control .cancel-next,.vplayer .loading .cancel-next{margin-left:4rem}.vplayer .finish-control .cancel-next .icon-cancel-next,.vplayer .loading .cancel-next .icon-cancel-next{height:4rem;line-height:4rem;cursor:pointer;font-size:3.5rem}.vplayer .finish-control .cancel-next .icon-cancel-next i,.vplayer .loading .cancel-next .icon-cancel-next i{position:absolute;top:0;left:0;margin-left:8px}.vplayer .finish-control .icon-replay,.vplayer .loading .icon-replay{height:4rem;cursor:pointer;line-height:4rem;font-size:3rem}.vplayer .finish-control{background:#000}.vplayer .no-wifi{width:70%;position:absolute;left:50%;top:50%;padding:1rem;background:rgba(0,0,0,.8);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:3}.vplayer .no-wifi p{line-height:1.5rem;margin:0 auto;width:60%;color:#fff;font-size:1rem;text-align:center}.vplayer .no-wifi p span{font-size:.875rem}.vplayer .no-wifi div{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-top:1rem}.vplayer .no-wifi div a{color:#fff;background:#fa8919;padding:.3rem .5rem}.vplayer .no-wifi div a:last-child{margin-left:1rem}.vplayer .buy{position:absolute;z-index:1001;top:0;left:0;width:100%;height:100%;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#000}.vplayer .buy p{text-align:center}.vplayer .buy p span{color:#fa8919}.vplayer .buy .btn{margin-top:1rem;color:#fff;background:#fa8919;padding:.3rem 1.5rem}.android .dplayer .dplayer-controller .dplayer-icons .dplayer-full,.dplayer-setting-item.dplayer-setting-loop,.dplayer .dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon{display:none}.video-placeholder{width:100%;position:relative;overflow:hidden;background:#000}',""])},849:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".MathJax_Display{overflow:auto}.poster{position:fixed;left:-10000px;top:-10000px;overflow:hidden;padding:1rem;background:#ececec}.richcontent a:link,.richcontent a:visited{color:#fa8919;border-bottom-color:#fa8919}.richcontent-pre-copy{font-size:13px;color:#888;position:absolute;right:1em;top:.2em;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.richcontent-pre-copy .iconfont{font-size:12px;margin-right:.2em}",""])},851:function(t,e,i){var n=i(842);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("9fee29d8",n,!0,{})},853:function(t,e,i){var n=i(839);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("d96e68ac",n,!0,{})},857:function(t,e,i){var n=i(845);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("009d6b61",n,!0,{})},859:function(t,e,i){var n=i(847);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("6f5a6dbc",n,!0,{})},860:function(t,e,i){var n=i(848);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("3683212c",n,!0,{})},861:function(t,e,i){var n=i(849);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("657dc810",n,!0,{})},899:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAB8CAYAAACrHtS+AAAQtUlEQVR4Xu2defC1YxnHv5dStpEy1hSSZGxJktdSmcmMV0RjzZaxTWXf2owwSoQsbUjkJYpSUqY9W7SKqKRISosShdJ2NZ/XdV7nd95nP88553nO77lmzvz++N3P/dz3/X3u+772yzQl5O4maXVJ68XfF0laVdLykpaN35KSnj0w5SclPS7pL/H7k6T7Jd0r6T5JP+Gvmfk0LBWL1Epy9+UkbS5pjqTNAuilRjSZxwL4myV9R9JNZvbQiN410m5bA7i7LyJpU0nbSJoracORrkx+57dJ+rKk6yTdYmb/y39k8i0aD7i7byxpN0k7S3rB5JcscQQPSLpS0hVm9v2GjnH+sBoJuLs/R9LekvaTtEGTFzBhbLdLulDSJWb2aNPG3ijA3R0m61BJB0oa1X08Lgy498+XdI6ZwQQ2ghoBuLu/UNJJkvaU9IwaVoYjFi7715J+K+mPwYE/IYld1+O4mT+nyRLBxa8gaRVJq0mCy6/jCvmvpEslHW9mv6lhbkN1MVHAg9M+UdL+khatOJMH4ZolwUHDSN1R11EaV8v6wSAiCSAVrFxxnP+W9HFJJ5gZot9EaCKAuzvgHsJXHzuszOT/I+lbPQ7ZzO4u8/Cwbd19rT5J4bWSnlmyT04YTrNzzYyPYKw0dsDd/VXxpa9TcqY3xNH4WTN7uOSzI2nu7s+TtJOkPSRtWfIld3GymdmtJZ8bqvnYAHf3xSWdEkxZ0feyGzgGLxj3Ti67qrHzD4jrCb6gCMFLnCPpnWb2jyIPDNum6MIP9R53R7S6XNLaBTuC6ToD8cbM4HZbQ+6OdIE4eVQJpu9nknY3M0S6kdLIAXf3gwO8ZxWYyR8knRw7+l8F2je2ibszX3b8cZJWLDBQ5nuUmX2oQNvKTUYGeBzh50naq8Do/inpVEmnmRmi09SQuyPyHSvp7ZIWKzCxeZIOGtURPxLA3X0lSV8qqO++Bo69CTJqATAqNwldw7mSti/QCeLltmb2+wJtSzWpHXB3XzdEpjylBbLowWaGDnrWkLvvgkgWZtusecPHzDWzO+tcnFoBd/dNJH1V0tI5g8TKtO8kFRB1LmLZvtwdG/1FYfXLevxvkrY2s++WfUda+9oAd/etJF0rCfErjVCaHB365alwKKgKRDhsHCbpAznKG8S115vZN6u+q/+5WgAvCDYc+M5mhhq0o1gBd98iTKvo8dOoNtCHBjyOcVSdWTv7jvhKuZc6GlgBd4ff4XREb58F+muHPd6HAjwYNIwWWXc2dzo7m/uoo5QVcHfWEAZ264xFYg03G4aRqwx4iF4wE1nc+Ocl7WpmrVaijOsrDWXNpyXtkPFOTslNqopslQAPpQo7O8uv7FN4rZgZ9uCOCq6Au+MPcImkN2U8gpzOTi+tf68KOAPK0qCxs3fqwC6I8sJ3OqBflbPT55kZbmClqDTgoRtHcZBG3Nnbdcd4KRwWahzH+xdz7nQ0lKV076UAD6vX9ySlGULgxrfoGLThwO49HYzcjRncO7zRK8tY2QoDHvf2DzNMnMjZvLwTverBe34vIbLh+pwmp2Na3ajofV4G8LMkoRlKIjRoyIidUqVGsPt2OsoZNG1p7lRnm9nhRV5dCPBwSyLEJq394WZ2dpEXdm2qrYC7A+gHU55GTT2niLtULuDhcIgYkOaDhiEEXe+s1o1Xg7H4U6F7RxtHmFUS4SO3YZ5jZBHAjwyPlaSXYOJcb7ZavYrDVU/LsLIRzYq1LYnwmDkz622ZgIff+D0ZrsS7zDZ7dj3QVe8l7Olo45IIp881syJb8wD/iKS3pHR+jZm9ofrQuyerroC7fyHDc+ajZvbWtL5TAQ+XnF+mRITgg7bWtLslVQVk1M8FNgRgJPnIEdzw4jRssgC/WNI+KYM/0cxOGPXEuv7TV8DdWf/3pLT4pJm9Oel/iYBHFOevUgL7ULCsMW3epW37uMIbFoySXKAxWIHRQlGraYATBAB3nkQ4Hn64bQs0jeN197dJStOln2lmBEPMoIUAj4hJQmyT4rNRm3I/NMa+HUohok83ioQ9P5UEF0sMWivScFT9GMPAAp+V5JNAxM4qg5G0SYAT1Um8UxI1RqMWdmOsdmlSBHr/I82MIMSpJXdH3Y3aO4kONbMZls0kwH+ckmYDGY8vphGxXu7OR8nHmUefI/LDzLjvpo4ilo0TOSmA8XYze1n/pGcAHgl0MH8m0RlmhovxxCkiNbES5WoKY7CIKnwgJ5vZIxOfQM0DcPfTI3gxqWcsmAsSDQ0CnsWsvbQpIbvu/o4IPS67dH8mA4Ok88wMC99UUGyAn6dMZgbztgDwyINGTpQkBuAGM3t1U1bH3bM0gEWGyelwtJlh+JkKcvfrU5ISwGiv1mNg+wEnh0maPftAM7ugKSvj7llKoTLDxB0L4DFItJrcncxXROsm0eZmhtPp03eguxOX/e6E1hx9KzQlzQbjqxFwukNJQZYJsixNLNnOsF9bpB8hW1WSk8R7zYw49RmA/yjF7fhrZpblHD/sWEs/XzPgvffj5P8+SXiPYCtoHbk7J9brEgZ+m5m9fAHgYQZN+7qPMLM0OW8iizIiwHtzgY8heP/Ktjl15HjFLI/ZdP4d7u47SkJeTaLGcOe9wY0Y8N5ruPNQ3KSJqRP52LNemsOtv9HMru4BTshqkoz9oJk9v2kzGxPgvWlfFlmWWuGN6+6/S0keeLqZHdMDHAdFUlMP0mfMbNdZDjjT505HuXFqUzSNaZi4O3YEskwMEim+51g4x8GwJBlLDjOzNL36xL6DMe/w/nmScwVu9+KmGmbcneTESR7EqMSXBnCSyKbpmbc0MyIfGkUTBLy3DtgbuN+Ji28URYKBNIPRGgCOXxrBf0m0TF2JautclQYA3psOvmUYZn5R5/yG6SvM22n2gh0APM3B/QEzI61146hBgLM2GGZwCDnJzP7ahMVyd9J0J6nIjwDwNDPj9Wb2miZMYHAMDQO8NzzAxjCD1+jYsyT3r5G7f1tSku3jXABPc3lNdYSb9EfQUMB7y8Lxjn6eUN+JUMb6XAPgt0gipfUgLdC/TmTUGS9tOOC9kX8jGDtCqMdKGXaRWwGcL3LNhBEt5B4z1lG3H3BmQLwdplw4+rH5Abp7mpvaPQBORT4SvQ/SHmZGnpbGUUt2eP+6UduMgMuxOFW6O/lh0BAO0sMAjhZpsDwjDXc0szRxbaIfQQsBZ732M7NPjGPh3J0sUFcnvOtJAE8L892qiYqF+edkfQ4Q41j/3jtuNjOK5Iyc3J1aLImpOrMAJ6MD7H3jqKWAP2pmy4xjMd0dcTpRC9gBPg4EnnrHI2b23HG8rirg3ZFeLzo3mlnZykeVRpB3pHdMW6VlLf3QPmZGQsORUx7T1ollI4dgvjcRmSnHkgcnTyzrFC+jAxyPX4I7jhtn4EOe4qVTrY4GcIr3HDMJ02mearUzntQLOMXmUKXWUrKiytDyjCedebTKqi78DEEABHJcNC4Vatqw88yjnQPEcIAj5XBPv78pDo55DhCdi1N1wDEuUSh24oXge1Mo4uLUOTGWBxxGl4ic2uqJlR9C8hNFnBjxTe/clIutOGFIxKbjrz8WmbrYsJ5uleumTFN37wIRslf27xFoeFbTAw1zAxEC8C7UKBlwHBZ6ocRw4Y2noqFGXTDhwlB+PeTp1iQLKBNMuJykLlz4KdDJlYLXKeWwW0WFw4XjWJ/tCQEejtylHxun3rvOL6pwQoAAfLam/CBogPSVRI60NqVXlZQfszGpD45+xIaRvrLVVCWpzyKSZkvaLmq4oDgh1dVUUOm0XXGstyUxH9kqECXLEvHd76K256QNHGUHntW+UmK+AHxjSWk5TeanjKhzoFX7iph2HDeo0VmEKMrKB3KamT1e5IE2tamcejNAb0ty3VNCzZmHzTx2tZmRgHbqaKjkugF4W9Jnw3OcFon8k5LskoWJdN8/mDqU+yZUR/ps0jC3KUE+6aH3lfSKKMiD4uQyM/vKNAMdm5Oiv8MlyC/AvHUlMBryJdVSAiMAXzUS/SQxRV2RmwYAXmuRmwC9K2PVAGDThlBrGasAnIQ+XaG6BoI+kkJ1AXpXirKZgNdfijIAp4otCo6kAio06YrNjvmDKFBs9iVZed9zi8S4e1dOesygZtzbbMDRlZOOXb6opK5g/IRBH1vB+ACdtF44OqadCI0pYDdhXEb2+hxvFjxo55jZrXkDyD3Sex24O1URqIKXRERJkiIkrUhO3ji6/2esQPiaE6uWVM+EJynbQQRRLpUBfHFJlHdcO6VXFDIURWtFIvnclWlIA3cnZyqF5lZIGRIluTYyMyyCuVQY8DjaNwjzKTrcJCLr4BZmRmBDR0OugLsvLYn05eundEWyPzYZEauFqBTgAfrBkmYUMB14E5V1thtn5sFCM21Zo6gcTL7WrIpSh5hZWjnpxBmXBjxAJ1fJXhlrSEI/UlxQE6yjkisQlZOvkkSCvTSaZ2Z7l+y6cLHWGf26O/c59uYNM15IZOXeHejlIAmw2VCkz0wjxOTNit7b/Z1U2uGxy1eSRPRkUiL23jvY6bt2x3sx0OMYp0hN1s6GKd7EzPDPK02VAQ/Q142dDnORRtzpO3eMXDY2waBdmXNnwwyzs+8sjXQ8MBTgAfomkeaRYz6N4N7JJtyJbAkrFKLXtRncOE8hdqHrGComfWjAA/StJDHgLNCR09npnXKmD/RQqrCz0+TsHthsmKETBdUCeAnQ0cjhU35OUwPqqx6VZZ8L3TiaS9yn0zRotYJNZ7UB3ne8c2dn3ek0pVD7vm0u31wW4P727o7V6yJJc3P64c7eethjvP8dtQLex8gBaBb3TlPCk3GI5DibNRT2bBRXgJ5F8Dtzh2HQkjqvHfAAHZGN+OosOb03HjIWojFqTCakUXx94ZYE0NsX6B85e9uqoldW/yMBPECHgTsvRyPXGxu5zk6NUKAnCixIa5qEd+mxUZN8sQIDJ1LmoCpKlQJ913uHJ73Q3dG9E6SYZnDpfwxOnjj1C9qurAklygFRnHbFAmBgCDmqrG68QL8zmoxshw8wKVjZLs8wrQ6Om/uLj+TCpmQ3LLqwEeu1H+AV4GN63WLi3L2M1avoeAbbjQXwviOeAEDKHRd976ORRYkdf3fVSY7juQjZZUfvn+H0OTgUPFXIdUs2x0L27GHnUnThh33PgufdHXcpUmGtU7JTSiRTi+sqMyMfy8Qp0mzsJGkPSWXLW9zFx1HELanOiY4d8NjtOEYSpXp8id3QmzfKGyr2IPpdN+6dHzt5m5ChKReVpTRJwopT6yR8CiZRlHYigPdWwd1JF3ZiHIN8BFXoQUmoazHXIs7cUVfN80hUi7cJ4iU5cKg7tnKVQUbZaU62EyapcJoo4H3AE9bEV79niawOWesO03dv5Kwh9JksitR2QeRjh/XypDJ/giyWkLRs6LNXkbSaJJIO5ymPimCPE8ilnGZN0DU0AvA+4Ilahak7UNJSRVazwW0ek3R+2A3ub8o4GwV4H/DsOtx3EG8Q6dpEOBReGImDOE0aRY0EvH+F3J1EQ7thWq3piB0FAFwh2ASuMDNcihtLjQe8b9eT02VTST0OuYiefpQLD4M4X1KQdEtb0oC1BvBB5ILDh2ueExz0eiO897mPCeJDEiDk6iYze2iUX9Oo+m4t4AkfAHNZXRLA8xcuGyYQMyQcOL8lE2qlPymJ3G1w8fww28JkweXfF0DfNy0OG/8HNbaK4RkqQngAAAAASUVORK5CYII="},902:function(t,e,i){!function(e,i){t.exports=i()}(0,function(){"use strict";function t(){var t=!1;try{addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){t=!0}}))}catch(t){}return t}function e(t,e){this.container=t;var i=function(){};this.onStart=e.onStart||i,this.onMove=e.onMove||i,this.onEnd=e.onEnd||i,this.onMouseWheel=e.onMouseWheel||i,this.onClick=e.onClick||i,this.onPinch=e.onPinch||i}function i(t,e){this.container=t,this.options=Object.assign({},i.defaults,e),this.zoomValue=100,t.classList.add("iv-container"),this.imageWrap=t.querySelector(".iv-image-wrap"),this.closeBtn=t.querySelector(".iv-close")}e.prototype.init=function(){var e=this;return this.startHandle=function(i){function n(t){t.preventDefault();var i=t.clientX||t.touches[0].clientX,n=t.clientY||t.touches[0].clientY;e.onMove(t,{dx:i-s,dy:n-A,mx:i,my:n})}i.preventDefault();var r=i.type,o="touchstart"===r?"touchmove":"mousemove",a="touchstart"===r?"touchend":"mouseup",s=i.clientX||i.touches[0].clientX,A=i.clientY||i.touches[0].clientY;!1!==e.onStart(i,{x:s,y:A})&&("touchstart"===r&&i.touches[1]&&e.onPinch(i),document.addEventListener(o,n,!("touchmove"!==o||!t())&&{capture:!1,passive:!1}),document.addEventListener(a,function t(){document.removeEventListener(o,n),document.removeEventListener(a,t),e.onEnd()}))},this.container.addEventListener("touchstart",this.startHandle,!1),this.container.addEventListener("mousedown",this.startHandle,!1),this.container.addEventListener("mousewheel",this.onMouseWheel,!1),this.container.addEventListener("click",this.onClick,!1),this},e.prototype.destroy=function(){this.container.removeEventListener("touchstart",this.startHandle),this.container.removeEventListener("mousedown",this.startHandle),this.container.removeEventListener("mousewheel",this.onMouseWheel),this.container.removeEventListener("click",this.onClick)};var n=function(t){return t.preventDefault()};return function(){var t=0;if(!window.requestAnimationFrame){for(var e=["ms","moz","webkit","o"],i=0;i
    ',document.body.appendChild(e);var n=new i(e,t);return n._init(),n}})},908:function(t,e,i){function n(t){this.$style=i(1e3)}var r=i(22)(i(951),i(1094),n,null,null);t.exports=r.exports},911:function(t,e,i){function n(t){i(857)}var r=i(22)(i(832),i(917),n,null,null);t.exports=r.exports},917:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"round-progress"},[i("canvas",{ref:"canvas",staticClass:"progress-canvas",style:t.canvasStyle,attrs:{width:2*t.width,height:2*t.height}}),t._v(" "),t._t("default")],2)},staticRenderFns:[]}},919:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{},[t.data?i("div",{staticClass:"groupbuy-list-poster-box"},[i("div",{ref:"poster"},[i("h2",[t._v(t._s(t.data.title))]),t._v(" "),i("div",{staticClass:"desc"},[t._v("\n 拼团价:¥"+t._s(t._f("columnPrice")(t.data.price))+" / "+t._s(t.data.succUserCount)+"人成团\n ")]),t._v(" "),t.data.url?i("qr-code",{staticClass:"code",attrs:{size:220,val:t.data.url}}):t._e(),t._v(" "),i("p",[t._v("保存后可在微信里通过扫一扫打开")]),t._v(" "),i("p",[t._v("拼团价购买并开团")])],1)]):t._e(),t._v(" "),i("transition",{attrs:{name:"bounce","enter-active-class":"fadeIn","leave-active-class":"fadeOut"}},[t.img?i("div",{staticClass:"code-box-wrapper",on:{click:t.hideImg}},[i("div",{staticClass:"code-box"},[i("img",{attrs:{src:t.img,alt:""}})])]):t._e()])],1)},staticRenderFns:[]}},920:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{ref:"player",staticClass:"vplayer",on:{mouseenter:function(e){t.showTitle=!0},mouseleave:function(e){t.showTitle=!1}}},[t.videoConfig?i("AliyunPlayer",{ref:"aliyunPlayer",attrs:{config:t.videoConfig},on:{pause:t.pauseHandle,playing:t.playingHandle,ended:t.endedHandle,timeupdate:t.timeupdateHandle,changespeed:t.changeSpeedHandle,changequality:t.changeQualityHandle}}):i("div",{staticClass:"video-placeholder",style:t.videoStyle}),t._v(" "),t.isFinished?i("div",{staticClass:"finish-control"},[t.currentIndex==t.videoList.length-1&&t.videoList.length>1?i("h3",[t._v("当前已是最后一课")]):t._e(),t._v(" "),t.currentIndex1?i("h2",{staticClass:"title"},[t._v("即将播放:"+t._s(t.videoList[this.currentIndex+1].title))]):t._e(),t._v(" "),i("div",{staticClass:"replay",on:{click:t.replay}},[t._m(0),t._v(" "),i("p",[t._v("重新播放")])]),t._v(" "),t.currentIndexthis.showNum){var t=this.scroller.children[0];this.itemH=t.offsetHeight,this.$el.style.height=this.itemH*this.showNum+"px",this.beginScroll()}},handleClick:function(t){for(var e=t.target;e.parentNode!==this.scroller&&null!==e.parentNode;)e=e.parentNode;for(var i=0;i20&&(clearInterval(t.interval),t.index=t.index+1,t.index>=t.len-t.showNum&&(t.index=0,t.scroller.style.transform="translateY(0px)"),t.beginScroll())},16)},easeOut:function(t,e,i,n){return i*Math.sqrt(1-(t=t/n-1)*t)+e}}}},941:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={props:{size:{type:Number,default:0},border:{type:Number,default:0},progress:{type:Number,default:0},color:{type:String,default:"#fa8919"},backgroundColor:{type:String,default:"#ffffff"}},data:function(){return{width:0}},created:function(){this.width=this.size+2*this.border},computed:{radius:function(){return this.size/2},perimeter:function(){return Math.ceil(2*this.radius*Math.PI)},progressBar:function(){return Math.ceil(this.perimeter/360*this.progress)}}}},942:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(65);e.default={name:"Catalog",props:{columnType:{type:Number,default:1},columnId:{type:[Number,String],default:0},isNeedSub:{type:Boolean,default:!1},articleList:{type:Array,default:function(){return[]}},freelyRead:{type:Object,default:function(){return{count:0,total:0}}},loginUser:{type:Object,default:null},chapterList:{type:Array,default:function(){return[]}}},data:function(){return{list:[],chapters:[],isActive:!1}},watch:{chapterList:{handler:function(t){this.chapters=t},immediate:!0},articleList:{handler:function(t){this.list=t},immediate:!0}},computed:{hasLeftFreelyReadCount:function(){return!!(this.loginUser&&this.freelyRead.count=0&&(this.$set(this.totalArticleList[e],"isActive",!this.totalArticleList[e].isActive),this.$forceUpdate())},getItemHeight:function(t){var e=60;return t.isActive&&(e=t.articles.length?50*t.articles.length+70:110),e+"px"},isAllowRead:function(t){return!this.isNeedSub||t.article_could_preview||this.hasLeftFreelyReadCount||t.had_freelyread}}}},943:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(1071),r=i.n(n);e.default={name:"ColumnIntro",props:{data:{type:Object,default:function(){}},loginUser:{type:Object}},components:{VideoPlayerModal:r.a},data:function(){return{ratio:window.devicePixelRatio>1?2:1,showModal:!1,isActive:!1}},watch:{isActive:function(t){var e=this;t&&setTimeout(function(){e.isActive=!1},300)}},methods:{subscribe:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.$emit("subscribe",t)},start:function(){this.$emit("start")},showModalHandler:function(){this.showModal=!0,this.isActive=!0}}}},944:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(787),r=i.n(n);e.default={name:"ColumnIntro",props:{content:{type:String,default:""}},components:{RichContent:r.a},data:function(){return{richContent:""}},created:function(){this.richContent=this.content}}},945:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"grouponItem",props:{data:{type:Object},price:{type:Number,default:0}},data:function(){return{time:this.data.left_seconds}},created:function(){this.startTime()},filters:{formatTime:function(t){var e="",i=Math.floor(t/60/60/24),n=Math.floor(t/3600-24*i),r=Math.floor(t/60-24*i*60-60*n),o=Math.floor(t%60);return i>0?e=i+" 天":n>0?e=n+" 小时":r>0?e=r+" 分钟":o>0&&(e=o+" 秒"),e}},methods:{startTime:function(){var t=this;this.timer=setTimeout(function(){t.time=Math.max(0,t.time-1),t.time>0&&t.startTime()},1e3)},handlerClick:function(){this.$emit("join",this.data.code)}}}},946:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(1069),r=i.n(n),o=i(621);e.default={name:"GrouponModule",props:{cId:{type:Number,default:0},groupbuyList:{type:Array,default:function(){return[]}},groupbuyPrice:{type:Number,default:0}},components:{GrouponItem:r.a},data:function(){return{progressItems:[{icon:i(1044),text:"点击开团或参团按钮"},{icon:i(1045),text:"完成支付"},{icon:i(1046),text:"邀请好友或等待系统拼单"},{icon:i(1047),text:"拼团成功 开始学习"}],currentHeaders:[],defaultAvatar:i(226)}},computed:{currentShowHeaders:function(){return this.currentHeaders.slice(0,5)}},created:function(){1===this.groupbuyList.length&&this.getGroupbuyInfo()},methods:{joinGroupbuy:function(t){this.$ga.sendPv("/fake/webintro/joingroupbuy/"+this.id),this.$router.push("/groupon/"+t)},getGroupbuyInfo:function(){var t=this;o.a.getGroupBuyInfo(this.groupbuyList[0].code).then(function(e){t.currentHeaders=e.groupbuy.partners.slice(-5),t.currentHeaders.sort(function(t,e){return e.join_time-t.join_time})})}}}},947:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(99),r=i.n(n),o=i(219),a=i(821),s=i.n(a);e.default={name:"ColumnVideoPlayerModal",props:{isShow:{type:Boolean,default:!1},videoData:{type:Object,default:function(){}}},components:{VideoPlayer:s.a},watch:{isShow:function(t){var e=this;this.showModal=t,t&&(setTimeout(function(){e.showContent=!0},20),this.videoList=this.videoListAdapter(this.videoData))},showModal:function(t){t||(this.showContent=!1,this.$emit("closeModal"))}},computed:r()({},i.i(o.a)({loginUser:"loginUser"})),data:function(){return{showModal:!1,videoList:[],showContent:!1}},methods:{videoListAdapter:function(t){var e=[];return e.push({id:t.id,cover:t.column_video_cover,media:t.column_video_media?JSON.parse(t.column_video_media):t.had_sub?"VIDEOERROR":"FORBIDDEN",title:"课程介绍",size:t.video_size,totalSecond:t.video_total_seconds,played:0}),e}}}},948:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(218),r=i(65);e.default={props:{isShow:{type:Boolean,default:!1},groupbuyPrice:{type:Number,default:0},groupbuyList:{type:Array,default:function(){return[]}}},data:function(){return{defaultAvatar:n.a.defaultAvatar,showModal:!1,showShadow:!1,groupbuyListForShow:[],timer:null}},filters:{filterTime:function(t){return t>86400?Math.floor(t/86400)+"天":t>3600?Math.floor(t/3600)+"小时":t>60?Math.floor(t/60)+"分":t+"秒"}},watch:{isShow:function(t){t&&(r.a.fixedBody.open(),this.showModal=!0)},showModal:function(t){t||(r.a.fixedBody.close(),this.$emit("closemodal"))},groupbuyList:{handler:function(t){t&&t.length&&(this.groupbuyListForShow=t.slice(0,10),this.animate())},immediate:!0}},beforeDestroy:function(){clearTimeout(this.timer)},methods:{animate:function(){var t=this;this.timer=setTimeout(function(){t.groupbuyListForShow.foreach(function(t){t.left_seconds>0&&t.left_seconds--})},1e3)},goGroupon:function(t){this.$emit("goGroupon",t)},createGroupon:function(){this.$emit("createGroupon")},scrollHandler:function(t){if(!(this.groupbuyListForShow.length<4)){var e=t.target,i=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;this.showShadow=i>0&&i<=n-r}}}}},951:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"marquee",props:{data:{type:Array,default:function(){return[]}},themeStyle:{type:Object,default:function(){}}},data:function(){return{textList:[],itemWidth:0,parentNodeWidth:screen.width}},computed:{wrapperWidth:function(){var t=this.textList.length;return this.itemWidth*t+3*screen.width/10*(t-1)},itemRef:function(){return this.$refs.marquee.children}},watch:{data:{handler:function(t){t.length&&(this.textList=t)},immediate:!0}},methods:{animate:function(){},jump:function(t){this.$emit("jump",t)},getItemRect:function(){var t=this.$refs.marquee.children;this.itemWidth=t[0].clientWidth}},mounted:function(){this.data.length}}},952:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={props:{shareIcon:{type:String,default:""}},methods:{back:function(){this.$emit("back")},share:function(){this.$emit("share")}}}},961:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"RecommendColumnItem",props:{data:{type:Object,default:function(){}}},methods:{jumpToIntro:function(t){this.$emit("jump",t)}}}},969:function(t,e,i){var n=i(620);e=t.exports=i(571)(!1),e.push([t.i,"._31YiitqL_0{position:fixed;z-index:300}._1sMDPres_0,._31YiitqL_0{top:0;left:0;right:0;bottom:0}._1sMDPres_0{z-index:301;position:absolute;background:rgba(0,0,0,.5)}._3DVS5YCM_0{position:absolute;z-index:302;max-width:900px;width:94vw;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);background:#fff;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}._3DVS5YCM_0._2NujOlg1_0{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._1ODoWcLF_0{cursor:pointer;position:absolute;z-index:303;right:0;top:-50px;width:32px;height:32px;font-size:20px;line-height:20px;color:#fff;font-size:0;border-radius:100%;background:url("+n(i(1048))+") 50% no-repeat;background-size:100%;-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}._1ODoWcLF_0:hover{-webkit-transform:rotate(180deg);transform:rotate(180deg)}",""]),e.locals={modalContainer:"_31YiitqL_0",modalMask:"_1sMDPres_0",modalContent:"_3DVS5YCM_0",show:"_2NujOlg1_0",close:"_1ODoWcLF_0"}},970:function(t,e,i){var n=i(620);e=t.exports=i(571)(!1),e.push([t.i,".nLAp02Ia_0{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._1Ob7Roap_0{position:relative;margin-right:25px;font-size:0}._1Ob7Roap_0 ._2y58S7xx_0{position:absolute;z-index:2;width:100%;height:50%;bottom:0;left:0;background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.3)),to(transparent));background-image:linear-gradient(0deg,rgba(0,0,0,.3),transparent)}._1Ob7Roap_0 .v88StUUc_0{width:148px;height:195px;border-radius:5px;background:#eee}._1Ob7Roap_0 ._1QmzxrkP_0{position:absolute;right:10px;bottom:10px;z-index:3;width:30px;height:30px;background:url("+n(i(899))+') 50% no-repeat;background-size:100%}._1Ob7Roap_0 ._1QmzxrkP_0:after{content:"";position:absolute;-webkit-transform:scale(1);transform:scale(1);z-index:2;width:30px;height:30px;background:url('+n(i(899))+") 50% no-repeat;background-size:100%;opacity:.8;visibility:hidden}._1Ob7Roap_0 ._1QmzxrkP_0._3l1WnSVh_0:after{-webkit-transition:all .3s;transition:all .3s;-webkit-transform:scale(1.5);transform:scale(1.5);opacity:.2;visibility:visible}._14NnG4oe_0{-webkit-box-flex:1;-ms-flex:1;flex:1;height:195px}._6NayFAN8_0{font-size:24px;line-height:25px;color:#404040;font-weight:500}._3mB1cINA_0{margin-top:10px;font-size:18px;line-height:20px}._1jI3b4hN_0,._3mB1cINA_0{color:#404040;font-weight:400}._1jI3b4hN_0{font-size:16px;margin-top:20px;line-height:16px}._7-SPmXCk_0{margin-top:7px;font-size:14px;color:#404040;line-height:20px;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;height:40px}._1xft5_wv_0{margin-top:18px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}._1xft5_wv_0,._64a88UEv_0{display:-webkit-box;display:-ms-flexbox;display:flex}._64a88UEv_0{-webkit-box-align:center;-ms-flex-align:center;align-items:center}._64a88UEv_0 ._1NEXwOp3_0{display:inline-block;cursor:pointer;border:none;outline:none;width:110px;height:34px;border-radius:5px;line-height:34px;background:#fa8919;color:#fff;font-weight:400;font-size:14px}._64a88UEv_0 ._1NEXwOp3_0._1VGJWHEe_0{background:#fbf5ee;color:#fa8919}._64a88UEv_0 ._1NEXwOp3_0._26saKAOD_0{background:#b2b2b2}._64a88UEv_0 ._1NEXwOp3_0._3cUk-M1F_0{background:#fff;color:#fa8919;border:1px solid #fa8919;margin-left:10px}._64a88UEv_0 ._1KL8ruA-_0{color:#888;font-size:12px;font-weight:400;margin-left:10px}._30jSb4Be_0{color:#888;font-size:13px;font-weight:300;line-height:1}",""]),e.locals={columnInfoContainer:"nLAp02Ia_0",columnInfoMedia:"_1Ob7Roap_0",mediaMask:"_2y58S7xx_0",columnInfoCover:"v88StUUc_0",play:"_1QmzxrkP_0",active:"_3l1WnSVh_0",columnInfoInner:"_14NnG4oe_0",columnInfoTitle:"_6NayFAN8_0",columnInfoSubtitle:"_3mB1cINA_0",columnInfoAuthor:"_1jI3b4hN_0",columnInfoAuthorIntro:"_7-SPmXCk_0",columnInfoFooter:"_1xft5_wv_0",buttonBox:"_64a88UEv_0",button:"_1NEXwOp3_0",hadSub:"_1VGJWHEe_0",disabled:"_26saKAOD_0",only:"_3cUk-M1F_0",sourcePrice:"_1KL8ruA-_0",columnStatics:"_30jSb4Be_0"}},972:function(t,e,i){var n=i(620);e=t.exports=i(571)(!1),e.push([t.i,"._1X9Hwflu_0{height:50px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;width:100%;-webkit-transition:height .3s ease;transition:height .3s ease}._1X9Hwflu_0._1Tl0-Sx9_0 ._3OQb1d55_0{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._3Nnx8nPI_0{font-size:18px;font-weight:500;height:50px;color:#4c4c4c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer}._3Nnx8nPI_0 p:hover{text-decoration:underline}._3Nnx8nPI_0 ._3OQb1d55_0{-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease;display:block;width:38px;text-align:center;font-size:24px;color:#b2b2b2}._3Nnx8nPI_0 ._3OQb1d55_0 i{font-size:12px}._3c2pu66u_0{font-size:15px;color:#4c4c4c;font-weight:400;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px}._3c2pu66u_0._1LdS9ume_0{color:#b2b2b2}._3c2pu66u_0._2ErUWiOJ_0{padding-left:31px}._3c2pu66u_0 a{color:#4c4c4c;white-space:nowrap;max-width:85%;overflow:hidden;text-overflow:ellipsis}._3c2pu66u_0 .JFRrVE-U_0{display:block;width:38px;height:16px;background:url("+n(i(1043))+") no-repeat 50%;background-size:auto 100%}._3c2pu66u_0:hover{cursor:pointer}._3c2pu66u_0:hover a{cursor:pointer;text-decoration:underline}._30LDzCbv_0{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:38px;height:17px;font-size:12px;color:#fa8919;border:1px solid #fa8919;border-radius:4px}._2tRuSfdR_0,._30LDzCbv_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._2tRuSfdR_0{background:#fafafa;height:45px;font-size:14px;padding-left:20px;color:#4c4c4c;margin-bottom:20px}._2tRuSfdR_0 strong{font-weight:400;color:#fa8919;margin:0 3px}._2tRuSfdR_0 ._2lwgzuOG_0{font-size:22px;color:#fa8919;margin-right:6px;margin-top:-4px}",""]),e.locals={catalogCollapesContent:"_1X9Hwflu_0",open:"_1Tl0-Sx9_0",collapesArrow:"_3OQb1d55_0",catalogCollapesHead:"_3Nnx8nPI_0",catalogCollapesItem:"_3c2pu66u_0",noArticle:"_1LdS9ume_0",paddingLeft:"_2ErUWiOJ_0",locked:"JFRrVE-U_0",itemFree:"_30LDzCbv_0",freeReadTip:"_2tRuSfdR_0",leftCount:"_2lwgzuOG_0"}},973:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._2cYowXFL_0{height:40px;line-height:40px;width:100vw;overflow-y:hidden;overflow-x:scroll}._2T66BxXw_0{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}._2T66BxXw_0 p{min-width:100vw;font-size:12px;white-space:nowrap;margin-left:30vw;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}._2T66BxXw_0 p:first-child{margin-left:0}",""]),e.locals={marqueeWrapper:"_2cYowXFL_0",textWrapper:"_2T66BxXw_0"}},975:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'._2icYBYEh_0{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000}._2icYBYEh_0 ._2u__eZjA_0{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.5)}._2icYBYEh_0 ._1zJuxYPu_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#fff;background:rgba(0,0,0,.5);width:40px;height:40px;border-radius:50%;position:absolute;bottom:5%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:2}._3fnAckdO_0{position:absolute;z-index:2;top:50%;left:15px;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:#fff;border-radius:8px;padding:10px 0 20px}._3fnAckdO_0 ._3efPdxX2_0{margin-left:16px;margin-right:16px;position:relative;padding:14px 0}._3fnAckdO_0 ._3efPdxX2_0:after{position:absolute;content:"";left:0;right:0;bottom:0;height:1px;background:#e8e8e8}._3fnAckdO_0 ._1OP8XvzB_0{height:60px;font-size:21px;font-weight:500;color:#373737;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:16px;margin-right:16px;margin-bottom:15px}._3fnAckdO_0 ._29UiZ1yg_0{font-size:14px;color:#888;font-weight:400;text-align:center;line-height:1;margin-top:3px}._3fnAckdO_0 ._1W_TfcIr_0{max-height:220px;position:relative;overflow:hidden}._3fnAckdO_0 .-mgTSvsN_0{max-height:220px;overflow-x:hidden}._3fnAckdO_0 ._2D_q7zLh_0{height:50px;font-size:12px;color:#888;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}._3efPdxX2_0,._3fnAckdO_0 ._2D_q7zLh_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._3efPdxX2_0{padding-bottom:10px;padding-top:10px}._3efPdxX2_0 ._2dVxZVEo_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;height:36px;width:36px;overflow:hidden;border-radius:50%}._3efPdxX2_0 ._2dVxZVEo_0 img{width:100%;vertical-align:center}._3efPdxX2_0 .Yd3BUs9x_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-left:10px}._3efPdxX2_0 ._2Tomm5si_0{font-size:14px;line-height:20px;color:#353535;font-weight:400}._3efPdxX2_0 ._3sKsbbgE_0{font-size:12px;color:#888;font-weight:400}._3efPdxX2_0 ._3sKsbbgE_0 span{color:#fa8919;margin:0 3px}._3efPdxX2_0 .IU9fDEA7_0{width:50px;padding:0 8px;height:28px;border-radius:14px;font-size:15px;color:#fefefe;background:#fa8919;font-weight:500}._3efPdxX2_0 .IU9fDEA7_0,._3Gx_Pqa5_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._3Gx_Pqa5_0{margin-top:20px}._3Gx_Pqa5_0 button{border:none;outline:none;display:-webkit-box;display:-ms-flexbox;display:flex;width:250px;height:42px;border-radius:21px;background:#fa8919;color:#fff;font-size:17px;font-weight:500;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._2hYO-VpF_0,.ii7HPcMj_0{position:absolute;left:23px;right:23px;bottom:-10px;height:10px;z-index:2}._2hYO-VpF_0,.ii7HPcMj_0{-webkit-box-shadow:0 0 5px 5px hsla(0,0%,91%,.3);box-shadow:0 0 5px 5px hsla(0,0%,91%,.3)}._2hYO-VpF_0{bottom:auto;top:-10px}@media only screen and (-webkit-min-device-pixel-ratio:2){._3efPdxX2_0:after{-webkit-transform:scaleY(.5);transform:scaleY(.5)}}@media only screen and (-webkit-min-device-pixel-ratio:3){._3efPdxX2_0:after{-webkit-transform:scaleY(.3333);transform:scaleY(.3333)}}',""]),e.locals={moreGroupWrap:"_2icYBYEh_0",mask:"_2u__eZjA_0",close:"_1zJuxYPu_0",moreGroup:"_3fnAckdO_0",groupItem:"_3efPdxX2_0",hd:"_1OP8XvzB_0",subTitle:"_29UiZ1yg_0",bdWrap:"_1W_TfcIr_0",bd:"-mgTSvsN_0",ft:"_2D_q7zLh_0",img:"_2dVxZVEo_0",txt:"Yd3BUs9x_0",name:"_2Tomm5si_0",left:"_3sKsbbgE_0",btn:"IU9fDEA7_0",bottomBottom:"_3Gx_Pqa5_0",shadowBoxTop:"_2hYO-VpF_0",shadowBoxBottom:"ii7HPcMj_0"}},978:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._1yJUtN5Y_0{vertical-align:top;-webkit-transform:rotate(-.05deg);transform:rotate(-.05deg)}",""]),e.locals={main:"_1yJUtN5Y_0"}},980:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._3neSIM1B_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:40px}._14fgEuQ7_0{width:88px;height:111px;border-radius:5px;overflow:hidden;background:#eee}._14fgEuQ7_0 img{width:100%;height:100%}._1DOtZoG8_0{width:203px;margin-left:14px}._1DOtZoG8_0 .jU9tYlcG_0{display:block;cursor:pointer;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500;font-size:16px;color:#404040;line-height:20px}._1DOtZoG8_0 .jU9tYlcG_0:hover{text-decoration:underline}._1DOtZoG8_0 ._1UmnOqjj_0{margin-top:8px;color:#888}._1DOtZoG8_0 ._1UmnOqjj_0 p{font-weight:400;line-height:20px;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis;font-size:14px}._1DOtZoG8_0 ._1UmnOqjj_0 ._1Hq1Oraj_0{font-size:12px;line-height:20px;margin-top:2px}._1DOtZoG8_0 ._3-RXWUsc_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:17px}._1DOtZoG8_0 ._3-RXWUsc_0 ._3gfq7JxW_0{height:auto;padding:3px 5px;color:#fff;font-size:12px;font-weight:400;line-height:1.2em;white-space:nowrap;border-radius:2px;margin-right:8px}._1DOtZoG8_0 ._3-RXWUsc_0 ._2WklZJNF_0{background:#fa8919}._1DOtZoG8_0 ._3-RXWUsc_0 ._1wXQpxSl_0{background:#f9c300}._1DOtZoG8_0 ._3-RXWUsc_0 ._1SIcQIUT_0{font-size:16px;color:#fa8919;font-weight:400;margin-right:8px;white-space:nowrap}._1DOtZoG8_0 ._3-RXWUsc_0 ._1Wwr9Nlr_0{white-space:nowrap}._1DOtZoG8_0 ._3-RXWUsc_0 ._1Wwr9Nlr_0,._1DOtZoG8_0 ._3-RXWUsc_0 ._2u0HbJZU_0{font-size:13px;color:#888;font-weight:400}",""]),e.locals={recommendColumnContainer:"_3neSIM1B_0",recommendColumnMedia:"_14fgEuQ7_0",recommendColumnInner:"_1DOtZoG8_0",recommendColumnTitle:"jU9tYlcG_0",recommendColumnSubtitle:"_1UmnOqjj_0",recommendColumnInfos:"_1Hq1Oraj_0",recommendColumnText:"_3-RXWUsc_0",tips:"_3gfq7JxW_0",limit:"_2WklZJNF_0",groupon:"_1wXQpxSl_0",recommendColumnPrice:"_1SIcQIUT_0",recommendColumnSourcePrice:"_1Wwr9Nlr_0",subscribe:"_2u0HbJZU_0"}},982:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._2IEmPavX_0{padding-top:40px}._3Vt7GjyJ_0{word-wrap:normal}._3Vt7GjyJ_0 h1{font-size:18px}._3Vt7GjyJ_0 h2{font-size:20px}._3Vt7GjyJ_0 h3{font-size:22px}._3Vt7GjyJ_0 h4{font-size:24px}._3Vt7GjyJ_0 h5{font-size:26px}._3Vt7GjyJ_0 h6{font-size:28px}._3Vt7GjyJ_0 h1,._3Vt7GjyJ_0 h2,._3Vt7GjyJ_0 h3,._3Vt7GjyJ_0 h4,._3Vt7GjyJ_0 h5,._3Vt7GjyJ_0 h6{font-weight:500;color:#404040;margin-top:1.6em;margin-bottom:.5em}._3Vt7GjyJ_0 p{color:#4c4c4c;line-height:32px;font-size:16px;font-weight:400;text-align:justify;margin-top:1.2em;margin-bottom:.5em}._3Vt7GjyJ_0 a{color:#fa8919;text-decoration:underline}._3Vt7GjyJ_0 ol{list-style:decimal;margin-left:1.3em}._3Vt7GjyJ_0 ul{margin-left:1.3em;list-style:disc}._3Vt7GjyJ_0 li{color:#4c4c4c;line-height:32px;font-size:16px;font-weight:400;text-align:justify}._3Vt7GjyJ_0 img{max-width:100%;background-color:#eee;border:0}._3Vt7GjyJ_0 video{max-width:100%}._3Vt7GjyJ_0 ._1PP4xtW2_0{color:#fa8919}",""]),e.locals={main:"_2IEmPavX_0",columnContent:"_3Vt7GjyJ_0",orange:"_1PP4xtW2_0"}},983:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'._3xDve8iB_0{background:#fcfbf9;padding:25px 83px 56px;-webkit-box-sizing:border-box;box-sizing:border-box}._3L8hgDs9_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap}.ucc4CqyI_0{margin-top:33px;-webkit-box-flex:0;-ms-flex:0 0 40%;flex:0 0 40%}._-7fbqzXO_0{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}._-7fbqzXO_0:after{content:"";position:absolute;left:0;right:0;top:53px;height:1px;background:#e4e4e4}._-7fbqzXO_0 ._1U3NWNoL_0{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}._-7fbqzXO_0 ._1U3NWNoL_0 ._3V4tmswr_0{font-size:0}._-7fbqzXO_0 ._1U3NWNoL_0 ._3V4tmswr_0 img{width:42px;height:42px}._-7fbqzXO_0 ._1U3NWNoL_0 span{position:relative;top:-6px;display:inline-block;width:5px;height:5px;border-radius:100%;background:#e4e4e4}._-7fbqzXO_0 ._1U3NWNoL_0 ._2_IXs3AJ_0{position:relative;top:-3px;line-height:1em;color:#c79d5e;font-size:13px;font-weight:300}._1Z77ZFMt_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._1Z77ZFMt_0 span{color:#888;font-size:14px;font-weight:300}._1pnUD_03_0{width:41px;height:41px;border-radius:100%;margin-right:10px}@media screen and (min-width:768px) and (max-width:1079px){.ucc4CqyI_0{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}}',""]),e.locals={grouponContainer:"_3xDve8iB_0",grouponItems:"_3L8hgDs9_0",grouponItem:"ucc4CqyI_0",grouponTimeline:"_-7fbqzXO_0",grouponTimelineItem:"_1U3NWNoL_0",icon:"_3V4tmswr_0",text:"_2_IXs3AJ_0",avatars:"_1Z77ZFMt_0",currentAvatar:"_1pnUD_03_0"}},986:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".h3dPRfVE_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}._2wXu8FlZ_0{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._2wXu8FlZ_0 img{width:41px;height:41px;border-radius:100%}._1-va2zn5_0{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:10px}._1-va2zn5_0 h3{font-size:16px;color:#404040;line-height:19px;font-weight:500}._1-va2zn5_0 p{font-size:13px;color:#888;line-height:19px;margin-top:5px}._1-va2zn5_0 p .vx4H0ZBw_0{color:#fa8919}.vf8RpBEF_0{-webkit-box-flex:0;-ms-flex:0 0 73px;flex:0 0 73px}.VdMMoknA_0{cursor:pointer;outline:none;border:none;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;width:102px;height:26px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fa8919;color:#fff;font-size:14px;font-weight:400}",""]),e.locals={grouponItemContainer:"h3dPRfVE_0",grouponItemMedia:"_2wXu8FlZ_0",grouponItemInner:"_1-va2zn5_0",num:"vx4H0ZBw_0",grouponItemAfter:"vf8RpBEF_0",grouponBtn:"VdMMoknA_0"}},988:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".nav-bar{position:fixed;width:100%;height:3rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 1rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;top:2rem;left:0;z-index:20;pointer-events:none}.icon-round{color:#fff;width:2rem;height:2rem;line-height:2rem;text-align:center;border-radius:50%;font-size:1rem;background:rgba(0,0,0,.5);pointer-events:auto}",""])},992:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".quene-wrap{overflow:hidden}",""])},996:function(t,e,i){var n=i(969);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("24ed5a06",n,!0,{})},997:function(t,e,i){var n=i(970);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("b048c7d8",n,!0,{})},999:function(t,e,i){var n=i(972);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(572)("1b9677b8",n,!0,{})}}); \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/2aa01da86c8fb550b32c79f8ca4f67b0.jpg b/re/geekbang/routes/detail/source/static/2aa01da86c8fb550b32c79f8ca4f67b0.jpg new file mode 100644 index 0000000..d0cf6a1 Binary files /dev/null and b/re/geekbang/routes/detail/source/static/2aa01da86c8fb550b32c79f8ca4f67b0.jpg differ diff --git a/re/geekbang/routes/detail/source/static/42db8ef7b28bcdc26410141dd97b8178.jpg b/re/geekbang/routes/detail/source/static/42db8ef7b28bcdc26410141dd97b8178.jpg new file mode 100644 index 0000000..bca9844 Binary files /dev/null and b/re/geekbang/routes/detail/source/static/42db8ef7b28bcdc26410141dd97b8178.jpg differ diff --git a/re/geekbang/routes/detail/source/static/995176c4b4cb6c197414430998ad8c9b.jpg b/re/geekbang/routes/detail/source/static/995176c4b4cb6c197414430998ad8c9b.jpg new file mode 100644 index 0000000..2575baa Binary files /dev/null and b/re/geekbang/routes/detail/source/static/995176c4b4cb6c197414430998ad8c9b.jpg differ diff --git a/re/geekbang/routes/detail/source/static/aliplayer-min.css b/re/geekbang/routes/detail/source/static/aliplayer-min.css new file mode 100644 index 0000000..c3fac55 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/aliplayer-min.css @@ -0,0 +1 @@ +.prism-player .prism-big-play-btn{background:url(./img/bigplay.png) no-repeat;background-size:contain;width:64px;height:64px}.prism-player .prism-big-play-btn .outter{border:7px solid rgba(255,255,255,.51);width:64px;height:64px;border-radius:100%;position:absolute;box-sizing:border-box;top:0;left:0}.prism-player .prism-big-play-btn:hover{cursor:pointer}.prism-player .prism-play-btn{width:24px;height:24px;background:url(./img/smallplay.png) no-repeat;background-size:contain}.prism-player .prism-play-btn:hover{cursor:pointer}.prism-player .prism-live-display{font-size:12px;color:#ebecec;line-height:44px;text-align:center;margin:0}.prism-player .live-shift-display:hover{cursor:pointer;font-size:14px}.prism-player .prism-play-btn.playing{background:url(./img/smallpause.png) no-repeat;background-size:contain}.prism-player .prism-play-btn.playing:hover{cursor:pointer}.prism-player .prism-fullscreen-btn{width:24px;height:24px;background:url(./img/fullscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn:hover{cursor:pointer}.prism-player .prism-fullscreen-btn.fullscreen{background:url(./img/smallscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn.fullscreen:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-volume{position:relative}.prism-player .prism-volume .volume-icon{width:28px;height:28px;background:url(./img/volume.png);background-size:contain}.prism-player .prism-volume .volume-icon .long-horizontal{width:3px;background:#ebecec;height:18px;position:absolute;right:5px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon .short-horizontal{width:3px;background:#ebecec;height:8px;position:absolute;right:10px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon:hover{-ms-transform-origin:0 50%;transform-origin:0 50%;background-size:contain;cursor:pointer}.prism-player .prism-volume .mute .long-horizontal{-ms-transform:rotate(-45deg);transform:rotate(-45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume .mute .short-horizontal{-ms-transform:rotate(45deg);transform:rotate(45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume-control{position:absolute;bottom:44px;display:none;background:rgba(60,60,60,.95);box-shadow:0 0 6px 0 rgba(0,0,0,.1);width:32px;height:130px;z-index:10000}.prism-player .prism-volume-control .volume-control-icon{width:32px;height:32px;background:url(./img/unmutevolume.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon:hover{cursor:pointer;background:url(./img/volumehover.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute{background:url(./img/volumemute.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute:hover{background:url(./img/volumemutehover.png) no-repeat;background-size:contain;cursor:pointer}.prism-player .prism-volume-control:hover{cursor:pointer}.prism-player .prism-volume-control .volume-control-icon{position:absolute;bottom:6px;left:8px;width:26px;height:26px}.prism-player .prism-volume-control .volume-range{position:absolute;left:14px;bottom:10px;border-radius:1px;background:#6c6262;box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);width:4px;height:100px}.prism-player .prism-volume-control .volume-value{width:100%;height:0%;background:#30adf2;position:absolute;border-radius:1px;bottom:0}.prism-player .prism-volume-control .volume-cursor{position:absolute;bottom:0;background:#fff;width:15px;height:15px;border-radius:15px;left:-6px}.prism-player .prism-volume-control .volume-cursor:hover{background:#00c1de}.prism-player .prism-animation{width:64px;height:64px;border-radius:64px;opacity:0;position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-play-animation{background:url(./img/playanimation.png) no-repeat;background-size:contain}.prism-player .prism-pause-animation{background:url(./img/pauseanimation.png) no-repeat;background-size:contain}.prism-player .play-apply-animation{animation:prismplayanimation 1s 1;-moz-animation:prismplayanimation 1s 1;-webkit-animation:prismplayanimation 1s 1;-o-animation:prismplayanimation 1s 1;animation-fill-mode:both}@keyframes prismplayanimation{0%{width:32px;height:32px;border-radius:32px;opacity:0}50%{width:32px;height:32px;border-radius:32px;opacity:1}99%{width:76px;height:76px;border-radius:76px;opacity:0}100%{width:0;height:0}}@keyframes spinoffPulse{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@keyframes hoverAnimationRotate{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}50%{transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg)}100%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}}@keyframes hoverAnimationScale{0%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}50%{transform:scale(1.2);-webkit-transform:scale(1.2);-moz-transform:scale(1.2)}100%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}}@keyframes hoverAnimationScaleX{0%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}50%{transform:scaleX(1.2);-webkit-transform:scaleX(1.2);-moz-transform:scaleX(1.2)}100%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}}@keyframes hoverVolumeAnimation{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.volume-hover-animation{animation:hoverVolumeAnimation .3s 1;-moz-animation:hoverVolumeAnimation .3s 1;-webkit-animation:hoverVolumeAnimation .3s 1;-o-animation:hoverVolumeAnimation .3s 1}@keyframes hoverPlayButtonAnimation{0%{width:63px;height:63px;border:7px solid #fff}60%{width:90px;height:90px;border:7px solid rgba(255,255,255,.51)}100%{width:97px;height:97px;border:14px solid rgba(255,255,255,0)}}@keyframes warn{0%{transform:scale(1);opacity:0}25%{transform:scale(1);opacity:.1}50%{transform:scale(1.1);opacity:.3}75%{transform:scale(1.5);opacity:.5}100%{transform:scale(2);opacity:0}}.big-playbtn-hover-animation{animation:warn 1s ease-out;-moz-animation:warn 1s ease-out;-webkit-animation:warn 1s ease-out;-o-animation:warn 1s ease-out}.big-playbtn-hover-animation1{animation:hoverPlayButtonAnimation 1s 1;-moz-animation:hoverPlayButtonAnimation 1s 1;-webkit-animation:hoverPlayButtonAnimation 1s 1;-o-animation:hoverPlayButtonAnimation 1s 1}.prism-player{background-color:#000;position:relative}.prism-player a{text-decoration:none}.prism-player video{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform-origin:center;-moz-transform-origin:center;-webkit-transform-origin:center;-o-transform-origin:center}.prism-player .x5-full-screen{object-fit:fill;object-position:50% 50%}.prism-player .x5-top-left{object-fit:contain;object-position:0 0}.prism-player .prism-cover{width:100%;height:100%;background-repeat:no-repeat;background-position:center;background-size:cover;position:absolute;top:0;left:0;z-index:11}.prism-player .prism-ErrorMessage{width:100%;height:100%;background-color:#000;background-repeat:no-repeat;background-position:center;background-size:contain;position:absolute;z-index:99;top:0;left:0;overflow:hidden;display:none}.prism-player .prism-ErrorMessage .prism-error-content{margin-top:20px;padding:0 5px}.prism-player .prism-ErrorMessage .prism-error-content p{text-align:center;font-size:12px;color:#fff}.prism-player .prism-ErrorMessage .prism-error-operation{margin-top:10px;margin-bottom:10px;padding-bottom:5px;border-bottom:1.5px;border-bottom-color:rgba(255,255,255,.15);border-bottom-style:dotted;text-align:center}.prism-player .prism-ErrorMessage .prism-error-operation a{width:80px;height:32px;line-height:32px;vertical-align:top;display:inline-block;margin-left:10px}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh{color:#21c5e0;border:solid 1px #21c5e0}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:hover{color:#05d3f5;border-color:#05d3f5;cursor:pointer}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:active{color:#026a7b;border-color:#026a7b}.prism-player .prism-ErrorMessage .prism-error-operation .prism-button-orange:visited{color:#05d3f5}.prism-player .prism-ErrorMessage .prism-detect-info{color:#fff;font-size:10px}.prism-player .prism-ErrorMessage .prism-detect-info p{padding:0 5px;word-break:break-all;margin:0 0 4px}.prism-player .prism-ErrorMessage .prism-detect-info span.info-label{display:inline-block;font-weight:700}.prism-player .prism-ErrorMessage .prism-detect-info span.info-content{color:gray}.prism-player .prism-big-play-btn{display:none;z-index:1000}.prism-player .prism-controlbar{width:100%;height:44px;position:relative;z-index:10;font-size:14px}.prism-player .prism-controlbar .prism-controlbar-bg{background:rgba(75,75,75,.15);width:100%;height:40px;position:absolute;bottom:0;left:0;z-index:-1}.prism-player .prism-time-display{height:40px;line-height:40px;color:#a4aab3;font-size:12px}.prism-player .prism-time-display .current-time{color:#fff}.prism-player .prism-live-time-display{height:44px;line-height:44px;color:#a4aab3;font-size:12px}.prism-player .prism-live-time-display span{display:inline}.prism-player .prism-live-time-display .live-text{margin-left:5px;font-size:12px;color:#ebecec}.prism-player .prism-live-time-display .current-time{color:#fff}.prism-player .prism-fullscreen-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-liveshift-progress,.prism-player .prism-progress{bottom:40px!important;width:100%;height:4px;background:rgba(195,197,198,.5);box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);position:relative;cursor:pointer}.prism-player .prism-liveshift-progress .prism-progress-time,.prism-player .prism-progress .prism-progress-time{position:absolute;top:-25px;background:rgba(0,0,0,.8);box-shadow:0 0 5px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.1);color:#fff;font-size:14px;border-radius:7.5px;padding:0 6px 0 6px;text-align:center;white-space:nowrap}.prism-player .prism-liveshift-progress .prism-progress-loaded,.prism-player .prism-progress .prism-progress-loaded{position:absolute;top:0;left:0;width:0;height:100%;background:#c3c5c6}.prism-player .prism-liveshift-progress .prism-progress-played,.prism-player .prism-progress .prism-progress-played{position:absolute;top:0;left:0;width:0;height:100%;background-color:#00c1de}.prism-player .prism-liveshift-progress .prism-progress-cursor,.prism-player .prism-progress .prism-progress-cursor{position:absolute;border-radius:8px;top:-5px;width:16px;height:16px;overflow:hidden;box-sizing:content-box;background:url(./img/dragcursorhover.png) center;display:none}.prism-player .prism-liveshift-progress .prism-progress-cursor img,.prism-player .prism-progress .prism-progress-cursor img{width:14px;height:14px;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-liveshift-progress .cursor-hover,.prism-player .prism-progress .cursor-hover{border-radius:9px;width:18px;height:18px;top:-5px!important}.prism-player .prism-liveshift-progress .cursor-hover img,.prism-player .prism-progress .cursor-hover img{width:16px;height:16px}.prism-player .prism-liveshift-progress .prism-progress-marker,.prism-player .prism-progress .prism-progress-marker{width:100%;height:100%;position:absolute}.prism-player .prism-liveshift-progress .prism-progress-marker .prism-marker-dot,.prism-player .prism-progress .prism-progress-marker .prism-marker-dot{position:absolute;background:#d9edf7;width:5px;height:100%;border-radius:20%}.prism-player .prism-progress-hover{cursor:pointer;height:6px;transition:height .1s}.prism-player .prism-progress-hover .prism-marker-dot{width:10px;height:80%;top:8%;border-radius:30%}.prism-player .prism-progress-hover .prism-progress-cursor{top:-4px}.prism-player .prism-liveshift-progress{background:0 0}.prism-player .prism-liveshift-progress .prism-enable-liveshift{cursor:pointer;position:absolute;background:#fff;height:4px}.prism-player .prism-liveshift-progress .prism-enable-liveshift:hover{height:6px;transition:height .1s}.prism-player .prism-liveshift-progress .prism-liveshift-seperator{height:15px;position:absolute;right:0;top:-8px;color:#fff;margin-right:5px;margin-left:5px;right:-65px}.prism-player .prism-marker-text{padding:5px;background:rgba(0,0,0,.8);position:absolute;max-width:180px;max-height:100px;bottom:50px;color:#fff;border-radius:3px;z-index:9999;display:none;overflow:auto}.prism-player .prism-marker-text p{text-align:center;word-break:break-all;margin:0;font-size:12px}.prism-player .prism-loading{width:55px;height:55px;z-index:10}.prism-player .prism-loading .circle{background-color:rgba(0,0,0,0);border:5px solid;border-color:rgba(0,193,222,.2) rgba(0,193,222,.5) rgba(0,193,222,.7) rgba(0,193,222,.1);opacity:.9;border-radius:50px;width:45px;height:45px;margin:0 auto;-moz-animation:spinoffPulse .9s infinite linear;-webkit-animation:spinoffPulse .9s infinite linear}.prism-player .prism-hide{display:none}.prism-player .prism-snapshot-btn{width:32px;height:32px;background:url(./img/snapshot.png) no-repeat;background-size:contain}.prism-player .prism-snapshot-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-snapshot-btn:active{displa:block}.prism-player .prism-info-display{width:100%;color:#fff;font-size:18px;text-align:center;top:50%;position:absolute;z-index:900;height:44px;line-height:28px;font-size:16px;padding:10px 12px 10px 12px}.prism-player .prism-info-display span{color:#00c1de}.prism-player .prism-info-left-bottom{width:auto!important;top:auto!important;bottom:70px;left:20px!important;text-align:left}.prism-player .prism-info-top-center{width:auto!important;top:20px!important;left:50%!important;text-align:left!important;-ms-transform:translateX(-50%)!important;transform:translateX(-50%)!important;color:red!important}.prism-player .prism-info-black{color:#000!important}.prism-player .prism-auto-stream-selector{position:absolute;bottom:50%;width:100%;margin:auto;color:#efeff4;display:none}.prism-player .prism-auto-stream-selector p.tip-text{text-align:center}.prism-player .prism-auto-stream-selector .operators{width:100px;margin:auto}.prism-player .prism-button-cancel{font-size:16px;border:1px #ffffffa8 solid;padding:2px 5px 2px 5px;color:#ffffffa8;margin-left:5px;background:#503f3f3d}.prism-player .prism-button-ok{font-size:16px;border:1px #fff solid;padding:2px 5px 2px 5px;color:#fff;background:#503f3f63}.prism-player .prism-button-cancel:hover,.prism-player .prism-button-ok:hover{color:#f5f5f5}.prism-player .prism-cc-btn{height:24px;width:24px;background:url(./img/cc.png) center no-repeat;background-size:contain}.prism-player .prism-cc-btn:hover{cursor:pointer;animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-setting-btn{height:24px;width:24px;background:url(./img/setting.png) center no-repeat;background-size:contain}.prism-player .prism-setting-btn:hover{cursor:pointer;animation:hoverAnimationRotate 1s 1;-moz-animation:hoverAnimationRotate 1s 1;-webkit-animation:hoverAnimationRotate 1s 1;-o-animation:hoverAnimationRotate 1s 1}.prism-player .prism-setting-list{background:rgba(60,60,60,.95);width:220px;position:absolute;right:14px;bottom:45px;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-list .prism-setting-item{font-size:14px;color:#ebecec;height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content{width:100%}.prism-player .prism-setting-list .prism-setting-item .setting-content:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-list .prism-setting-item .setting-content span{line-height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content .setting-title{margin-left:15px}.prism-player .prism-setting-list .prism-setting-item .setting-content .current-setting{float:right}.prism-player .prism-setting-list .prism-setting-item .array{display:inline-block;border-right:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(-45deg);transform:rotate(-45deg);margin-right:10px;margin-top:10px;margin-left:10px;float:right}.prism-player .prism-setting-selector{right:40px;position:absolute;bottom:45px;width:150px;background:rgba(60,60,60,.95);font-size:14px;color:#ebecec;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-selector .header{background:#242424;width:150px;height:30px}.prism-player .prism-setting-selector .header:hover{cursor:pointer}.prism-player .prism-setting-selector .header .left-array{display:inline-block;border-left:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(45deg);transform:rotate(45deg);margin-right:6px;margin-top:12px;margin-left:16px;float:left}.prism-player .prism-setting-selector .header span{line-height:30px}.prism-player .prism-setting-selector ul{list-style-type:none;padding-left:0;max-height:150px;overflow-y:auto;padding-left:16px;margin-top:5px}.prism-player .prism-setting-selector ul li{height:28px;padding-left:10px}.prism-player .prism-setting-selector ul li.current{color:#30adf2;padding-left:0}.prism-player .prism-setting-selector ul li.current:before{content:"";display:inline-block;line-height:0;border:5px solid transparent;border-left-color:#30adf2;border-right-width:0;margin-top:5px;padding-right:5px}.prism-player .prism-setting-selector ul li:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-selector ul span{line-height:28px}.prism-player .prism-thumbnail{border:1px solid rgba(0,0,0,.8);width:174px;height:98px;position:absolute;bottom:50px;display:none}.prism-player .prism-thumbnail .none{border:none}.prism-player .prism-thumbnail span{font-size:12px;color:#fff;line-height:20px;background:rgba(0,0,0,.8);text-align:center;text-shadow:1px 1px 4px #373d41;padding-left:5px;padding-right:5px;display:inline-block;position:absolute;bottom:0;left:33%}.prism-player .prism-tooltip{background:#3c3c3c;box-shadow:0 0 5px 0 rgba(0,0,0,.1);height:28px;margin:0;padding-left:5px;padding-right:5px;padding-top:0;padding-bottom:0;position:absolute;bottom:50px;color:#fff;line-height:28px;font-size:10px;white-space:nowrap;display:none}:-webkit-full-screen{width:100%!important;height:100%!important}:-moz-full-screen{width:100%!important;height:100%!important}:-ms-full-screen{width:100%!important;height:100%!important}:-ms-fullscreen{width:100%!important;height:100%!important}:-webkit-full-screen{width:100%!important;height:100%!important}:fullscreen{width:100%!important;height:100%!important}body.prism-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.prism-fullscreen{position:fixed;overflow:hidden;z-index:99999;left:0!important;top:0!important;bottom:0!important;right:0!important;width:100%!important;height:100%!important;position:absolute}.prism-button{cursor:pointer;text-align:center;text-shadow:0 1px 1px rgba(0,0,0,.3);border-radius:.5em;box-shadow:0 1px 2px rgba(0,0,0,.2)}.prism-button-orange{color:#a56117;border:solid 1px #a56117}.prism-button-retry{color:#f2dede;border:solid 1px #f2dede}.prism-button-orange:hover{color:#d67400;border-color:#d67400}.prism-button-orange:active{color:#d67400;border-color:#d67400}.prism-button-orange:visited{color:#d67400}.prism-button-retry:hover{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:active{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:visited{color:#fcf8e3}.prism-center{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.prism-width90{width:90%}.prism-stream-selector{font-size:16px;position:relative;line-height:32px}.prism-stream-selector .current-stream-selector{text-align:center;width:70px;display:none;color:#efeff4}.prism-stream-selector .current-stream-selector:hover{cursor:pointer;color:#00c1de}.prism-stream-selector .stream-selector-tip{color:#fff;text-align:center;padding:2px 5px 2px 5px;display:none;position:absolute;bottom:61.5px;white-space:nowrap;left:43%;font-size:18px}.prism-stream-selector .stream-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;width:70px;margin:0;display:none}.prism-stream-selector .stream-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-stream-selector .stream-selector-list li:last-child{margin-bottom:10px}.prism-stream-selector .stream-selector-list li.current{color:#00c1de}.prism-stream-selector .stream-selector-list li span.current{color:#00c1de}.prism-stream-selector .stream-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-speed-selector{font-size:16px;position:relative;line-height:32px}.prism-speed-selector .current-speed-selector{color:#efeff4;text-align:center;width:60px}.prism-speed-selector .current-speed-selector:hover{cursor:pointer;color:#00c1de}.prism-speed-selector .speed-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;display:none;margin:0}.prism-speed-selector .speed-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-speed-selector .speed-selector-list li:last-child{margin-bottom:10px}.prism-speed-selector .speed-selector-list li.current{color:#00c1de}.prism-speed-selector .speed-selector-list li span.current{color:#00c1de}.prism-speed-selector .speed-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-ai-container{position:absolute;overflow:hidden}.prism-ai-container .prism-ai-marking{font-size:12px;position:absolute}.prism-ai-container .prism-ai-marking[vh=large]{font-size:18px}.prism-ai-container .prism-ai-marking[vh=middle]{font-size:16px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region{position:relative;display:inline-block}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title{height:0;-ms-transform:translateY(-40px);transform:translateY(-40px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title p{background:#ff1d00;text-align:center;width:100%;color:#fff;word-break:keep-all;margin:10px 0 0 0}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-left-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-left-color:red;border-left-style:solid;border-width:1px;-ms-transform:translate(-5px,10px);transform:translate(-5px,10px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-right-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-right-color:red;border-right-style:solid;border-width:1px;-ms-transform:translate(5px,5px);transform:translate(5px,5px);float:right}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect{border-style:solid;border-color:#ff1d00;border-width:1px;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;color:rgba(255,29,0,.3);background:rgba(255,29,0,.1)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash-container{overflow:hidden;width:100%;height:100%;position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash{content:"";display:block;box-sizing:border-box;border-top-width:1px;border-top-style:solid;height:10px;margin-top:15px;border-bottom-width:1px;border-bottom-style:solid;transform:rotateZ(-45deg) scaleX(2);-ms-transform-origin:bottom center;transform-origin:bottom center}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-top-slash{margin-top:-10px!important}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .anchor-plug{position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-left{top:-7px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-right{top:-7px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-left{bottom:-8px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-right{bottom:-8px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-labels{color:#fff;float:right;background:rgba(0,0,0,.4);padding-top:5px;padding-bottom:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p{text-align:left;padding-left:5px;padding-right:5px;margin:0}.prism-ai-container .prism-ai-marking .prism-ai-labels a{padding-left:5px;padding-right:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=large]{padding-left:25px;padding-right:25px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=middle]{padding-left:15px;padding-right:15px}video::-webkit-media-text-track-container{overflow:visible!important}video::cue{line-height:1.7}.disabled{pointer-events:none;color:gray}.center{position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)} \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/aliplayer-min.js b/re/geekbang/routes/detail/source/static/aliplayer-min.js new file mode 100644 index 0000000..d06872e --- /dev/null +++ b/re/geekbang/routes/detail/source/static/aliplayer-min.js @@ -0,0 +1,2 @@ +/*! Aliplayer - v2.8.2 - 2019-05-09 16.34.41 */ +!function n(a,s,l){function u(t,e){if(!s[t]){if(!a[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=s[t]={exports:{}};a[t][0].call(o.exports,function(e){return u(a[t][1][e]||e)},o,o.exports,n,a,s,l)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;ei.offsetHeight){t=i,e.fastClickScrollParent=i;break}i=i.parentElement}while(i)}t&&(t.fastClickLastScrollTop=t.scrollTop)},l.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},l.prototype.onTouchStart=function(e){var t,i,r;if(1i||Math.abs(t.pageY-this.touchStartY)>i},l.prototype.onTouchMove=function(e){return this.trackingClick&&(this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0},l.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},l.prototype.onTouchEnd=function(e){var t,i,r,o,n,a=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,i=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,d&&(n=e.changedTouches[0],(a=document.elementFromPoint(n.pageX-window.pageXOffset,n.pageY-window.pageYOffset)||a).fastClickScrollParent=this.targetElement.fastClickScrollParent),"label"===(r=a.tagName.toLowerCase())){if(t=this.findControl(a)){if(this.focus(a),u)return!1;a=t}}else if(this.needsFocus(a))return 100"+a.get("Cancel_Text")+"",e},bindEvent:function(){var r=this;r._player.on(s.Private.AutoStreamShow,function(e){var t=document.querySelector("#"+r.getId()+" .tip-text");if(r._player._getLowerQualityLevel){var i=r._player._getLowerQualityLevel();i&&(r._switchUrl=i,t.innerText=a.get("Auto_Stream_Tip_Text").replace("$$",i.item.desc),o.css(r.el(),"display","block"))}}),r._player.on(s.Private.AutoStreamHide,function(e){document.querySelector("#"+r.getId()+" .tip-text");o.css(r.el(),"display","none")});var e=document.querySelector("#"+r.getId()+" .prism-button-ok");n.on(e,"click",function(){r._player._changeStream&&r._switchUrl&&r._player._changeStream(r._switchUrl.index,a.get("Quality_Change_Text")),o.css(r.el(),"display","none")});var t=document.querySelector("#"+r.getId()+" .prism-button-cancel");n.on(t,"click",function(){o.css(r.el(),"display","none")})}});t.exports=l},{"../lang/index":11,"../lib/dom":18,"../lib/event":19,"../lib/ua":31,"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],3:[function(e,t,i){var r=e("../ui/component"),s=e("../lib/dom"),o=e("../lib/event"),n=e("../lib/ua"),a=e("../lib/function"),l=(e("../lang/index"),e("../lib/util")),u=e("../config"),c=e("../lib/playerutil"),d=e("../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-liveshift-progress",this.addClass(this.className),this._liveshiftService=e._liveshiftService},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='

    00:00:00
    ',e},bindEvent:function(){var i=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.controlNode=document.querySelector("#"+this._player._options.id+" .prism-controlbar"),this.seperatorNode=document.querySelector("#"+this.id()+" .prism-liveshift-seperator"),this.progressNode=document.querySelector("#"+this.id()+" .prism-enable-liveshift");var e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),t="//"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1a&&(sec=a),sec},_onMouseClick:function(e){var t=this,i=this._getSeconds(e),r=this._liveshiftService.availableLiveShiftTime-i;this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()});var o=this._liveshiftService.getSourceUrl(r),n=t._player._options.source,a=c.isHls(t._player._options.source);a&&o==n?t._player.seek(i):t._player._loadByUrlInner(o,i,!0),t._player.trigger(d.Private.Play_Btn_Hide),t._liveshiftService.seekTime=i,t._player.trigger(d.Private.EndStart,{toTime:i}),t._updateCursorPosition(i),a&&setTimeout(function(){t._player.play()})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()}),o.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),o.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),o.on(this._player.tag,"mouseup",function(e){t._onMouseUp(e)}),o.on(this._player.tag,"touchend",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"mouseup",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"touchend",function(e){t._onMouseUp(e)})},_onMouseUp:function(e){e.preventDefault(),o.off(this.controlNode,"mousemove"),o.off(this.controlNode,"touchmove"),o.off(this._player.tag,"mouseup"),o.off(this._player.tag,"touchend"),o.off(this.controlNode,"mouseup"),o.off(this.controlNode,"touchend");var t=this._liveshiftService.availableLiveShiftTime,i=this.playedNode.offsetWidth/this.el().offsetWidth*t;this._player.seek(i),this._player.trigger(d.Private.Play_Btn_Hide),this._liveshiftService.seekTime=i,this._player.trigger(d.Private.EndStart,{toTime:i})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._updateProgressBar(this.playedNode,this._getCurrentTime()),this._updateCursorPosition(this._getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._getCurrentTime()})},_getCurrentTime:function(){var e=this._liveshiftService.seekTime;return-1==e&&(e=0),this._player.getCurrentTime()+e},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){if(1!=this._player._switchSourcing){var i=0;if(-1==this._liveshiftService.seekTime)i=1;else{var r=this._liveshiftService.availableLiveShiftTime;1<(i=r?t/r:0)&&(i=1,this._liveshiftService.seekTime=-1)}this.liveShiftStartDisplay;e&&s.css(e,"width",100*i+"%")}},_updateCursorPosition:function(e){if(this._player.el()&&1!=this._player._switchSourcing&&(0!=e||0!=this._player.tag.readyState)){var t=0,i=1,r=this._player.el().clientWidth;if(-1==this._liveshiftService.seekTime)t=1;else{var o=this._liveshiftService.availableLiveShiftTime;1<(t=o?e/o:0)&&(this._liveshiftService.seekTime=-1)}if(0!=r){var n=18/r;i=1-n,t-=n}this.cursorNode&&(ie.seekTime&&-1!=e.seekTime){var i=o._liveshiftService.getBaseTime(),r=n.formatTime(i+o._player.getCurrentTime());t.innerText=r}else e.currentTimeDisplay&&(t.innerText=e.currentTimeDisplay)}),this._player.on(a.Private.LiveShiftQueryCompleted,function(){o.updateTime()})},updateTime:function(){document.querySelector("#"+this.id()+" .end-time").innerText=this._liveshiftService.liveTimeRange.endDisplay,document.querySelector("#"+this.id()+" .live-time").innerText=this._liveshiftService.currentTimeDisplay}});t.exports=o},{"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],5:[function(e,t,i){t.exports={domain:"g.alicdn.com",flashVersion:"2.8.2",h5Version:"2.8.2",cityBrain:!0,logDuration:10,logCount:100,logReportTo:"https://videocloud.cn-hangzhou.log.aliyuncs.com/logstores/newplayer/track"}},{}],6:[function(e,t,i){e("./lang/index").load();var r=e("./player/adaptivePlayer"),o=e("./lib/componentutil"),n=e("./config"),a=function(e,t){return r.create(e,t)};a.getVersion=function(){return n.h5Version},o.register(a);var s=window.Aliplayer=a;a.players={},"function"==typeof define&&define.amd?define([],function(){return s}):"object"==typeof i&&"object"==typeof t&&(t.exports=s),"undefined"!=typeof Uint8Array&&(Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:Array.prototype.slice}))},{"./config":5,"./lang/index":11,"./lib/componentutil":14,"./player/adaptivePlayer":40}],7:[function(e,t,i){var r=e("../lib/oo"),o=e("../lang/index"),n=r.extend({init:function(e,t){this._player=e,this._options=e.options()}});n.prototype.handle=function(e){if(this._options.autoPlayDelay){var t=this._options.autoPlayDelayDisplayText;t||(t=o.get("AutoPlayDelayDisplayText").replace("$$",this._options.autoPlayDelay)),this._player.trigger("info_show",t),this._player.trigger("h5_loading_hide"),this._player.trigger("play_btn_hide");var i=this;this._timeHandler=setTimeout(function(){i._player.trigger("info_hide"),i._options.autoPlayDelay=0,e&&e()},1e3*this._options.autoPlayDelay),this._player.on("play",function(){a(i)}),this._player.on("pause",function(){a(i)})}},n.prototype.dispose=function(){a(this),this._player=null};var a=function(e){e._timeHandler&&(clearTimeout(e._timeHandler),e._timeHandler=null)};t.exports=n},{"../lang/index":11,"../lib/oo":27}],8:[function(e,t,i){t.exports=t.exports={OD:"OD",FD:"360p",LD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Speed:"Speed",Speed_05X_Text:"0.5X",Speed_1X_Text:"Normal",Speed_125X_Text:"1.25X",Speed_15X_Text:"1.5X",Speed_2X_Text:"2X",Refresh_Text:"Refresh",Cancel:"Cancel",Mute:"Mute",Snapshot:"Snapshot",Detection_Text:"Diagnosis",Play_DateTime:"Time",Quality_Change_Fail_Switch_Text:"Cannot play, switch to ",Quality_Change_Text:"Switch to ",Quality_The_Url:"The url",AutoPlayDelayDisplayText:"Play in $$ seconds",Error_Load_Abort_Text:"Data abort erro",Error_Network_Text:"Loading failed due to network error",Error_Decode_Text:"Decode error",Error_Server_Network_NotSupport_Text:"Network error or \xa0the format of video is unsupported",Error_Offline_Text:"The network is unreachable, please click Refresh",Error_Play_Text:"Error occured while playing",Error_Retry_Text:" Please close or refresh",Error_AuthKey_Text:"Authentication expired or the domain is not in white list",Error_H5_Not_Support_Text:"The format of video is not supported by\xa0h5 player\uff0cplease use flash player",Error_Not_Support_M3U8_Text:"The format of m3u8 is not supported by this explorer",Error_Not_Support_MP4_Text:"The format of mp4\xa0is not supported by this explorer",Error_Not_Support_encrypt_Text:"Play the encrypted video,please set encryptType to 1",Error_Vod_URL_Is_Empty_Text:"The url is empty",Error_Vod_Fetch_Urls_Text:"Error occured when fetch urls\uff0cplease close or refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Error_Playauth_Decode_Text:"PlayAuth parse failed",Error_Vid_Not_Same_Text:"Cannot renew url due to vid changed",Error_Playauth_Expired_Text:"Playauth expired, please close or refresh",Error_MTS_Fetch_Urls_Text:"Error occurred while requesting mst server",Error_Load_M3U8_Failed_Text:"The\xa0m3u8 file loaded failed",Error_Load_M3U8_Timeout_Text:"Timeout error occored\xa0when the\xa0m3u8 file loaded",Error_M3U8_Decode_Text:"The m3u8 file decoded failed",Error_TX_Decode_Text:"Video decoded failed",Error_Waiting_Timeout_Text:"Buffering timeout,\xa0please close or refresh",Error_Invalidate_Source:"Video shoud be mp4\u3001mp3\u3001m3u8\u3001mpd or flv",Error_Empty_Source:"Video URL shouldn't be empty",Error_Vid_Empty_Source:"vid's video URL hasn't been fetched",Error_Fetch_NotStream:"The vid has no stream to play",Error_Not_Found:"Url is not found",Live_End:"Live has finished",Play_Before_Fullscreen:"Please play before fullscreen",Can_Not_Seekable:"Can not seek to this position",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Request_Block_Text:"This request is blocked, the video Url should be over https",Open_Html_By_File:"Html page should be on the server",Maybe_Cors_Error:"please make sure enable cors,refer to document",Speed_Switch_To:"Speed switch to ",Curent_Volume:"Current volume:",Volume_Mute:"set to mute",Volume_UnMute:"set to unmute",ShiftLiveTime_Error:"Live start time should not be greater than over time",Error_Not_Support_Format_On_Mobile:"flv\u3001rmtp can't be supported on mobile\uff0cplease use m3u8",SessionId_Ticket_Invalid:"please assign value for sessionId and ticket properties",Http_Error:" An HTTP network request failed with an error, but not from the server.",Http_Timeout:"A network request timed out",DRM_License_Expired:"DRM license is expired, please refresh",Not_Support_DRM:"Browser doesn't support DRM",CC_Switch_To:"Subtitle switch to ",AudioTrack_Switch_To:"Audio tracks switch to ",Subtitle:"Subtitle/CC",AudioTrack:"Audio Track",Quality:"Quality",Auto:"Auto",Quality_Switch_To:"Quality switch to ",Fullscreen:"Full Screen",Setting:"Settings",Volume:"Volume",Play:"Play",Pause:"Pause",CloseSubtitle:"Close CC",OpenSubtitle:"Open CC",ExistFullScreen:"Exit Full Screen",Muted:"Muted",Retry:"Retry",SwitchToLive:"Return to live",iOSNotSupportVodEncription:"iOS desn't suport Vod's encription video",UseChromeForVodEncription:"This browser desn't suport Vod's encription video, please use latest Chrome"}},{}],9:[function(e,t,i){t.exports=t.exports={OD:"OD",LD:"360p",FD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Forbidden_Text:"Internal information is strictly forbidden to outsider",Refresh:"Refresh",Diagnosis:"Diagnosis",Live_Finished:"Live has finished, thanks for watching",Play:"Play",Pause:"Pause",Snapshot:"Snapshot",Replay:"Replay",Live:"Live",Encrypt:"Encrypt",Sound:"Sound",Fullscreen:"Full Screen",Exist_Fullscreen:"Exit Full-screen",Resolution:"Resolution",Next:"Next Video",Brightness:"Brightness",Default:"Default",Contrast:"Contrast",Titles_Credits:"Titles\xa0and\xa0Credits",Skip_Titles:"Skip Titles",Skip_Credits:"Skip Credits",Not_Support_Out_Site:"The video is not supported for outside website, please watch it by TaoTV",Watch_Now:"Watch now",Network_Error:"Network is unreachable, please try to refresh",Video_Error:"Playing a video error,\xa0please try to refresh",Decode_Error:"Data decoding\xa0error",Live_Not_Start:"Live has not started, to be expected",Live_Loading:"Live information is loading,\xa0please try to refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Live_End:"Live has finished",Live_Abrot:"Signal aborted,\xa0please try to refresh",Corss_Domain_Error:"Please ensure your domain has obtained IPC license and combined CNAME, \r\n or to set\xa0\xa0cross-domain accessing available",Url_Timeout_Error:"The video url is timeout,\xa0please try to refresh",Connetction_Error:"Sorry\uff0cthe video cannot play because of connection error, please try to watch other videos",Fetch_MTS_Error:"Fetching video list failed, please ensure",Token_Expired_Error:"Requesting open api failed, please ensure token expired or not",Video_Lists_Empty_Error:"The video list is empty, please check the format of video",Encrypted_Failed_Error:"Fetching encrypted file failed, please check the permission of player",Fetch_Failed_Permission_Error:"Fetching video list failed, please check the permission of player",Invalidate_Param_Error:"No video url, please check the parameters",AutoPlayDelayDisplayText:"Play in $$ seconds",Fetch_MTS_NOT_NotStream_Error:"The vid has no stream to play",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Open_Html_By_File:"Html page should be on the server",Cant_Use_Flash_On_Mobile:"Mobile doesn't support flash player\uff0cplease use h5 player",Flash_Not_Ready:"Flash Player plugin hasn't been installed install plugin, or check if disable Flash plugin"}},{}],10:[function(e,t,i){t.exports=t.exports={OD:"\u539f\u753b",FD:"\u6d41\u7545",LD:"\u6807\u6e05",SD:"\u9ad8\u6e05",HD:"\u8d85\u6e05","2K":"2K","4K":"4K",FHD:"\u5168\u9ad8\u6e05",XLD:"\u6781\u901f",SQ:"\u666e\u901a\u97f3\u8d28",HQ:"\u9ad8\u97f3\u8d28",Forbidden_Text:"\u5185\u90e8\u4fe1\u606f\uff0c\u4e25\u7981\u5916\u4f20",Refresh:"\u5237\u65b0",Diagnosis:"\u8bca\u65ad",Live_Finished:"\u76f4\u64ad\u5df2\u7ed3\u675f,\u8c22\u8c22\u89c2\u770b",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Snapshot:"\u622a\u56fe",Replay:"\u91cd\u64ad",Live:"\u76f4\u64ad",Encrypt:"\u52a0\u5bc6",Sound:"\u58f0\u97f3",Fullscreen:"\u5168\u5c4f",Exist_Fullscreen:"\u9000\u51fa\u5168\u5c4f",Resolution:"\u6e05\u6670\u5ea6",Next:"\u4e0b\u4e00\u96c6",Brightness:"\u4eae\u5ea6",Default:"\u9ed8\u8ba4",Contrast:"\u5bf9\u6bd4\u5ea6",Titles_Credits:"\u7247\u5934\u7247\u5c3e",Skip_Titles:"\u8df3\u8fc7\u7247\u5934",Skip_Credits:"\u8df3\u8fc7\u7247\u5c3e",Not_Support_Out_Site:"\u8be5\u89c6\u9891\u6682\u4e0d\u652f\u6301\u7ad9\u5916\u64ad\u653e\uff0c\u8bf7\u5230\u6dd8TV\u89c2\u770b",Watch_Now:"\u7acb\u5373\u89c2\u770b",Network_Error:"\u7f51\u7edc\u65e0\u6cd5\u8fde\u63a5\uff0c\u8bf7\u5c1d\u8bd5\u68c0\u67e5\u7f51\u7edc\u540e\u5237\u65b0\u8bd5\u8bd5",Video_Error:"\u89c6\u9891\u64ad\u653e\u5f02\u5e38\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Decode_Error:"\u64ad\u653e\u6570\u636e\u89e3\u7801\u9519\u8bef",Live_Not_Start:"\u4eb2\uff0c\u76f4\u64ad\u8fd8\u672a\u5f00\u59cb\u54e6\uff0c\u656c\u8bf7\u671f\u5f85",Live_Loading:"\u76f4\u64ad\u4fe1\u606f\u52a0\u8f7d\u4e2d\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Live_End:"\u4eb2\uff0c\u76f4\u64ad\u5df2\u7ed3\u675f",Live_Abrot:"\u5f53\u524d\u76f4\u64ad\u4fe1\u53f7\u4e2d\u65ad\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Corss_Domain_Error:"\u8bf7\u786e\u8ba4\u60a8\u7684\u57df\u540d\u5df2\u5b8c\u6210\u5907\u6848\u548cCNAME\u7ed1\u5b9a\uff0c\r\n\u5e76\u5904\u4e8e\u542f\u7528\u72b6\u6001\uff0c\u6216\u8d44\u6e90\u5141\u8bb8\u8de8\u8d8a\u8bbf\u95ee",Url_Timeout_Error:"\u60a8\u6240\u89c2\u770b\u7684\u89c6\u9891\u5730\u5740\u8fde\u63a5\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Connetction_Error:"\u62b1\u6b49,\u8be5\u89c6\u9891\u7531\u4e8e\u8fde\u63a5\u9519\u8bef\u6682\u65f6\u4e0d\u80fd\u64ad\u653e,\u8bf7\u89c2\u770b\u5176\u5b83\u89c6\u9891",Fetch_MTS_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4",Token_Expired_Error:"\u8bf7\u6c42\u63a5\u53e3\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4Token\u662f\u5426\u8fc7\u671f",Video_Lists_Empty_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u4e3a\u7a7a\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6570\u636e\u4e0e\u683c\u5f0f",Encrypted_Failed_Error:"\u83b7\u53d6\u89c6\u9891\u52a0\u5bc6\u79d8\u94a5\u9519\u8bef\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Fetch_Failed_Permission_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Invalidate_Param_Error:"\u65e0\u8f93\u5165\u89c6\u9891\uff0c\u8bf7\u786e\u8ba4\u8f93\u5165\u53c2\u6570",AutoPlayDelayDisplayText:"$$\u79d2\u4ee5\u540e\u5f00\u59cb\u64ad\u653e",Fetch_MTS_NOT_NotStream_Error:"\u6b64vid\u6ca1\u6709\u53ef\u64ad\u653e\u89c6\u9891",Cancel_Text:"\u53d6\u6d88",OK_Text:"\u786e\u8ba4",Auto_Stream_Tip_Text:"\u7f51\u7edc\u4e0d\u7ed9\u529b\uff0c\u662f\u5426\u5207\u6362\u5230$$",Fetch_Playauth_Error:"\u83b7\u53d6\u64ad\u653e\u51ed\u8bc1\u51fa\u9519\u5566\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Open_Html_By_File:"\u4e0d\u80fd\u76f4\u63a5\u5728\u6d4f\u89c8\u5668\u6253\u5f00html\u6587\u4ef6\uff0c\u8bf7\u90e8\u7f72\u5230\u670d\u52a1\u7aef",Cant_Use_Flash_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301Flash\u64ad\u653e\u5668\uff0c\u8bf7\u4f7f\u7528h5\u64ad\u653e\u5668",Flash_Not_Ready:"Flash Player\u63d2\u4ef6\u672a\u5b89\u88c5\u5b89\u88c5\u63d2\u4ef6\uff0c\u5982\u679c\u5df2\u7ecf\u5b89\u88c5\u8bf7\u68c0\u67e5\u662f\u5426\u88ab\u7981\u7528"}},{}],11:[function(n,e,t){var i=n("../config"),a=n("../lib/storage"),o=(n("../lib/io"),"aliplayer_lang"),s=function(){if(void 0===window[o]||!window[o]){var e=(navigator.language||navigator.browserLanguage).toLowerCase();e=e&&-1\u53c2\u8003\u6587\u6863",Speed_Switch_To:"\u500d\u901f\u5207\u6362\u5230 ",Curent_Volume:"\u5f53\u524d\u97f3\u91cf\uff1a",Volume_Mute:"\u8bbe\u7f6e\u4e3a\u9759\u97f3",Volume_UnMute:"\u8bbe\u7f6e\u4e3a\u975e\u9759\u97f3",ShiftLiveTime_Error:"\u76f4\u64ad\u5f00\u59cb\u65f6\u95f4\u4e0d\u80fd\u5927\u4e8e\u76f4\u64ad\u7ed3\u675f\u65f6\u95f4",Error_Not_Support_Format_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301flv\u3001rmtp\u89c6\u9891\uff0c\u8bf7\u4f7f\u7528m3u8",SessionId_Ticket_Invalid:"DRM\u89c6\u9891\u64ad\u653e\uff0csessionId\u548cticket\u5c5e\u6027\u4e0d\u80fd\u4e3a\u7a7a",Http_Error:"Http\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25",Http_Timeout:"http\u8bf7\u6c42\u8d85\u65f6",DRM_License_Expired:"DRM license\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0",Not_Support_DRM:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301DRM\u89c6\u9891\u7684\u64ad\u653e",CC_Switch_To:"\u5b57\u5e55\u5207\u6362\u5230 ",AudioTrack_Switch_To:"\u97f3\u8f68\u5207\u6362\u5230 ",Subtitle:"\u5b57\u5e55",AudioTrack:"\u97f3\u8f68",Quality:"\u6e05\u6670\u5ea6",Auto:"\u81ea\u52a8",Quality_Switch_To:"\u6e05\u6670\u5ea6\u5207\u6362\u5230 ",Fullscreen:"\u5168\u5c4f",Setting:"\u8bbe\u7f6e",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",CloseSubtitle:"\u5173\u95ed\u5b57\u5e55",OpenSubtitle:"\u6253\u5f00\u5b57\u5e55",ExistFullScreen:"\u9000\u51fa\u5168\u5c4f",Muted:"\u9759\u97f3",Retry:"\u91cd\u8bd5",SwitchToLive:"\u8fd4\u56de\u76f4\u64ad",iOSNotSupportVodEncription:"iOS\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e",UseChromeForVodEncription:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e\uff0c\u8bf7\u4f7f\u7528\u6700\u65b0Chrome\u6d4f\u89c8\u5668"}},{}],13:[function(e,t,i){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";if(window.Uint8Array)for(var d=new Uint8Array(256),r=0;r>4,c[l++]=(15&r)<<4|o>>2,c[l++]=(3&o)<<6|63&n;return u},encode:function(e){var t,i=new Uint8Array(e),r=i.length,o="";for(t=0;t>2],o+=n[(3&i[t])<<4|i[t+1]>>4],o+=n[(15&i[t+1])<<2|i[t+2]>>6],o+=n[63&i[t+2]];return r%3==2?o=o.substring(0,o.length-1)+"=":r%3==1&&(o=o.substring(0,o.length-2)+"=="),o},unpackPlayReady:unpackPlayReady}},{}],14:[function(e,t,i){var r=e("./oo"),o=e("../player/base/event/eventtype");t.exports.stopPropagation=function(e){window.event?window.event.cancelBubble=!0:e.stopPropagation()},t.exports.register=function(e){e.util={stopPropagation:t.exports.stopPropagation},e.Component=r.extend,e.EventType=o.Player}},{"../player/base/event/eventtype":43,"./oo":27}],15:[function(e,t,i){var r=e("../lang/index");t.exports.LOAD_START="loadstart",t.exports.LOADED_METADATA="loadedmetadata",t.exports.LOADED_DATA="loadeddata",t.exports.PROGRESS="progress",t.exports.CAN_PLAY="canplay",t.exports.CAN_PLYA_THROUGH="canplaythrough",t.exports.PLAY="play",t.exports.PAUSE="pause",t.exports.ENDED="ended",t.exports.PLAYING="playing",t.exports.WAITING="waiting",t.exports.ERROR="error",t.exports.SUSPEND="suspend",t.exports.STALLED="stalled",t.exports.AuthKeyExpiredEvent="authkeyexpired",t.exports.DRMKeySystem={4:"com.microsoft.playready",5:"com.widevine.alpha"},t.exports.EncryptionType={Private:1,Standard:2,ChinaDRM:3,PlayReady:4,Widevine:5},t.exports.VodEncryptionType={AliyunVoDEncryption:1,HLSEncryption:2},t.exports.DRMType={Widevine:"Widevine",PlayReady:"PlayReady"},t.exports.ErrorCode={InvalidParameter:4001,AuthKeyExpired:4002,InvalidSourceURL:4003,NotFoundSourceURL:4004,StartLoadData:4005,LoadedMetadata:4006,PlayingError:4007,LoadingTimeout:4008,RequestDataError:4009,EncrptyVideoNotSupport:4010,FormatNotSupport:4011,PlayauthDecode:4012,PlayDataDecode:4013,NetworkUnavaiable:4014,UserAbort:4015,NetworkError:4016,URLsIsEmpty:4017,CrossDomain:4027,OtherError:4400,ServerAPIError:4500,FlashNotInstalled:4600},t.exports.AuthKeyExpired=7200,t.exports.AuthKeyRefreshExpired=7e3,t.exports.AuthInfoExpired=100,t.exports.VideoErrorCode={1:4015,2:4016,3:4013,4:4400},t.exports.IconType={FontClass:"fontclass",Symbol:"symbol",Sprite:"Sprite"},t.exports.SelectedStreamLevel="selectedStreamLevel",t.exports.SelectedCC="selectedCC",t.exports.WidthMapToLevel={0:"OD",640:"FD",960:"LD",1280:"SD",1920:"HD",2580:"2K",3840:"4K"};var o=function(){t.exports.VideoErrorCodeText={1:r.get("Error_Load_Abort_Text"),2:r.get("Error_Network_Text"),3:r.get("Error_Decode_Text"),4:r.get("Error_Server_Network_NotSupport_Text")},t.exports.VideoLevels={0:r.get("OD"),640:r.get("FD"),960:r.get("LD"),1280:r.get("SD"),1920:r.get("HD"),2580:r.get("2K"),3840:r.get("4K")},t.exports.QualityLevels={OD:r.get("OD"),LD:r.get("LD"),FD:r.get("FD"),SD:r.get("SD"),HD:r.get("HD"),"2K":r.get("2K"),"4K":r.get("4K"),XLD:r.get("XLD"),FHD:r.get("FHD"),SQ:r.get("SQ"),HQ:r.get("HQ")},t.exports.SpeedLevels=[{key:.5,text:r.get("Speed_05X_Text")},{key:1,text:r.get("Speed_1X_Text")},{key:1.25,text:r.get("Speed_125X_Text")},{key:1.5,text:r.get("Speed_15X_Text")},{key:2,text:r.get("Speed_2X_Text")}]};o(),t.exports.updateByLanguage=o},{"../lang/index":11}],16:[function(e,t,i){t.exports.get=function(e){for(var t=e+"",i=document.cookie.split(";"),r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},hexadecimalInteger:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var i=new Uint8Array(t.length/2),r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},decimalFloatingPoint:function(e){return parseFloat(this[e])},enumeratedString:function(e){return this[e]},decimalResolution:function(e){var t=r.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}},parseAttrList:function(e){var t,i={};for(o.lastIndex=0;null!==(t=o.exec(e));){var r=t[2];0===r.indexOf('"')&&r.lastIndexOf('"')===r.length-1&&(r=r.slice(1,-1)),i[t[1]]=r}return i}},t.exports=n},{}],23:[function(e,t,i){var P=e("./attrlist"),r=e("../io"),o=e("./URLToolkit"),c=/#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g,u=/#EXT-X-MEDIA:(.*)/g,w=new RegExp([/#EXTINF:(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/|(?!#)(\S+)/.source,/|#EXT-X-BYTERANGE:*(.+)/.source,/|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/|#.*/.source].join(""),"g"),C=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,k=function(){this.method=null,this.key=null,this.iv=null,this._uri=null},I=function(){this._url=null,this._byteRange=null,this._decryptdata=null,this.tagList=[]};I.prototype.getUrl=function(){return!this._url&&this.relurl&&(this._url=o.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},I.prototype.Seturl=function(e){this._url=e},I.prototype.getProgramDateTime=function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime},I.prototype.GetbyteRange=function(){if(!this._byteRange){var e=this._byteRange=[];if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var i=this.lastByteRangeEndOffset;e[0]=i||0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange},I.prototype.getByteRangeStartOffset=function(){return this.byteRange[0]},I.prototype.getByteRangeEndOffset=function(){return this.byteRange[1]};I.prototype.getDecryptdata=function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata};var n=function(){this.loaders={}};n.prototype={parseMasterPlaylist:function(e,t){var i,r=[];for(c.lastIndex=0;null!=(i=c.exec(e));){var o={},n=o.attrs=new P(i[1]);o.url=this.resolve(i[2],t);var a=n.decimalResolution("RESOLUTION");a&&(o.width=a.width,o.height=a.height),o.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),o.name=n.NAME;var s=n.CODECS;if(s){s=s.split(/[ ,]+/);for(var l=0;l",quot:'"',"#x27":"'","#x60":"`"}[t.toLowerCase()]||e})}},{}],27:[function(e,t,i){var o=e("./object"),n=function(){};(n=function(){}).extend=function(e){var t,i;for(var r in t=(e=e||{}).init||e.init||this.prototype.init||this.prototype.init||function(){},(((i=function(){t.apply(this,arguments)}).prototype=o.create(this.prototype)).constructor=i).extend=n.extend,i.create=n.create,e)e.hasOwnProperty(r)&&(i.prototype[r]=e[r]);return i},n.create=function(){var e=o.create(this.prototype);return this.apply(e,arguments),e},t.exports=n},{"./object":26}],28:[function(e,f,t){var _=e("./object"),i=e("../config"),r=e("./dom"),o=e("./cookie"),n=e("./constants"),a=e("../lang/index"),s=e("./ua"),g=e("../player/base/plugin/defaultemptycomponent"),y={preload:!0,autoplay:!0,useNativeControls:!1,width:"100%",height:"300px",cover:"",from:"",trackLog:!0,logBatched:!0,isLive:!1,playsinline:!0,showBarTime:5e3,rePlay:!1,liveRetry:5,liveRetryInterval:1,liveRetryStep:0,vodRetry:3,format:"",definition:"",defaultDefinition:"",loadDataTimeout:20,waitingTimeout:60,delayLoadingShow:1,controlBarForOver:!1,controlBarVisibility:"hover",enableSystemMenu:!1,qualitySort:"asc",x5_video_position:"normal",x5_type:"",x5_fullscreen:!1,x5_orientation:"landscape|portrait",x5LandscapeAsFullScreen:!0,autoPlayDelay:0,autoPlayDelayDisplayText:"",useHlsPluginForSafari:!1,enableMSEForAndroid:!0,encryptType:0,language:"zh-cn",languageTexts:{},mediaType:"video",outputType:"",playConfig:{},reAuthInfo:{},components:[],liveTimeShiftUrl:"",liveShiftSource:"",liveShiftTime:"",videoHeight:"100%",videoWidth:"100%",enableWorker:!0,authTimeout:"",enableMockFullscreen:!1,region:"cn-shanghai",debug:!1,progressMarkers:[],snapshotWatermark:{left:"500",top:"100",text:"",font:"16px \u5b8b\u4f53",fillColor:"#FFFFFF",strokeColor:"#FFFFFF"},liveStartTime:"",liveOverTime:"",enableStashBufferForFlv:!0,stashInitialSizeForFlv:32,flvOption:{},hlsOption:{stopLoadAsPaused:!1},hlsLoadingTimeOut:2e4,useHlsPlugOnMobile:!0,nudgeMaxRetry:5,tracks:[],recreatePlayer:function(){},diagnosisButtonVisible:!0,_native:!0,ai:{label:!1,meta:{url:"http://172.19.61.105:8085/meta/query",getMeta:""},boxes:"",host:"",app:"",streamName:"",startDateTime:0,waitMetaDataTime:2,displayAttrs:{header:"\u59d3\u540d","\u8bc1\u4ef6\u53f7\u7801":"text","\u6027\u522b":"text","\u5e74\u9f84":"text","\u53d1\u578b":"text","\u4eba\u8138\u5927\u56fe":function(e){},"\u4eba\u8138\u5c0f\u56fe":function(e){}},getClass:function(e,t){return""}},thumbnailUrl:"",skinRes:"//"+i.domain+"/de/prismplayer-flash/"+i.flashVersion+"/atlas/defaultSkin"};f.exports.defaultH5Layout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"H5Loading",align:"cc"},{name:"errorDisplay",align:"tlabs",x:0,y:0},{name:"infoDisplay"},{name:"tooltip",align:"blabs",x:0,y:50},{name:"thumbnail"},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"fullScreenButton",align:"tr",x:10,y:12},{name:"subtitle",align:"tr",x:15,y:12},{name:"setting",align:"tr",x:15,y:12},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultAudioLayout=[{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultFlashLayout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"tlabs",x:0,y:0},{name:"playButton",align:"tl",x:15,y:26},{name:"nextButton",align:"tl",x:10,y:26},{name:"timeDisplay",align:"tl",x:10,y:24},{name:"fullScreenButton",align:"tr",x:10,y:25},{name:"streamButton",align:"tr",x:10,y:23},{name:"volume",align:"tr",x:10,y:25}]},{name:"fullControlBar",align:"tlabs",x:0,y:0,children:[{name:"fullTitle",align:"tl",x:25,y:6},{name:"fullNormalScreenButton",align:"tr",x:24,y:13},{name:"fullTimeDisplay",align:"tr",x:10,y:12},{name:"fullZoom",align:"cc"}]}],f.exports.canPlayType=function(e){var t=document.createElement("video");return t.canPlayType?t.canPlayType(e):""},f.exports.canPlayHls=function(){return""!=f.exports.canPlayType("application/x-mpegURL")},f.exports.isUsedHlsPluginOnMobile=function(e){return!(!s.IS_MOBILE||!s.IS_CHROME&&!s.IS_FIREFOX)},f.exports.isSafariUsedHlsPlugin=function(e){return!!(s.os.pc&&s.browser.safari&&e)},f.exports.hasUIComponent=function(e,t){if(void 0===e||!e||0==e.length)return!1;for(var i=0,r=e.length;ix'}).firstChild.href),e},t.exports.parseUrl=function(e){var t,i,r,o,n;o=["protocol","hostname","port","pathname","search","hash","host"],(r=""===(i=s.createEl("a",{href:e})).host&&"file:"!==i.protocol)&&((t=s.createEl("div")).innerHTML='',i=t.firstChild,t.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(t)),n={};for(var a=0;a/g,">").replace(/\&/g,"&").replace(/"/g,""").replace(/'/g,"'")},r.exports.toBinary=function(e){if(!window.atob)return"";for(var t=atob(e),i=t.length,r=new Uint8Array(i),o=0;o>>0).toString()},r={parse:function(e,t,i){var r,o=e.trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),n=[],a=new s;a.oncue=function(e){e.id=l(e.startTime)+l(e.endTime)+l(e.text),e.text=decodeURIComponent(escape(e.text)),e.isBig=!1;var t=e.text.split("#xywh=");if(2==t.length){var i=t[1].split(",");e.x=i[0],e.y=i[1],e.w=i[2],e.h=i[3],e.isBig=!0}0/gi,"\n")}(e);tthis._uploadCount||"4001"==e.e||"2002"==e.e)&&this._report()},r.prototype.dispose=function(){this._report(),this._disposed=!0},r.prototype._start=function(){this._disposed=!1;this._retry=0,this._report()},r.prototype._report=function(t){if(this._tickHandler&&(clearTimeout(this._tickHandler),this._tickHandler=null),t||(t=this._logs.splice(0,this._uploadCount)),0this._uploadCount?e._report():this._tickHandler=setTimeout(function(){e._report()},1e3*this._uploadDuration)}},t.exports=r},{"../lib/io":24,"../lib/storage":30}],38:[function(e,t,i){var r=e("../lib/oo"),u=e("../lib/object"),v=e("../lib/data"),c=e("../lib/io"),m=e("../lib/ua"),S=e("../config"),o=e("../player/base/event/eventtype"),T=e("./util"),b=e("./log"),n=0,d={STARTFETCHDATA:1003,COMPLETEFETCHDATA:1004,PREPARE:1101,PREPAREEND:1102,STARTPLAY:2e3,PLAY:2001,STOP:2002,PAUSE:2003,SEEK:2004,FULLSREEM:2005,QUITFULLSCREEM:2006,RESOLUTION:2007,RESOLUTION_DONE:2008,RECOVER:2010,SEEK_END:2011,FETCHEDIP:2020,CDNDETECT:2021,DETECT:2022,UNDERLOAD:3002,LOADED:3001,HEARTBEAT:9001,ERROR:4001,ERRORRETRY:4002,SNAPSHOT:2027,ROTATE:2028,IMAGE:2029,THUMBNAILSTART:2031,THUMBNAILCOMPLETE:2032,CCSTART:2033,CCCOMPLETE:2034,AUDIOTRACKSTART:2033,AUDIOTRACKCOMPLETE:2034},a=r.extend({init:function(e,t,i){void 0===i&&(i=!0),this.trackLog=i,this.player=e,this.requestId="",this.sessionId=v.guid(),this.playId=0,this.firstPlay=!0,this.osName=m.os.name,this.osVersion=m.os.version||"",this.exName=m.browser.name,this.exVersion=m.browser.version||"",this._logService="",t.logBatched&&(this._logService=new b(S));var r=this.player.getOptions(),o=t.from?t.from:"",n=(r.isLive,r.isLive?"live":"vod"),a="pc";m.IS_IPAD?a="pad":m.os.phone&&(a="phone");var s=this.encodeURL(m.getReferer()),l=m.getHref(),u=this.encodeURL(l),c="";l&&(c=m.getHost(l));var d=S.h5Version,p=T.getUuid(),h=r.source?this.encodeURL(r.source):"",f=m.getHost(r.source),_=r.userId?r.userId+"":"0",g=this.sessionId,y=(new Date).getTime();this._userNetInfo={cdnIp:"",localIp:""};this.opt={APIVersion:"0.6.0",t:y,ll:"info",lv:"1.0",pd:"player",md:"saas_player",ui:"saas_player",sm:"play",os:this.osName,ov:this.osVersion,et:this.exName,ev:this.exVersion,uat:m.USER_AGENT,hn:"0.0.0.0",bi:o,ri:g,e:"0",args:"0",vt:n,tt:a,dm:"h5",av:d,uuid:p,vu:h,vd:f,ua:_,dn:"custom",cdn_ip:"0.0.0.0",app_n:c,r:s,pu:u},this.bindEvent()},updateVideoInfo:function(e){var t=e.from?e.from:"";this.opt.bi=t+"",this.updateSourceInfo()},updateSourceInfo:function(){var e=this.player.getOptions();if(e){var t=e.source?this.encodeURL(e.source):"",i=m.getHost(e.source);this.opt.vu=t,this.opt.vd=i}},replay:function(){this.reset(),this.player.trigger(o.Video.LoadStart),this.player.trigger(o.Video.LoadedMetadata),this.player.trigger(o.Video.LoadedData)},bindEvent:function(){var t=this;this.player.on(o.Player.Init,function(){t._onPlayerInit()}),this.player.on(o.Video.LoadStart,function(){t._onPlayerloadstart()}),this.player.on(o.Video.LoadedMetadata,function(){t._onPlayerLoadMetadata()}),this.player.on(o.Video.LoadedData,function(){t._onPlayerLoaddata()}),this.player.on(o.Video.Play,function(){t._onPlayerPlay()}),this.player.on(o.Video.Playing,function(){t._onPlayerReady()}),this.player.on(o.Video.Ended,function(){t._onPlayerFinish()}),this.player.on(o.Video.Pause,function(){t._onPlayerPause()}),this.player.on(o.Private.SeekStart,function(e){t._onPlayerSeekStart(e)}),this.player.on(o.Private.EndStart,function(e){t._seekEndData=e.paramData}),this.player.on(o.Player.Waiting,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._waitingDelayLoadingShowHandle=setTimeout(function(){t._onPlayerLoaded()},1e3*t.player._options.delayLoadingShow)}),this.player.on(o.Video.CanPlayThrough,function(){}),this.player.on(o.Video.CanPlay,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._onPlayerUnderload(),t._onPlayerCanplay()}),this.player.on(o.Video.TimeUpdate,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._seekEndData&&t.seeking&&t._onPlayerSeekEnd()}),this.player.on(o.Player.Error,function(){t._onPlayerError()}),this.player.on(o.Player.RequestFullScreen,function(){t._onFullscreenChange(1)}),this.player.on(o.Player.CancelFullScreen,function(){t._onFullscreenChange(0)}),this.player.on(o.Private.PREPARE,function(e){t._prepareTime=(new Date).getTime(),t._log("PREPARE",{dn:e.paramData})}),this.player.on(o.Player.Snapshoted,function(){t._log("SNAPSHOT")}),setInterval(function(){if(t.player.getCurrentTime()){var e=Math.floor(1e3*t.player.getCurrentTime());t.player.paused()||30<=++n&&(t._log("HEARTBEAT",{vt:e,interval:1e3*n}),n=0)}},1e3)},removeEvent:function(){this.player.off("init"),this.player.off("ready"),this.player.off("ended"),this.player.off("play"),this.player.off("pause"),this.player.off("seekStart"),this.player.off("seekEnd"),this.player.off("canplaythrough"),this.player.off("playing"),this.player.off("timeupdate"),this.player.off("error"),this.player.off("fullscreenchange"),this.player.off(o.Private.PREPARE),this._logService&&this._logService.dispose()},reset:function(){this.startTimePlay=0,this.buffer_flag=0,this.firstPlay=!1,this.playId=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},encodeURL:function(e){if(!e)return"";var t=this.player.getOptions();return t&&!t.logBatched?encodeURIComponent(e):e},_onFullscreenChange:function(e){e?this._log("FULLSREEM",{}):this._log("QUITFULLSCREEM",{})},_onPlayerloadstart:function(){this.loadstartTime=(new Date).getTime(),this.playId=v.guid(),!this.loadstarted&&this.player._isPreload()&&(this.loadstarted=1,this._log("STARTPLAY",{vt:(new Date).getTime()}))},_onPlayerLoadMetadata:function(){this.loadMetaDataCost=(new Date).getTime()-this.loadstartTime},_onPlayerLoaddata:function(){if(!this._LoadedData&&!this.buffer_flag){var e=0,t=0;this.player.tag&&(e=this.player.tag.videoWidth,t=this.player.tag.videoHeight),this._log("PREPAREEND",{tc:(new Date).getTime()-this._prepareTime,cc:(new Date).getTime()-this.loadstartTime,md:this.loadMetaDataCost,mi:JSON.stringify({type:"video",definition:e+"*"+t})})}this._LoadedData=1},_onPlayerCanplay:function(){this._canPlay=1,this._reportPlay()},_onPlayerInit:function(){this.buffer_flag=0,this.pause_flag=0,this.startTimePlay=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},_onPlayerReady:function(){this.startTimePlay||(this.startTimePlay=(new Date).getTime())},_onPlayerFinish:function(){this._log("STOP",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.reset()},_reportPlay:function(){return!(this.buffer_flag||!this._LoadedData||!this.playstartTime)&&(this.first_play_time=(new Date).getTime(),this._log("PLAY",{dsm:"fix",tc:this.first_play_time-this.loadstartTime,fc:this.first_play_time-this.playstartTime}),this.buffer_flag=1,!0)},_onPlayerPlay:function(){this.playstartTime=(new Date).getTime(),0==this.playId&&(this.playId=v.guid()),this.firstPlay||0!=this.pause_flag||this.seeking||(this.sessionId=v.guid()),this.player._isPreload()||(this._log("STARTPLAY",{vt:(new Date).getTime()}),this.loadstartTime=(new Date).getTime()),this._canPlay&&this._reportPlay()||this.buffer_flag&&this.pause_flag&&(this.pause_flag=0,this.pauseEndTime=(new Date).getTime(),this._log("RECOVER",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.pauseEndTime-this.pauseTime}))},_onPlayerPause:function(){this.buffer_flag&&this.startTimePlay&&(this.seeking||(this.pause_flag=1,this.pauseTime=(new Date).getTime(),this._log("PAUSE",{vt:Math.floor(1e3*this.player.getCurrentTime())})))},_onPlayerSeekStart:function(e){this.seekStartTime=e.paramData.fromTime,this.seeking=!0,this.startTimePlay=0,this.seekStartStamp=(new Date).getTime()},_onPlayerSeekEnd:function(){this.seekEndStamp=(new Date).getTime(),this._log("SEEK",{drag_from_timestamp:Math.floor(1e3*this.seekStartTime),drag_to_timestamp:Math.floor(1e3*this._seekEndData.toTime)}),this._log("SEEK_END",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.seekEndStamp-this.seekStartStamp}),this.seeking=!1,this._seekEndData=null},_onPlayerLoaded:function(){this.buffer_flag&&this.startTimePlay&&(this.stucking||this.seeking||(this.stuckStartTime=(new Date).getTime(),this.stuckStartTime-this.startTimePlay<=1e3||(this.stucking=!0,this._log("UNDERLOAD",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.stuckStartTime=(new Date).getTime())))},_onPlayerUnderload:function(){if((this.buffer_flag||!this.player._options||!this.player._options.autoplay)&&this.stucking&&!this.seeking){var e=Math.floor(1e3*this.player.getCurrentTime()),t=this.stuckStartTime||(new Date).getTime(),i=Math.floor((new Date).getTime()-t);0t._liveRetryCount?t._reloadAndPlayForM3u8():(t._liveRetryCount=0,t.trigger(c.Player.LiveStreamStop),t._liveErrorHandle=setTimeout(function(){var e={mediaId:"ISLIVE",error_code:r,error_msg:p.get("Error_Play_Text")+"\uff0c"+p.get("Error_Retry_Text")};t.logError(e),t.trigger("error",e)}));else if(t._reloadForVod());else{var a=p.get("Error_Play_Text"),s=!1;if(i<4){if(3==i&&t._firstDecodeError){var l=t.getCurrentTime()+1;return t._loadByUrlInner(t._options.source,l,!0),void(t._firstDecodeError=!1)}a=d.VideoErrorCodeText[i]}else t._eventState==d.SUSPEND?(a=p.get("Error_Load_Abort_Text"),r=d.ErrorCode.RequestDataError):t._eventState==d.LOAD_START?(a=p.get("Error_Network_Text"),0"+(100*e).toFixed()+"%";this._player.trigger(T.Private.Info_Show,{text:i,duration:1e3,align:"lb"})},P.prototype._setInnerVolume=function(e){this.tag.volume=e,this.trigger(T.Private.VolumnChanged,e)},P.prototype.hideProgress=function(){this.trigger(T.Private.HideProgress)},P.prototype.cancelHideProgress=function(){this.trigger(T.Private.CancelHideProgress)},P.prototype.setPlayerSize=function(e,t){this._el.style.width=e,this._el.style.height=t},P.prototype.getBuffered=function(){return this.tag.buffered},P.prototype.setRotate=function(e){this.tag&&(this._rotate=e,this._setTransform(),this.log("ROTATE",{rotation:e}))},P.prototype.getRotate=function(e){return void 0===this._rotate?0:this._rotate},P.prototype.setImage=function(e){this.tag&&(this._image=e,this._setTransform(),this.log("IMAGE",{mirror:"horizon"==e?2:1,text:e}))},P.prototype.getImage=function(){return this._image},P.prototype.cancelImage=function(){this.tag&&(this._image="",this._setTransform(),this.log("IMAGE",{mirror:0}))},P.prototype.setCover=function(e){var t=document.querySelector("#"+this.id()+" .prism-cover");t&&e&&(t.style.backgroundImage="url("+e+")",this._options.cover=e,this.trigger(T.Private.Cover_Show))},P.prototype._setTransform=function(){this._transformProp||(this._transformProp=o.getTransformName(this.tag));var e=" translate(-50%, -50%)";this._rotate&&(e+=" rotate("+this._rotate+"deg)"),this._image&&("vertical"==this._image?e+=" scaleY(-1)":"horizon"==this._image&&(e+=" scaleX(-1)")),this.tag.style[this._transformProp]=e},P.prototype._startPlay=function(){this.tag.paused&&this.tag.play()},P.prototype._initPlayBehavior=function(e,t){if(this._checkSupportVideoType())return!1;if(p.validateSource(t))return void 0===e&&(e=!1),this._created||(this._created=!0,this.trigger(T.Private.Created)),this.loaded||this.trigger(T.Player.Init),this._options.autoplay||this._options._autoplay||this._options.preload||e?(this._options._preload=!0,this._initLoad(t),(this._options.autoplay||this._options._autoplay)&&this._startPlay()):this.trigger(T.Private.Play_Btn_Show),!0;var i={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return i.display_msg=_.get("Error_Invalidate_Source"),this.trigger(T.Player.Error,i),!1},P.prototype._isPreload=function(){return this._options.autoplay||this._options.preload||this._options._preload},P.prototype._initLoad=function(e){this.getMetaData(),e&&(this._isPreload()&&!r.IS_MOBILE?this.trigger(T.Private.H5_Loading_Show):(this.trigger(T.Private.H5_Loading_Hide),this.trigger(T.Private.Play_Btn_Show)),this.tag.setAttribute("src",e),this.loaded=!0)},P.prototype._clearLiveErrorHandle=function(){this._liveErrorHandle&&(clearTimeout(this._liveErrorHandle),this._liveErrorHandle=null)},P.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(T.Player.OnM3u8Retry);var e=this._options,t=e.liveRetryInterval+e.liveRetryStep*this._liveRetryCount;d.sleep(1e3*t),this._liveRetryCount++,this.tag.load(this._options.source),this.tag.play()},P.prototype._checkSupportVideoType=function(){if(!this.tag.canPlayType||!this._options.source||!r.IS_MOBILE)return"";var e=this._options.source,t="";if(0=this._options.playConfig.PreviewTime},P.prototype.isPreview=function(){var e=this._options.playConfig.PreviewTime,t=this._vodDuration||this.tag.duration;return 0'},_getPlayer:function(e){return-1!=navigator.appName.indexOf("Microsoft")?document.getElementById(e):document[e]},_getLowerQualityLevel:function(){var e=this._getVideoUrls();if(!e)return"";var t=e.Urls,i=e.index;return t&&0==t.length||-1==i?"":0u._liveRetryCount){0==u._liveRetryCount&&u.trigger(_.Player.OnM3u8Retry);var l=s.liveRetryInterval+s.liveRetryStep*u._liveRetryCount;u._liveRetryCount++,h.sleep(1e3*l),u._loadByUrlInner(s.source)}else u._liveErrorHandle&&clearTimeout(u._liveErrorHandle),u.trigger(_.Player.LiveStreamStop),u._liveErrorHandle=setTimeout(a,500)}else{if(u._reloadForVod())return;a()}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],72:[function(e,t,i){var r=e("../base/player"),o=e("./flvinjector"),n=r.extend({init:function(e,t){o.inject(this,n,r,t,function(e){}),t._native=!1,r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./flvinjector":71}],73:[function(e,t,i){var c=e("../../lib/io"),d=e("../../config"),p=e("../../lib/constants"),h=e("../../lib/util"),f=e("../../lib/playerutil"),_=(e("../../lib/dom"),e("../../lib/ua")),g=e("../../lang/index"),y=e("../base/event/eventtype");e("../base/player");t.exports.inject=function(e,t,i,r,n,o){var a=r.source,s=r.useHlsPluginForSafari,l=r.useHlsPlugOnMobile;if(n||o||function(e,t,i,r){return!(e._hls||!f.isHls(t)||!(!f.canPlayHls()||f.isSafariUsedHlsPlugin(i)||r&&f.isUsedHlsPluginOnMobile()))}(e,a,s,l)){e._Type=t,e._superType=i,e._superPt=i.prototype,e._disposed=!1,t.prototype._checkHlsReady=function(){if(null==e._hls)throw new Error("please invoke this method after ready event")},e._isHls=!0,e._hls=null,e._isLoadedHls=!1,e._stopLoadAsPaused=!0,t.prototype.play=function(e){this._checkHlsReady(),this._isManualPlay=e||!1;if(this.trigger(y.Private.Cover_Hide),this._options.autoplay||this._options.preload||this._loadSourced||(this._loadSourced=!0,this._options._autoplay=!0,this._hls.loadSource(this._options.source)),this.tag.ended||this._ended)this.replay();else if(this.tag.paused&&(this.tag.play(),this._stopLoadAsPaused)){var t=this.getCurrentTime();this._hls.startLoad(t)}return this},t.prototype.replay=function(){return this._monitor&&this._monitor.replay(),this._hls.startLoad(0),this.tag.play(),this},t.prototype.pause=function(e){return this.tag&&(this._checkHlsReady(),this.tag.pause(),this._stopLoadAsPaused&&this._hls.stopLoad()),this._isManualPause=e||!1,this},t.prototype.stop=function(){return this._checkHlsReady(),this.tag.setAttribute("src",null),this._hls.stopLoad(),this},t.prototype.seek=function(e){this._checkHlsReady();try{this._superPt.seek.call(this,e),this.tag.paused&&this._stopLoadAsPaused&&this._hls.startLoad(e)}catch(e){console.log(e)}return this},t.prototype.getProgramDateTime=function(){if(this._checkHlsReady(),-1==this._hls.currentLevel)return"";var e=this._hls.currentLevel,t=this._hls.levels[e].details;if(t){var i=t.programDateTime;if(console.log("ProgramDateTime="+i),i)return new Date(i).valueOf()}return 0},t.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(y.Player.OnM3u8Retry),this._liveRetryCount++},t.prototype._switchLevel=function(e){this.trigger(y.Player.LevelSwitch);for(var t=this._hls.levels,i=0;il._liveRetryCount){0==l._liveRetryCount&&l.trigger(y.Player.OnM3u8Retry);var s=a.liveRetryInterval+a.liveRetryStep*l._liveRetryCount;l._liveRetryCount++,h.sleep(1e3*s),o&&l._loadByUrlInner(l._options.source,0,!0)}else l._liveErrorHandle&&clearTimeout(l._liveErrorHandle),l.trigger(y.Player.LiveStreamStop),l._liveErrorHandle=setTimeout(n,500)}else{if(l._reloadForVod())return;n()}}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],74:[function(e,t,i){var r=e("../base/player"),o=e("./hlsinjector"),n=r.extend({init:function(e,t){t._native=!1,o.inject(this,n,r,t),r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./hlsinjector":73}],75:[function(e,t,i){var r=e("../../lib/constants"),o=e("../../lib/oo").extend({init:function(e){this.player=e,this.tickhandle=null}});o.prototype.tick=function(e,t){var i=this;this.tickhandle=setTimeout(function(){i.player&&i.player.trigger(r.AuthKeyExpiredEvent),t&&t()},1e3*e)},o.prototype.clearTick=function(e){this.tickhandle&&clearTimeout(this.tickhandle)},t.exports=o},{"../../lib/constants":15,"../../lib/oo":27}],76:[function(e,t,i){var l=e("../../lib/io"),u=(e("../../lib/ua"),e("../../lib/bufferbase64")),c=e("../../lib/constants"),d=e("./signature"),p=e("./util"),h=e("../../lang/index"),f=function(e,r,o){var t=d.randomUUID(),i="https://mts."+e.domainRegion+".aliyuncs.com/?",n={AccessKeyId:e.accessId,Action:"GetLicense",MediaId:e.vid,LicenseUrl:i,data:e.data,SecurityToken:e.stsToken,Format:"JSON",Type:e.encryptionType,Version:"2014-06-18",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",SignatureNonce:t};e.header&&(n.Header=e.header);var a=i+("Signature="+d.AliyunEncodeURI(d.makeChangeSiga(n,e.accessSecret,"POST"))),s=d.makeUTF8sort(n,"=","&");l.post(a,s,function(e){if(e){var t=JSON.parse(e);if(r){var i=t.License;r(i)}}else o&&o(p.createError("MPS\u83b7\u53d6License\u5931\u8d25"))},function(e){if(o){var t={Code:"",Message:h.get("Error_MTS_Fetch_Urls_Text")};try{t=JSON.parse(e)}catch(e){}o({Code:c.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId||""})}})};t.exports.requestLicenseKey=function(e){var l=e;return l._options.vid&&(l.__vid=l._options.vid),function(e,i){var t=l._options,r=l._getDRMEncryptItem();if(r){var o={vid:l.__vid,accessId:t.accId,accessSecret:t.accSecret,stsToken:t.stsToken,domainRegion:t.domainRegion,authInfo:t.authInfo,encryptionType:r.encryptionType};if(r.encryptionType==c.EncryptionType.Widevine)o.data=u.encode(e.message);else if(r.encryptionType==c.EncryptionType.PlayReady){var n=u.unpackPlayReady(e.message);o.data=n.changange,n.header&&(o.header=JSON.stringify(n.header))}console.log(o.data);var a=l.__licenseKeys,s=l.__vid+r.Url;a&&a[s],f(o,function(e){l.__licenseKeys||(l.__licenseKeys={}),10e&&(this.loadByUrl(this._urls[e].Url,this.getCurrentTime()),this._currentPlayIndex=e,this.trigger(y.Private.QualityChange,t||_.get("Quality_Change_Fail_Switch_Text")))},v.prototype._getLowerQualityLevel=function(){if(0==this._urls.length||-1==this._currentPlayIndex)return"";if("asc"==this.options().qualitySort){if(0"+n,r.trigger("error",l),console.log("PrismPlayer Error: "+i+"! error_msg :"+n+";")},t.exports=v},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/cookie":16,"../../lib/event":19,"../../lib/io":24,"../../lib/playerutil":29,"../audio/audioplayer":41,"../base/event/eventtype":43,"../base/player":62,"../drm/drminjector":68,"../flv/flvinjector":71,"../hls/hlsinjector":73,"./authkeyexpiredhandle":75,"./signature":80}],80:[function(e,c,t){var r=e("crypto-js/hmac-sha1"),o=e("crypto-js/enc-base64"),i=e("crypto-js/enc-utf8");c.exports.randomUUID=function(){for(var e=[],t="0123456789abcdef",i=0;i<36;i++)e[i]=t.substr(Math.floor(16*Math.random()),1);return e[14]="4",e[19]=t.substr(3&e[19]|8,1),e[8]=e[13]=e[18]=e[23]="-",e.join("")},c.exports.returnUTCDate=function(){var e=new Date,t=e.getUTCFullYear(),i=e.getUTCMonth(),r=e.getUTCDate(),o=e.getUTCHours(),n=e.getUTCMinutes(),a=e.getUTCSeconds(),s=e.getUTCMilliseconds();return Date.UTC(t,i,r,o,n,a,s)},c.exports.AliyunEncodeURI=function(e){var t=encodeURIComponent(e);return t=(t=(t=t.replace("+","%2B")).replace("*","%2A")).replace("%7E","~")},c.exports.makesort=function(e,t,i){if(!e)throw new Error("PrismPlayer Error: vid should not be null!");var r=[];for(var o in e)r.push(o);var n=r.sort(),a="",s=n.length;for(o=0;o=this.liveTimeRange.end)},r.prototype.switchToLive=function(){var e=that._player._options.recreatePlayer;e&&this._isLiveShift&&(this._player.dispose(),setTimeout(function(){e()},1e3),this._isLiveShift=!1)},r.prototype.getBaseTime=function(){this.liveShiftStartDisplay;return-1==this.seekTime?n.parseTime(this.currentTimeDisplay):n.parseTime(this.liveShiftStartDisplay)+this.seekTime},r.prototype.getSourceUrl=function(e,t){var i=this._originalPlayUrl;return this.availableLiveShiftTime<=e?i:(this._isLiveShift=!0,(e=parseInt(e))<=5&&(e=5),(i=this._switchLiveShiftPlayer(t))&&(i=i.replace("lhs_offset_unix_s_0","z")),i=-1==i.indexOf("?")?i+"?lhs_offset_unix_s_0="+e:i+"&lhs_offset_unix_s_0="+e)},r.prototype._switchLiveShiftPlayer=function(e){var t=this._originalPlayUrl,i=this._player._options.liveShiftSource,r=this._player._options.source;if(a.isHls(r))t=r;else if(a.isFlv(t)&&i&&a.isHls(i)){this._player._flv&&this._player._destroyFlv();var o=this._player._superType,n=this._player._Type;return this._player._options._autoplay=!0,l.inject(this._player,n,o,this._player._options,"",!0),i}return t},r.prototype.getTimeline=function(i,r){if(this._player.trigger(c.Private.LiveShiftQueryCompleted),!this._liveShiftUrl)return p(this,(new Date).valueOf()/1e3),void(i&&i());var o=this;this.queryLiveShift(this._liveShiftUrl,function(e){if(e){var t=e;0==t.retCode?(p(o,t.content.current),i&&i()):r({Code:u.ErrorCode.ServerAPIError,Message:t.retCode+"|"+t.description+"|"+t.content})}else console.log("\u83b7\u53d6\u76f4\u64ad\u65f6\u79fb\u6570\u636e\u5931\u8d25")},function(e){if(r&&e){var t={};if(e){if(-1"+_.get("Retry")+""+_.get("Detection_Text")+"

    code\uff1a

    vid:

    uuid:

    requestId:

    "+_.get("Play_DateTime")+"\uff1a

    ",e},bindEvent:function(){var i=this;i._player.on(a.Private.Error_Show,function(e){var t=null;i._player.getMonitorInfo&&(t=i._player.getMonitorInfo()),i._show(e,t)}),i._player.on(a.Private.Error_Hide,function(){i._hide()});var e=document.querySelector("#"+i.id()+" .prism-button-refresh");if(o.on(e,"click",function(){location.reload(!0)}),n.IS_MOBILE){e=document.querySelector("#"+i.id()+" .prism-detect-info");f.addClass(e,"prism-width90")}var t=document.querySelector("#"+i.id()+" .prism-button-retry");o.on(t,"click",function(){var e=i._player.getCurrentTime(),t=i._player._options.source;i._player._setDefaultCC=!0,i._player._loadByUrlInner(t,e,!0)})},_show:function(e,t){var i=e.paramData,r="",o="";i.mediaId&&(r=i.mediaId);var n=document.querySelector("#"+this.id()+" .prism-button-orange");if(n){if(t&&this._player._options.diagnosisButtonVisible){t.vu?o=decodeURIComponent(t.vu):f.css(n,"display","none");var a="//player.alicdn.com/detection.html?from=h5&vid="+r+"&source="+(o?encodeURIComponent(o):"")+"&uuid="+t.uuid+"&lang="+_.getCurrentLanguage();n&&(n.href=a)}else f.css(n,"display","none");var s=i.display_msg||i.error_msg;document.querySelector("#"+this.id()+" .prism-error-content p").innerHTML=s,document.querySelector("#"+this.id()+" .errorCode .info-content").innerText=i.error_code;var l=document.querySelector("#"+this.id()+" .vid");if(i.mediaId?(f.css(l,"display","block"),document.querySelector("#"+this.id()+" .vid .info-content").innerText=i.mediaId):f.css(l,"display","none"),i.uuid)document.querySelector("#"+this.id()+" .uuid .info-content").innerText=i.uuid;else{var u=document.querySelector("#"+this.id()+" .uuid");f.css(u,"display","none")}if(i.requestId)document.querySelector("#"+this.id()+" .requestId .info-content").innerText=i.requestId;else{var c=document.querySelector("#"+this.id()+" .requestId");f.css(c,"display","none")}document.querySelector("#"+this.id()+" .dateTime .info-content").innerText=h.formatDate(new Date,"yyyy-MM-dd HH:mm:ss");var d=document.querySelector("#"+this.id());f.css(d,"display","block");var p=this;p.playHideHandler&&clearTimeout(p.playHideHandler),p.playHideHandler=setTimeout(function(){p._player.trigger("play_btn_hide")})}},_hide:function(){var e=document.querySelector("#"+this.id());f.css(e,"display","none")},disposeUI:function(){this.playHideHandler&&(clearTimeout(this.playHideHandler),this.playHideHandler=null)}});t.exports=s},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],100:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=(e("../../lib/event"),e("../../lib/ua")),a=e("../../lang/index"),s=e("./util"),l=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-fullscreen-btn")},bindEvent:function(){var e=this;this._player.on(o.Player.RequestFullScreen,function(){n.IS_IOS||e.addClass("fullscreen")}),this._player.on(o.Player.CancelFullScreen,function(){e.removeClass("fullscreen")}),s.registerTooltipEvent.call(this,this.el(),function(){return e._player.fullscreenService.getIsFullScreen()?a.get("ExistFullScreen"):a.get("Fullscreen")}),this.on("click",function(){e._player.fullscreenService.getIsFullScreen()?e._player.fullscreenService.cancelFullScreen():e._player.fullscreenService.requestFullScreen(),e._player.trigger(o.Private.MarkerTextHide)})}});t.exports=l},{"../../lang/index":11,"../../lib/event":19,"../../lib/ua":31,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],101:[function(e,t,i){"use strict";var r=e("../component"),o=e("../../lib/dom"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-hide")},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
    ',e},_loading_hide:function(e){var t=document.querySelector("#"+this.id()+" .prism-loading");t&&(o.removeClass(t,"prism-loading"),o.addClass(t,"prism-hide"))},_loading_show:function(e){var t=document.querySelector("#"+this.id()+" .prism-hide");t&&(o.removeClass(t,"prism-hide"),o.addClass(t,"prism-loading"))},bindEvent:function(){this._player.on(n.Private.H5_Loading_Show,this._loading_show),this._player.on(n.Private.H5_Loading_Hide,this._loading_hide)}});t.exports=a},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],102:[function(e,t,i){var r=e("../component"),o=(e("../../lib/util"),e("../../lib/dom")),n=(e("../../lib/event"),e("../../lib/ua"),e("../../lang/index"),e("../../player/base/event/eventtype")),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-info-display",this.addClass(this.className)},createEl:function(){return r.prototype.createEl.call(this,"p")},bindEvent:function(){var r=this;r._player.on(n.Private.Info_Show,function(e){var t=document.querySelector("#"+r.id()),i=e.paramData;i&&(void 0!==i.text&&i.text?(t.innerHTML=i.text,void 0!==i.duration&&i.duration&&(r.handler&&clearTimeout(r.handler),r.handler=setTimeout(function(){o.css(t,"display","none")},i.duration)),"lb"==i.align?(o.addClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")):"tc"==i.align?(o.addClass(t,"prism-info-top-center"),o.removeClass(t,"prism-info-left-bottom")):(o.removeClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")),i.isBlack?o.addClass(t,"prism-info-black"):o.removeClass(t,"prism-info-black")):t.innerHTML=i,o.css(t,"display","block"))}),r._player.on(n.Private.Info_Hide,function(e){var t=document.querySelector("#"+r.id());o.css(t,"display","none")})},disposeUI:function(){this.handler&&(clearTimeout(this.handler),this.handler=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],103:[function(e,t,i){var r=e("../component"),o=e("./util"),n=(e("../../lib/util"),e("../../lib/dom")),a=e("../../lib/event"),s=e("../../lib/playerUtil"),l=e("../../lang/index"),u=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-live-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="LIVE",s.isLiveShift(this._player._options)&&n.addClass(e,"live-shift-display"),e},bindEvent:function(){var e=document.querySelector("#"+this.id()),t=this;s.isLiveShift(this._player._options)&&(a.on(e,"click",function(){t._player._liveshiftService.switchToLive()}),o.registerTooltipEvent.call(this,this.el(),l.get("SwitchToLive")))}});t.exports=u},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/playerUtil":28,"../../lib/util":33,"../component":94,"./util":121}],104:[function(e,t,i){var r=e("../component"),o=(e("../../lib/dom"),e("../../lib/event"),e("../../player/base/event/eventtype")),n=e("../../player/base/plugin/status"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-animation")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t._player._isManualPlay&&(t.removeClass("prism-pause-animation"),t.addClass("prism-play-animation"),t.removeClass("play-apply-animation"),t.playHandler&&clearTimeout(t.playHandler),t.playHandler=setTimeout(function(){t.addClass("play-apply-animation")}))}),this._player.on(o.Player.Pause,function(){var e=t._player._status;e!=n.ended&&e!=n.error&&t._player._isManualPause&&(t.removeClass("prism-play-animation"),t.addClass("prism-pause-animation"),t.removeClass("play-apply-animation"),t.pauseHandler&&clearTimeout(t.pauseHandler),t.pauseHandler=setTimeout(function(){t.addClass("play-apply-animation")}))})},disposeUI:function(){this.playHandler&&(clearTimeout(this.playHandler),this.playHandler=null),this.pauseHandler&&(clearTimeout(this.pauseHandler),this.pauseHandler=null)}});t.exports=a},{"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../../player/base/plugin/status":66,"../component":94}],105:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=e("./util"),a=e("../../lang/index"),s=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-play-btn")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t.addClass("playing")}),this._player.on(o.Player.Pause,function(){t.removeClass("playing")}),this.on(o.Private.PlayClick,function(){if(t._player.paused()){var e=t._player.getCurrentTime();(t._player.getDuration()<=e||t._player._ended||t._player.exceedPreviewTime(e))&&t._player.seek(0),t._player.play(!0),t.addClass("playing")}else t._player.pause(!0),t.removeClass("playing");t._player.trigger(o.Private.MarkerTextHide)}),n.registerTooltipEvent.call(this,this.el(),function(){return t._player.paused()?a.get("Play"):a.get("Pause")})}});t.exports=s},{"../../lang/index":11,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],106:[function(e,t,i){var r=e("../component"),a=e("../../lib/dom"),n=(e("../../lib/constants"),e("../../lib/event")),s=e("../../lib/ua"),l=e("../../lib/function"),o=e("../../lang/index"),u=e("../../config"),c=e("../../lib/util"),d=e("../../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-progress",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='

    ',e},bindEvent:function(){var t=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.timeNode=document.querySelector("#"+this._player._options.id+" .prism-progress-time");var i=document.querySelector("#"+this.id()),e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),r="https://"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1this._player.getDuration()&&(r=this._player.getDuration()),r},_getDistance:function(e){for(var t=this.el().offsetLeft,i=this.el();i=i.offsetParent;){var r=a.getTranslateX(i);t+=i.offsetLeft+r}var o=e.touches?e.touches[0].pageX:e.pageX;return Math.abs(o-t)},_onMouseClick:function(e){var t=this,i=t._getSeconds(e);if(t._canSeekable(i)){t._player.exceedPreviewTime(i)&&(i=t._player.getPreviewTime()),t._updateCursorPosition(i);this._mouseClickTimeHandle&&clearTimeout(this._mouseClickTimeHandle),this._mouseClickTimeHandle=setTimeout(function(){t._player._seeking=!0,t._player.trigger(d.Private.SeekStart,{fromTime:t._player.getCurrentTime()}),t._player.seek(i),t._player.trigger(d.Private.EndStart,{toTime:i}),t._mouseClickTimeHandle=null,t._inWaitingSeek=!1},300),this._inWaitingSeek=!0}else t._player.trigger(d.Private.Info_Show,{text:o.get("Can_Not_Seekable"),duration:2e3})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._player.getCurrentTime()}),n.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),n.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),n.on(this._player.tag,"mouseup",function(e){t._onPlayerMouseUp(e)}),n.on(this._player.tag,"touchend",function(e){t._onPlayerMouseUp(e)}),n.on(this.controlNode,"mouseup",function(e){t._onControlBarMouseUp(e)}),n.on(this.controlNode,"touchend",function(e){t._onControlBarMouseUp(e)})},_onMouseUp:function(e){this._onMouseUpIntern(e)},_onControlBarMouseUp:function(e){this._onMouseUpIntern(e)},_onPlayerMouseUp:function(e){this._onMouseUpIntern(e)},_offMouseUp:function(){n.off(this.controlNode,"mousemove"),n.off(this.controlNode,"touchmove"),n.off(this._player.tag,"mouseup"),n.off(this._player.tag,"touchend"),n.off(this.controlNode,"mouseup"),n.off(this.controlNode,"touchend")},_onMouseUpIntern:function(e){e.preventDefault(),this._offMouseUp();var t=this.playedNode.offsetWidth/this.el().offsetWidth*this._player.getDuration();this._player.getDuration();isNaN(t)||this._player.seek(t),this._player.trigger(d.Private.EndStart,{toTime:t})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._player.exceedPreviewTime(t)&&(t=this._player.getPreviewTime()),this._player.seek(t),this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._inWaitingSeek||this._player._seeking||this._progressDown||(this._updateProgressBar(this.playedNode,this._player.getCurrentTime()),this._updateCursorPosition(this._player.getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._player.getCurrentTime()}))},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){var i=this._player.getDuration();if(1!=this._player._switchSourcing&&i){var r=t/i+.005;1e?(o.css(r.el(),"right","0px"),o.css(r.el(),"left","auto")):(left-=width/2,left=left<0?0:left,o.css(r.el(),"right","auto"),o.css(r.el(),"left",left+"px"))}},30)}}),r._player.on(a.Private.MarkerTextHide,function(e){r._player.trigger(a.Player.MarkerDotOut),r._player.trigger(a.Private.LifeCycleChanged,{type:a.Player.MarkerDotOut,data:""}),r._thumbnailShowHanlde&&clearTimeout(r._thumbnailShowHanlde),o.css(r.el(),"display","none")}),n.on(r._player.tag,"click",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)}),n.on(r._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)})},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=s},{"../../lib/dom":18,"../../lib/event":19,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],108:[function(e,t,i){var r=e("./selector"),s=e("../../../lib/object"),u=(e("../../../lib/util"),e("../../../lib/cookie")),l=e("../../../lib/dom"),c=(e("../../../lib/event"),e("../../../lib/constants")),d=e("../../../lang/index"),p=e("../../../player/base/event/eventtype"),o=r.extend({init:function(e,t){this.Name=d.get("Quality"),this.Type="quality",this.Tooltip=d.get("Quality_Switch_To"),r.call(this,e,t),this._isMasterLevel=!1},showTip:function(e,t){this._player.trigger(p.Private.Info_Show,{text:e,duration:t,align:"lb"})},bindEvent:function(){this.bindCommonEvent();var s=this;this._player.on(p.Private.QualityChange,function(e){var t=s._player._urls,i=e.paramData;if(i.levelSwitch){var r=i.desc;s._autoSWitchDesc=r,s._updateText(r)}else if(0
    {value}
    ",i=t.replace(/{type}/g,"speed").replace("{value}",c.get("Speed")),r=t.replace(/{type}/g,"cc").replace("{value}",c.get("Subtitle")),o=t.replace(/{type}/g,"audio").replace("{value}",c.get("AudioTrack")),n=t.replace(/{type}/g,"quality").replace("{value}",c.get("Quality"));return e.innerHTML=i+r+o+n,e},bindEvent:function(){document.querySelector("#"+this.id()+" .prism-setting-speed .current-setting").innerText=c.get("Speed_1X_Text");var o=this,t=function(){o._player.trigger(l.Private.SettingListHide),o.isOpened=!1},i=function(e){e&&e.text&&(document.querySelector("#"+o.id()+" .prism-setting-"+e.type+" .current-setting").innerText=e.text)};this._player.on(l.Private.SettingListShow,function(e){o.isOpened=!0;e=e.paramData;i(e),r.css(o.el(),"display","block")}),this._player.on(l.Private.UpdateToSettingList,function(e){e=e.paramData;i(e)}),this._player.on(l.Private.SelectorUpdateList,function(e){e=e.paramData;i(e),o._player.trigger(l.Private.SelectorValueChange,e)}),this._player.on(l.Private.SettingListHide,function(){o.isOpened=!1,r.css(o.el(),"display","none")}),s.on(this.el(),"click",function(e){o._player.trigger(l.Private.SettingListHide);var t=e.srcElement?e.srcElement:e.target;if(t=u.findItemElementForList(t)){var i=t.getAttribute("type");o._player.trigger(l.Private.SelectorShow,{type:i})}});var e=n.IS_MOBILE?"touchleave":"mouseleave";s.on(this.el(),e,function(){t()}),s.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&t()}),s.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&t()}),this._player.on(l.Private.QualityChange,function(e){var t=e.paramData;if(t.levelSwitch){var i=document.querySelector("#"+o.id()+" .prism-setting-quality .current-setting"),r=c.get("Auto");-1
      ',e},bindEvent:function(){this.bindCommonEvent()},bindCommonEvent:function(){var n=this,e=document.querySelector("#"+n.id()+" .selector-list"),t=document.querySelector("#"+n.id()+" .header");this._player.on(u.Private.ChangeURL,function(){n._hasGeneratedList=!1}),s.on(t,"click",function(){n._player.trigger(u.Private.SelectorHide),n._player.trigger(u.Private.SettingListShow,{type:n.Type,text:n._previousSelection?n._previousSelection.text:""})}),s.on(e,"click",function(e){var t=e.srcElement?e.srcElement:e.target,i=t.key,r=t.text;if(void 0!==r){n._previousSelection&&a.removeClass(n._previousSelection,"current"),n._previousSelection=l.findliElementForSelector(t),a.addClass(n._previousSelection,"current"),n.execute&&n.execute(i);var o=n.Tooltip+""+r+"";n._player.trigger(u.Private.Info_Show,{text:o,duration:1e3,align:"lb"})}}),n._player.on(u.Private.SelectorHide,function(){i()}),n._player.on(u.Private.SelectorValueChange,function(e){var t=e.paramData;if(t){if(t.type!=n.Type)return;var i=document.querySelectorAll("#"+n.id()+" .selector-list li");if(i){var r=i.length;0==r&&(n._backupSelector=t.text);for(var o=0;ot.progressWidth?t.left-s:(a=t.left-s/2)<0?0:a,c.css(u.el(),"left",a+"px")}},30)}),u._player.on(n.Private.ThumbnailHide,function(e){u._thumbnailShowHanlde&&clearTimeout(u._thumbnailShowHanlde),c.css(u.el(),"display","none")})},_createSamllThumbnail:function(){},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],119:[function(e,t,i){var r=e("../component"),o=e("../../lib/util"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-time-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='00:00 / 00:00',e},bindEvent:function(){var i=this;this._player.on(n.Video.DurationChange,function(){var e=o.formatTime(i._player.getDisplayDuration());e?(document.querySelector("#"+i.id()+" .time-bound").style.display="inline",document.querySelector("#"+i.id()+" .duration").style.display="inline",document.querySelector("#"+i.id()+" .duration").innerText=e):(document.querySelector("#"+i.id()+" .duration").style.display="none",document.querySelector("#"+i.id()+" .time-bound").style.display="none")}),this._player.on(n.Video.TimeUpdate,function(){var e=i._player.getCurrentTime(),t=o.formatTime(e);document.querySelector("#"+i.id()+" .current-time")&&(t?(document.querySelector("#"+i.id()+" .current-time").style.display="inline",document.querySelector("#"+i.id()+" .current-time").innerText=t):document.querySelector("#"+i.id()+" .current-time").style.display="none")})}});t.exports=a},{"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],120:[function(e,t,i){var r=e("../component"),s=e("../../lib/dom"),o=e("../../player/base/event/eventtype"),n=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-tooltip",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="\u63d0\u793a\u4fe1\u606f",e},bindEvent:function(){var a=this;a._player.on(o.Private.TooltipShow,function(e){var t=document.querySelector("#"+a.id()),i=e.paramData;t.innerText=i.text,s.css(t,"display","block");var r=t.offsetWidth,o=document.querySelector("#"+a._player.id()+" .prism-controlbar");if(o){var n=o.offsetWidth;i.left+r>n?s.css(t,"left",n-r+"px"):s.css(t,"left",i.left-(r-i.width)/2+"px")}}),a._player.on(o.Private.TooltipHide,function(e){var t=document.querySelector("#"+a.id());s.css(t,"display","none")})}});t.exports=n},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],121:[function(e,t,i){var r=e("../../lib/event"),s=e("../../player/base/event/eventtype");t.exports.registerTooltipEvent=function(e,o){var n=this,a=function(){n._controlbarTooltipHandler&&(clearTimeout(n._controlbarTooltipHandler),n._controlbarTooltipHandler=null)};r.on(this.el(),"mouseover",function(e){a(),n._controlbarTooltipHandler=setTimeout(function(){n._player.trigger(s.Private.TooltipHide)},4e3);var t=n.el().offsetLeft,i=n.el().offsetWidth,r=o;"function"==typeof r&&(r=o.call(this)),n._player.trigger(s.Private.TooltipShow,{left:t,width:i,text:r})}),r.on(this.el(),"mouseout",function(){a(),n._player.trigger(s.Private.TooltipHide)})},t.exports.throttle=function(i,r){var o=Date.now();return function(){var e=arguments,t=Date.now();r<=t-o&&(i(e),o=t)}}},{"../../lib/event":19,"../../player/base/event/eventtype":43}],122:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=e("./util"),l=e("../../lang/index"),u=e("./volumecontrol"),c=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume");var i=new u(e,t);e.addChild(i,t)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
      ',e},bindEvent:function(){var i=this;this.icon=document.querySelector("#"+i.id()+" .volume-icon"),s.registerTooltipEvent.call(this,this.el(),function(){return i._player.muted()||0==i._player.getVolume()?l.get("Muted"):l.get("Volume")}),n.on(this.icon,"click",function(e){var t=i.el().offsetLeft;i._player.trigger(a.Private.SettingListHide),i._player.trigger(a.Private.SelectorHide),i._player.trigger(a.Private.VolumeVisibilityChange,t),i._player.trigger(a.Private.MarkerTextHide)});var e=document.querySelector("#"+i.id()+" .long-horizontal"),t=document.querySelector("#"+i.id()+" .short-horizontal");n.on(this.el(),"mouseover",function(){o.removeClass(e,"volume-hover-animation"),setTimeout(function(){o.addClass(e,"volume-hover-animation")}),setTimeout(function(){o.removeClass(e,"volume-hover-animation"),o.addClass(t,"volume-hover-animation"),setTimeout(function(){o.removeClass(t,"volume-hover-animation"),o.addClass(e,"volume-hover-animation")},300)},300)})}});t.exports=c},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../component":94,"./util":121,"./volumecontrol":123}],123:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=(e("./util"),e("../../lang/index"),r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume-control"),this._shown=!1},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
      ',e},bindEvent:function(){var r=this;this.icon=document.querySelector("#"+r._player.id()+" .volume-icon"),this.control=document.querySelector("#"+r.id()),this.volumnValue=document.querySelector("#"+r.id()+" .volume-value"),this.volumnRange=document.querySelector("#"+r.id()+" .volume-range"),this.volumnCursor=document.querySelector("#"+r.id()+" .volume-cursor"),this._player.on(a.Private.VolumeVisibilityChange,function(e){var t=e.paramData;if(!r._shown&&t){var i=r._player.getVolume();r._setVolumnUI(i),o.css(r.control,"display","block"),t&&o.css(r.control,"left",t-5+"px"),r._shown=!0}else o.css(r.control,"display","none"),r._shown=!1}),n.on(this.volumnRange,"click",function(e){var t=o.getPointerPosition(r.volumnRange,e).y;t<0||1>>2]>>>24-n%4*8&255;t[r+n>>>2]|=a<<24-(r+n)%4*8}else for(n=0;n>>2]=i[n>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=c.ceil(t/4)},clone:function(){var e=r.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t,i=[],r=function(t){t=t;var i=987654321,r=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return e/=4294967296,(e+=.5)*(.5>>2]>>>24-o%4*8&255;r.push((n>>>4).toString(16)),r.push((15&n).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new d.init(i,t/2)}},a=o.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,r=[],o=0;o>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(n))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new d.init(i,t)}},s=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(a.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return a.parse(unescape(encodeURIComponent(e)))}},l=t.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new d.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=s.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,n=r/(4*o),a=(n=e?c.ceil(n):c.max((0|n)-this._minBufferSize,0))*o,s=c.min(4*a,r);if(a){for(var l=0;l>>2]>>>24-n%4*8&255)<<16|(t[n+1>>>2]>>>24-(n+1)%4*8&255)<<8|t[n+2>>>2]>>>24-(n+2)%4*8&255,s=0;s<4&&n+.75*s>>6*(3-s)&63));var l=r.charAt(64);if(l)for(;o.length%4;)o.push(l);return o.join("")},parse:function(e){var t=e.length,i=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-n%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return l.create(r,o)}(e,t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},e.enc.Base64},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],127:[function(e,t,i){var r,o;r=this,o=function(e){return e.enc.Utf8},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],128:[function(e,t,i){var r,o;r=this,o=function(e){return e.HmacSHA1},"object"==typeof i?t.exports=i=o(e("./core"),e("./sha1"),e("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)},{"./core":125,"./hmac":129,"./sha1":130}],129:[function(e,t,i){var r,o;r=this,o=function(e){var t,i,u;i=(t=e).lib.Base,u=t.enc.Utf8,t.algo.HMAC=i.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=u.parse(t));var i=e.blockSize,r=4*i;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),n=this._iKey=t.clone(),a=o.words,s=n.words,l=0;l>>31}var c=(r<<5|r>>>27)+s+d[l];c+=l<20?1518500249+(o&n|~o&a):l<40?1859775393+(o^n^a):l<60?(o&n|o&a|n&a)-1894007588:(o^n^a)-899497514,s=a,a=n,n=o<<30|o>>>2,o=r,r=c}i[0]=i[0]+r|0,i[1]=i[1]+o|0,i[2]=i[2]+n|0,i[3]=i[3]+a|0,i[4]=i[4]+s|0},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(64+r>>>9<<4)]=Math.floor(i/4294967296),t[15+(64+r>>>9<<4)]=i,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),e.SHA1},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}]},{},[6]); \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/analytics.js b/re/geekbang/routes/detail/source/static/analytics.js new file mode 100644 index 0000000..c85ccc1 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/analytics.js @@ -0,0 +1,74 @@ +(function(){var k=this||self,l=function(a,b){a=a.split(".");var c=k;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b};var n=function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},p=function(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1};var q=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;var r=window,u=document,v=function(a,b){u.addEventListener?u.addEventListener(a,b,!1):u.attachEvent&&u.attachEvent("on"+a,b)};var w={},x=function(){w.TAGGING=w.TAGGING||[];w.TAGGING[1]=!0};var y=/:[0-9]+$/,A=function(a,b){b&&(b=String(b).toLowerCase());if("protocol"===b||"port"===b)a.protocol=z(a.protocol)||z(r.location.protocol);"port"===b?a.port=String(Number(a.hostname?a.port:r.location.port)||("http"==a.protocol?80:"https"==a.protocol?443:"")):"host"===b&&(a.hostname=(a.hostname||r.location.hostname).replace(y,"").toLowerCase());var c=z(a.protocol);b&&(b=String(b).toLowerCase());switch(b){case "url_no_fragment":b="";a&&a.href&&(b=a.href.indexOf("#"),b=0>b?a.href:a.href.substr(0, +b));a=b;break;case "protocol":a=c;break;case "host":a=a.hostname.replace(y,"").toLowerCase();break;case "port":a=String(Number(a.port)||("http"==c?80:"https"==c?443:""));break;case "path":a.pathname||a.hostname||x();a="/"==a.pathname.substr(0,1)?a.pathname:"/"+a.pathname;a=a.split("/");a:if(b=a[a.length-1],c=[],Array.prototype.indexOf)b=c.indexOf(b),b="number"==typeof b?b:-1;else{for(var d=0;d>2;g=(g&3)<<4|f>>4;f=(f&15)<<2|h>>6;h&=63;e||(h=64,d||(f=64));b.push(D[m],D[g],D[f],D[h])}return b.join("")},H=function(a){function b(m){for(;d>4);64!=f&&(c+=String.fromCharCode(g<<4&240|f>>2),64!=h&&(c+=String.fromCharCode(f<<6&192|h)))}};var I;function J(a,b){if(!a||b===u.location.hostname)return!1;for(var c=0;cc;c++){for(var d=c,e=0;8>e;e++)d=d&1?d>>>1^3988292384:d>>>1;b[c]=d}}I=b;b=4294967295;for(c=0;c>>8^I[(b^a.charCodeAt(c))&255];return((b^-1)>>>0).toString(36)},ba=function(a){return function(b){var c=B(r.location.href),d=c.search.replace("?","");a:{var e=d.split("&");for(var g=0;gc;++c){var d=P.exec(a);if(d){var e=d;break a}a=decodeURIComponent(a)}e=void 0}if(e&&"1"===e[1]){var g=e[2],f=e[3];a:{for(e=0;e>21:b}return b};var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, +d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} +function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} +function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; +a.set(Ia,ua,!0)}function Hc(a){qc().expId&&a.set(Nc,qc().expId);qc().expVar&&a.set(Oc,qc().expVar);var b=P(a,Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&a.set(m,d,!0)}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";}function yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set("&did",b.join(","),!0)} +function vb(a){if(!a.get(Na))throw"abort";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee};Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:Number(a)};Ya.prototype.Z=function(a){return(a=this.get(a))&&ea(a)?a:ua}; +Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)};var ue=new ee,ve=[],bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=ue.get(a);if(!b)for(var c=0;c=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c=aa(b),d=0a.length)J(12);else{for(var d=[],e=0;e=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;d=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||"").toLowerCase());a.data.set(ce,be("gclid",!0));a.data.set(ie,be("gclsrc",!0));a.data.set(fe, +Math.round((new Date).getTime()/1E3));if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;carguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(me[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={})}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener("visibilitychange",d,!1):e.detachEvent&&e.detachEvent("onvisibilitychange",d)}};L(M,"visibilitychange",c)}};var te=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=te.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||"t0",this.K=b[2]||"",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A="create"==this.C,this.i="require"==this.C,this.g="provide"==this.C,this.ba="remove"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort"; +if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.c)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.c)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47}; +var u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);a=N.j(a);if(p.test(b)){J(52);if(!a)return!0;c=d||{};d={id:b,B:c.dataLayer||"dataLayer",ia:!!a.get("anonymizeIp"),sync:e,G:!1};a.get(">m")==b&&(d.G=!0);var g=String(a.get("name"));"t0"!=g&&(d.target=g);G(String(a.get("trackingId")))||(d.clientId= +String(a.get(Q)),d.ka=Number(a.get(n)),c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,";").match(c))?c.sort().join("").substring(1):void 0,d.la=c,d.qa=E(a.b.get(kb)||"","gclid"));c=d.B;g=(new Date).getTime();O[c]=O[c]||[];g={"gtm.start":g};e||(g.event="gtm.js");O[c].push(g);c=t(d)}!c&&Zd.hasOwnProperty(b)?(J(39),c=b+".js"):J(43);if(c){if(a){var ca=a.get(oe);qa(ca)||(ca=void 0)}c&&0<=c.indexOf("/")||(c=(ca?ca+"/34":bd(!1)+"/plugins/ua/")+c);ca=ae(c);a=ca.protocol;d=M.location.protocol;if(("https:"== +a||a==d||("http:"!=a?0:"http:"==d))&&B(ca)){if(ca=ca.url)a=(a=M.querySelector&&M.querySelector("script[nonce]")||null)?a.nonce||a.getAttribute&&a.getAttribute("nonce")||"":"",e?(e="",a&&Nd.test(a)&&(e=' nonce="'+a+'"'),f.test(ca)&&M.write("\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| +[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; +d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf(bd(!0)+ +"/analytics")){b=!0;break a}}b=!1}b&&(Ba=!0)}(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);C("displayfeatures",fd);C("adfeatures",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b",components:{App:l.a}})},218:function(e,t,n){"use strict";t.a={defaultAvatar:n(226),timeServer:"//time.geekbang.org",androidDownloadUrl:"https://time.geekbang.org/download/android/latest",iosDownloadUrl:"https://itunes.apple.com/cn/app/id1280245865",appstoreUrl:"http://a.app.qq.com/o/simple.jsp?pkgname=org.geekbang.geekTime&utm_source=website&utm_medium=geektime&utm_campaign=download&utm_content=app",errorCode:{"-10086":"请求出错,请检查网络","-1002":"系统内部错误","-1003":"未知错误","-2021":"专栏已下架,不能订阅","-2022":"该专栏不存在","-2023":"您已订阅该专栏,不能重复订阅","-2001":"余额账户异常","-2102":"余额不足","-2120":"订单创建失败","-2121":"支付失败","-2901":"无效的反馈内容","-2902":"反馈内容请不要超过 500 字","-3007":"验证码错误","-3003":"请重新登录","-3004":"验证码为空","-3005":"请更新验证码","-3006":"验证码错误","-3101":"阅码格式错误","-3102":"阅码无效","-3103":"阅码信息获取失败","-3105":"阅码与专栏不匹配","-3351":"已获取过云栖优惠码","-3352":"优惠码已被领完","-3363":"金额大于1元才能提现","-3364":"金额超出提现范围,请联系客服","-3365":"现金余额不足,请联系客服","-3366":"提现失败,请重试","-3369":"单日提现次数仅限1次","-3370":"提现频率过高,请稍后重试"},questions:[{id:14,q:"如何联系在线客服?",a:"微信搜索“极客时间”,关注我们的微信服务号,在对话框输入您的问题即可召唤在线客服。",bold:!1},{id:6,q:"为什么收不到短信验证码?",a:"在手机信号稳定且无欠费的状态下,仍收不到短信验证码,常见的有两种情况:
      1.手机号被短信服务商过滤
      您可能曾将此类短信列为垃圾短信,因此短信服务商发送该类短信时会将您的手机号过滤保证您不再收到。
      解决方法:您可以在我的-设置-帮助反馈中向我们反馈,并留下您的手机号。
      2.您可能设置了短信拦截
      您可能在手机短信中设置了比较严苛的拦截规则,导致无法接受某些号码发出的短信。
      解决方法:可尝试暂时关闭拦截功能。"},{id:13,q:"为什么我的礼券无法使用?",a:"如果您获得的礼券为“不与其他优惠叠加使用”,则这张礼券不能在拼团优惠和限时优惠中使用,优惠期结束之后您可以使用这张礼券。
      一个订单只能使用一张礼券,不可以叠加使用多张礼券。",bold:!1},{id:1,q:"订阅的专栏和视频课程有效期是多久?",a:"专栏和视频课程订阅之后可以永久阅读。"},{id:3,q:"如何开具发票?",a:"微信关注“极客时间”微信服务号,在微信中点击服务号底部的「更多服务」,进入「发票开具」可以在线申请开票。
      发票为增值税普通电子发票,明细为:研发和技术服务+商品名称,不支持开具其他税收分类的发票。"},{id:5,q:"如何订阅专栏更新通知?",a:"进入App后,依次进入「我的」--「设置」--「推送设置」内进行设置。"},{id:7,q:"支付过程中遇到错误提示怎么办?",a:"当您多次支付不成功,可以通过以下方式解决:
      1. 切换网络之后重新尝试支付;
      2. 更换支付方式之后重新尝试支付;
      3. 在浏览器中打开商品购买页面,重新尝试支付;
      4. 如果以上方式无法解决您的问题,请通过右上角的「反馈问题」向我们反馈您的问题,或通过极客时间微信公众号联系人工客服。"},{id:10,q:"充值余额时支付成功但余额没有增加,如何处理?",a:"充值到账会有短暂延迟,如果您充值的余额长时间未到账,可以尝试清除应用后台并重新打开应用。如果您在充值后24小时内或收到苹果支付的账单后,充值金额仍未到账,请您及时联系微信公众号在线客服。"},{id:8,q:"订阅的专栏、视频课程、每日一课会员等能否退款或更换?",a:"专栏、视频课程以及每日一课会员等服务均属于虚拟产品,订阅之后均不支持退款和更换,请您理解。"},{id:16,q:"好友扫描我的分享海报购买,为什么没有获得返现?",a:"温馨提示:只有通过分享有赏的指定渠道并且规范方法购买,才可以得到返现。
      分享:
      1. 极客时间APP:
      分享者操作方法:极客时间APP-我的-课程-分享有赏-六种方法任选-成功分享
      被分享者操作方法:别人的分享-打开(扫描二维码、打开链接等)-订阅
      2. 极客时间公众号:
      分享者操作方法:微信-极客时间公众号-我的-获取专属海报-分享
      被分享者操作方法:海报-扫描二维码-订阅"},{id:21,q:"如何修改绑定手机号、登录密码以及其他账号问题?",a:"您可以在极客时间App内,凭原登录密码或验证码修改绑定手机号和新的登录密码,更换绑定手机号要求新账号为未注册极客时间的账号,为了保证您的账号安全,暂时不支持账号注销、合并等操作,请您理解。
      如果上述答案仍未解决您的问题,请您通过极客时间微信服务号联系在线客服,会有客服帮您解决问题。"},{id:29,q:"投诉侵权、盗版资源或其他上述未提到的问题",a:"您可以通过极客时间微信服务号联系在线客服,或通过邮件(service@geekbang.org)联系我们,我们在收到您的反馈之后会尽快进行处理,感谢您的理解。您可以通过极客时间微信服务号联系在线客服,或通过邮件(service@geekbang.org)联系我们,我们在收到您的反馈之后会尽快进行处理,感谢您的理解。"}]}},223:function(e,t,n){"use strict";var o=n(43),i=n.n(o),a=n(146),r=n(102),s=n.n(r);t.a={getLoginUser:function(){return new i.a(function(e,t){a.a.get("//account.geekbang.org/serv/v1/user/auth",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})},getImgVerify:function(){return new i.a(function(e,t){s.a.post("//time.geekbang.org/serv/v1/geekcode/verify").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},checkCode:function(e,t){return new i.a(function(n,o){a.a.post("//time.geekbang.org/serv/v1/geekcode",{geekcode:e,verifycode:t}).then(function(e){200===e.status&&0===e.data.code?n(e.data.data):o(e.data)}).catch(function(e){o(e)})})},subscribeByGeekcode:function(e,t){return new i.a(function(n,o){a.a.post("//time.geekbang.org/serv/v1/column/subscribe",{cid:e,channel:"geekcode",extra:{code:t}}).then(function(e){200===e.status&&0===e.data.code?n(e.data.data):o(e.data)}).catch(function(e){o(e)})})},subscribeDlVipByGeekcode:function(e){return new i.a(function(t,n){a.a.post("//cashier.geekbang.org/serv/v1/order/store",e).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):n(e.data)}).catch(function(e){n(e)})})},getYunqiTicketStatus:function(e,t){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/yunqi/code/show",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getYunqiTicketCode:function(e,t){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/yunqi/code/get",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUcode:function(){return new i.a(function(e,t){a.a.post("//account.geekbang.org/account/user/ucode").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUinfoByUcode:function(e){return new i.a(function(t,n){a.a.post("//account.geekbang.org/account/ucode",{ucode:e}).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):n(e.data)}).catch(function(e){n(e)})})},getInvitedList:function(){return new i.a(function(e,t){a.a.post("//account.geekbang.org/account/user/invited").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUserData:function(){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/my/data").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})},charge:function(e){var t={code:e.code,sku:e.sku,is_ios:e.is_ios,amount:e.amount};return new i.a(function(e,n){a.a.post("//time.geekbang.org/serv/v1/geekcode/charge",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):n(t)}).catch(function(e){n(e)})})},getLoginData:function(){return new i.a(function(e,t){s.a.post("//time.geekbang.org/serv/v2/login_member/data",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})}}},226:function(e,t){e.exports="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QN5aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MCA3OS4xNjA0NTEsIDIwMTcvMDUvMDYtMDE6MDg6MjEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YWE3YmZhMDItMzBhMC00MDg3LTg3MmYtOGMwMjMxNjNhZWRjIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI2MTlEODM3NTgzMTExRTk5NDY4Qjk3QUFCNDFBN0QzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI2MTlEODM2NTgzMTExRTk5NDY4Qjk3QUFCNDFBN0QzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTYyRTNCMDNBREI4MTFFOEFFNTJDODlGREQ1OTUzMDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTYyRTNCMDRBREI4MTFFOEFFNTJDODlGREQ1OTUzMDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCADuAO4DAREAAhEBAxEB/8QAfAABAAICAwEBAAAAAAAAAAAAAAYHBAgBAwUCCgEBAAAAAAAAAAAAAAAAAAAAABAAAgIBAgIECwQJBQAAAAAAAAECAwQRBSEGMWESF0FRgVITk+MUVJTUIkJiB5EyhBVFhbXFNnFygqJTEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwD9vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGHmbhg7fD0mbl4+LF69l32wrctPBCMmpTfUk2BG7ue+Wqm4rNsua6XTi5DWvVKyutPyaoDmnnrlq19l506W9NPTYuSk2/xQqnGPlaQElxM7Dzq/S4WVj5VfhlRbC1Rfil2G3GXU9GBlAAAAAAAAAAAAAAAAAAAAAAAAAAAA4bUU5SajGKblJtJJJattvgkkBVHMnP8AJSswtilHSLcLdxcVLV9DWHCWsdF/6ST1+6uiQFW35F+VbK/Jutvum9Z23WSssk/xTm3JgdIADvx8nIxLY34t9uPdD9W2myVc1412otPR6cV0MC1uWufvTTrwd8cITlpCrcYpQhKT4KOXBaQrbf346R8aXFgWmnrxXFPimvCAAAAAAAAAAAAAAAAAAAAAAAAAAFUfmBzHKLexYVjjrGMtxsg+LU12oYia6E4tSn400vOQFTAAAAAAAuDkDmSWRFbHm2OVtUHLb7ZvWU6oLWeK2+LdMV2ofgTX3UBaAAAAAAAAAAAAAAAAAAAAAAAABi52XDAwsvNs4wxce6+S10cvRQlNQX4ptaLrYGr+RfblX3ZN8nO7Itsutk/vWWSc5Pq4sDpAAAAAABlYWXbgZeNmUPS3Guruhx0TcJJ9mWnTGa4NeFMDaDGvrysejJqeteRTVfW/HC2EbI/9ZAdwAAAAAAAAAAAAAAAAAAAAAACJc8WurlncOzwdrxateqeVT2v0wTXlA18AAAAAAAAAbFcnXSu5a2mcnq402U/8cfJuoivJGtASYAAAAAAAAAAAAAAAAAAAAAABFOdqXdyzuSjxlWse7yVZVMp/or1YGvQAAAAAAAADY3lGiWPy3tNclo5Yzv8AF9nJusyYvyxtQEjAAAAAAAAAAAAAAAAAAAAAAAdGVj15eNkYty1qyaLaLF4exbCVctOvSXADWDNxLsDLycLIj2bsa6dM/E3B6KUfHCa0afhTAxQAAAAAAZ224Nu55+LgUp+kyboV6pa9iDetljXm1VpyfUgNnqaoUU1UVLs101wqrj4oVxUILyRQHYAAAAAAAAAAAAAAAAAAAAAAAAVrz5yzPNh++cGtzyaK1HNpgtZX0QX2bopcZW0R4NdLhp5ujCmQAAAAAAXbyLyzPbaXumdW4ZuVX2aKprSWNjS0bck+Mbr9FqumMeHS2gLDAAAAAAAAAAAAAAAAAAAAAAAAAACuOZOQ6c+dmbtDrxcubc7cWX2cbIm+LlW0n7vbLw8OxJ+bxbCpM7bM/bLXVn4l+NPVpekg1CenhrsWtdseuLaAwQAHo7ftO47raqsDEuyZapSlCOlVevhtul2aql/uaAt3lrkWjbJ15u5yry86Gk6qYrXFxpripfaSd90X0NpRi+hNpSAsIAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4sqrug67a4W1y/WhZCM4P/AFjJNMDw7eVuXrm5T2jCTfT6Kr0C49VLrQHNPK/L1ElKvaMJtcU7alfo/Gle7FqB7cK4VQVdcIVwitIwhFQhFeJRikkgPsAAAAAAAAAAAAAAAAAAAAAAAAAY2XmYuBRPKzL68aiv9ay2XZjq+iKXTKcvBFJt+BARGf5g8uRk4q3LsSeinDFkoy60pyhPR9aQHz3h8u+dm/K+0Ad4fLvnZvyvtAHeHy752b8r7QB3h8u+dm/K+0Ad4fLvnZvyvtAHeHy752b8r7QB3h8u+dm/K+0Ad4fLvnZvyvtAMjG575cybY1PKtxnJpRnk0Trq1fglZHtxrXXLRLxgTCMozjGUZKUZJSjKLTjKLWqlFrVNNPgwOQAAAAAAAAAAAAAAAAAAAAUZ+YW43ZG9ywHOSx9vqpUa9fsu7IphkTta8MnCyMepLrYECAAAAAAAAAAAF0/lxuN2Tt+Zg2zlOO320uhyerhTlK1qpPzYWUSa8Xa06NALHAAAAAAAAAAAAAAAAAAAABr3zx/lO6fsX9OxAImAAAAAAAAAAALY/K/+Ofyz+4AWwAAAAAAAAAAAAAAAAAAAADXvnj/ACndP2L+nYgETAAAAAAAAAAAFsflf/HP5Z/cALYAAAAAAAAAAAAAAAAAAAABVvMfJG7bxvOZuONkbdCjI937Eb7cmNq9DiUUS7Ua8S2C1nU2tJPgB4fdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAJvyby1ncvfvH323Et989z9F7rZdPs+7+9dvt+loo019OtNNfD0ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Z"},262:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98);t.default={name:"gkui-button",components:{},props:{color:o.a.string.def(""),size:o.a.string.def(""),disabled:o.a.bool.def(!1),useLock:o.a.bool.def(!1),label:o.a.string.def(""),lockLabel:o.a.string.def(""),stop:o.a.bool.def(!0)},data:function(){return{locked:!1}},computed:{_disabled:function(){return this.disabled||this.locked}},created:function(){},methods:{handleClick:function(e){var t=this;this.stop&&e.stopPropagation(),this._disabled||(this.useLock&&(this.locked=!0),this.$emit("click",{clear:function(){t.locked=!1}}))}}}},263:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98),i=n(106),a=n(545),r=n.n(a);t.default={name:"gkui-confirm",components:{Dialog:r.a},props:{title:o.a.string,message:o.a.string,type:o.a.string.def("message"),value:o.a.bool.def(!1),center:o.a.bool.def(!1),verticalCenter:o.a.bool.def(!1),name:o.a.string,width:o.a.number.def(412),top:o.a.oneOfType([Number,String]).def(100),okText:o.a.string.def("确定"),cancelText:o.a.string.def("取消"),okBtnColor:o.a.string.def("blue"),cancelBtnColor:o.a.string.def("transparent"),loading:o.a.bool.def(!1)},methods:{handleOk:function(e){var t=e.clear,n=e.close;return"message"===this.type?(n&&n(),!0):(i.a.event.$emit("closeMessage",{ok:!0,clear:t,close:n}),!0)},handleCancel:function(e){var t=e.close;return i.a.event.$emit("closeMessage",{ok:!1,close:t}),!0}}}},264:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(43),i=n.n(o),a=n(287),r=n.n(a),s=n(284),c=n.n(s),l=n(44),u=n.n(l),A=n(98),d=n(257),p=n(161);t.default={name:"gkui-dialog",components:{Button:d.a,Loading:p.a},props:{value:A.a.bool.def(!1),name:A.a.string,transitionName:A.a.string.def("modal-zoom-in"),title:A.a.string,dialogClass:A.a.string,mask:A.a.bool.def(!0),maskClickClose:A.a.bool.def(!0),center:A.a.bool.def(!1),hasClose:A.a.bool.def(!0),verticalCenter:A.a.bool.def(!1),width:A.a.number.def(520),top:A.a.oneOfType([Number,String]).def(100),hasCancel:A.a.bool.def(!0),handleOk:{type:Function},handleCancel:{type:Function},okText:A.a.string.def("确定"),cancelText:A.a.string.def("取消"),okBtnColor:A.a.string.def("blue"),cancelBtnColor:A.a.string.def("transparent"),loading:A.a.bool.def(!1)},data:function(){return{showHead:!0,visible:!1,contentVisible:!1}},computed:{mainStyle:function(){var e={},t=parseInt(this.width),n={width:t<=100?t+"%":t+"px",top:"string"==typeof this.top?this.top:this.top+"px"},o=this.styles?this.styles:{};return u()(e,n,o),e},wrapClass:function(){return["gkui-dialog",{"gkui-dialog-can-close":this.maskClickClose&&this.mask,"gkui-dialog-center":this.center,"gkui-dialog-vertical-center":this.verticalCenter},this.dialogClass]}},watch:{value:function(e){var t=this;this.mask&&(e?this.$modal.showLayer():this.$modal.hideLayer()),e?(this.visible=e,this.$nextTick(function(){t.contentVisible=e})):(this.contentVisible=e,setTimeout(function(){t.visible=e},300))}},created:function(){},mounted:function(){var e=this;this.visible=this.value,this.$nextTick(function(){e.contentVisible=e.value});var t=!0;void 0!==this.$slots.header||this.title||(t=!1),this.showHead=t},methods:{close:function(){this.$emit("input",!1),this.$emit("cancel")},ok:function(e){var t=this,n=e.clear;return c()(r.a.mark(function e(){return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.loading){e.next=6;break}if(!t.handleOk){e.next=4;break}return e.next=4,t.handleOk({clear:n,close:t.destroy});case 4:return t.$emit("ok",{clear:n}),e.abrupt("return");case 6:if(!t.handleOk){e.next=10;break}return e.next=9,t.handleOk({clear:n,close:t.destroy});case 9:return e.abrupt("return");case 10:t.$emit("input",!1),t.$emit("ok",{clear:n});case 12:case"end":return e.stop()}},e,t)}))()},cancel:function(){var e=this;return c()(r.a.mark(function t(){return r.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.handleCancel){t.next=5;break}return t.next=3,e.destroy();case 3:return e.handleCancel({close:e.close}),t.abrupt("return");case 5:e.close();case 6:case"end":return t.stop()}},t,e)}))()},handleMask:function(){this.mask&&this.maskClickClose&&this.close()},destroy:function(){var e=this;this.contentVisible=!1,setTimeout(function(){e.visible=!1,e.hideLayer().then(function(){return e.$modal.hide(e.name),!0})},100)},hideLayer:function(){var e=this;return new i.a(function(t,n){e.$modal.hideLayer(),t()})}}}},265:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(258);t.default={name:"gk-loading",components:{},props:{visible:{type:Boolean,default:!0},label:{type:String,default:""},size:{type:String,default:"40px"},color:{type:String,default:"white"}},data:function(){return{}},computed:{colorClass:function(){return o.a.getColor(this.color)||""},styles:function(){return{width:this.size,height:this.size}}},created:function(){},methods:{}}},266:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98),i=n(161),a=n(80);t.default={name:"gku-message",components:{Loading:i.a},props:{type:o.a.string.def("info"),name:o.a.string,message:o.a.string,duration:o.a.number.def(1.5),onClose:o.a.func,closable:o.a.bool.def(!1),prefix:o.a.string,customClose:o.a.string,loadingColor:o.a.string.def("blue"),loadingSize:o.a.string.def("14px"),transitionName:o.a.string.def("fade-up")},data:function(){return{timer:null}},computed:{customCloseBtn:function(){return this.customClose||""},typeCls:function(){return a.a.getType(this.type)||""}},mounted:function(){this.startTimer()},methods:{startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout(function(){e.close()},1e3*this.duration))},clearTimer:function(){clearTimeout(this.timer)},close:function(){this.$emit("close",this.name),this.onClose()}}}},267:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(99),i=n.n(o),a=n(547),r=n.n(a),s=n(80);t.default={name:"gku-message-box",components:{MessageItem:r.a},props:{},computed:{},data:function(){return{messageList:[],styles:{top:"24px"},transitionName:"fade-up"}},created:function(){s.a.register(this)},mounted:function(){},methods:{add:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.styles=i()({},this.styles,n.styles),this.transitionName=n.transitionName,this.$nextTick(function(){t.messageList.push(e)})},close:function(e){this.messageList=this.messageList.filter(function(t){return t.name!==e}),s.a.remove(e)},clear:function(){this.messageList=[]},handleEnter:function(e){e.style.height=e.scrollHeight+"px"},handleLeave:function(e){1!==document.getElementsByClassName("gkui-message-content-wrap").length&&(e.style.height=0)}}}},268:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(44),i=n.n(o),a=n(106),r=n(107);t.default={name:"gkui-modal-controller",components:{},props:{},data:function(){return{isShowLayer:!1,modals:[],zIndex:0}},created:function(){this.$modal._setModalContainer(this)},beforeMount:function(){var e=this;a.a.event.$on("toggle",function(t,n,o){n?e._eventToggleOpen(t,o):e._eventToggleClose(t)})},mounted:function(){},destroyed:function(){},methods:{showLayer:function(){this.isShowLayer=!0,document.body.classList.add("gkui--modal-block-scroll")},hideLayer:function(){this.isShowLayer=!1,document.body.classList.remove("gkui--modal-block-scroll")},add:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],a=r.a.guid();n.zIndex=++this.zIndex,o.auto=void 0===o.auto||o.auto,o.layer=void 0===o.layer||o.layer;var s=this.modals.find(function(e){return o.name===e.name});s?s.params=i()({},n):this.modals.push({id:a,name:o.name,component:e,params:n,layer:o.layer}),this.$nextTick(function(){o.auto&&t.$modal.show(o.name,n)})},_eventToggleOpen:function(e,t){var n=this.modals.find(function(t){return t.name===e});n.visible=!0,n.params=i()({},n.params,t),n.layer&&this.showLayer()},_eventToggleClose:function(e){var t=!1,n=void 0,o=void 0;for(var i in this.modals)this.modals[i].name===e?(n=i,o=this.modals[i]):this.modals[i].visible&&this.modals[i].layer&&(t=!0);void 0!==n&&this.modals.splice(n,1),!t&&o.layer&&this.hideLayer()}}}},269:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(65),i=n(102),a=n.n(i),r=n(551),s=n.n(r);t.default={name:"app",components:{GlobalLayer:s.a},created:function(){window.location.hash&&this.$router.push(window.location.hash.replace("#","")),this.hack(),this.addAppEventListener(),this.entryUrl=window.location.href,document.domain="geekbang.org",this.timer=null,this.initWxConfig(),this.initEventDispatcher(),document.addEventListener("keydown",function(e){(e.ctrlKey||e.metaKey)&&65===e.keyCode&&(e.returnValue=!1,e.preventDefault())})},methods:{getHtmlFirstNodeHTML:function(e){if(!e)return"";if(!e.match(/^<\w+.+<\/\w+>/))return"

      "+e+"

      ";var t=document.createElement("div");return t.innerHTML=e,t.children[0].outerHTML},initWxConfig:function(){if(o.a.isInWeixin()){var e=o.a.isIOS()?this.entryUrl:window.location.href;a.a.get("https://misc.geekbang.org/wxmisc/wxshare/sign?url="+encodeURIComponent(e)+"&mpid=geekbang").then(function(e){var t=e.data;if(0===t.code&&t.data)try{window.wx.config({debug:!1,appId:t.data.appId,timestamp:String(t.data.timestamp),nonceStr:t.data.nonceStr,signature:t.data.signature,jsApiList:["getLocation","onMenuShareTimeline","onMenuShareAppMessage","chooseWXPay","onMenuShareQQ","onMenuShareWeibo","onMenuShareQZone","hideAllNonBaseMenuItem","showAllNonBaseMenuItem","showMenuItems","hideMenuItems"]})}catch(e){console.log(e)}},function(e){})}},initEventDispatcher:function(){o.a.isInApp()&&o.a.isInAndroidApp()&&(window.geekTimeNotify=function(e){if("string"==typeof e)try{e=JSON.parse(e);var t=new CustomEvent("notify",{detail:e});document.dispatchEvent(t)}catch(e){}else{var n=new CustomEvent("notify",{detail:e});document.dispatchEvent(n)}})},addAppEventListener:function(){var e=this;document.addEventListener("notify",function(t){try{var n=t.detail.data;switch(t.detail.type){case"gtInfoUpdate":o.a.getTicket()!==n.ticket&&window.location.reload();break;case"sub:paybox:show":e.$ga.sendPv("/fake/column/paybox");break;case"sub:paybox:success":e.$ga.sendEvent("订阅成功","专栏或视频课订阅成功",n.column_title)}}catch(e){console.log(e)}})},hack:function(){if(o.a.isInApp()){var e=navigator.userAgent;(o.a.isInAndroidApp()&&e.match(/[\d.]+$/)&&o.a.version(e.match(/[\d.]+$/)[0])>=o.a.version("1.0.6")||!o.a.isInAndroidApp()&&e.match(/[\d.]+$/)&&o.a.version(e.match(/[\d.]+$/)[0])>=o.a.version("1.1.1"))&&localStorage.removeItem("gtInfo")}}},watch:{$route:{handler:function(e,t){var n=this;clearTimeout(this.timer),document.title="极客时间",this.timer=setTimeout(function(){n.initWxConfig()},300)}}}}},270:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={computed:{data:function(){return this.$store.state.globalLayers}}}},271:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={data:function(){return{title:"",content:"",btnCancel:"",btnOk:"",closed:!1,visible:!1,cancelCallback:null,okCallback:null}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},okHandler:function(){this.close(),this.okCallback()},cancelHandler:function(){this.close(),this.cancelCallback()},close:function(){this.closed=!0}},watch:{closed:function(e,t){e&&(console.log("closed: ",e),this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}}}},272:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={data:function(){return{size:"40px",visible:!1,message:"",showLoading:!1}},computed:{styles:function(){return{width:this.size,height:this.size}}},mounted:function(){}}},273:function(e,t,n){"use strict";var o=n(39),i=n(552),a=n.n(i),r=o.a.extend(a.a),s=void 0,c=[],l=1,u=function(e){e=e||{};var t="message_"+l++;return s=new r({data:e}),c.length>0&&(c[0].close(),c.splice(0,1)),s.id=t,s.vm=s.$mount(),document.body.appendChild(s.vm.$el),s.vm.visible=!0,s.dom=s.vm.$el,s.dom.style.zIndex=100,c.push(s),s.vm};t.a=u},274:function(e,t,n){"use strict";function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"加载中...";u.message=e,u.showLoading=!0,setTimeout(function(){u.visible=!0},0),document.body.appendChild(u.$el)}function i(){u.visible=!1,setTimeout(function(){u.showLoading=!1},200)}function a(){r.a.prototype.$loading={open:o,close:i}}var r=n(39),s=n(553),c=n.n(s),l=r.a.extend(c.a),u=new l({el:document.createElement("div")});t.a=a},275:function(e,t,n){"use strict";var o=n(65);t.a={formatDate:function(e,t){return t?o.a.formatDate(e).replace(/\-/g,t):o.a.formatDate(e)},formatTime:function(e){return o.a.formateTime(e)},formatContent:function(e){return o.a.formatContent(e)},formatCash:function(e){return o.a.formatCash(e)},columnPrice:function(e){return o.a.formatPrice(e)},formatSize:function(e){return o.a.formatSize(e)},formatDuration:function(e){return o.a.formatDuration(e)},filterTime:function(e){return e>86400?Math.floor(e/86400)+"天":e>3600?Math.floor(e/3600)+"小时":e>60?Math.floor(e/60)+"分":e+"秒"},filterColumnUnit:function(e){var t=String(e);return t=/\d/.test(t)?t.match(/\d+/)[0]:null},cutStr:function(e,t){var n=o.a.subString(e,t);return n!==e?n+"...":n},resizeImg:function(e,t,n){return isNaN(t)||isNaN(n)?e:e&&"string"==typeof e&&e.match(/^https*:\/\/static.*\.geekbang\.org\//i)?e+"?x-oss-process=image/resize,m_fill,h_"+n+",w_"+t:e},trim:function(e){return"string"==typeof e?e.trim():""},escapeHtml:function(e){var t={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"'};return e.replace(/&(lt|gt|nbsp|amp|quot);/gi,function(e,n){return t[n]})},formatDateReadable:function(e,t){return o.a.formatDateReadable(e,t)}}},276:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var o=function(e){return n.e(45).then(function(){var t=[n(574)];e.apply(null,t)}.bind(this)).catch(n.oe)},i=function(e){return n.e(46).then(function(){var t=[n(575)];e.apply(null,t)}.bind(this)).catch(n.oe)},a=[{path:"/columninfo/:id(\\d+)",name:"ColumnInfo",component:o},{path:"/agreement",name:"Agreement",component:o},{path:"/legal",name:"Legal",component:o},{path:"/permit",name:"Permit",component:o},{path:"/questions",name:"Questions",component:o},{path:"/question/:id",name:"Question",component:o},{path:"/rules/coupon",name:"CouponRules",component:o},{path:"/rules/share",name:"ShareRules",component:o},{path:"/rules/groupon",name:"GrouponRules",component:o},{path:"/rules/invite",name:"InviteRules",component:o},{path:"/special/:id",name:"Special",component:o},{path:"/list/special/:id",name:"ListSpecial",component:o},{path:"/list/videos/:id",name:"ListVideos",component:o},{path:"/list/videos/v2/:id",name:"ListVideosV2",component:o},{path:"/guide/recharge",name:"RechargeGuide",component:o},{path:"/agreement/partner",name:"PartnerAgreement",component:o},{path:"/activity/newusergift",name:"PullNew",component:o},{path:"/activity/get-newusergift",name:"PullNewSuccess",component:o},{path:"/activity/invite",name:"Invite",component:o},{path:"/activity/getinvite",name:"GetInvite",component:o},{path:"/activity/inviterecord",name:"InviteRecord",component:o},{path:"/activity/sale-poster",name:"SalePosterList",component:o},{path:"/activity/sale-poster/:cid",name:"SalePosterDetail",component:o},{path:"/activity/share-poster",name:"SharePosterList",component:o},{path:"/activity/share-withdraw",name:"ShareWithdraw",component:o},{path:"/activity/share-poster-new",name:"SharePosterListNew",component:o},{path:"/activity/share-ranking-list",name:"ShareWithdrawNew",component:o},{path:"/activity/column-ranking-list/:id",name:"ColumnRankingList",component:o},{path:"/readhub/share-poster",name:"ReadhubPoster",component:o},{path:"/readhub/hot/:id",name:"ReadhubHotDetail",component:o},{path:"/readhub/dev/:id",name:"ReadhubDevDetail",component:o},{path:"/poster/article",name:"ContentPoster",component:o},{path:"/bought/all",name:"BoughtAll",component:o},{path:"/app/course-module/:id(\\d+)",name:"AppCourseModule",component:o},{path:"/gift/card",name:"RechargeCard",component:i}]},277:function(e,t,n){"use strict";var o=n(99),i=n.n(o),a=n(220),r=n.n(a),s=n(39),c=n(565),l=n(163),u=n(65),A=n(276),d=function(e){return n.e(9).then(function(){var t=[n(577)];e.apply(null,t)}.bind(this)).catch(n.oe)},p=function(e){return n.e(12).then(function(){var t=[n(615)];e.apply(null,t)}.bind(this)).catch(n.oe)},h=function(e){return n.e(19).then(function(){var t=[n(616)];e.apply(null,t)}.bind(this)).catch(n.oe)},m=function(e){return n.e(10).then(function(){var t=[n(619)];e.apply(null,t)}.bind(this)).catch(n.oe)},f=function(e){return n.e(32).then(function(){var t=[n(597)];e.apply(null,t)}.bind(this)).catch(n.oe)},g=function(e){return n.e(2).then(function(){var t=[n(596)];e.apply(null,t)}.bind(this)).catch(n.oe)},v=function(e){return n.e(1).then(function(){var t=[n(598)];e.apply(null,t)}.bind(this)).catch(n.oe)},y=function(e){return n.e(8).then(function(){var t=[n(599)];e.apply(null,t)}.bind(this)).catch(n.oe)},b=function(e){return n.e(44).then(function(){var t=[n(580)];e.apply(null,t)}.bind(this)).catch(n.oe)},w=function(e){return n.e(18).then(function(){var t=[n(579)];e.apply(null,t)}.bind(this)).catch(n.oe)},k=function(e){return n.e(17).then(function(){var t=[n(587)];e.apply(null,t)}.bind(this)).catch(n.oe)},C=function(e){return n.e(14).then(function(){var t=[n(588)];e.apply(null,t)}.bind(this)).catch(n.oe)},x=function(e){return n.e(0).then(function(){var t=[n(608)];e.apply(null,t)}.bind(this)).catch(n.oe)},I=function(e){return n.e(4).then(function(){var t=[n(609)];e.apply(null,t)}.bind(this)).catch(n.oe)},_=function(e){return n.e(35).then(function(){var t=[n(590)];e.apply(null,t)}.bind(this)).catch(n.oe)},M=function(e){return n.e(39).then(function(){var t=[n(591)];e.apply(null,t)}.bind(this)).catch(n.oe)},L=function(e){return n.e(41).then(function(){var t=[n(583)];e.apply(null,t)}.bind(this)).catch(n.oe)},T=function(e){return n.e(40).then(function(){var t=[n(585)];e.apply(null,t)}.bind(this)).catch(n.oe)},S=function(e){return n.e(26).then(function(){var t=[n(584)];e.apply(null,t)}.bind(this)).catch(n.oe)},D=function(e){return n.e(29).then(function(){var t=[n(618)];e.apply(null,t)}.bind(this)).catch(n.oe)},E=function(e){return n.e(15).then(function(){var t=[n(601)];e.apply(null,t)}.bind(this)).catch(n.oe)},N=function(e){return n.e(23).then(function(){var t=[n(602)];e.apply(null,t)}.bind(this)).catch(n.oe)},P=function(e){return n.e(20).then(function(){var t=[n(605)];e.apply(null,t)}.bind(this)).catch(n.oe)},O=function(e){return n.e(24).then(function(){var t=[n(603)];e.apply(null,t)}.bind(this)).catch(n.oe)},B=function(e){return n.e(37).then(function(){var t=[n(589)];e.apply(null,t)}.bind(this)).catch(n.oe)},R=function(e){return n.e(31).then(function(){var t=[n(614)];e.apply(null,t)}.bind(this)).catch(n.oe)},j=function(e){return n.e(36).then(function(){var t=[n(600)];e.apply(null,t)}.bind(this)).catch(n.oe)},U=function(e){return n.e(28).then(function(){var t=[n(604)];e.apply(null,t)}.bind(this)).catch(n.oe)},V=function(e){return n.e(30).then(function(){var t=[n(586)];e.apply(null,t)}.bind(this)).catch(n.oe)},Q=function(e){return n.e(34).then(function(){var t=[n(613)];e.apply(null,t)}.bind(this)).catch(n.oe)},W=function(e){return n.e(11).then(function(){var t=[n(611)];e.apply(null,t)}.bind(this)).catch(n.oe)},J=function(e){return n.e(7).then(function(){var t=[n(612)];e.apply(null,t)}.bind(this)).catch(n.oe)},q=function(e){return n.e(21).then(function(){var t=[n(607)];e.apply(null,t)}.bind(this)).catch(n.oe)},z=function(e){return n.e(25).then(function(){var t=[n(617)];e.apply(null,t)}.bind(this)).catch(n.oe)},H=function(e){return n.e(43).then(function(){var t=[n(573)];e.apply(null,t)}.bind(this)).catch(n.oe)},$=function(e){return n.e(27).then(function(){var t=[n(578)];e.apply(null,t)}.bind(this)).catch(n.oe)},F=function(e){return n.e(33).then(function(){var t=[n(576)];e.apply(null,t)}.bind(this)).catch(n.oe)},G=function(e){return n.e(5).then(function(){var t=[n(581)];e.apply(null,t)}.bind(this)).catch(n.oe)},Y=function(e){return n.e(3).then(function(){var t=[n(582)];e.apply(null,t)}.bind(this)).catch(n.oe)},X=function(e){return n.e(38).then(function(){var t=[n(610)];e.apply(null,t)}.bind(this)).catch(n.oe)},Z=function(e){return n.e(13).then(function(){var t=[n(592)];e.apply(null,t)}.bind(this)).catch(n.oe)},K=function(e){return n.e(6).then(function(){var t=[n(593)];e.apply(null,t)}.bind(this)).catch(n.oe)},ee=function(e){return n.e(42).then(function(){var t=[n(594)];e.apply(null,t)}.bind(this)).catch(n.oe)},te=function(e){return n.e(16).then(function(){var t=[n(595)];e.apply(null,t)}.bind(this)).catch(n.oe)},ne=function(e){return n.e(22).then(function(){var t=[n(606)];e.apply(null,t)}.bind(this)).catch(n.oe)};s.a.use(c.a);var oe=new c.a({mode:"history",routes:[{path:"/",name:"Index",component:p,meta:{notScrollTop:!0}},{path:"/library",name:"Index",component:h},{path:"/download",name:"Download",component:d},{path:"/search",name:"Search",component:m},{path:"/column/intro",name:"ColumnIntroForPreview",component:v,meta:{appLink:"views/column/intro.js"}},{path:"/column/:id(\\d+)",name:"ColumnArticleList",component:f,meta:{appLink:"views/column/intro.js",urlscheme:"time://columnIntro?id={{id}}"}},{path:"/column/article",name:"ColumnArticle",component:g,meta:{appLink:"views/column/article.js"}},{path:"/column/article/:id(\\d+)",name:"ColumnArticleDetail",component:g,meta:{appLink:"views/column/article.js",notScrollTop:!0}},{path:"/column/article/comment",name:"Comment",component:j},{path:"/article",name:"ArticlePreview",component:g,meta:{appLink:"views/column/article.js"}},{path:"/article/:id(\\d+)",name:"Article",component:g,meta:{appLink:"views/column/article.js",urlscheme:"time://article?id={{id}}"}},{path:"/column/article/:id(\\w+)/share",name:"Share",component:y},{path:"/column/intro/:id(\\d+)",name:"ColumnIntroDetail",component:v,meta:{appLink:"views/column/intro.js",urlscheme:"time://columnIntro?id={{id}}"}},{path:"/recharge/login",name:"RechargeLogin",component:b},{path:"/recharge/confirm",name:"RechargeConfirm",component:w},{path:"/activity/recharge-2019",name:"RechargeFor2019",component:k},{path:"/activity/recharge/expand",name:"RechargeExpand",component:C},{path:"/list/groupon/:id",name:"ListGroupon",component:B},{path:"/activity/dl-generalize",name:"DailyLessonGeneralize",component:V},{path:"/course/intro/:id",name:"CourseIntro",component:x,meta:{appLink:"views/courses/course_intro.js",urlscheme:"time://courseIntro?id={{id}}"}},{path:"/course/detail/:id-:vid",name:"CourseDetail",component:I,meta:{appLink:"views/course/detail.js",urlscheme:"time://courseDetail?id={{id}}&aid={{vid}}"}},{path:"/dailylesson/readlist/:id",name:"DailyLessonReadList",component:Q,meta:{urlscheme:"time://dailyExplore"}},{path:"/dailylesson/collection/:id",name:"DailyLessonCollection",component:W,meta:{urlscheme:"time://dailyCollection?collectionId={{id}}"}},{path:"/dailylesson/detail/:sku",name:"DailyLessonDetail",component:J,meta:{urlscheme:"time://dailySingle?sku={{sku}}"}},{path:"/cash/account",name:"CashAccount",component:_},{path:"/cash/detail",name:"CashDetail",component:M},{path:"/wxlite/groupbuy/:id(\\d+)",name:"WxliteGroupBuy",component:L},{path:"/wxlite/paid/:code",name:"WxliteGroupBuyPaid",component:T},{path:"/wxlite/course/aliyunvideo/:cid-:aid",name:"WxliteCourseAliyunVideo",component:X},{path:"/note/all",name:"NoteAll",component:D},{path:"/comment/all",name:"CommentAll",component:E},{path:"/comment/detail/:id(\\d+)",name:"CommentDetail",component:N},{path:"/comment/nice/:id(\\d+)",name:"NiceComment",component:P},{path:"/comment/nice-module/:id(\\d+)",name:"NiceCommentModule",component:ne},{path:"/discuss/detail/:id(\\d+)",name:"DiscussDetail",component:O},{path:"/discuss/write",name:"DiscussWrite",component:U},{path:"/activity/wxlite/groupbuylist",name:"WxliteGroupBuyList",component:S},{path:"/reply",name:"Reply",component:q},{path:"/mygroupbuy",name:"mygroupbuy",component:$},{path:"/convert",name:"convert",component:F},{path:"/training/:id",name:"college",component:G},{path:"/college/algorithm/:id",name:"CollegeAlgorithm",component:Y},{path:"/groupon/:code",name:"Groupon",component:R},{path:"/learning/record",name:"LearningRecord",component:z},{path:"/channel/home",name:"Channel",component:Z},{path:"/channel/materialdetail/:id",name:"materialdetail",component:K},{path:"/channel/rule",name:"channelRule",component:ee},{path:"/channel/myearnings",name:"myearnings",component:te},{path:"/billfeedback",name:"billfeedback",component:H},{path:"*",redirect:"/"}].concat(r()(A.a)),scrollBehavior:function(e,t,n){if(!e.meta.notScrollTop)return n||{x:0,y:0}}}),ie=!1,ae=new RegExp(/^gk_|^utm_|code/),re=function(e,t,n){var o=!0;for(var i in t.query)ae.test(i)&&e.query[i]!==t.query[i]&&(o=!1);if(!ie&&document.referrer&&document.referrer.search(/\?/)>0&&u.a.checkGeekbangDomain(document.referrer)){document.referrer.split("?")[1].split("&").forEach(function(n,o){var i=n.split("=");ae.test(i[0])&&(t.query[i[0]]=e.query[i[0]]=decodeURIComponent(i[1]))}),n({path:e.path,query:e.query})}else if(o||!ie)n({});else{for(var a in t.query)ae.test(a)&&(e.query[a]=t.query[a]);n({path:e.path,query:e.query})}};oe.beforeEach(function(e,t,n){window._MEIQIA&&window._MEIQIA("hidePanel"),re(e,t,function(e){ie?n(i()({},e,{replace:!0})):(ie=!0,l.a.dispatch("getLoginUser").then(function(){n(i()({},e,{replace:!0}))}).catch(function(t){n(i()({},e,{replace:!0})),console.log(t)}))})}),t.a=oe},278:function(e,t,n){"use strict";var o=n(43),i=n.n(o),a=n(223),r=n(164),s={getLoginUser:function(e){var t=e.commit;return new i.a(function(e,n){a.a.getLoginUser().then(function(n){t(r.a,n),e()}).catch(function(e){n(),console.log("get login error: ",e)})})},logout:function(e){(0,e.commit)(r.a,null)},addGlobalLayer:function(e,t){var n=e.commit,o=e.state;n(r.b,[].concat(o.globalLayers,[t]))},removeGlobalLayer:function(e,t){var n=e.commit,o=e.state,i=o.globalLayers.filter(function(e){return e.name!==t});n(r.b,i)},clearGlobalLayers:function(e){(0,e.commit)(r.b,[])}};t.a=s},279:function(e,t,n){"use strict";var o,i=n(224),a=n.n(i),r=n(99),s=n.n(r),c=n(164),l=(o={},a()(o,c.a,function(e,t){e.loginUser=s()({},e.loginUser,t)}),a()(o,c.c,function(e){e.loginUser=null}),a()(o,c.b,function(e,t){e.globalLayers=t}),o);t.a=l},280:function(e,t,n){"use strict";var o={loginUser:null,globalLayers:[]};t.a=o},281:function(e,t,n){"use strict";t.a={sendPv:function(e){"time.geekbang.org"===window.location.host&&(window.ga&&window.ga("send","pageview",e),window._hmt&&window._hmt.push(["_trackPageview",e]))},sendEvent:function(e,t,n){console.log(e,t,n),"time.geekbang.org"===window.location.host&&(window.ga&&window.ga("send","event",e,t,n),window._hmt&&window._hmt.push(["_trackEvent",e,t,n]))}}},523:function(e,t){},524:function(e,t){e.exports={button:"_3onsJjul_0"}},525:function(e,t){e.exports={main:"_2sRsF5RP_0"}},526:function(e,t){},527:function(e,t){},528:function(e,t){},529:function(e,t){},530:function(e,t){},543:function(e,t,n){function o(e){this.$style=n(524)}var i=n(22)(n(262),n(560),o,null,null);e.exports=i.exports},544:function(e,t,n){var o=n(22)(n(263),n(556),null,null,null);e.exports=o.exports},545:function(e,t,n){var o=n(22)(n(264),n(558),null,null,null);e.exports=o.exports},546:function(e,t,n){var o=n(22)(n(265),n(554),null,null,null);e.exports=o.exports},547:function(e,t,n){var o=n(22)(n(266),n(555),null,null,null);e.exports=o.exports},548:function(e,t,n){function o(e){n(529)}var i=n(22)(n(267),n(562),o,"data-v-99cd8b4a",null);e.exports=i.exports},549:function(e,t,n){function o(e){n(527)}var i=n(22)(n(268),n(559),o,null,null);e.exports=i.exports},550:function(e,t,n){function o(e){n(528)}var i=n(22)(n(269),n(561),o,null,null);e.exports=i.exports},551:function(e,t,n){function o(e){this.$style=n(525)}var i=n(22)(n(270),n(563),o,null,null);e.exports=i.exports},552:function(e,t,n){function o(e){n(526)}var i=n(22)(n(271),n(557),o,null,null);e.exports=i.exports},553:function(e,t,n){function o(e){n(530)}var i=n(22)(n(272),n(564),o,null,null);e.exports=i.exports},554:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"fade"}},[e.visible?n("div",{staticClass:"gk-loading"},[n("svg",{staticClass:"gk-loading-spinner",style:e.styles,attrs:{viewBox:"0 0 66 66",xmlns:"http://www.w3.org/2000/svg"}},[n("circle",{staticClass:"gk-loading-path",class:[e.colorClass],attrs:{fill:"none","stroke-width":"6","stroke-linecap":"round",cx:"33",cy:"33",r:"30"}})]),e._v(" "),e.label?n("p",{staticClass:"label"},[e._v(e._s(e.label))]):e._e()]):e._e()])},staticRenderFns:[]}},555:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"gkui-message-content-wrap"},[n("div",{class:["gkui-message-content",e.typeCls]},[e.prefix?n("span",{staticClass:"gkui-message-prefix",domProps:{innerHTML:e._s(e.prefix)}}):e._e(),e._v(" "),"loading"===e.type?n("Loading",{staticClass:"gkui-message-loading-prefix",attrs:{color:e.loadingColor,size:e.loadingSize}}):e._e(),e._v(" "),n("span",{staticClass:"gkui-message-text"},[e._v(e._s(e.message))]),e._v(" "),e.closable?n("span",{staticClass:"gkui-message-close",on:{click:e.close}},[n("i",{class:{defaultClose:!e.customClose},domProps:{innerHTML:e._s(e.customCloseBtn)}})]):e._e()],1)])},staticRenderFns:[]}},556:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{name:e.name,dialogClass:"gkui-dialog-confirm",value:e.value,hasClose:!1,maskClickClose:!1,hasCancel:"confirm"===e.type,handleOk:e.handleOk,handleCancel:e.handleCancel,center:e.center,verticalCenter:e.verticalCenter,okText:e.okText,cancelText:e.cancelText,okBtnColor:e.okBtnColor,cancelBtnColor:e.cancelBtnColor,width:e.width,top:e.top,loading:e.loading}},[n("div",{attrs:{slot:"header"},domProps:{innerHTML:e._s(e.title)},slot:"header"}),e._v(" "),n("div",{staticClass:"gkui-confirm-content"},[e._v("\n "+e._s(e.message)+"\n ")])])},staticRenderFns:[]}},557:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"confirm-box-wrapper"},[n("div",{staticClass:"mask"}),e._v(" "),n("div",{staticClass:"confirm-box"},[n("h2",{staticClass:"head"},[e._v(e._s(e.title))]),e._v(" "),n("div",{staticClass:"body",domProps:{innerHTML:e._s(e.content)}}),e._v(" "),n("div",{staticClass:"foot"},[e.btnCancel?n("a",{staticClass:"button button-cancel",on:{click:e.cancelHandler}},[e._v(e._s(e.btnCancel))]):e._e(),e._v(" "),e.btnOk?n("a",{staticClass:"button button-primary",on:{click:e.okHandler}},[e._v(e._s(e.btnOk))]):e._e()])])])])},staticRenderFns:[]}},558:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.visible?n("div",{class:e.wrapClass},[n("div",{staticClass:"gkui-dialog-mask",on:{click:e.handleMask}}),e._v(" "),n("transition",{attrs:{name:e.transitionName}},[e.contentVisible?n("div",{staticClass:"gkui-dialog-container",style:e.mainStyle},[e.hasClose?n("span",{staticClass:"gkui-dialog-close",on:{click:e.close}}):e._e(),e._v(" "),e.showHead?n("div",{staticClass:"gkui-dialog-header"},[e._t("header",[e._v("\n "+e._s(e.title)+"\n ")])],2):e._e(),e._v(" "),n("div",{staticClass:"gkui-dialog-body"},[e._t("default")],2),e._v(" "),n("div",{staticClass:"gkui-dialog-footer"},[e._t("footer",[e.hasCancel?n("Button",{attrs:{size:"normal",color:e.cancelBtnColor},on:{click:e.cancel}},[e._v(e._s(e.cancelText))]):e._e(),e._v(" "),n("Button",{attrs:{size:"normal",color:e.okBtnColor,useLock:!0},on:{click:e.ok},scopedSlots:e._u([{key:"status",fn:function(t){var o=t.locked;return[e.loading&&o?n("Loading",{staticClass:"gkui-dialog-loading",attrs:{color:"white",size:"14px"}}):e._e()]}}],null,!1,1531177023)},[e._v("\n "+e._s(e.okText)+"\n ")])])],2)]):e._e()])],1):e._e()},staticRenderFns:[]}},559:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"gkui-modal-controller"}},[n("transition",{attrs:{name:"fade"}},[e.isShowLayer?n("div",{staticClass:"gkui-modal-layer"}):e._e()]),e._v(" "),e._l(e.modals,function(t){return[n(t.component,e._b({key:t.params.id,tag:"component",style:{zIndex:9e4+t.params.zIndex}},"component",t.params,!1))]})],2)},staticRenderFns:[]}},560:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:[e.$style.button],attrs:{"gk-button":"","gkbtn-color":e.color,"gkbtn-size":e.size,disabled:e._disabled},on:{click:e.handleClick}},[e._t("status",null,{disabled:e.disabled,locked:e.locked}),e._v(" "),e._t("default",[e._v("\n "+e._s(e.locked?e.lockLabel||e.label:e.label)+"\n ")]),e._v(" "),e._t("end",null,{disabled:e.disabled,locked:e.locked})],2)},staticRenderFns:[]}},561:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("router-view")],1),e._v(" "),n("GlobalLayer")],1)},staticRenderFns:[]}},562:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{style:e.styles,attrs:{id:"gkui-message-list"}},[n("transition-group",{attrs:{name:e.transitionName},on:{enter:e.handleEnter,leave:e.handleLeave}},[e._l(e.messageList,function(t){return[n("MessageItem",{key:t.name,attrs:{type:t.type,duration:t.duration,closable:t.closable,name:t.name,message:t.message,onClose:t.onClose,prefix:t.prefix,customClose:t.customClose,loadingColor:t.loadingColor,loadingSize:t.loadingSize,transitionName:e.transitionName},on:{close:e.close}})]})],2)],1)},staticRenderFns:[]}},563:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.$style.main},e._l(e.data,function(e,t){return n(e,{key:t,tag:"component"})}),1)},staticRenderFns:[]}},564:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.showLoading?n("div",{staticClass:"_loading_wrap_"},[n("transition",{attrs:{name:"fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"_loading_div_class_"},[n("svg",{staticClass:"spinner spinner--circle",style:e.styles,attrs:{viewBox:"0 0 66 66",xmlns:"http://www.w3.org/2000/svg"}},[n("circle",{staticClass:"path",attrs:{fill:"none","stroke-width":"6","stroke-linecap":"round",cx:"33",cy:"33",r:"30"}})]),e._v(" "),n("p",{staticClass:"message"},[e._v(e._s(e.message))])])])],1):e._e()},staticRenderFns:[]}},570:function(e,t,n){n(217),e.exports=n(216)},65:function(e,t,n){"use strict";var o=n(147),i=n.n(o),a=n(221),r=n.n(a),s=n(282),c=n.n(s),l=n(218),u=n(39),A=n(106),d=n(259),p=n(227);u.a.use(A.a),u.a.use(d.a),t.a={formatDate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-",n=new Date(10===String(e).length?1e3*e:e),o=n.getMonth()+1,i=n.getDate();return[n.getFullYear(),(o>9?"":"0")+o,(i>9?"":"0")+i].join(t)},formateTime:function(e){var t=new Date(10===String(e).length?1e3*e:e);return[(t.getHours()>9?"":"0")+t.getHours(),(t.getMinutes()>9?"":"0")+t.getMinutes(),(t.getSeconds()>9?"":"0")+t.getSeconds()].join(":")},formatPrice:function(e){return e||(e=0),e/100},formatCash:function(e){return e||(e=0),(e/100).toFixed(2)},formatSize:function(e){var t=Number(e);return t<1024?t:t<1048576?(t/1024).toFixed(2)+"K":t<1073741824?(t/1024/1024).toFixed(2)+"M":(t/1024/1024/1024).toFixed(2)+"G"},version:function(e){if(!e)return 0;e=e.toString();for(var t=e.split("."),n=0;n=812&&screen.width>=375},eqAndroidVersion:function(e){var t=navigator.userAgent;return this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])===this.version(e)},ltAndroidVersion:function(e){var t=navigator.userAgent;return this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])=this.version(e)},ltIOSVersion:function(e){var t=navigator.userAgent;return this.isInApp()&&!this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])=this.version(e)},formatDuration:function(e){var t=Number(e);return t<60?t+"秒":t<3600?Math.floor(t/60)+"分"+(t%60==0?"":t%60+"秒"):Math.floor(t/60/60)+"小时"+this.formatDuration(t%3600)},getQueryString:function(e,t){var n=new RegExp("(^|&)"+t+"=([^&]*)(&|$)","i"),o=e.split("?").length>1?e.split("?")[1]:"",i=o.match(n);return null!==i?decodeURIComponent(i[2]):""},queryPack:function(e){var t="";for(var n in e)t+=n+"="+encodeURIComponent(e[n])+"&";return t.substr(0,t.length-1)},parseAudio:function(e){return e?'\n \n ':""},imgToBase64:function(e,t){var n=document.createElement("img");n.src=e,n.crossOrigin="Anonymous",document.body.appendChild(n),n.onload=function(){var e=window.getComputedStyle(n,null),o=document.createElement("canvas");o.width=e.getPropertyValue("width").split("px")[0],o.height=e.getPropertyValue("height").split("px")[0],o.getContext("2d").drawImage(n,0,0);var i=o.toDataURL("image/png",1);document.body.removeChild(n),t(i)},n.src=e,(n.complete||void 0===n.complete)&&(n.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",n.src=e)},b64toBlob:function(e,t,n){t=t||"",n=n||512;for(var o=atob(e),i=[],a=0;a(.+?)<\/code>/g,function(e,n){return t.push(n),"$"+(t.length-1)+""}),e=e.replace(/([\u4E00-\u9FA5])([a-z0-9@#&;=_\[\$\%\^\*\-\+\(\/])/gi,"$1 $2"),e=e.replace(/([a-z0-9#!~&;=_\]\,\.\:\?\$\%\^\*\-\+\)\/])([\u4E00-\u9FA5])/gi,"$1 $2"),e=e.replace(/\$(\d+)<\/code>/g,function(e,n){var o=parseInt(n,10);return c()(o)?""+t[o]+"":e})},utcToLocal:function(e){var t=new Date;return(10===String(e).length?1e3*e:1*e)-6e4*t.getTimezoneOffset()},formatDateReadable:function(e,t){var n=10===String(e).length?1e3*e:1*e;t&&(n=this.utcToLocal(n));var o=(new Date).valueOf(),i=o-n;if(i<6e4)return Math.floor(i/1e3)+" 秒前";if(i<36e5)return Math.floor(i/6e4)+" 分钟前";if(i<864e5)return Math.floor(i/36e5)+" 小时前";var a=new Date(n),r=a.getMonth()+1,s=a.getDate(),c=(r>9?"":"0")+r+"月"+(s>9?"":"0")+s+"日";return a.getFullYear()!==(new Date).getFullYear()&&(c=a.getFullYear()+"年"+c),c},canTimeUniversalJump:function(){return this.gteqAndroidVersion("1.1.3")||this.gteqIOSVersion("1.1.12")},jumpColumnIntro:function(e){var t="time://columnIntro?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column/intro.js",data:{id:e}}):location.href="/column/intro/"+e},jumpColumnDetail:function(e){var t="time://columnDetail?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column_detail.js",data:{id:e}}):location.href="/column/"+e},jumpCourseIntro:function(e){var t="time://courseIntro?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/courses/course_intro.js",data:{id:e}}):location.href="/course/intro/"+e},jumpCourseDetail:function(e,t){var n="time://courseDetail?id="+e+"&aid="+t;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",n,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:n}):this.isInApp()?this.notifyApp({type:"jump",path:"views/courses/course_detail.js",data:{id:e,aid:t}}):location.href="/course/detail/"+e+"-"+t},jumpArticle:function(e){var t="time://article?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column/article.js",data:{id:e}}):location.href="/column/article/"+e},parseTimeLink:function(e){if(e.match(/^time:\/\//)){var t=e.match(/([\w]+)\?(.+)/);if(t.length<3)return;var n={};if(t[2].split("&").forEach(function(e){var t=e.match(/([\w]+)=(.+)/);3===t.length&&(n[t[1]]=decodeURIComponent(t[2]))}),p.hasNativeMethod("common.routeJump"))p.call("common.routeJump",e,function(){return console.log("调起成功")});else if(this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0"))this.notifyApp({type:"urlscheme",url:e});else if(this.canTimeUniversalJump())this.notifyApp({type:"route",name:t[1],data:n});else if(this.isInApp())switch(t[1]){case"mall":this.toast("请升级到极客时间最新版后,点击该链接购买");break;default:this.toast("需要升级到极客时间最新版")}else switch(t[1]){case"mall":var o=e.match(/url=(.+)/i);o.length>1?setTimeout(function(){window.location.href=decodeURIComponent(o[1])},200):this.error("链接出现错误");break;default:this.toast("需要升级到极客时间最新版")}}else window.location.href=e},isPC:function(){for(var e=navigator.userAgent,t=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"],n=!0,o=0;o0){n=!1;break}return n},isIOS:function(){return!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)},isIPad:function(){return!!navigator.userAgent.match(/ipad/i)},isAndroid:function(){return!!navigator.userAgent.match(/android/i)},isInWeixin:function(){return!!window.navigator.userAgent.match(/MicroMessenger/i)},isInWXMiniProgram:function(){return window.__wxjs_environment&&"miniprogram"===window.__wxjs_environment||window.navigator.userAgent.toLowerCase().indexOf("miniprogram")>-1},isInAliApp:function(){return!!window.navigator.userAgent.match(/AliApp/i)},isInQQ:function(){return!!navigator.userAgent.match(/QQBrowser/i)},isInWeibo:function(){return!!navigator.userAgent.match(/WeiBo/i)},isInApp:function(){return!!navigator.userAgent.match(/org\.geekbang\.GeekTime/i)},isInAndroidApp:function(){return!!navigator.userAgent.match(/android\.org\.geekbang\.GeekTime/i)},isMac:function(){return navigator.platform.indexOf("Mac")>-1},isWin:function(){return navigator.platform.indexOf("Win")>-1},isIpad:function(){return navigator.userAgent.toLowerCase().indexOf("ipad")>-1},addUrlParam:function(e,t,n){var o=t+"="+encodeURIComponent(n),i="?"+o;return e&&(i=e.replace(new RegExp("([?&])"+t+"[^&]*"),"$1"+o))===e&&e.indexOf(o)<0&&(i+=(e.indexOf("?")>0?"&":"?")+o),i},shareInWeixin:function(e){if(this.isInWeixin()){var t="https://static001.geekbang.org/static/icon/time/logo-180.png";window.wx&&window.wx.ready(function(){window.wx.onMenuShareTimeline({title:e.timelineTitle||"极客时间",link:e.url||window.location.href,imgUrl:e.img||t}),window.wx.onMenuShareAppMessage({title:e.messageTitle||"极客时间",link:e.url||window.location.href,imgUrl:e.img||t,desc:e.desc||""})})}},subString:function(e,t){var n=e.slice(0,t),o=n.replace(/[x00-xff]/g,"").length;switch(o){case 0:return n;case t:return e.slice(0,t>>1);default:var i=t-o,a=e.slice(i,t),r=a.replace(/[x00-xff]/g,"").length;return r?e.slice(0,i)+this.subString(a,r):e.slice(0,i)}},getTicket:function(){var e=window.localStorage.getItem("gtInfo");return e&&JSON.parse(e)?JSON.parse(e).ticket:this.getQueryString(window.location.href,"ticket")},getDeviceId:function(){var e=window.localStorage.getItem("gtInfo");return e&&JSON.parse(e)?JSON.parse(e).deviceId:this.getQueryString(window.location.href,"deviceId")},toast:function(e){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()?this.notifyApp({type:"toast",data:{message:e}}):u.a.prototype.$Message.info({message:e,top:"100px"})},success:function(e){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"toast",data:{message:e}}):u.a.prototype.$Message.success({message:e})},error:function(e,t,n){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"error",data:{message:e}}):u.a.prototype.$Message.error({message:e,top:t,prefix:n})},parseError:function(e){if(e.data&&e.data.error)if("-2000"===String(e.data.error.code))this.login();else try{this.error(l.a.errorCode[e.data.error.code]||e.data.error.msg)}catch(e){this.error(e)}},canNotifyApp:function(){return window.webkit&&window.webkit.messageHandlers||window.webviewJSInterface&&window.webviewJSInterface},notifyApp:function(e){if(this.canNotifyApp()){var t=this.getQueryString(window.location.href,"utm_term");if("jump"===e.type&&e.data&&t&&(e.data.utm_term=t),this.isInAndroidApp())try{window.webviewJSInterface&&window.webviewJSInterface.notifyWeex(r()(e))}catch(e){console.log(e)}else try{window.webkit.messageHandlers.notifyWeex.postMessage({data:e})}catch(e){console.log(e)}}},login:function(){p.hasNativeMethod("common.routeJump")?p.call("common.routeJump","time://login",function(e){}):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"login",data:{}}):this.isInWXMiniProgram()?window.wx&&window.wx.miniProgram.navigateTo({url:"/pages/login/login?redirect="+encodeURIComponent("/pages/gkwebview/gkwebview?url="+window.location.href+"&auth=true")}):window.location.href="//account.geekbang.org/singin?redirect="+encodeURIComponent(window.location.href)},previewImgInApp:function(e,t){if(p.hasNativeMethod("common.viewLargeImage")){var n={images:e,pos:t};p.call("common.viewLargeImage",n,function(){return console.log("调起成功")})}else this.gteqAndroidVersion("1.0.8")?this.notifyApp({type:"img",data:{url:e[t]}}):this.notifyApp({type:"img",data:{imgs:e,index:t}})},html2Text:function(e){var t=document.createElement("div");return t.innerHTML=e,t.innerText},checkGeekbangDomain:function(e){return!!e&&!!e.match(/^https*\:\/\/([\w]+?)\.geekbang\.org/i)},handleMathJax:function(e){if(document.querySelector("script#MathJax"))window.MathJax&&window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,e]);else{var t=document.createElement("script");t.id="MathJax",t.src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML",document.getElementsByTagName("head")[0].appendChild(t),t.onload=function(t){window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,e])}}},getSelectionText:function(){var e="";if(void 0!==window.getSelection){var t=window.getSelection();if(t.rangeCount){for(var n=document.createElement("div"),o=0,i=t.rangeCount;o=a){var r=o[n+1];return r?{length:o.length,index:n+1,rest:(e-a)/(r-a)}:{length:o.length,index:n+1,rest:0}}var s=o[n-1];return s?{length:o.length,index:n-1,rest:(e-s)/(a-s)}:{length:o.length,index:n,rest:0}}var c=Math.floor(i/2-1);return e>t[c]?this.getPositionInSortNumberList(e,t.slice(c+1),n+c+1,o):this.getPositionInSortNumberList(e,t.slice(0,c+1),n,o)},html2escape:function(e){return e.replace(/[<>&"\/]/g,function(e){return{"<":"<",">":">","&":"&",'"':""","/":"/"}[e]})},shareToWeibo:function(e){event.preventDefault();var t="https://service.weibo.com/share/share.php?&appkey=3532615846";t=this.addUrlParam(t,"url",e.link||document.location.href),t=this.addUrlParam(t,"title",e.title||document.title),t=this.addUrlParam(t,"content",e.description||""),t=this.addUrlParam(t,"sharesource","weibo"),t=this.addUrlParam(t,"pic",e.img||""),window.open(t,"_blank")},copy:function(e){var t=e;if(void 0!==window.clipboardData){window.clipboardData.setData("Text",t),this.success("复制成功")}else try{var n=document.createElement("input");document.body.appendChild(n),n.setAttribute("value",t),n.select(),document.execCommand("copy")&&(document.execCommand("copy"),this.success("复制成功")),document.body.removeChild(n)}catch(e){this.error("你的浏览器不支持该操作,请手动复制")}},isRealHeightMoreThanVisibleHeight:function(e,t){var n=window.getComputedStyle(e,null),o=n.getPropertyValue("width"),i=n.getPropertyValue("height"),a=n.getPropertyValue("font-size"),r=n.getPropertyValue("line-height"),s=n.getPropertyValue("font-weight"),c=document.createElement("div");c.style.width=o,c.style.fontSize=a,c.style.whiteSpace="normal",c.style.fontWeight=s,c.style.lineHeight=r,c.style.wordBreak="break-all",c.style.position="absolute",c.innerHTML=t,document.body.appendChild(c);var l=c.offsetHeight;return document.body.removeChild(c),l>parseFloat(i)},fixedBody:function(e){var t=0,n=0;return{open:function(){t=document.scrollingElement.scrollTop||document.body.scrollTop,document.body.style.top=-t+"px",document.body.classList.add("fixed"),n=document.body.style.top},close:function(){document.body.classList.remove("fixed"),document.scrollingElement.scrollTop=t,document.body.scrollTop=t,document.body.style.top=n}}}()}}},[570]); \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/c674eb1df43af0f1bd2f73f629b532fd.jpg b/re/geekbang/routes/detail/source/static/c674eb1df43af0f1bd2f73f629b532fd.jpg new file mode 100644 index 0000000..bf7ed99 Binary files /dev/null and b/re/geekbang/routes/detail/source/static/c674eb1df43af0f1bd2f73f629b532fd.jpg differ diff --git a/re/geekbang/routes/detail/source/static/cb0daf759635bacb07aed0e1cec43561.jpg b/re/geekbang/routes/detail/source/static/cb0daf759635bacb07aed0e1cec43561.jpg new file mode 100644 index 0000000..92a47fa Binary files /dev/null and b/re/geekbang/routes/detail/source/static/cb0daf759635bacb07aed0e1cec43561.jpg differ diff --git a/re/geekbang/routes/detail/source/static/eb6bf600f044f7d21f241eb8d6ed0439.jpg b/re/geekbang/routes/detail/source/static/eb6bf600f044f7d21f241eb8d6ed0439.jpg new file mode 100644 index 0000000..f63ae24 Binary files /dev/null and b/re/geekbang/routes/detail/source/static/eb6bf600f044f7d21f241eb8d6ed0439.jpg differ diff --git a/re/geekbang/routes/detail/source/static/font_372689_nw1guejwd2q.js b/re/geekbang/routes/detail/source/static/font_372689_nw1guejwd2q.js new file mode 100644 index 0000000..e17944a --- /dev/null +++ b/re/geekbang/routes/detail/source/static/font_372689_nw1guejwd2q.js @@ -0,0 +1 @@ +(function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/hm.js b/re/geekbang/routes/detail/source/static/hm.js new file mode 100644 index 0000000..4f59052 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/hm.js @@ -0,0 +1,78 @@ +(function(){var h={},mt={},c={id:"022f847c4e3acd44d4a2481d9187f1e6",dm:["time.geekbang.org","horde.geekbang.org","promo.geekbang.org","cashier.geekbang.org","market.geekbang.org"],js:"tongji.baidu.com/hm-web/js/",etrk:[],cetrk:[],icon:'',ctrk:false,align:-1,nv:0,vdur:1800000,age:31536000000,rec:0,rp:[],trust:0,vcard:0,qiao:0,lxb:0,kbtrk:0,pt:0,spa:0,aet:'',hca:'500386218E6AA4F1',conv:0,med:0,cvcc:'',cvcf:[],apps:''};var r=void 0,s=!0,v=null,w=!1;mt.cookie={};mt.cookie.set=function(b,a,e){var d;e.L&&(d=new Date,d.setTime(d.getTime()+e.L));document.cookie=b+"="+a+(e.domain?"; domain="+e.domain:"")+(e.path?"; path="+e.path:"")+(d?"; expires="+d.toGMTString():"")+(e.jc?"; secure":"")};mt.cookie.get=function(b){return(b=RegExp("(^| )"+b+"=([^;]*)(;|$)").exec(document.cookie))?b[2]:v}; +mt.cookie.Gb=function(b,a){try{var e="Hm_ck_"+ +new Date;mt.cookie.set(e,"is-cookie-enabled",{domain:b,path:a,L:r});var d="is-cookie-enabled"===mt.cookie.get(e)?"1":"0";mt.cookie.set(e,"",{domain:b,path:a,L:-1});return d}catch(f){return"0"}};mt.lang={};mt.lang.d=function(b,a){return"[object "+a+"]"==={}.toString.call(b)};mt.lang.ra=function(b){return mt.lang.d(b,"Number")&&isFinite(b)};mt.lang.aa=function(b){return mt.lang.d(b,"String")}; +mt.lang.g=function(b){return b.replace?b.replace(/'/g,"'0").replace(/\*/g,"'1").replace(/!/g,"'2"):b};mt.lang.trim=function(b){return b.replace(/^\s+|\s+$/g,"")};mt.lang.J=function(b,a){var e=w;if(b==v||!mt.lang.d(b,"Array")||a===r)return e;if(Array.prototype.indexOf)e=-1!==b.indexOf(a);else for(var d=0;d"),d=document.body,f=b.length-1;0<=f;f--)if(-1"+d.join(">"):l,f.push(l)),d.unshift(encodeURIComponent(String(a.nodeName).toLowerCase())+(1"));return f};mt.f.tb=function(a){return(a= +mt.f.oa(a,s))&&a.length?String(a[0]):""};mt.f.rb=function(a){return mt.f.oa(a,w)};mt.f.dc=function(a,b){for(b=b.toUpperCase();(a=a.parentNode)&&1==a.nodeType;)if(a.tagName==b)return a;return v};mt.f.lb=function(a){return 9===a.nodeType?a:a.ownerDocument||a.document};mt.f.ec=function(a){var b={top:0,left:0};if(!a)return b;var d=mt.f.lb(a).documentElement;"undefined"!==typeof a.getBoundingClientRect&&(b=a.getBoundingClientRect());return{top:b.top+(window.pageYOffset||d.scrollTop)-(d.clientTop||0),left:b.left+ +(window.pageXOffset||d.scrollLeft)-(d.clientLeft||0)}};mt.f.getAttribute=function(a,b){var d=a.getAttribute&&a.getAttribute(b)||v;if(!d&&a.attributes&&a.attributes.length)for(var f=a.attributes,g=f.length,m=0;ma?"0"+a:a}var e={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return function(d){switch(typeof d){case "undefined":return"undefined";case "number":return isFinite(d)?String(d):"null";case "string":return b(d);case "boolean":return String(d); +default:if(d===v)return"null";if(d instanceof Array){var f=["["],g=d.length,e,l,p;for(l=0;l(new Date).getTime())return b.substring(a+1)}}else if(mt.localStorage.ea())try{return mt.localStorage.l.load(document.location.hostname),mt.localStorage.l.getAttribute(b)}catch(d){}return v}; +mt.localStorage.remove=function(b){if(window.localStorage)window.localStorage.removeItem(b);else if(mt.localStorage.ea())try{mt.localStorage.l.load(document.location.hostname),mt.localStorage.l.removeAttribute(b),mt.localStorage.l.save(document.location.hostname)}catch(a){}};mt.sessionStorage={};mt.sessionStorage.set=function(b,a){try{window.sessionStorage&&window.sessionStorage.setItem(b,a)}catch(e){}}; +mt.sessionStorage.get=function(b){try{return window.sessionStorage?window.sessionStorage.getItem(b):v}catch(a){return v}};mt.sessionStorage.remove=function(b){try{window.sessionStorage&&window.sessionStorage.removeItem(b)}catch(a){}};mt.Sa={};mt.Sa.log=function(b,a){var e=new Image,d="mini_tangram_log_"+Math.floor(2147483648*Math.random()).toString(36);window[d]=e;e.onload=function(){e.onload=v;e=window[d]=v;a&&a(b)};e.src=b};mt.xa={}; +mt.xa.wb=function(){var b="";if(navigator.plugins&&navigator.mimeTypes.length){var a=navigator.plugins["Shockwave Flash"];a&&a.description&&(b=a.description.replace(/^.*\s+(\S+)\s+\S+$/,"$1"))}else if(window.ActiveXObject)try{if(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))(b=a.GetVariable("$version"))&&(b=b.replace(/^.*\s+(\d+),(\d+).*$/,"$1.$2"))}catch(e){}return b}; +mt.xa.bc=function(b,a,e,d,f){return''};mt.url={}; +mt.url.m=function(b,a){var e=b.match(RegExp("(^|&|\\?|#)("+a+")=([^&#]*)(&|$|#)",""));return e?e[3]:v};mt.url.fc=function(b){return(b=b.match(/^(https?:)\/\//))?b[1]:v};mt.url.ob=function(b){return(b=b.match(/^(https?:\/\/)?([^\/\?#]*)/))?b[2].replace(/.*@/,""):v};mt.url.N=function(b){return(b=mt.url.ob(b))?b.replace(/:\d+$/,""):b};mt.url.oa=function(b){return(b=b.match(/^(https?:\/\/)?[^\/]*(.*)/))?b[2].replace(/[\?#].*/,"").replace(/^$/,"/"):v}; +(function(){function b(){for(var a=w,b=document.getElementsByTagName("script"),d=b.length,d=100l*g.split(">").length)for(g=0;g").length,l=0;l"));a&&(b.d(a,"Object")&&a.Ea)&&a.Ea(e)},Kb:function(a, +b){return function(e){(e.target||e.srcElement).setAttribute(a.da,e.clientX+":"+e.clientY);a&&a.r&&(b?a.r(b):a.r("#"+encodeURIComponent(this.id),e.type))}}};return h.ma=e})(); +(function(){var b=mt.f,a=mt.o,e=mt.event,d=mt.lang,f=h.ma,g=h.V,m=g.T,l={da:"HM_ce",Va:function(){if(c.cetrk&&c.cetrk.length){e.e(document,"click",f.U(l,c.cetrk));for(var d=0,g=c.cetrk.length;d")&&(0===u.indexOf("#")&&(u=u.substring(1)),(u=b.Ga(u))&&e.e(u,"click",f.Kb(l,m)))}}},Ea:function(b){if(c.cetrk&&c.cetrk.length)for(var d=0,f=c.cetrk.length;df.ia||(encodeURIComponent(x.join("!")+a).length>f.ia&&(t.r(x.join("!")),x=[]), +x.push(a))},r:function(a){h.c.b.et=5;h.c.b.ep=a;h.c.b.p=l(m.C("autoEventTracking"));h.c.i();h.c.b.p=""},S:function(){return function(){x&&x.length&&(t.r(x.join("!")),x=[])}}};b.aa(c.aet)&&""!==c.aet&&g.e("pv-b",function(){e.e(document,"click",t.U());"ontouchend"in document&&e.e(window,"touchend",t.U());e.e(window,"unload",t.S())});return t})(); +(function(){var b=mt.event,a=mt.h,e=h.A,d=h.I,f=+new Date,g=[],m=v,l={gb:function(){return function(){h.c&&(h.c.P&&c.aet&&c.aet.length)&&(window.clearTimeout(m),m=window.setTimeout(function(){l.Xa(a.Y()+a.O())},150))}},Xa:function(a){l.ga([+new Date-(h.c.D!==r?h.c.D:f),a].join("*"))},ga:function(a){if(encodeURIComponent(g.join("!")+a).length>e.ia||3a.length)){var b=a[1],e=a[4]||3;if(0b&&0e){k.ca++;for(var f=(h.c.b.cv||"*").split("!"),g=f.length;ga.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!==r&&a!==r){var y=decodeURIComponent(t.getData("Hm_ct_"+c.id)||""),y=b(y,e,1,a);t.setData("Hm_ct_"+c.id,encodeURIComponent(y),c.age)}}},_setVisitTag:function(a){if(!(3>a.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!== +r&&a!==r){var y=k.z.za,y=b(y,e,2,a);k.z.za=y}}},_setPageTag:function(a){if(!(3>a.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!==r&&a!==r){var y=k.z.page,y=b(y,e,3,a);k.z.page=y}}},_setReferrerOverride:function(a){1c.vdur?1:4;var b=w;this.Z(document.referrer)&&this.Z(document.location.href)?b=s:(b=a.N(document.referrer),b=this.Q(b||"",document.location.hostname));return b?k.G-k.K>c.vdur?1:4:3},Qb:function(){var a,b,d,e,f;k.K=t.getData("Hm_lpvt_"+c.id)||0;13===k.K.length&&(k.K=Math.round(k.K/1E3));b=this.ub();a=4!==b?1:0;if(d=t.getData("Hm_lvt_"+c.id)){e=d.split(",");for(f=e.length-1;0<=f;f--)13===e[f].length&&(e[f]=""+Math.round(e[f]/1E3)); +for(;2592E3e.length?2:3;for(1===a&&e.push(k.G);4=+new Date-g;);};if(c.med)g="/zoosnet",f="swt",m=/swt|zixun|call|chat|zoos|business|talk|kefu|openkf|online|\/LR\/Chatpre\.aspx/i,l={click:function(){for(var a=[],b=p(document.getElementsByTagName("a")),b=[].concat.apply(b,p(document.getElementsByTagName("area"))),b=[].concat.apply(b,p(document.getElementsByTagName("img"))),d,e,f=0,g=b.length;f0){var n=e.split("?")[0],i=e.split("?")[1];return n+=".html",void 0!==i?n+"?"+i:n}}if(!e.jWeixin){var h={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},v=function(){var e={};for(var n in h)e[h[n]]=n;return e}(),I=e.document,S=I.title,y=navigator.userAgent.toLowerCase(),_=navigator.platform.toLowerCase(),w=!(!_.match("mac")&&!_.match("win")),T=-1!=y.indexOf("wxdebugger"),k=-1!=y.indexOf("micromessenger"),M=-1!=y.indexOf("android"),P=-1!=y.indexOf("iphone")||-1!=y.indexOf("ipad"),x=function(){var e=y.match(/micromessenger\/(\d+\.\d+\.\d+)/)||y.match(/micromessenger\/(\d+\.\d+)/);return e?e[1]:""}(),A={initStartTime:p(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},V={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:P?1:M?2:-1,clientVersion:x,url:encodeURIComponent(location.href)},C={},L={_completes:[]},B={state:0,data:{}};f(function(){A.initEndTime=p()});var O=!1,E=[],N={config:function(e){C=e,u("config",e);var n=!1!==C.check;f(function(){if(n)i(h.config,{verifyJsApiList:d(C.jsApiList)},function(){L._complete=function(e){A.preVerifyEndTime=p(),B.state=1,B.data=e},L.success=function(e){V.isPreVerifyOk=0},L.fail=function(e){L._fail?L._fail(e):B.state=-1};var e=L._completes;return e.push(function(){l()}),L.complete=function(n){for(var i=0,t=e.length;i0){var n=E.shift();wx.getLocalImgData(n)}},e))):E.push(e)},getNetworkType:function(e){var n=function(e){var n=e.errMsg;e.errMsg="getNetworkType:ok";var i=e.subtype;if(delete e.subtype,i)e.networkType=i;else{var t=n.indexOf(":"),o=n.substring(t+1);switch(o){case"wifi":case"edge":case"wwan":e.networkType=o;break;default:e.errMsg="getNetworkType:fail"}}return e};i("getNetworkType",{},(e._complete=function(e){e=n(e)},e))},openLocation:function(e){i("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},getLocation:function(e){e=e||{},i(h.getLocation,{type:e.type||"wgs84"},(e._complete=function(e){delete e.type},e))},hideOptionMenu:function(e){i("hideOptionMenu",{},e)},showOptionMenu:function(e){i("showOptionMenu",{},e)},closeWindow:function(e){i("closeWindow",{},e=e||{})},hideMenuItems:function(e){i("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){i("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){i("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){i("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){i("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){if(P){var n=e.resultStr;if(n){var i=JSON.parse(n);e.resultStr=i&&i.scan_code&&i.scan_code.scan_result}}},e))},openAddress:function(e){i(h.openAddress,{},(e._complete=function(e){e=a(e)},e))},openProductSpecificView:function(e){i(h.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,t=[],o=0,r=n.length;o0&&r.indexOf(a)!==-1&&(i=!0),2===o.length){var c=+h(o[0])||0,u=+h(o[1])||0;s[1]>=c&&s[1]<=u&&(i=!0)}0===r.length&&0===o.length&&(i=!0)}p(i)}},error:function(){p(!1)}})},function(e,t){"use strict";e.exports={env:"production",chat:"https://new-api.meiqia.com",upload:"https://eco-api-upload.meiqia.com",socket:"https://eco-push-api-client.meiqia.com/pusher",socket2:"https://camorope-client-a.meiqia.com/pusher",widget:"https://new-api.meiqia.com/dist",cdn:"https://resource.meiqia.com/dist",tail:"19oztl8cnr8"}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};n(3);var i=n(6),a=r(i);n(7),n(8);var c=function(e,t){var n=[];e&&e.ent_id||n.push("ent_id="+a["default"].entId);var r=t&&t.timestamp||1*new Date;for(var o in e)e.hasOwnProperty(o)&&n.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));return t&&t.sign&&n.push("sign="+t.sign),n.push("v="+r),n.join("&")},s=function(e){e=e||{},e.type=(e.type||"GET").toUpperCase(),e.dataType=e.dataType||"json",e.contentType=e.contentType||"application/x-www-form-urlencoded; charset=UTF-8";var t=c(e.data),n=null;if("undefined"!=typeof XMLHttpRequest)n=new XMLHttpRequest;else for(var r=["Microsoft.XmlHttp","MSXML2.XmlHttp","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.6.0"],i=0,s=r.length;i=200&&t<300){var r=n.responseText;"json"===e.dataType&&r&&(r=JSON.parse(n.responseText)),e.success&&e.success(r,n.responseXML)}else e.error&&e.error(n,t,n.responseText)}},"GET"===e.type)n.open("GET",e.url+"?"+t,!0),n.send(null);else if("POST"===e.type){var l=new URL(e.url),f=new URLSearchParams(l.search);f.has("ent_id")||f.append("ent_id",a["default"].entId),l.search=f.toString(),n.open("POST",""+l.toString(),!0),n.setRequestHeader("Content-Type",e.contentType);var h=e.header;if(h)for(var p in h)n.setRequestHeader(p,h[p]);var d=e.data;"object"===("undefined"==typeof d?"undefined":o(d))&&(d=JSON.stringify(d)),n.send(d)}return e.beforeSend&&e.beforeSend(n),n},u=function(e){if(e=e||{},e.data=e.data||{},!e.url||!e.callback)return!1;e.beforeSend&&e.beforeSend();var t=e.callbackName||"jsonp"+1*new Date;e.data[e.callback]=t;var n=c(e.data,e.signature),r=document.createElement("script");r.type="text/javascript",r.charset="UTF-8",document.body.appendChild(r),window[t]=function(n){try{document.body.removeChild(r),clearTimeout(r.timer),window[t]=null,e.success&&e.success(n)}catch(o){return null}},r.src=e.url+"?"+n,e.time&&(r.timer=setTimeout(function(){try{window[t]=null,document.body.removeChild(r),e.error&&e.error({message:"超时"})}catch(n){return null}},e.time))},l=function(e){e=e||{};var t=e.data,n=new XMLHttpRequest;n.upload&&(n.upload.onprogress=function(t){e.progress&&e.progress(t)}),n.onload=function(){if([200,204].indexOf(n.status)!==-1){var t=n.responseText;"json"===e.dataType&&(t=JSON.parse(n.responseText)),e.success&&e.success(t,n.responseXML)}else e.error&&e.error(n,status,n.responseText)};var r=new FormData;for(var o in t)t.hasOwnProperty(o)&&r.append(o,t[o]);n.open("POST",e.url),n.send(r),e.beforeSend&&e.beforeSend(n)};t["default"]={ajax:s,jsonp:u,upload:l}},function(e,t,n){var r;(function(e,o){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};(function(){function a(e,t){function n(e){if(n[e]!==g)return n[e];var i;if("bug-string-char-index"==e)i="a"!="a"[0];else if("json"==e)i=n("json-stringify")&&n("json-parse");else{var a,c='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var s=t.stringify,l="function"==typeof s&&S;if(l){(a=function(){return 1}).toJSON=a;try{l="0"===s(0)&&"0"===s(new r)&&'""'==s(new o)&&s(b)===g&&s(g)===g&&s()===g&&"1"===s(a)&&"[1]"==s([a])&&"[null]"==s([g])&&"null"==s(null)&&"[null,null,null]"==s([g,b,null])&&s({a:[a,!0,!1,null,"\0\b\n\f\r\t"]})==c&&"1"===s(null,a)&&"[\n 1,\n 2\n]"==s([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==s(new u((-864e13)))&&'"+275760-09-13T00:00:00.000Z"'==s(new u(864e13))&&'"-000001-01-01T00:00:00.000Z"'==s(new u((-621987552e5)))&&'"1969-12-31T23:59:59.999Z"'==s(new u((-1)))}catch(f){l=!1}}i=l}if("json-parse"==e){var h=t.parse;if("function"==typeof h)try{if(0===h("0")&&!h(!1)){a=h(c);var p=5==a.a.length&&1===a.a[0];if(p){try{p=!h('"\t"')}catch(f){}if(p)try{p=1!==h("01")}catch(f){}if(p)try{p=1!==h("1.")}catch(f){}}}}catch(f){p=!1}i=p}}return n[e]=!!i}e||(e=l.Object()),t||(t=l.Object());var r=e.Number||l.Number,o=e.String||l.String,c=e.Object||l.Object,u=e.Date||l.Date,f=e.SyntaxError||l.SyntaxError,h=e.TypeError||l.TypeError,p=e.Math||l.Math,d=e.JSON||l.JSON;"object"==("undefined"==typeof d?"undefined":i(d))&&d&&(t.stringify=d.stringify,t.parse=d.parse);var y,m,g,v=c.prototype,b=v.toString,S=new u((-0xc782b5b800cec));try{S=S.getUTCFullYear()==-109252&&0===S.getUTCMonth()&&1===S.getUTCDate()&&10==S.getUTCHours()&&37==S.getUTCMinutes()&&6==S.getUTCSeconds()&&708==S.getUTCMilliseconds()}catch(w){}if(!n("json")){var _="[object Function]",j="[object Date]",O="[object Number]",C="[object String]",T="[object Array]",E="[object Boolean]",P=n("bug-string-char-index");if(!S)var U=p.floor,L=[0,31,59,90,120,151,181,212,243,273,304,334],R=function(e,t){return L[t]+365*(e-1970)+U((e-1969+(t=+(t>1)))/4)-U((e-1901+t)/100)+U((e-1601+t)/400)};if((y=v.hasOwnProperty)||(y=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=b?y=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,y=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,y.call(this,e)}),m=function(e,t){var n,r,o,a=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)y.call(r,o)&&a++;return n=r=null,a?m=2==a?function(e,t){var n,r={},o=b.call(e)==_;for(n in e)o&&"prototype"==n||y.call(r,n)||!(r[n]=1)||!y.call(e,n)||t(n)}:function(e,t){var n,r,o=b.call(e)==_;for(n in e)o&&"prototype"==n||!y.call(e,n)||(r="constructor"===n)||t(n);(r||y.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var n,o,a=b.call(e)==_,c=!a&&"function"!=typeof e.constructor&&s[i(e.hasOwnProperty)]&&e.hasOwnProperty||y;for(n in e)a&&"prototype"==n||!c.call(e,n)||t(n);for(o=r.length;n=r[--o];c.call(e,n)&&t(n));}),m(e,t)},!n("json-stringify")){var k={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",A=function(e,t){return(x+(t||0)).slice(-e)},M="\\u00",N=function(e){for(var t='"',n=0,r=e.length,o=!P||r>10,i=o&&(P?e.split(""):e);n-1/0&&s<1/0){if(R){for(p=U(s/864e5),l=U(p/365.2425)+1970-1;R(l+1,0)<=p;l++);for(f=U((p-R(l,0))/30.42);R(l,f+1)<=p;f++);p=1+p-R(l,f),d=(s%864e5+864e5)%864e5,v=U(d/36e5)%24,S=U(d/6e4)%60,w=U(d/1e3)%60,_=d%1e3}else l=s.getUTCFullYear(),f=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),S=s.getUTCMinutes(),w=s.getUTCSeconds(),_=s.getUTCMilliseconds();s=(l<=0||l>=1e4?(l<0?"-":"+")+A(6,l<0?-l:l):A(4,l))+"-"+A(2,f+1)+"-"+A(2,p)+"T"+A(2,v)+":"+A(2,S)+":"+A(2,w)+"."+A(3,_)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=b.call(s),u==E)return""+s;if(u==O)return s>-1/0&&s<1/0?""+s:"null";if(u==C)return N(""+s);if("object"==("undefined"==typeof s?"undefined":i(s))){for(x=c.length;x--;)if(c[x]===s)throw h();if(c.push(s),P=[],M=a,a+=o,u==T){for(k=0,x=s.length;k0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||D();e+=X("0x"+i.slice(t,J));break;default:D()}else{if(34==o)break;for(o=i.charCodeAt(J),t=J;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++J);e+=i.slice(t,J)}if(34==i.charCodeAt(J))return J++,e;D();default:if(t=J,45==o&&(r=!0,o=i.charCodeAt(++J)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(J+1),o>=48&&o<=57)&&D(),r=!1;J=48&&o<=57);J++);if(46==i.charCodeAt(J)){for(n=++J;n=48&&o<=57);n++);n==J&&D(),J=n}if(o=i.charCodeAt(J),101==o||69==o){for(o=i.charCodeAt(++J),43!=o&&45!=o||J++,n=J;n=48&&o<=57);n++);n==J&&D(),J=n}return+i.slice(t,J)}if(r&&D(),"true"==i.slice(J,J+4))return J+=4,!0;if("false"==i.slice(J,J+5))return J+=5,!1;if("null"==i.slice(J,J+4))return J+=4,null;D()}return"$"},B=function z(e){var t,n;if("$"==e&&D(),"string"==typeof e){if("@"==(P?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=F(),"]"!=e;n||(n=!0))n&&(","==e?(e=F(),"]"==e&&D()):D()),","==e&&D(),t.push(z(e));return t}if("{"==e){for(t={};e=F(),"}"!=e;n||(n=!0))n&&(","==e?(e=F(),"}"==e&&D()):D()),","!=e&&"string"==typeof e&&"@"==(P?e.charAt(0):e[0])&&":"==F()||D(),t[e.slice(1)]=z(F());return t}D()}return e},Z=function(e,t,n){var r=G(e,t,n);r===g?delete e[t]:e[t]=r},G=function(e,t,n){var r,o=e[t];if("object"==("undefined"==typeof o?"undefined":i(o))&&o)if(b.call(o)==T)for(r=o.length;r--;)Z(o,r,n);else m(o,function(e){Z(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return J=0,H=""+e,n=B(F()),"$"!=F()&&D(),J=H=null,t&&b.call(t)==_?G((r={},r[""]=n,r),"",t):n}}}return t.runInContext=a,t}var c=n(5),s={"function":!0,object:!0},u=s[i(t)]&&t&&!t.nodeType&&t,l=s["undefined"==typeof window?"undefined":i(window)]&&window||this,f=u&&s[i(e)]&&e&&!e.nodeType&&"object"==("undefined"==typeof o?"undefined":i(o))&&o;if(!f||f.global!==f&&f.window!==f&&f.self!==f||(l=f),u&&!c)a(l,u);else{var h=l.JSON,p=l.JSON3,d=!1,y=a(l,l.JSON3={noConflict:function(){return d||(d=!0,l.JSON=h,l.JSON3=p,h=p=null),y}});l.JSON={parse:y.parse,stringify:y.stringify,encode:y.stringify,decode:y.parse}}c&&(r=function(){return y}.call(t,n,t,e),!(void 0!==r&&(e.exports=r)))}).call(void 0)}).call(t,n(4)(e),function(){return this}())},function(e,t){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t){(function(t){e.exports=t}).call(t,{})},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]={agentToken:null,browserId:null,clientMsgNum:0,convId:null,convNewCreate:!1,device:null,emojiGroup:["smile","laughing","blush","heart_eyes","smirk","flushed","grin","kissing_smiling_eyes","wink","kissing_closed_eyes","stuck_out_tongue_winking_eye","sleeping","worried","sweat_smile","cold_sweat","joy","sob","angry","mask","scream","sunglasses","thumbsup","clap","ok_hand"],entId:null,fakeSentMsg:[],agentSchedulingMsg:null,features:{emoji:!0,evaluation:!0,photo:!1,upload:!1},groupToken:null,historyArray:[],historyTimes:0,isBasie:null,isEnd:!1,inputting:!1,isReconnect:!1,lastMsgDate:null,limit:5,loserClub:[],language:"zh",messenger:null,msgId:[],msgLimit:10,page:0,ring:!1,ringing:!1,scheduler:!1,scheduling:!1,servability:!1,socket:!0,style:null,tpl:null,trackId:null,type:null,visitId:null,blacklist:!1,fallback:null,surveyRendered:!1,surveyDone:!1,initializeBodyHeight:1,msgHolderFlag:!1,isStandalone:!1,schedulerMsg:!1,chatHasEnd:!1,shenmaActionData:{},isTrackTrusted:!1}},function(e,t){(function(e){"use strict";var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e){function n(e){e=e||"",(e instanceof URLSearchParams||e instanceof n)&&(e=e.toString()),this[f]=a(e)}function r(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,function(e){return t[e]})}function o(e){return e.replace(/[ +]/g,"%20").replace(/(%[a-f0-9]{2})+/gi,function(e){return decodeURIComponent(e)})}function i(t){var n={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return d&&(n[e.Symbol.iterator]=function(){return n}),n}function a(e){var n={};if("object"===("undefined"==typeof e?"undefined":t(e)))for(var r in e)e.hasOwnProperty(r)&&c(n,r,e[r]);else{0===e.indexOf("?")&&(e=e.slice(1));for(var i=e.split("&"),a=0;at[0]?1:0}),e._entries&&(e._entries={});for(var n=0;n1?a(r[1]):"")}})}("undefined"!=typeof e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0),function(e){var t=function(){try{var t=new e.URL("b","http://a");return t.pathname="c%20d","http://a/c%20d"===t.href&&t.searchParams}catch(n){return!1}},n=function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t));var r,o=document;if(n&&(void 0===e.location||n!==e.location.href)){o=document.implementation.createHTMLDocument(""),r=o.createElement("base"),r.href=n,o.head.appendChild(r);try{if(0!==r.href.indexOf(n))throw new Error(r.href)}catch(i){throw new Error("URL unable to set base "+n+" due to "+i)}}var a=o.createElement("a");if(a.href=t,r&&(o.body.appendChild(a),a.href=a.href),":"===a.protocol||!/:/.test(a.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:a});var c=new e.URLSearchParams(this.search),s=!0,u=!0,l=this;["append","delete","set"].forEach(function(e){var t=c[e];c[e]=function(){t.apply(c,arguments),s&&(u=!1,l.search=c.toString(),u=!0)}}),Object.defineProperty(this,"searchParams",{value:c,enumerable:!0});var f=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==f&&(f=this.search,u&&(s=!1,this.searchParams._fromString(this.search),s=!0))}})},r=n.prototype,o=function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(e){o(e)}),Object.defineProperty(r,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n};if(t()||n(),void 0!==e.location&&!("origin"in e.location)){var r=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:r,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=r()},100)}}}("undefined"!=typeof e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0)}).call(t,function(){return this}())}]); \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource(1).html b/re/geekbang/routes/detail/source/static/saved_resource(1).html new file mode 100644 index 0000000..11a4e59 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource(1).html @@ -0,0 +1,3 @@ + + +
      \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource(2).html b/re/geekbang/routes/detail/source/static/saved_resource(2).html new file mode 100644 index 0000000..1a07027 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource(2).html @@ -0,0 +1,3 @@ + + +
      我们在线,来聊聊吧
      \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource(3).html b/re/geekbang/routes/detail/source/static/saved_resource(3).html new file mode 100644 index 0000000..ddcf738 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource(3).html @@ -0,0 +1,3 @@ + + +
      \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource(4).html b/re/geekbang/routes/detail/source/static/saved_resource(4).html new file mode 100644 index 0000000..3fdbda2 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource(4).html @@ -0,0 +1,3 @@ + + +
      您好,当前有专业客服人员在线,让我们来帮助您吧。
      \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource(5).html b/re/geekbang/routes/detail/source/static/saved_resource(5).html new file mode 100644 index 0000000..bef874e --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource(5).html @@ -0,0 +1,3 @@ + + +
      \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource(6).html b/re/geekbang/routes/detail/source/static/saved_resource(6).html new file mode 100644 index 0000000..8284871 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource(6).html @@ -0,0 +1,3 @@ + + +
      avatar
      \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/saved_resource.html b/re/geekbang/routes/detail/source/static/saved_resource.html new file mode 100644 index 0000000..2d81560 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/saved_resource.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/sync-cookie.html b/re/geekbang/routes/detail/source/static/sync-cookie.html new file mode 100644 index 0000000..e04eb62 --- /dev/null +++ b/re/geekbang/routes/detail/source/static/sync-cookie.html @@ -0,0 +1,235 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/re/geekbang/routes/detail/source/static/vendor.aa0daa078f9134c361c2.js b/re/geekbang/routes/detail/source/static/vendor.aa0daa078f9134c361c2.js new file mode 100644 index 0000000..aba7c5c --- /dev/null +++ b/re/geekbang/routes/detail/source/static/vendor.aa0daa078f9134c361c2.js @@ -0,0 +1,17 @@ +webpackJsonp([47],[function(t,e,n){var r=n(2),o=n(24),i=n(14),a=n(15),u=n(25),c=function(t,e,n){var s,f,l,p,h=t&c.F,d=t&c.G,v=t&c.S,y=t&c.P,m=t&c.B,g=d?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,b=d?o:o[e]||(o[e]={}),_=b.prototype||(b.prototype={});d&&(n=e);for(s in n)f=!h&&g&&void 0!==g[s],l=(f?g:n)[s],p=m&&f?u(l,r):y&&"function"==typeof l?u(Function.call,l):l,g&&a(g,s,l,t&c.U),b[s]!=l&&i(b,s,p),y&&_[s]!=l&&(_[s]=l)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e,n){var r=n(4);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(76)("wks"),o=n(56),i=n(2).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},function(t,e,n){var r=n(27),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){t.exports=!n(3)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(1),o=n(187),i=n(32),a=Object.defineProperty;e.f=n(7)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(30);t.exports=function(t){return Object(r(t))}},function(t,e){var n=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=n)},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e,n){var r=n(114)("wks"),o=n(83),i=n(12).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},function(t,e,n){var r=n(8),o=n(52);t.exports=n(7)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(2),o=n(14),i=n(18),a=n(56)("src"),u=n(328),c=(""+u).split("toString");n(24).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(s&&(i(n,a)||o(n,a,t[e]?""+t[e]:c.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||u.call(this)})},function(t,e,n){var r=n(0),o=n(3),i=n(30),a=/"/g,u=function(t,e,n,r){var o=String(i(t)),u="<"+e;return""!==n&&(u+=" "+n+'="'+String(r).replace(a,""")+'"'),u+">"+o+""};t.exports=function(t,e){var n={};n[t]=e(u),r(r.P+r.F*o(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},function(t,e,n){"use strict";function r(t){return"[object Array]"===O.call(t)}function o(t){return"[object ArrayBuffer]"===O.call(t)}function i(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function c(t){return"number"==typeof t}function s(t){return void 0===t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===O.call(t)}function p(t){return"[object File]"===O.call(t)}function h(t){return"[object Blob]"===O.call(t)}function d(t){return"[object Function]"===O.call(t)}function v(t){return f(t)&&d(t.pipe)}function y(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(t,e){if(null!==t&&void 0!==t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;n0?r:n)(t)}},function(t,e,n){var r=n(12),o=n(10),i=n(66),a=n(45),u=n(46),c=function(t,e,n){var s,f,l,p=t&c.F,h=t&c.G,d=t&c.S,v=t&c.P,y=t&c.B,m=t&c.W,g=h?o:o[e]||(o[e]={}),b=g.prototype,_=h?r:d?r[e]:(r[e]||{}).prototype;h&&(n=e);for(s in n)(f=!p&&_&&void 0!==_[s])&&u(g,s)||(l=f?_[s]:n[s],g[s]=h&&"function"!=typeof _[s]?n[s]:y&&f?i(l,r):m&&_[s]==l?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):v&&"function"==typeof l?i(Function.call,l):l,v&&((g.virtual||(g.virtual={}))[s]=l,t&c.R&&b&&!b[s]&&a(b,s,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e,n){var r=n(25),o=n(74),i=n(9),a=n(6),u=n(121);t.exports=function(t,e){var n=1==t,c=2==t,s=3==t,f=4==t,l=6==t,p=5==t||l,h=e||u;return function(e,u,d){for(var v,y,m=i(e),g=o(m),b=r(u,d,3),_=a(g.length),w=0,x=n?h(e,_):c?h(e,0):void 0;_>w;w++)if((p||w in g)&&(v=g[w],y=b(v,w,m),t))if(n)x[w]=y;else if(y)switch(t){case 3:return!0;case 5:return v;case 6:return w;case 2:x.push(v)}else if(f)return!1;return l?-1:s||f?f:x}}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(0),o=n(24),i=n(3);t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},function(t,e,n){var r=n(4);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){t.exports=!n(58)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(38),o=n(167),i=n(116),a=Object.defineProperty;e.f=n(33)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(209),o=n(0),i=n(76)("metadata"),a=i.store||(i.store=new(n(213))),u=function(t,e,n){var o=a.get(t);if(!o){if(!n)return;a.set(t,o=new r)}var i=o.get(e);if(!i){if(!n)return;o.set(e,i=new r)}return i},c=function(t,e,n){var r=u(e,n,!1);return void 0!==r&&r.has(t)},s=function(t,e,n){var r=u(e,n,!1);return void 0===r?void 0:r.get(t)},f=function(t,e,n,r){u(n,r,!0).set(t,e)},l=function(t,e){var n=u(t,e,!1),r=[];return n&&n.forEach(function(t,e){r.push(e)}),r},p=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},h=function(t){o(o.S,"Reflect",t)};t.exports={store:a,map:u,has:c,get:s,set:f,keys:l,key:p,exp:h}},function(t,e,n){"use strict";if(n(7)){var r=n(41),o=n(2),i=n(3),a=n(0),u=n(96),c=n(142),s=n(25),f=n(47),l=n(52),p=n(14),h=n(53),d=n(27),v=n(6),y=n(207),m=n(55),g=n(32),b=n(18),_=n(61),w=n(4),x=n(9),S=n(128),O=n(49),E=n(20),k=n(50).f,A=n(144),j=n(56),C=n(5),T=n(29),$=n(84),M=n(77),P=n(145),L=n(62),N=n(89),F=n(54),I=n(120),R=n(179),D=n(8),U=n(19),B=D.f,V=U.f,H=o.RangeError,G=o.TypeError,W=o.Uint8Array,q=Array.prototype,z=c.ArrayBuffer,J=c.DataView,K=T(0),Y=T(2),X=T(3),Z=T(4),Q=T(5),tt=T(6),et=$(!0),nt=$(!1),rt=P.values,ot=P.keys,it=P.entries,at=q.lastIndexOf,ut=q.reduce,ct=q.reduceRight,st=q.join,ft=q.sort,lt=q.slice,pt=q.toString,ht=q.toLocaleString,dt=C("iterator"),vt=C("toStringTag"),yt=j("typed_constructor"),mt=j("def_constructor"),gt=u.CONSTR,bt=u.TYPED,_t=u.VIEW,wt=T(1,function(t,e){return kt(M(t,t[mt]),e)}),xt=i(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),St=!!W&&!!W.prototype.set&&i(function(){new W(1).set({})}),Ot=function(t,e){var n=d(t);if(n<0||n%e)throw H("Wrong offset!");return n},Et=function(t){if(w(t)&&bt in t)return t;throw G(t+" is not a typed array!")},kt=function(t,e){if(!(w(t)&&yt in t))throw G("It is not a typed array constructor!");return new t(e)},At=function(t,e){return jt(M(t,t[mt]),e)},jt=function(t,e){for(var n=0,r=e.length,o=kt(t,r);r>n;)o[n]=e[n++];return o},Ct=function(t,e,n){B(t,e,{get:function(){return this._d[n]}})},Tt=function(t){var e,n,r,o,i,a,u=x(t),c=arguments.length,f=c>1?arguments[1]:void 0,l=void 0!==f,p=A(u);if(void 0!=p&&!S(p)){for(a=p.call(u),r=[],e=0;!(i=a.next()).done;e++)r.push(i.value);u=r}for(l&&c>2&&(f=s(f,arguments[2],2)),e=0,n=v(u.length),o=kt(this,n);n>e;e++)o[e]=l?f(u[e],e):u[e];return o},$t=function(){for(var t=0,e=arguments.length,n=kt(this,e);e>t;)n[t]=arguments[t++];return n},Mt=!!W&&i(function(){ht.call(new W(1))}),Pt=function(){return ht.apply(Mt?lt.call(Et(this)):Et(this),arguments)},Lt={copyWithin:function(t,e){return R.call(Et(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return Z(Et(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return I.apply(Et(this),arguments)},filter:function(t){return At(this,Y(Et(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return Q(Et(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return tt(Et(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){K(Et(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return nt(Et(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return et(Et(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return st.apply(Et(this),arguments)},lastIndexOf:function(t){return at.apply(Et(this),arguments)},map:function(t){return wt(Et(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ut.apply(Et(this),arguments)},reduceRight:function(t){return ct.apply(Et(this),arguments)},reverse:function(){for(var t,e=this,n=Et(e).length,r=Math.floor(n/2),o=0;o1?arguments[1]:void 0)},sort:function(t){return ft.call(Et(this),t)},subarray:function(t,e){var n=Et(this),r=n.length,o=m(t,r);return new(M(n,n[mt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,v((void 0===e?r:m(e,r))-o))}},Nt=function(t,e){return At(this,lt.call(Et(this),t,e))},Ft=function(t){Et(this);var e=Ot(arguments[1],1),n=this.length,r=x(t),o=v(r.length),i=0;if(o+e>n)throw H("Wrong length!");for(;i255?255:255&r),o.v[h](n*e+o.o,r,xt)},C=function(t,e){B(t,e,{get:function(){return A(this,e)},set:function(t){return j(this,e,t)},enumerable:!0})};b?(d=n(function(t,n,r,o){f(t,d,s,"_d");var i,a,u,c,l=0,h=0;if(w(n)){if(!(n instanceof z||"ArrayBuffer"==(c=_(n))||"SharedArrayBuffer"==c))return bt in n?jt(d,n):Tt.call(d,n);i=n,h=Ot(r,e);var m=n.byteLength;if(void 0===o){if(m%e)throw H("Wrong length!");if((a=m-h)<0)throw H("Wrong length!")}else if((a=v(o)*e)+h>m)throw H("Wrong length!");u=a/e}else u=y(n),a=u*e,i=new z(a);for(p(t,"_d",{b:i,o:h,l:a,e:u,v:new J(i)});l=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||s(t)&&t.toString===Ei?JSON.stringify(t,null,2):String(t)}function d(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}function m(t,e){return ji.call(t,e)}function g(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function b(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function _(t,e){return t.bind(e)}function w(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function x(t,e){for(var n in e)t[n]=e[n];return t}function S(t){for(var e={},n=0;n-1)if(i&&!m(o,"default"))a=!1;else if(""===a||a===Pi(t)){var c=ot(String,o.type);(c<0||u0&&(a=wt(a,(e||"")+"_"+n),_t(a[0])&&_t(s)&&(f[c]=L(s.text+a[0].text),a.shift()),f.push.apply(f,a)):u(a)?_t(s)?f[c]=L(s.text+a):""!==a&&f.push(L(a)):_t(a)&&_t(s)?f[c]=L(s.text+a.text):(i(t._isVList)&&o(a.tag)&&r(a.key)&&o(e)&&(a.key="__vlist"+e+"_"+n+"__"),f.push(a)));return f}function xt(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}function St(t){var e=Ot(t.$options.inject,t);e&&(F(!1),Object.keys(e).forEach(function(n){U(t,n,e[n])}),F(!0))}function Ot(t,e){if(t){for(var n=Object.create(null),r=aa?Reflect.ownKeys(t):Object.keys(t),o=0;o0,i=t?!!t.$stable:!o,a=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(i&&n&&n!==Oi&&a===n.$key&&!o&&!n.$hasNormal)return n;r={};for(var u in t)t[u]&&"$"!==u[0]&&(r[u]=jt(e,u,t[u]))}else r={};for(var c in e)c in r||(r[c]=Ct(e,c));return t&&Object.isExtensible(t)&&(t._normalized=r),C(r,"$stable",i),C(r,"$key",a),C(r,"$hasNormal",o),r}function jt(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});return t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:bt(t),t&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function Ct(t,e){return function(){return t[e]}}function Tt(t,e){var n,r,i,a,u;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,i=t.length;rHa&&Ra[n].id>t.id;)n--;Ra.splice(n+1,0,t)}else Ra.push(t);Ba||(Ba=!0,ft(Oe))}}function Ce(t,e,n){Ka.get=function(){return this[e][n]},Ka.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Ka)}function Te(t){t._watchers=[];var e=t.$options;e.props&&$e(t,e.props),e.methods&&Re(t,e.methods),e.data?Me(t):D(t._data={},!0),e.computed&&Le(t,e.computed),e.watch&&e.watch!==Qi&&De(t,e.watch)}function $e(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[],i=!t.$parent;i||F(!1);for(var a in e)!function(i){o.push(i);var a=tt(i,e,n,t);U(r,i,a),i in t||Ce(t,"_props",i)}(a);F(!0)}function Me(t){var e=t.$options.data;e=t._data="function"==typeof e?Pe(e,t):e||{},s(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);o--;){var i=n[o];r&&m(r,i)||j(i)||Ce(t,"_data",i)}D(e,!0)}function Pe(t,e){M();try{return t.call(e,e)}catch(t){return it(t,e,"data()"),{}}finally{P()}}function Le(t,e){var n=t._computedWatchers=Object.create(null),r=oa();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;r||(n[o]=new Ja(t,a||O,O,Ya)),o in t||Ne(t,o,i)}}function Ne(t,e,n){var r=!oa();"function"==typeof n?(Ka.get=r?Fe(e):Ie(n),Ka.set=O):(Ka.get=n.get?r&&!1!==n.cache?Fe(e):Ie(n.get):O,Ka.set=n.set||O),Object.defineProperty(t,e,Ka)}function Fe(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),sa.target&&e.depend(),e.value}}function Ie(t){return function(){return t.call(this,this)}}function Re(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?O:Li(e[n],t)}function De(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o-1)return this;var n=w(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}function qe(t){t.mixin=function(t){return this.options=Z(this.options,t),this}}function ze(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Z(n.options,t),a.super=n,a.options.props&&Je(a),a.options.computed&&Ke(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Ri.forEach(function(t){a[t]=n[t]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=x({},a.options),o[r]=a,a}}function Je(t){var e=t.options.props;for(var n in e)Ce(t.prototype,"_props",n)}function Ke(t){var e=t.options.computed;for(var n in e)Ne(t.prototype,n,e[n])}function Ye(t){Ri.forEach(function(e){t[e]=function(t,n){return n?("component"===e&&s(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}})}function Xe(t){return t&&(t.Ctor.options.name||t.tag)}function Ze(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Qe(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var u=Xe(a.componentOptions);u&&!e(u)&&tn(n,i,r,o)}}}function tn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,y(n,e)}function en(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=nn(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=nn(e,n.data));return rn(e.staticClass,e.class)}function nn(t,e){return{staticClass:on(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function rn(t,e){return o(t)||o(e)?on(t,an(e)):""}function on(t,e){return t?e?t+" "+e:t:e||""}function an(t){return Array.isArray(t)?un(t):c(t)?cn(t):"string"==typeof t?t:""}function un(t){for(var e,n="",r=0,i=t.length;r-1?Au[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Au[t]=/HTMLUnknownElement/.test(e.toString())}function ln(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function pn(t,e){var n=document.createElement(t);return"select"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function hn(t,e){return document.createElementNS(xu[t],e)}function dn(t){return document.createTextNode(t)}function vn(t){return document.createComment(t)}function yn(t,e,n){t.insertBefore(e,n)}function mn(t,e){t.removeChild(e)}function gn(t,e){t.appendChild(e)}function bn(t){return t.parentNode}function _n(t){return t.nextSibling}function wn(t){return t.tagName}function xn(t,e){t.textContent=e}function Sn(t,e){t.setAttribute(e,"")}function On(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?y(a[n],i):a[n]===i&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}function En(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&kn(t,e)||i(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function kn(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n.attrs)&&n.type,i=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===i||ju(r)&&ju(i)}function An(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=r);return a}function jn(t,e){(t.data.directives||e.data.directives)&&Cn(t,e)}function Cn(t,e){var n,r,o,i=t===$u,a=e===$u,u=Tn(t.data.directives,t.context),c=Tn(e.data.directives,e.context),s=[],f=[];for(n in c)r=u[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,Mn(o,"update",e,t),o.def&&o.def.componentUpdated&&f.push(o)):(Mn(o,"bind",e,t),o.def&&o.def.inserted&&s.push(o));if(s.length){var l=function(){for(var n=0;n-1?Nn(t,e,n):mu(e)?wu(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):du(e)?t.setAttribute(e,yu(e,n)):bu(e)?wu(n)?t.removeAttributeNS(gu,_u(e)):t.setAttributeNS(gu,e,n):Nn(t,e,n)}function Nn(t,e,n){if(wu(n))t.removeAttribute(e);else{if(Ji&&!Ki&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}function Fn(t,e){var n=e.elm,i=e.data,a=t.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var u=en(e),c=n._transitionClasses;o(c)&&(u=on(u,an(c))),u!==n._prevClass&&(n.setAttribute("class",u),n._prevClass=u)}}function In(t){function e(){(a||(a=[])).push(t.slice(d,o).trim()),d=o+1}var n,r,o,i,a,u=!1,c=!1,s=!1,f=!1,l=0,p=0,h=0,d=0;for(o=0;o=0&&" "===(y=t.charAt(v));v--);y&&Ru.test(y)||(f=!0)}}else void 0===i?(d=o+1,i=t.slice(0,o).trim()):e();if(void 0===i?i=t.slice(0,o).trim():0!==d&&e(),a)for(o=0;o-1?{exp:t.slice(0,ou),key:'"'+t.slice(ou+1)+'"'}:{exp:t,key:null};for(nu=t,ou=iu=au=0;!nr();)ru=er(),rr(ru)?ir(ru):91===ru&&or(ru);return{exp:t.slice(0,iu),key:t.slice(iu+1,au)}}function er(){return nu.charCodeAt(++ou)}function nr(){return ou>=eu}function rr(t){return 34===t||39===t}function or(t){var e=1;for(iu=ou;!nr();)if(t=er(),rr(t))ir(t);else if(91===t&&e++,93===t&&e--,0===e){au=ou;break}}function ir(t){for(var e=t;!nr()&&(t=er())!==e;);}function ar(t,e,n){uu=n;var r=e.value,o=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return Zn(t,r,o),!1;if("select"===i)sr(t,r,o);else if("input"===i&&"checkbox"===a)ur(t,r,o);else if("input"===i&&"radio"===a)cr(t,r,o);else if("input"===i||"textarea"===i)fr(t,r,o);else if(!Ui.isReservedTag(i))return Zn(t,r,o),!1;return!0}function ur(t,e,n){var r=n&&n.number,o=Jn(t,"value")||"null",i=Jn(t,"true-value")||"true",a=Jn(t,"false-value")||"false";Bn(t,"checked","Array.isArray("+e+")?_i("+e+","+o+")>-1"+("true"===i?":("+e+")":":_q("+e+","+i+")")),qn(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Qn(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Qn(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Qn(e,"$$c")+"}",null,!0)}function cr(t,e,n){var r=n&&n.number,o=Jn(t,"value")||"null";o=r?"_n("+o+")":o,Bn(t,"checked","_q("+e+","+o+")"),qn(t,"change",Qn(e,o),null,!0)}function sr(t,e,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",i="var $$selectedVal = "+o+";";i=i+" "+Qn(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),qn(t,"change",i,null,!0)}function fr(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,u=o.trim,c=!i&&"range"!==r,s=i?"change":"range"===r?Du:"input",f="$event.target.value";u&&(f="$event.target.value.trim()"),a&&(f="_n("+f+")");var l=Qn(e,f);c&&(l="if($event.target.composing)return;"+l),Bn(t,"value","("+e+")"),qn(t,s,l,null,!0),(u||a)&&qn(t,"blur","$forceUpdate()")}function lr(t){if(o(t[Du])){var e=Ji?"change":"input";t[e]=[].concat(t[Du],t[e]||[]),delete t[Du]}o(t[Uu])&&(t.change=[].concat(t[Uu],t.change||[]),delete t[Uu])}function pr(t,e,n){var r=cu;return function o(){null!==e.apply(null,arguments)&&dr(t,o,n,r)}}function hr(t,e,n,r){if(Bu){var o=Ga,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}cu.addEventListener(t,e,ta?{capture:n,passive:r}:n)}function dr(t,e,n,r){(r||cu).removeEventListener(t,e._wrapper||e,n)}function vr(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},o=t.data.on||{};cu=e.elm,lr(n),dt(n,o,hr,dr,pr,e.context),cu=void 0}}function yr(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,i,a=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};o(c.__ob__)&&(c=e.data.domProps=x({},c));for(n in u)n in c||(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),i===u[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=i;var s=r(i)?"":String(i);mr(a,s)&&(a.value=s)}else if("innerHTML"===n&&Ou(a.tagName)&&r(a.innerHTML)){su=su||document.createElement("div"),su.innerHTML=""+i+"";for(var f=su.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;f.firstChild;)a.appendChild(f.firstChild)}else if(i!==u[n])try{a[n]=i}catch(t){}}}}function mr(t,e){return!t.composing&&("OPTION"===t.tagName||gr(t,e)||br(t,e))}function gr(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}function br(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return d(n)!==d(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}function _r(t){var e=wr(t.style);return t.staticStyle?x(t.staticStyle,e):e}function wr(t){return Array.isArray(t)?S(t):"string"==typeof t?Gu(t):t}function xr(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=_r(o.data))&&x(r,n);(n=_r(t.data))&&x(r,n);for(var i=t;i=i.parent;)i.data&&(n=_r(i.data))&&x(r,n);return r}function Sr(t,e){var n=e.data,i=t.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var a,u,c=e.elm,s=i.staticStyle,f=i.normalizedStyle||i.style||{},l=s||f,p=wr(e.data.style)||{};e.data.normalizedStyle=o(p.__ob__)?x({},p):p;var h=xr(e,!0);for(u in l)r(h[u])&&zu(c,u,"");for(u in h)(a=h[u])!==l[u]&&zu(c,u,null==a?"":a)}}function Or(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Xu).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Er(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Xu).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function kr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&x(e,Zu(t.name||"v")),x(e,t),e}return"string"==typeof t?Zu(t):void 0}}function Ar(t){ac(function(){ac(t)})}function jr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Or(t,e))}function Cr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Er(t,e)}function Tr(t,e,n){var r=$r(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var u=o===tc?rc:ic,c=0,s=function(){t.removeEventListener(u,f),n()},f=function(e){e.target===t&&++c>=a&&s()};setTimeout(function(){c0&&(n=tc,f=a,l=i.length):e===ec?s>0&&(n=ec,f=s,l=c.length):(f=Math.max(a,s),n=f>0?a>s?tc:ec:null,l=n?n===tc?i.length:c.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===tc&&uc.test(r[nc+"Property"])}}function Mr(t,e){for(;t.length1}function Rr(t,e){!0!==e.data.show&&Lr(e)}function Dr(t,e,n){Ur(t,e,n),(Ji||Yi)&&setTimeout(function(){Ur(t,e,n)},0)}function Ur(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,u=0,c=t.options.length;u-1,a.selected!==i&&(a.selected=i);else if(E(Vr(a),r))return void(t.selectedIndex!==u&&(t.selectedIndex=u));o||(t.selectedIndex=-1)}}function Br(t,e){return e.every(function(e){return!E(e,t)})}function Vr(t){return"_value"in t?t._value:t.value}function Hr(t){t.target.composing=!0}function Gr(t){t.target.composing&&(t.target.composing=!1,Wr(t.target,"input"))}function Wr(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function qr(t){return!t.componentInstance||t.data&&t.data.transition?t:qr(t.componentInstance._vnode)}function zr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?zr(se(e.children)):t}function Jr(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[Ti(i)]=o[i];return e}function Kr(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function Yr(t){for(;t=t.parent;)if(t.data.transition)return!0}function Xr(t,e){return e.key===t.key&&e.tag===t.tag}function Zr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qr(t){t.data.newPos=t.elm.getBoundingClientRect()}function to(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}function eo(t,e){var n=e?Ic(e):Nc;if(n.test(t)){for(var r,o,i,a=[],u=[],c=n.lastIndex=0;r=n.exec(t);){o=r.index,o>c&&(u.push(i=t.slice(c,o)),a.push(JSON.stringify(i)));var s=In(r[1].trim());a.push("_s("+s+")"),u.push({"@binding":s}),c=o+r[0].length}return c=0&&a[o].lowerCasedTag!==u;o--);else o=0;if(o>=0){for(var c=a.length-1;c>=o;c--)e.end&&e.end(a[c].tag,n,r);a.length=o,i=o&&a[o-1].tag}else"br"===u?e.start&&e.start(t,[],!0,n,r):"p"===u&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}for(var o,i,a=[],u=e.expectHTML,c=e.isUnaryTag||Ni,s=e.canBeLeftOpenTag||Ni,f=0;t;){if(o=t,i&&ts(i)){var l=0,p=i.toLowerCase(),h=es[p]||(es[p]=new RegExp("([\\s\\S]*?)(]*>)","i")),d=t.replace(h,function(t,n,r){return l=r.length,ts(p)||"noscript"===p||(n=n.replace(//g,"$1").replace(//g,"$1")),as(p,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""});f+=t.length-d.length,t=d,r(p,f-l,f)}else{var v=t.indexOf("<");if(0===v){if(Zc.test(t)){var y=t.indexOf("--\x3e");if(y>=0){e.shouldKeepComment&&e.comment(t.substring(4,y),f,f+y+3),n(y+3);continue}}if(Qc.test(t)){var m=t.indexOf("]>");if(m>=0){n(m+2);continue}}var g=t.match(Xc);if(g){n(g[0].length);continue}var b=t.match(Yc);if(b){var _=f;n(b[0].length),r(b[1],_,f);continue}var w=function(){var e=t.match(Jc);if(e){var r={tagName:e[1],attrs:[],start:f};n(e[0].length);for(var o,i;!(o=t.match(Kc))&&(i=t.match(Wc)||t.match(Gc));)i.start=f,n(i[0].length),i.end=f,r.attrs.push(i);if(o)return r.unarySlash=o[1],n(o[0].length),r.end=f,r}}();if(w){!function(t){var n=t.tagName,o=t.unarySlash;u&&("p"===i&&Hc(n)&&r(i),s(n)&&i===n&&r(n));for(var f=c(n)||!!o,l=t.attrs.length,p=new Array(l),h=0;h=0){for(S=t.slice(v);!(Yc.test(S)||Jc.test(S)||Zc.test(S)||Qc.test(S)||(O=S.indexOf("<",1))<0);)v+=O,S=t.slice(v);x=t.substring(0,v)}v<0&&(x=t),x&&n(x.length),e.chars&&x&&e.chars(x,f-x.length,f)}if(t===o){e.chars&&e.chars(t);break}}r()}function co(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:To(e),rawAttrsMap:{},parent:n,children:[]}}function so(t,e){function n(t){if(r(t),f||t.processed||(t=po(t,e)),u.length||t===i||i.if&&(t.elseif||t.else)&&wo(i,{exp:t.elseif,block:t}),a&&!t.forbidden)if(t.elseif||t.else)bo(t,a);else{if(t.slotScope){var n=t.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[n]=t}a.children.push(t),t.parent=a}t.children=t.children.filter(function(t){return!t.slotScope}),r(t),t.pre&&(f=!1),jc(t.tag)&&(l=!1);for(var o=0;o>>0}function ci(t){return 1===t.type&&("slot"===t.tag||t.children.some(ci))}function si(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return ti(t,e,si,"null");if(t.for&&!t.forProcessed)return ni(t,e,si);var r=t.slotScope===_s?"":String(t.slotScope),o="function("+r+"){return "+("template"===t.tag?t.if&&n?"("+t.if+")?"+(fi(t,e)||"undefined")+":undefined":fi(t,e)||"undefined":Xo(t,e))+"}",i=r?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+o+i+"}"}function fi(t,e,n,r,o){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var u=n?e.maybeComponent(a)?",1":",0":"";return""+(r||Xo)(a,e)+u}var c=n?li(i,e.maybeComponent):0,s=o||hi;return"["+i.map(function(t){return s(t,e)}).join(",")+"]"+(c?","+c:"")}}function li(t,e){for(var n=0,r=0;r':'
      ',Lc.innerHTML.indexOf(" ")>0}function Si(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}/*! + * Vue.js v2.6.10 + * (c) 2014-2019 Evan You + * Released under the MIT License. + */ +var Oi=Object.freeze({}),Ei=Object.prototype.toString,ki=v("slot,component",!0),Ai=v("key,ref,slot,slot-scope,is"),ji=Object.prototype.hasOwnProperty,Ci=/-(\w)/g,Ti=g(function(t){return t.replace(Ci,function(t,e){return e?e.toUpperCase():""})}),$i=g(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Mi=/\B([A-Z])/g,Pi=g(function(t){return t.replace(Mi,"-$1").toLowerCase()}),Li=Function.prototype.bind?_:b,Ni=function(t,e,n){return!1},Fi=function(t){return t},Ii="data-server-rendered",Ri=["component","directive","filter"],Di=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],Ui={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Ni,isReservedAttr:Ni,isUnknownElement:Ni,getTagNamespace:O,parsePlatformTagName:Fi,mustUseProp:Ni,async:!0,_lifecycleHooks:Di},Bi=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/,Vi=new RegExp("[^"+Bi.source+".$_\\d]"),Hi="__proto__"in{},Gi="undefined"!=typeof window,Wi="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,qi=Wi&&WXEnvironment.platform.toLowerCase(),zi=Gi&&window.navigator.userAgent.toLowerCase(),Ji=zi&&/msie|trident/.test(zi),Ki=zi&&zi.indexOf("msie 9.0")>0,Yi=zi&&zi.indexOf("edge/")>0,Xi=(zi&&zi.indexOf("android"),zi&&/iphone|ipad|ipod|ios/.test(zi)||"ios"===qi),Zi=(zi&&/chrome\/\d+/.test(zi),zi&&/phantomjs/.test(zi),zi&&zi.match(/firefox\/(\d+)/)),Qi={}.watch,ta=!1;if(Gi)try{var ea={};Object.defineProperty(ea,"passive",{get:function(){ta=!0}}),window.addEventListener("test-passive",null,ea)}catch(t){}var na,ra,oa=function(){return void 0===na&&(na=!Gi&&!Wi&&void 0!==t&&(t.process&&"server"===t.process.env.VUE_ENV)),na},ia=Gi&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,aa="undefined"!=typeof Symbol&&$(Symbol)&&"undefined"!=typeof Reflect&&$(Reflect.ownKeys);ra="undefined"!=typeof Set&&$(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ua=O,ca=0,sa=function(){this.id=ca++,this.subs=[]};sa.prototype.addSub=function(t){this.subs.push(t)},sa.prototype.removeSub=function(t){y(this.subs,t)},sa.prototype.depend=function(){sa.target&&sa.target.addDep(this)},sa.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;edocument.createEvent("Event").timeStamp&&(Wa=function(){return qa.now()})}var za=0,Ja=function(t,e,n,r,o){this.vm=t,o&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++za,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ra,this.newDepIds=new ra,this.expression="","function"==typeof e?this.getter=e:(this.getter=T(e),this.getter||(this.getter=O)),this.value=this.lazy?void 0:this.get()};Ja.prototype.get=function(){M(this);var t,e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;it(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&<(t),P(),this.cleanupDeps()}return t},Ja.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Ja.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Ja.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():je(this)},Ja.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||c(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){it(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},Ja.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Ja.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},Ja.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var Ka={enumerable:!0,configurable:!0,get:O,set:O},Ya={lazy:!0},Xa=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Xa++,e._isVue=!0,t&&t._isComponent?Be(e,t):e.$options=Z(Ve(e.constructor),t||{},e),e._renderProxy=e,e._self=e,ye(e),fe(e),oe(e),xe(e,"beforeCreate"),St(e),Te(e),xt(e),xe(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(Ge),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=B,t.prototype.$delete=V,t.prototype.$watch=function(t,e,n){var r=this;if(s(e))return Ue(r,t,e,n);n=n||{},n.user=!0;var o=new Ja(r,t,e,n);if(n.immediate)try{e.call(r,o.value)}catch(t){it(t,r,'callback for immediate watcher "'+o.expression+'"')}return function(){o.teardown()}}}(Ge),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var o=0,i=t.length;o1?w(n):n;for(var r=w(arguments,1),o='event handler for "'+t+'"',i=0,a=n.length;iparseInt(this.max)&&tn(c,s[0],s,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},tu={KeepAlive:Qa};!function(t){var e={};e.get=function(){return Ui},Object.defineProperty(t,"config",e),t.util={warn:ua,extend:x,mergeOptions:Z,defineReactive:U},t.set=B,t.delete=V,t.nextTick=ft,t.observable=function(t){return D(t),t},t.options=Object.create(null),Ri.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,x(t.options.components,tu),We(t),qe(t),ze(t),Ye(t)}(Ge),Object.defineProperty(Ge.prototype,"$isServer",{get:oa}),Object.defineProperty(Ge.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ge,"FunctionalRenderContext",{value:Wt}),Ge.version="2.6.10";var eu,nu,ru,ou,iu,au,uu,cu,su,fu,lu=v("style,class"),pu=v("input,textarea,option,select,progress"),hu=function(t,e,n){return"value"===n&&pu(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},du=v("contenteditable,draggable,spellcheck"),vu=v("events,caret,typing,plaintext-only"),yu=function(t,e){return wu(e)||"false"===e?"false":"contenteditable"===t&&vu(e)?e:"true"},mu=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),gu="http://www.w3.org/1999/xlink",bu=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},_u=function(t){return bu(t)?t.slice(6,t.length):""},wu=function(t){return null==t||!1===t},xu={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Su=v("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Ou=v("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Eu=function(t){return"pre"===t},ku=function(t){return Su(t)||Ou(t)},Au=Object.create(null),ju=v("text,number,password,search,email,tel,url"),Cu=Object.freeze({createElement:pn,createElementNS:hn,createTextNode:dn,createComment:vn,insertBefore:yn,removeChild:mn,appendChild:gn,parentNode:bn,nextSibling:_n,tagName:wn,setTextContent:xn,setStyleScope:Sn}),Tu={create:function(t,e){On(e)},update:function(t,e){t.data.ref!==e.data.ref&&(On(t,!0),On(e))},destroy:function(t){On(t,!0)}},$u=new la("",{},[]),Mu=["create","activate","update","remove","destroy"],Pu={create:jn,update:jn,destroy:function(t){jn(t,$u)}},Lu=Object.create(null),Nu=[Tu,Pu],Fu={create:Pn,update:Pn},Iu={create:Fn,update:Fn},Ru=/[\w).+\-_$\]]/,Du="__r",Uu="__c",Bu=xa&&!(Zi&&Number(Zi[1])<=53),Vu={create:vr,update:vr},Hu={create:yr,update:yr},Gu=g(function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Wu=/^--/,qu=/\s*!important$/,zu=function(t,e,n){if(Wu.test(e))t.style.setProperty(e,n);else if(qu.test(n))t.style.setProperty(Pi(e),n.replace(qu,""),"important");else{var r=Ku(e);if(Array.isArray(n))for(var o=0,i=n.length;od?(l=r(n[m+1])?null:n[m+1].elm,g(t,l,n,h,m,i)):h>m&&_(t,e,p,d)}function S(t,e,n,r){for(var i=n;i\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Wc=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,qc="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+Bi.source+"]*",zc="((?:"+qc+"\\:)?"+qc+")",Jc=new RegExp("^<"+zc),Kc=/^\s*(\/?)>/,Yc=new RegExp("^<\\/"+zc+"[^>]*>"),Xc=/^]+>/i,Zc=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},rs=/&(?:lt|gt|quot|amp|#39);/g,os=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,is=v("pre,textarea",!0),as=function(t,e){return t&&is(t)&&"\n"===e[0]},us=/^@|^v-on:/,cs=/^v-|^@|^:/,ss=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,fs=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ls=/^\(|\)$/g,ps=/^\[.*\]$/,hs=/:(.*)$/,ds=/^:|^\.|^v-bind:/,vs=/\.[^.\]]+(?=[^\]]*$)/g,ys=/^v-slot(:|$)|^#/,ms=/[\r\n]/,gs=/\s+/g,bs=g(Uc.decode),_s="_empty_",ws=/^xmlns:NS\d+/,xs=/^NS\d+:/,Ss={preTransformNode:Lo},Os=[Rc,Dc,Ss],Es={model:ar,text:Fo,html:Io},ks={expectHTML:!0,modules:Os,directives:Es,isPreTag:Eu,isUnaryTag:Bc,mustUseProp:hu,canBeLeftOpenTag:Vc,isReservedTag:ku,getTagNamespace:sn,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(Os)},As=g(Do),js=/^([\w$_]+|\([^)]*?\))\s*=>|^function\s*(?:[\w$]+)?\s*\(/,Cs=/\([^)]*?\);*$/,Ts=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,$s={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ms={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Ps=function(t){return"if("+t+")return null;"},Ls={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Ps("$event.target !== $event.currentTarget"),ctrl:Ps("!$event.ctrlKey"),shift:Ps("!$event.shiftKey"),alt:Ps("!$event.altKey"),meta:Ps("!$event.metaKey"),left:Ps("'button' in $event && $event.button !== 0"),middle:Ps("'button' in $event && $event.button !== 1"),right:Ps("'button' in $event && $event.button !== 2")},Ns={on:Jo,bind:Ko,cloak:O},Fs=function(t){this.options=t,this.warn=t.warn||Dn,this.transforms=Un(t.modules,"transformCode"),this.dataGenFns=Un(t.modules,"genData"),this.directives=x(x({},Ns),t.directives);var e=t.isReservedTag||Ni;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Is=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(t){return function(e){function n(n,r){var o=Object.create(e),i=[],a=[],u=function(t,e,n){(n?a:i).push(t)};if(r){r.modules&&(o.modules=(e.modules||[]).concat(r.modules)),r.directives&&(o.directives=x(Object.create(e.directives||null),r.directives));for(var c in r)"modules"!==c&&"directives"!==c&&(o[c]=r[c])}o.warn=u;var s=t(n.trim(),o);return s.errors=i,s.tips=a,s}return{compile:n,compileToFunctions:wi(n)}}}(function(t,e){var n=so(t.trim(),e);!1!==e.optimize&&Ro(n,e);var r=Yo(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}})),Rs=Is(ks),Ds=(Rs.compile,Rs.compileToFunctions),Us=!!Gi&&xi(!1),Bs=!!Gi&&xi(!0),Vs=g(function(t){var e=ln(t);return e&&e.innerHTML}),Hs=Ge.prototype.$mount;Ge.prototype.$mount=function(t,e){if((t=t&&ln(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=Vs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=Si(t));if(r){var o=Ds(r,{outputSourceRange:!1,shouldDecodeNewlines:Us,shouldDecodeNewlinesForHref:Bs,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return Hs.call(this,t,e)},Ge.compile=Ds,e.a=Ge}).call(e,n(59),n(237).setImmediate)},function(t,e,n){var r=n(5)("unscopables"),o=Array.prototype;void 0==o[r]&&n(14)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,e){t.exports=!1},function(t,e,n){var r=n(56)("meta"),o=n(4),i=n(18),a=n(8).f,u=0,c=Object.isExtensible||function(){return!0},s=!n(3)(function(){return c(Object.preventExtensions({}))}),f=function(t){a(t,r,{value:{i:"O"+ ++u,w:{}}})},l=function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,r)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[r].i},p=function(t,e){if(!i(t,r)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[r].w},h=function(t){return s&&d.NEED&&c(t)&&!i(t,r)&&f(t),t},d=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:p,onFreeze:h}},function(t,e,n){t.exports={default:n(295),__esModule:!0}},function(t,e,n){t.exports={default:n(292),__esModule:!0}},function(t,e,n){var r=n(34),o=n(72);t.exports=n(33)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){var r=n(25),o=n(190),i=n(128),a=n(1),u=n(6),c=n(144),s={},f={},e=t.exports=function(t,e,n,l,p){var h,d,v,y,m=p?function(){return t}:c(t),g=r(n,l,e?2:1),b=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(i(m)){for(h=u(t.length);h>b;b++)if((y=e?g(a(d=t[b])[0],d[1]):g(t[b]))===s||y===f)return y}else for(v=m.call(t);!(d=v.next()).done;)if((y=o(v,g,d.value,e))===s||y===f)return y};e.BREAK=s,e.RETURN=f},function(t,e,n){var r=n(1),o=n(196),i=n(124),a=n(137)("IE_PROTO"),u=function(){},c=function(){var t,e=n(123)("iframe"),r=i.length;for(e.style.display="none",n(126).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" +
      +
      +

      看过的人还看了

      + ${ + recommendColumns.map(item=> { + return ` +
      +
      +
      ${item.column_title} +
      +

      + ${item.author_name}  ${item.author_intro} +

      +

      + 84讲 | ${item.sub_count} 人已学习 +

      +
      +
      + ¥${item.column_price / 100} + +
      +
      +
      + ` + }).join('') + } +
      + +
      +
      +

      Copyright © 2019, The Holding of GeekBang (Beijing) Co., Ltd. All rights reserved. + 极客邦控股(北京)有限公司 | 京 ICP 备 16027448号-3. 京公网安备 11010502037384号增值电信业务经营许可证

      +
      联系我们 +
      +
      +

      +
      + 010 - 53934972 +
      +
      +
      +

      +
      service@geekbang.org
      +
      +
      +

      +
      北京市朝阳区容和路1号院1号楼5层
      +
      +
      +
      +
      +
      + + + +
      + + +
      + +
      +
      + + + + + + \ No newline at end of file diff --git a/re/geekbang/routes/download/index.ts b/re/geekbang/routes/download/index.ts new file mode 100644 index 0000000..1fa2262 --- /dev/null +++ b/re/geekbang/routes/download/index.ts @@ -0,0 +1,17 @@ +import fs from 'fs' +import Koa from 'koa' +// import mount from 'koa-mount' +import statics from 'koa-static' + +const app = new Koa() + +app.use(statics(__dirname + '/source/')) + +const buf = fs.readFileSync(__dirname + '/source/index.htm') +app.use(async (ctx) => { + ctx.status = 200 + ctx.type = 'html' + ctx.body = buf +}) + +export default app diff --git a/re/geekbang/routes/download/source/index.htm b/re/geekbang/routes/download/source/index.htm new file mode 100644 index 0000000..e04a461 --- /dev/null +++ b/re/geekbang/routes/download/source/index.htm @@ -0,0 +1,2203 @@ + + + + + + + + + + + + + + + 极客时间-提升技术认知 + + + + + + + + + + + + + + +
      +
      +
      + + +
      +
      +
      +
      +
      +
      +

      极客时间,一种新的学习方式

      +

      极客时间是由极客邦科技精心打造的一款面向 IT + 领域的知识服务产品,旨在通过好内容、好产品、好服务帮助用户轻松学习、高效学习。

      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      聚合专家的精品课程

      +

      邀请左耳朵耗子、王争、杨晓峰、丁奇、winter + 等几十位顶级技术和行业专家,通过图文、音频、视频等方式,为你提供有干货、可实操、能借鉴的内容产品。

      +
      +
      +
      + + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      连接用户和专家的桥梁

      +

      + 极客时间提供了留言、社群、直播等方式,为用户和专家建立了紧密的连接。用户可以与专家交流学习心得,探讨技术问题,获取成长的最佳路径。

      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      沉浸式学习体验

      +

      + 精心设计的文章排版,个性化的阅读风格,为你打造沉浸式学习体验。你可以使用划线、评论、收藏的功能进行深度学习,也可以在碎片时间听音频,看视频。 +

      +
      +
      +
      + + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      精准的检索服务

      +

      + 你可以根据更新时间、订阅人数、价格、活动、热门标签等方式检索自己需要的课程和内容,还可以通过搜索服务直接搜索你需要的关键字,系统会从多个维度为你提供精准的搜索结果。 +

      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      全面的行业资讯

      +

      音频播客卖桃者说,采用独家视角,深度解析行业趋势及对互联网和 IT + 技术的所思所想。24 小时不间断更新的 Readhub 和极客新闻模块,为你提供最新的行业资讯及热点信息。

      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      Copyright © 2019, The Holding of GeekBang (Beijing) Co., Ltd. All rights + reserved. 极客邦控股(北京)有限公司 | 京 ICP 备 16027448号-3. 京公网安备 11010502037384号增值电信业务经营许可证

      +
      联系我们 +
      +
      +

      +
      + 010 - 53934972 +
      +
      +
      +

      +
      service@geekbang.org
      +
      +
      +

      +
      北京市朝阳区容和路1号院1号楼5层
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + +
      + +
      +
      + + + + + + \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/9.88a55aada0b5e3e79968.js b/re/geekbang/routes/download/source/static/9.88a55aada0b5e3e79968.js new file mode 100644 index 0000000..cad5731 --- /dev/null +++ b/re/geekbang/routes/download/source/static/9.88a55aada0b5e3e79968.js @@ -0,0 +1,2 @@ +webpackJsonp([9],{1018:function(t,e,i){var a=i(991);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("b2020554",a,!0,{})},1074:function(t,e,i){function a(t){i(1018)}var o=i(22)(i(950),i(1102),a,"data-v-70634a4f",null);t.exports=o.exports},1102:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:["common-header",t.theme]},[i("div",{staticClass:"common-header-wrapper"},[t._t("left"),t._v(" "),i("div",{staticClass:"icon-mobile",class:{"is-active":t.isMenuMobileShow},on:{click:function(e){t.isMenuMobileShow=!t.isMenuMobileShow}}},[i("span"),t._v(" "),i("span"),t._v(" "),i("span")]),t._v(" "),i("a",{staticClass:"common-logo",attrs:{href:"https://time.geekbang.org/"}}),t._v(" "),i("div",{staticClass:"info"},[i("div",{staticClass:"userinfo"},[t.loginUser?i("div",{staticClass:"profile"},[i("a",{attrs:{href:"//account.geekbang.org/dashboard?redirect="+encodeURIComponent(t.location)}},[i("i",{staticClass:"iconfont icon-profile"},[t._v("")])])]):i("span",{staticClass:"control"},[i("a",{staticClass:"mobile",attrs:{href:"//account.geekbang.org/signin?redirect="+encodeURIComponent(t.location)}},[t._v("\n 登录\n ")])])])]),t._v(" "),t._t("right"),t._v(" "),t.isMenuMobileShow?i("div",{staticClass:"menu-mobile"},[i("ul",t._l(t.menu,function(e,a){return i("li",{key:a},[i("a",{staticClass:"menu-item",attrs:{href:e.link}},[t._v(t._s(e.name))])])}),0)]):t._e()],2)])},staticRenderFns:[]}},1168:function(t,e){t.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wgARCABkAGEDAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAgEDAAn/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAD3oGIyEMyOEAhTiFNCEOMziEOIE3EcalMSHAGU4zKIRwRnHEAZiIE3GEYTMQiGJDURibBKaGYyECQRmAYxiCI4IBEOIcU2OAccUBBmIxDCZGgRnBCA0EQQTQgTM44hoQ0IQJQkCUojjQJxTjI4gyEGEyCI2GUgiACaGZ//xAAwEAACAgIBAwMDAgQHAAAAAAABAgADERIhEzFBBCJRFCMyYXEQUoHRQkNTVGKRwf/aAAgBAQABPwBX+nOR/igww38wPkaMYxZWwPJ7zT4iNWg5bmeoes458j/2as+FzxiCuqvJ3jeoqb2s3absWGORxOsUY79p9XX8GC2v8X/pFt14WAq8RDbsp7LFrtU+zsDHrzn+aNXUfzHIi2uft1/tGrKsQ5h9PWoLz0zZyB3lzu+UbxOn/wAZhdANeTiCn2EEyqgg7G2ZRBnP7z6hCh0Ey5bYSpRuS3MttUqRXVqR5lSs6Et8ysKgO4yDAiLllM6tSIWNQZp9Yf8AbL/3GtRfwlTtcMCEEHQy1UAHPxE9Ow7HvAHrH3IRWv3FPfvD7z7ORGzoa0HMOxGp8TqFDDyvUT5nWf8AklSaucpnx2lZVB7RgmI67HYSuvq2HJGAeMxles7hsgQ+rW0lCkFinavEoqtAYh+IUdCXJzAVYFu3HmOmQTKWcZXwZgQKEUjHeMXV8GfbFXLQWhEJQyi4uDsZ0qwvUIE6CWElW7GE6DCmfccRqcjvCFpQjOSZXcNChQd/ibj9JbZYThT2lhstPt5wMSkl81MDOho2H5BhFSfgmDAQa8GVUOpLA8QVFjsOwjP/AJacHE3KZDzAJ5GZpWF2ZOJv6f8A0jGqRDuzyu1SSQvAmAX2AxKkZXJZoiqW/SOUJ0B7S1igAm2E79xErwhcTU6ksPEoIIYNA+HKnkTar+WBK/U/me0r1pyEPEVam92Y2pTVJVvUGDToO1xdRmYNmQR+MKlnwvadQVnTMa4ERiuRLF49s0aahVBERBZws6XT9kLIBqIQ2dS2czcUVHzFsVqy4HiVjgvGsrDnIgUfnK7FcEEdot+G6enmbxN1JJgZTys5gRgS2IAxy48Su9WJSyXNrynz/eG77f6xQ9tWPIMROgmW8xBXyVM3K8dMfvN3+BAykaH9oa+mhKRLl6epHMV8DVvMAKqxjrXqX8z0ttRLC4eOIWqss+0nExofaYhFhKv47Q1KnKzKlP1/hcMsT/SOoM9MTtrniahHyssYlYhIqldabE4iqpJJ8GWe5tD2x/eZKZCwcEkQEivYT6i35n//xAAUEQEAAAAAAAAAAAAAAAAAAABw/9oACAECAQE/ACn/xAAUEQEAAAAAAAAAAAAAAAAAAABw/9oACAEDAQE/ACn/2Q=="},1169:function(t,e){t.exports="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QOKaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MCA3OS4xNjA0NTEsIDIwMTcvMDUvMDYtMDE6MDg6MjEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZDgyYTY5MDMtNjdmNC00M2Q1LWI0OGYtNWFmNzAxZmM2MDI4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI1OUZBQUQ3ODQ0NTExRTk4QTQ4QzZBRUJBNTZCMkMzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI1OUZBQUQ2ODQ0NTExRTk4QTQ4QzZBRUJBNTZCMkMzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjljYTU1NTczLWE1ZTAtNGRkZS05ZjAwLTkxYzcxZGNmZmIwYyIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjVjM2MxMDVmLTcyY2YtMTE3Yy1iNTljLWZiMDEzMDEzMmY1MCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAgICAgICAgICAgMDAwMDAwMDAwMBAQEBAQEBAgEBAgICAQICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//AABEIAGQAYQMBEQACEQEDEQH/xABxAAADAQEBAQAAAAAAAAAAAAACAwQBAAUKAQEBAAAAAAAAAAAAAAAAAAAABBAAAQIFAwIDBgYDAQEAAAAAARECACExQQNRYRJxIoGhE5HB0eEyBLFCUmKCI/DSFDNTEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwD7lcrgE4yJVSJGSbRGtD/zZcg5nkQPqWaLIIpuRAc7gG+jxZzGw5GfLyEAGMkdpJO/tMAvJgyDItFRCs5TKhbwFD8JzNaGAF4WwmupO0AIweiO8TlUC0peBgEhjh3cin+DWALhkKua5w6E9NRAEAXVNPGsBuPMAQFJrc77QFrGccnqmYuP4lvWsBR6Z/SPKA81zQ3jy3RZrqtYBz3ZULWiR/cmhoovARNx5DlBIlOYIWkrwFIZOTQo6XgCGVrj3EE2kT1qsB3qDG/kD0qLJbrARP8AWeeRLk6yHRekBQAuM62H8pwGs/8AAD8/n9ZNekA9uMNClon0tAcxmIAuNLFOo/TANflx8EUBNGnXpAK/6z/hdAMa3Hka4ElQlhc7g6QAcgcbv1S8O6x6QGMAYjnid76gJ7YCcOyAuLkQpNSoTxuYBDiWAm4398AeNwygNXuCyHtutAIDsbiTxcBL5nUiA2bXD9M77adYBjnNDQW3WRG+yQG48rsgLQVTqDNTc7QBHkAhofdpAHkYwYlJIP49wrKAn4Dfy+EA8hrHKC5DVUsEFE1gEPJx5QlCtVs0VRNYB2R7sjeJQe3UHU6QBFHiUi3zXWukBNnaPptP3QE7HHE9ZHwrKVxQQFbWhxDga00okAeZpcA2xVfAgygPPY1XhjlTuv4i14D0MGMYzyBJXXxFgNYBwAyPa4qEVE6JvpAJyt5vOKwRTeYDpV0gHehv5/KAkzYiQKKFou20A37d3JHkEJpSfIQFfMb+XxgIyUcXgEqkvBIBRyHJkBIPVE/L8oDf+YvfxDgF1I0XTaAZw9MBtppNd6+MAbsnojgQVOgUSK1HWAnGD1X8hQ7pb4iA3kG9s5dLzgGhXf2D8vv7aQDcD1dzkOvQjWAo/wCgbeX+0Ah2VvMAgkT006iAI8MbS0AyT8V13gENYXIiT1W3hAPawMHcFJ0Jt7NYBZ4MBcQZIiblLneAiD3c+bTKwInRPxgH43i6ki/VYCluRmVncHL4C+x2gBcOLFEtPbOsBD9wwtIJoVoTZICtmVox0M0sNesBP6vJoRdlA1nrAS83a+Q+EB6OTFzcXNkJamwHugHBhLeJ+p1KyQqVErQDFGHGQ6opart+sAg8weTio2A6aBZwC8hD0T6ZqPYiHqIA2tYZNaZdfiYBOfJib2taVNwV0OpgM+1c0CdD4fq3EBn3LySQxUBFE0BrM1gJshe9uMFS5q8uKXnAbhcn9bgZpW0ifMwFJwcCqSNR3W3O5gKPSw/pd7fnAOYSxSmnvHvgAZlc4868byuCLBIAXl2V5bMgpIBbA2ANoDiVRtRPwvPrALLWsyDHYqk/28ut4A3f1OKfBJbrrAC77VuYAtKEaKUtqbCALF9s1jUcJ2qoRVkTcQCXY3h4QOnfibCAIMxAibVvOZ0vYQAZcTBlD2XqhUSASam8AQfkdk4vXjuEB7V0CTgK/T38vnAAzIMmNaEgSULX5QCMZLGEmQlWVzc9YBv27u7mb+FnCsA8Y29zpTRAvhrAS5Gq8ZBIhZdQGwA5CcgmCN/Z00gCwZy3kENtN9oAX/cvdkYeLgO5aT7RtYwHZ/uHsxK0EuuiFJiyXEAn7cOyFxf2mXFZWK6UgHFpBQAkawD/AE5cyCDp4p0pAB6zv8T4QGHEcfFvIzVShCJOc94DsoQFmt+iGkBxHpYwV5VlRe7x1gMGaQNNuXygMa/ljconKar+bpAcw8moe0/MmkoCdy4hyQmsqL+OsAbcodjd2TCTXfpADhcrke0lt+RlQ6jWAe5wJVo49D75QDMeVrhNoBGpGp2gHHKHM48RsVW66QCfRH/0HsH+0Abc7Xuc0oaTqRJdNoAHHnkAAX39u/SADO5rAWmaa2odDrAKIGVOAADaol/ZpAZ6gY4NIkV6UWYTeA7JlGNwICrQUEhO0AbQPuWCyiXjotKQADEcYIKzsUgGlo9OQAOoE/qgDCPAAABvIartYQGHCcXaR3GiospmfQwBue1jBIL036bwAcT+o+fxgNfjaxXNkToAKILDeAXiyB0/zaoVvfpALORr8vB6HVZqjVlWkBLjGQOkSEXkhSv06WgKsmPm/kwEpuAKCxSAPjjJTLLSS7mxgGY342hGJL9pGuwgOc4cgChVVUE2gA5jmQvbJAhSimXWApLQAraXNNtoDHu5OClTYlVoFmYBDkLkdT5eN4A+bdfI/CAD+z0xzTz1su8BJiVezl4ql9IAcaeqF+ruoqU7lWdYC5npTSsq8d4CZnrLtf6t0gGOTj3ry8NbLOkBzOCX8EW9YAxx/Py52RPfOkBn9a3X+KwDWeqnd9P8tTVZVgCletqeMB39f5q3+n3wCez93lAf/9k="},1170:function(t,e,i){t.exports=i.p+"static/time/img/page1-img1.a023db4.png"},1171:function(t,e,i){t.exports=i.p+"static/time/img/page1-img2.b42f242.png"},1172:function(t,e,i){t.exports=i.p+"static/time/img/page1-img3.41e010c.png"},1173:function(t,e,i){t.exports=i.p+"static/time/img/page2-bg.af9a743.png"},1174:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjMAAABqCAMAAAB+kiDmAAAC+lBMVEUAAACdh2qdh2ueiGueiGueiGueiGueiGueiGueiGutlnfgx58RDwsHBgSchmkGBQQEBAOch2qeiGyfiWueiGwBAQEAAACeiGyeiGwHBwdGPC/nzqT9/f38/PzXv5jmzaPlzKL9/f3awpr+/v78/PzmzaTZwZmzoYb9/f3jyqG+rJK8pYJYTT7+/v7+/v7XwZz6+vr////ky6KzoIXPuZfjyqHfxp7fxp76+vr6+vr+/v7s7OzExMT////jyqH7+/vPz8/u7u7OtpD9/f3iyaD7+/vdxJzv7+/dxJzGroq8pYLa2trw8PDnzqRMTEz////89vHIs5Glln1+dWbfx59aV1Nya2DQupbYwZu3pYeShnItFl+unYLpysRmYVpbOnH9+PLjxL2cjnf+/Prnyr/jwLm/rIz//fb9+fb79e5QM2/gv7flx8JHK2tcPnhUN3NXNW1iRHpML2toQXBiO27///qIfWz38e3pw75hP3NtRnFAJGbguLPeta3WqKbIkpFpSHz07Ofju7lEJ2fWrarPnZzAiol1UoIzGWHqzsTbtLLbsKnv5uJ2S2/Ysa5uTHaSbIKebnqLWWw6H2XdurLNpKXGmpy3gICXY3DQpp+hfYutgIimd37Nopm+goavfYCXani0hIp5Wofq3tqYeJjFjI6AXHx8U3eRXm3Qq6q9pKmkiaHTop+BU21TMGb++vPivLXVrKO5jI7x08fHoKGvhpG1dn2RZnamcXWLXnVfNWWzkpfMlpWTcZOFZY6AX4i7iIVtToCEWHTczs7XyMe/lpqNa4+udnjSwMGggZm+kJIhC1rj19X42srDrrHJm5bFl5KbcoWaWmeBTGO4m6B1U3Z5RmGvlKOoiJKJUWX+5tXKtLS0mquXeIqLZXytaXShaXOkY2tmMVl4PFguD1S/q7cUAE/NvMLHtr2sjpvCkouHX4BxO2FOKmBHI1z/8N2KZIfBZn86HFqKS1XburjUtbXpxLTdlqSWUV3Ph5WSPlivUGp/PklPGUv9r2+cAAAATXRSTlMAAwZBEgwmLzgcU14FDAoIEA4ZFh8VGTQkHwj228eM6d6Ka5gn71BGzrweKg7r4z078tY5MMuZeE0Oo5dKuaNfX6Rkrq5wt7Kob12CuuFpG8MAACGJSURBVHja7NnvaxJxHMDxDH0QgWA93KycTtqiboTlD8geVA+P7/0DwYnEeSSBD449CjSCgyF1RPXAPQkngykxiEaEnIdMZcIQjgyFzT2LJj7xQXve93tnnYKzczPmwfcF22A+ffP5fr5fz2HYf2XCzto5AzEh57EzZphu/uZitZo9hNt9ETsLbsJjsZ6HJpbNeZfvkcMZePAg4HTcX/JPOhirjfAG71wlsbM0c+cugbqZwLRx3XfOgkG3Ao9ckyhGDeaGd2GGxKbC1bsey2mHjc95C2gGu7k/iWAuzy2Q2DRZcKvD5oQTxnkTjBIOLJ0iGViMxRPEE2b6LBCWE46apXvg3677TlEMgUfMlAouqtWcqphwOALRNPwVDoN+s46THUsWz0MSm1bzF8c+oPyB/l4iFEXRDEJTCjrS343dNf6QsZqv4FNpqj1ctIwVjSOsBaNkwnAMm0gmliMcA6nd9GXjNI03ZKwW4jaJTbdr8MFGdzQu+8CEgSMGUGs7h7XDndJaMplMsAzNUog2bWaXxhoyNi8eMtNv3m3TG43vplYMwgB6rdZo7Gdrh4c/IVgOx1Aqbdg49CdjWcS7ryHMzNn0LTUO0KMUw8IZU8o2UlXYTPaHKltbYxCK7a/G7teXjNXiuUZixuC16VhqTHagClMIC7jderOZyVRzKJp9VWN/d3M5wXKcUk0EqK679CVD4O8IjMNrRtGMvi9dByqaUgC21kw1MxXYTK7RyOVy8C/UrJV29va2WaDOmt6omXXpSMbmnicx45iD0ZhMOpIJUwoWJOpyqlktFMRqBvaSQaqonHaj0W42s9sst6kvGi0ZvP0ayoz7H9HYtU1GSWa5noIqUgG1khGhTLXabrdRPWIGfrSXVJ9sIlo0o5Mh8JQxmHlCuT3pTIbhsqlUK1VJpyswFrECiVv5fD1bb2cqiCi06rvqpKF7O41/dDIevMsYzu3FEdE4BpKBGex8kVstMc1LhUpGLECtrfLnjaOjo416qlsoSFKhK+STHE0hQGEfmcwifskzoKD52Gh8g8mwICkIsix3+bQkiWIBBiKjZH6Foo+jTzfy8P/ptNQVassM1ReNY8S7jDlIYgY0d9zlyXVLSwbZBO2vKUHo8sV0uiDCnUZIbZXfvULJPH4cDb0td+I8zGa9VaKZ3lxSDH8RVpKZIzEjmvccswfbB5NhwfZHWT7oSsViWqpUpK68+qn87uWvF2oz0WiozMeKPM+vtxMcRWmL8Kxp+JixmAl8ZTKohctDTyeHdslG2DDX/CgLBxIf5+EJJHUE5WBaQc3Aswl5shWPFWE1ByWO7o/Gecwyc+kOiRnUxWGnkx8oqD9osPftg7DeScdiPIyG78Bk3r97udKbM/AnFHq7Go/Hi8XvdYahVGH1dBp+MnlJzKiuXRhyOgV6r7/aAvzmjdxZ78SfxVAyvLCaf/9549XKyhOlGWWlCT0XYrFY8bWQ5Kge9cI99GS6gV9mDOw3O2ce2zYVx3EhwRASQgImgQTiPoVA3AKkCYlL/JMM2zmcLI0hNCm45G5D0muhayltadKkTRbaQBMGPWDtoAdpyjgWqIBAuQqFcpRRQBwrDCHgb56fHb/k2Y1scUhD+0pVHduJ7d/75Pf7/p7dngerU6UBllSmuZVMbuxQl8sNalPXgdHY8OIsZAbWJkAM0D32xajL5Q33vSnmp/tkeyeuMp16tGc6kiWTaLbhlen15XxmbHQ07AbMAEtzKJZdnE1MRCI9sDZ1C9BE+l0uV3jhGZigUHW6XCbNXHvUAB/RkiSaK1HPBLX9odhkLD86GvW6XeGucHg0k55Ocsz0tHDMiMWpfs7r8nqZL+vqEG3SRMMhc8r1mqM6knU1nmi28ZUJTc08s5JZG1v7OOxiveEubxiWpgQsTZCZB0rQLHZxzEQfhSkKJZorsDRz8rGXHU0zR7guQokGuZn7yg3wZKaQP+QFpcl7IOwNF2LZZGKiI9LS3t4e5IDpnoHlqTbRBQxNaOo1nhlkg28+mmb+b7qNSzSImfPxNPMRMMD5TNQVZgEzXm8UMtPBVSYIDUgwwM0AV9Ndf8gF9MsXPDMo0WyrTDOnbj16b/JI1xmXVSSaqzA38854PFfIrTFhl8/lBWlmLC8w09PS0tMTaUsWp4sg7/zxQPfMMAOYaX5JeEAYOZoLypumY09RdddAT1HG6nuQpIUuLVtsJFFl1wBFmTRVRFtIdDS1Ikhj2bL0PBykCftss8UouRaS1qgQTZKbXhABtimMmHqdd4qQaNDNSbEy1dXNrmby+dzHobDb5wp7veEohKaNg6anI1HMDo9ki4uzyWLSvjSx4HaxzV37GrFEc25F03TCHRrlorVarY5fIipkRFRptWJsKK2W1GwuLbYZlw58lnmTwZETvw0dmxJHReZAZvyzLVqtXic5QVUjSKBjSkTi26pETLUu3XrqyaILxkpT4550PJfP5UNeL8sCZlwMw/iXU8NcpolEEsliMdnxXDB4z+8dycTMZ2MDbueukGCC0RzNJRVzM6ocMAHiKoYAqSwcOvCCxmKunhkUZ/0m5yEnbA94bB3OTAkLKxwpJKMe7iTLjJHABK/QRCKZ1DNTJWKqdcaWU44Vi9MVcAoYpZln4uO5XH6M8bpYd9jldjP+pr54Kj3dmWjraEt09rbOzg2BhyTmPn32pf5PXmbD7oGfgQnGXPCNZQ74hFs0ioQuvDozDq3WWj5uuurMENKVVUQqZkZnheekC+h1iBnaQVJaC8qYJoIXt4vOAFYYKE7SE6QkJ4KvpdQzUyVi6nUL74JR14RGfE8snsnF8/6Ql2FdIMuA2ZnYfHpkJJsE0LT1tg0V+kbB83qzicQfn//Y9eSBT5595LfvhPej4nRDuQO+U6NCZhguWWbQHrbSsg2MguZfY4aokEVgBp2GHnx5AQiUMF5mYYgNpUqEREBkRP2XzMhHTL2uB8VJYObm8tJ0f+NdL65mMoUcSDMhNwsMLsOlmUJm5OGnge9taxleWFh7cXBmaWmpu94+c3juQPiH7x759lmBGVSczi9zwFtV/UGTAUvoYvgdGpTyjWXLFokTROKwM5NIKpnhl+TXmLgsIqy1VAJuoPkrqWDGaNWqZObv16YqEVOv604Xi9P5FQ90Nr4ZH09PxtdCDEgzrNflZn2epmjUP9WU3b+3t3Xol7HHeh8f/qC/f2ii/o/fa4eiT37x8o5vnxJqG+qcLikrTddolKp8lMvBMYKVNknFIPgNSJQkPcmXFnFBhzkQEmOGqhDHgMwp2WC+IQVcAiShQ6WJgtKDc4Xb4TURpS863CaUK5NCU1ydGcxzK4mYcp1xulicziwvTY0PzcXT8eVclAkxbtbNuZlQYf7Vx5P9Ps+h/pf6F35tTU7nol7mlcLydEePfa7rwCOPOL99ubFOamgEZk7dqtzOSC4HeUdKNgLmv8UMbTCXDmCmpczISdzK9VtGUK9IM4cSBb/jDqN81wTAcFgBWY6SDTJJrpZUwAyeiwjZso6kKGIqdDFkRnxyRpzOezMzklvJFUIhxsWyjNvtZpkGf9PHQ49n3TsGXD7PbEfxYP5Jl+eTCdB+d9ifH2V3+ZrfPrCvETc0V/J25iRgZ87SIKlmRvCOVp1cBHRaeWb0lCBr2bIBZ8YBxj1QYlJP6lTkGSPOkgm91UiLaYYWx5ow6inaZABQBWCa+VeYoeD1ICmJmAqdVzI0V5bbmcZHsyOZjXyuCTATYt0MQMbnY1in27f209hAoTjEPBNJDg99GR17MRHp6YjUL33pYdhdO7z3S0zw7aKdOV35Pyfi87gVDg9VjozeiKVmOA4QD+RQETPldpmS2hHYuNCUVvxcUg+WrSY4MafMz1jL4h7gmCbLrLuB4A4C0ww6VwLOzhjNWtFblBsu4p9gxorNGyiJmAqdxRuaCgsM/ipyYiS2PhnrC/lBbeKYYVmnM+x1ut2F4dG+F3Y/Xvi0NjGRLL7f2RYZHKyvv+ezH/v9jHNgao/UBIt2Zouqhzr10OyWXw5CBo8AbGYlW8jK99pkIdBBTAy60ksbHH2YFxQxY6EoMNIOwshnHYMRMQOXICB0OTNCp8U7ZqkHVsAMnMMhtQBJILndtIhHIGURU6E7Txemgs9FFvjuxtemY+sr6UJDU4Mn5OEKE2DG1xANRfvT2Xzhjex7mf7ajkjHY4+1dQy2t9fbu2uGZjf8zubfvpcwsw0xo+xmE0r6WJFALRMeAfBj1VRjRgffKx1ynUVfKggmgRwjJaxR4mdwmXTCUVHjZxKroolnRtgENyplhqgUujq0G8Y0AlJhxFTo0i3Q0FS0TY0PJuc3NtKZJn/TlMiMr2Eyld79anZ6cnJ358R7yx8FuZtOPYPPtdvt9sMf9Xd/s9Dc/MtHkBlJ4wRnZ7aomQW28NXeXMkMIRsBhwH8VGXGxGV+CTM0CYmhjHAPMd1AjihaITNGqly887aRQDbhy25DVkXPr3HAamjSKGcGO3hVZuAmhITSiKnQdVtOOBUyc2uJmfv3ba+fX11JZSb9TR4fwwAT7Pb5WE/f+PxIdrqYXYlPdw4G4yszwcHBwZbn6u324NLM+uczGxwzb23fhzVOVxxTYuYajQoF+GJiQBGRYQb5yoCmKjMUTwTGjFFwL0A2NKEiOBwTBgWmTdJQ5WtrheUhoeemLfC1wWjSySFC/G1mYNBQcVIaMRU6Zwt/y4n/hzN380/nFceXU6l4X1PIxzJAblCYPP7VVHp4uvh+bD2V7Wyp6V0fu6e7pra2tnumpn5x8tO639enmpt/7t+HN9tXccxAC3yxRqlQKLieg5ZMy+ER4GoCYUM5BWeGFojQYbXJBIiBk/kcJGbYNTmEt5o0yoQzU9HEOsQzJCwCM7Rey4MKVtjwC9aZrJQsM8LkjoHiJVxdAN8NXW0Am6FREDHlOlvCTGPd7MHVeGZ8ssnvYT0hhmFd7gFfw3L8IGCmc3pjJb17b0uwu3N9ZbiYTCYX59LDw4nD90e++Xlg19TaQ9tlmDlGNTMOMHzCfUqZ4iBsEefJuJs9yHpKmYFIQGgwP0PwMePGkRTyTgDuQwvbq4oWh6KCRaOFhDKhDhtuhMzAomsCO8l4YO5acGaQhMKG35WWMmMDTPINPpKCiCnXhcdvPeXkkxAzwIQ8MD8+HoNpxsMwoZDbybqcrH8yBUpTNraxMT//6vP2WvufvSMHgbj7Ty1LM92HB+O7Bpyej/fIM3OcSmZsYJD5X4FNmMF6TTP8Lc+Mg0MG7mGWaYSAHxSn2QzcoqVsIKuKlGGmok2XY0YDUOLxtBJARmyiJ7AZMwSyKDgzOvypDkAjlmiqRkw9M7DZRsyAynQwFUuNT/Y1eUCjHXKBLtvHsh5/38pqfHl5HJCyszVYE2xpbe1tbW1pD3KqmfnsufhAs9PTILmzffmJQtukihkrn9gN3OXL1iY8AnDyRidhRrQttIaHBmeGNvPuArEKK4cqZgzo1iXf6VVjBspSMZlGm8x6/pWZwKoz/i2izWZss6SHI2EgCCzRKIiYYp0hMHPiNt4D33fvHyMH0+Or431j3NwM4/X4nL7mZt/CwsbKampkZ+fur0fe67UHg3Z7z97edrAgMNO6sqPZ6V74YTvWN51ZYmaLMmbQTRwdmkKVBBENFXTJAhkBCTNCbNDNYRtihs8xeGcNaBUmg4FIUQhaJAIbCpwZWifLDPTYiBnUWNlo3OBgt2xRQNASzgxnmEjsOTAlEVOjEjM38cxs3/N+Op2Op5YnxxYawOyMl/U5naDobKx+/cLD+zs797/wxhM728DDnTXdwb17QZ5pF5jpXdixy8f+/B3OzCUiM6dpFIs2wC8/ul1fvW9Ct7xxZiAy/Aph0SQyo7NY+XJAV3b5evwrT5oI+Xa4CjOEyWzVWuSYIfjMRgLxc/wEzG2yvTb+1CKcVEaGT44ZSsgehBAOpRFTo9P4Sb0T+Tm9fY2/Z0eGl8dTy4Umjhl/iJvOa3ZObXz41RNPA2aefuGJnfv3t0V6d7bVtO3t5aAByaZm6fDctwOgiC28izOz7cRj/mLvzEKbiKIw/CLoQ9BHfRBBfRAFQRRUfBEUQQSVJJOZTIypKaYvMRCaWDHNAmahGmOJVRuJxo1qhTbEqnFBcN9QUFwQ9SFUpS64oLg1Injunbme5MbEC/ok/iiYNmY6N9+cc+45f6Y6MyMF+zOYJEhmFmIGV4tnRsE2rz5PUhgzcOk2kpFrL9Znhs9NDrMD99rcvonGMRpE0b+3TLYrjfszrCGOKaeZPq5lRtVqa7T1iK+YuKZoTT3DIjo7WHtg+wDstNNbtx7y+fz+JmgEe72erq7W13eKlJlId09xMBcPR8qlcBgKmg1EhJn9Qx6PJ9/J4gzODpAZYfsMGxySUxJhBqNyC8eMEffYrBpuxv7MMosNgKiVrDrYRph7e+ycKZmrgSkzKLOE0yGdGfrIbJQqXcGSwOyAVnZseoXuF2QG+ZaxFoYzF18xcS3RmaEO8rWrPh7bsetuZm/vqYAPeIGuntefupCKdjwhzETOxM90F0t3SolIIpGIJAuhYFBn5tH5G55WT/7+8+X8jBKZwXmTiBQZZ4cCzIDsDmNNbmqrXrhmWHGsZ4zSr8tcs/YtXHu1dtreIM7Q79vs2o/FM2O12IySWZY4V3ADZrB8wUBD2FAYJNXFDA0uuF0UXzFxTdKZmbacaPOmHft6H6b3bu0PQJzxdsLwILD1avee1PenkJt6gJlEqVQklU1fOOgqBIPBQoHkpkdH8ys8nmg+UMPMXMbMuJGCc21sBWOLXYgZNHEjM5JMAwaOJFk84F+Vf2XeGsgz06CeoaUQSv1ZMrMDOwjIpLqShWYHaMS02mUKAu3BcA1KLNiY6EZRfMXENUFnxjB9Oejm4YH0w0x2b3+qsxNyU6Ap701ldp3bfST9pEwDTSSS6M6d6YuHNxVgzhSk0AAz7z5BORONNt1/wX+Uchowo/X0Rgr6ZzAzU9kFmEHxzMCqcBJlBsMMc+1U7pvU39TA1EbOHVtibzTFBcf0DZnBnouxmSBBEzZ5bMKTwcjMmsuIkE14xcS1mDGzkDJzLAuezix0Z1Ipv9/n83ry/bsGbu2Mfd73lGanSATA6YuFY26Xu+AuhKAKpsy8HAJm2tdfucYxM96AzAj69DAzO+x0B1OHmTr+kbYqZkB/xkwbjh3q1cAODSMbMsMClFrnlSUZZwsCzJCeLZOF4GOiGQoNojg+s1VB6qCNbcEVE9dUGB5QZmgRfOByujebzfRfSB0KADOdTV35zMD2GJhkPu8pw24boAH1gc2qANC4C7EwZebou86h9mj0w/nrWpzBEniewUBmlMRBPnKU2MYJF0BZ2oIJWpQZ+a8yQ6glNMhKfWb4GthU5/JtwQFYG6ZdkThjYcV5s0KTnwX+8rMivL64VZStIiuGEh1SAjPUqLcum8kOpHtP9acO+SE1BTwd/eeOxbYFARBX6Wsxl8idux1J9MTDfcPDZ+KRwat9ScLMI+ezjigwc/beC+7WEPOBGeaFGIu3BRZCxk7/wQK4JMaMQq7fhsyoyAy3Gap1rak0MWk9HlWIGfRvU78BbwzG3rMDExOeXZ0vEMQcNtWq8WY1V9lFzRiKbL9cR0uL2IqJaxZhBqAZQz+ufXzv5WzviVOpVICUM+s7Tu/ZfXgTOPHcrtXxcinRUyrf+QZ6/x7+vC+Vum8ngy7XmndXhtrb26PPrj+uYEb7wHYlM8J3hVAxzCotxHACcvy2nrGBZ45uUqx1mGlmDn9L45GSGZEBKXTwrUmGQ2iCF6qcUaqq7mMyMfuwXNnEVvXcpdIylsgm4bk0w8vh2RnNZviCXHm6LSajxMU+rUltJsj/7EyY6nRHIT+JrJi4FuiN4DG0oLk2cBnCTOo+qYD9vta3J28dptWu0+lyDX6N9BTvlMsEl/fDX77Ew4VY/Agw82jNsxvtoGcPrj2vvj/a+DHADGsECxc0EpeZFZbLuctb5wCHRTjn45hBBKhsgsygkQbsWbws+IOwY7eRY6AcSCurXlX9CEbOvEAk4UP92XU3BzKNY/gshYUTTsznIbRi4pqtM2OYT5PT9uOZE6kArWa83nzvq52b3E7QamBm52B3pCdRLAEvRJCWQsnYkZB7I1QzXRBm2p89v3RpeVVqmjzGAHNtttkeJXr/RSMXZiHGcG5IBS7GWgMFVZvEMcO/Odixwc0QitrNsYhU8VqnoQNlQ2b0Y1uM+D5g9sHEQNIsLUu5FOfAs8OH+AUUK6AtaACUFWZYrxcr4FuS0IqJaybbOI1YTvRpV/qC71CKhJnW05kEQWY1kcu9zdkzmEjkct3F97nh4eF4OJYMbQFmXI+uD3UQZjrebr52sfrenTMMhBm2cRor/OFbu6m2xaEqvwtPUI20GDEf1C6SURP3EQd83RoaFbX2GEzWyqdLJpC16ilK1ZHBVEPjgCrb6dP407NbuYYOnggvqU3R9vLwv5SfZDQoDq2CKyauWeDuHA3MaMnpQHpvIHAfwkxT65ut525tAWRWEmacbpczNFjKaSIb7nD4SDKUTG7b+PnDUBcYIaIf/Kue31yLYYamJmAGC5oFS//rn9AcWgQDM9oNaI4f8h3s9PmaWqOnT94+ss1F/JuEGahptp38Wizmcgm65YZOcBIGTiGXc+ebG11dUWDm4NoXhBkMMxNpOYMFzaj/v4LyB3tn9+syGMfxi4mQGCISIt4lCEK8xQURbiQu5HG/yNqY1DSomjQzQlOmi3ndpFuo13C8xE7qCHOWcNiSopst83qOkNhkYrJdnMXi4kj8nlZXxF/Q9PM3fPL9/p4+7a/2YLk5BLsnIyC7+3XX3r0Bdnvg9LkzcZrsOENuUcI/Pt2TzocPwMUTVmY/QNPH5fuiFmNZofl2z9Mo9eeG4AV/OgPlNGLqBgdbsBQPNKMgaGYgzMMuiBlG2NaVKLZpEjYsRiIRqCZySzxZqrZUKWwUE26meBwe6x0qXfqgifi26cueHN/9R8zMMqsJDzR6ObmchXr2AC8UGY3Lyb0QAfmuvSe8DANvc548Eyn4sDJ4BCbpQ8qdZqWsnr8KvQTSHAJn6HgS9kOc2vS4JgjNE3kqyxHWNIPmGc6YH/mPHO4EjV2YNtwsJyNobu09wTBeZrc3xl6+WRgwYoYGPZQHnxtw7QQ5A9Lgbtq3PykrR+VENj9YE1Lf+I1ZgrAWMK51m9XUKacJLud3B/ZgpllO7ikI4C4HmYA3eBAWz8SER98Henw+XZl6X0NsVKpl6erVA0WYZ44fV2RZUY6WrudQbrDWeB2lct1WzCwe14kZq5ycoLEJSzrltAhhssy2ILzWye6E/VYC+2ogQtJwhS2pvVqsWalW+9VwvVQ8nEzKspwEZ9SX0W4qm9p97QXK81SnmVa6LWesk5PLOTrZg5njzKBZa7RT4Nix28dS23fu2rWTDWUGyDjdftJsah4xVHnzptoqp6VwuF4vJgFFaZ1DBLfnSu7K02wuT5nNNMWNnflrP7AeNOs3ONiB6Z2gGTsZAZsz6QsX+u5c7GV37dqxXfja3tK+VtM0UfSEeqsv+1utsir11UuQM+BMeCiLCKKb8l/h+GjUTxBIZ5keM5YzZtCMWLfBwQ6sgCkYOzPGvQphtt59Xjzuayfvp3buEMTBd4WTNU30eEKi2FvtLyfKZbUP9xN2Rm6dQriQKC7qpyiYZ5DOyrGWM9YaRhw0c5zzti2YNh/uD4ygWYkwG28oNOnr6bmTEkLs4w8ZXRkPG4SDU38CvrntOCN/ahnf2xIcRxCE37/ZaCZLmX+Cxmknu7DamGgmgTRTEIajSbhpihSKDY25fEIEZYDYtdefKz8SaVU1nAFppKH3CH7hD3BRnuM4Q5nJ492WM38fnWAMds5O9mB2Z6KZONeop4gP2FQ4+3n7Ea/m0Rncnbn2s/oprV6QsDOlUlEayiDKDxAb+SjP/1Zm8SorZixnzGc0I1zOSGMLps0fBtLoQbNqIcJs7vEBkXZADDIeg1jq4/tnP4fSF7AzQF1qZdAeMAbvOuIBUAazRldm1P/+R6m3k2vJBgcb8Kud+wlpMowDOI4y90dytv9O5woh/y/QkR6U2CBYZfJ4lzAxcBVeVuMthGDUYcVCwUMgnloIzYMHC4RBBAoK6g6hIZiCB6m7Bz32e/756F4aLyjC+/J8vXndh9/ved79aYFjcC02A2hCiJTFaBb21l69YWbSQx+mlwq/AM3HH7iV468wZRRM5hFeTYiTEZtJNWjIdqqUT2kMUdDFBw2fNCj18PHwxuTaU04mPbS1l1tfnsF3bWj/5yqah0PMAC6VGTghwzeTatCw7STRGKUGvJ1qKZoAIsUXhjdm16a4manE1my+sJRanTneX1k8XlxHT1IK2UzzSiaOSB0RDyHDzai3E0Uj15MRqmsENLVk0njCzYiWeZYYTHMzY+MTe9O5wmom9WXx8DCfQgqQGaAhWqAXk6FjRm2G3Z0Imlv9Mv13o9FUYYdBg9F4exAt/nkszdEkxoYmt/OFQiGbXP62kxyFvQQXJmgEserNHtVhRnWkoWjk7ckQcTRVGE0khGjK3Bg38/zF7nY+VygsZbPvMkkQwz6Ux+vxliBDt5NAI5/TGKK6BoHGY6lHrJG/n9J4QyVmJ3bzm7nccjb78uh1Kkme/44gXnMvI1PCzBk09+TbCEYoaHIwNHg/hRBPOfieGBzf2trNbeZ21jPK+6O3q0oyTsCIIVOKjDjSCDSVcj8ZoTutp9D4o+hUmT8Hv+d2gMzO8mgmm1Li6FQxCwwZQUYbGhg18tJtgK7DoeYEjdcSRVqKhb2ETDUjoxENVhOUC8oAdbU6KgANU+PvCaDSdUR9IEYTGYHG5a5ho6ZSqjFAN7pNjvb2doIGq+mN3kT/KxSL+L3eU3upNBlxEIaHe3TUQEH5sEb/dTa4OBqixt/UF1O7CT3oa/JzMWLIaEPjIPuJq7nfJQ82uu9asA2rucrUABu/NdIXrW8OhDo6QoH6WE+kyQ+RraSdjEBjBzR01IAawibYIr/JovdaGtqoGsFGRL0UiQEyGtGwQ43TLdRQN3dbOq/V9cv02/Xb3Y1hN582xXkoGCIGEmK07yeXzW02WxgbUaVMTzVB4XC4DWqFbDans53coSDPma5iMEKMIKN91FA1NVgNYSPTZ1arz2cxm902p8sEl26oGqribkRVFIxajPZRgxcUVcPZSDl6ywpiwIwFzNS4iRk7fDziCndTVDUDoxajfdTQWeNkbAAOluOzyvSUzwdkyJxhZuAHjVjVIs5FgDmfGsIG3AAcmf4yAxhzDSEDZsqhMuiKqnODEWrKKygbcANwILNMV8FL5nbbGBk7FYNpFMOh/z1/ZWzYABtw43I5gY5Mb8Gr5iJiMJnyIhpl5E90cWzADcBxmGR6DYthZDQTOT8bgANVyPSYHYO5NDLCDciR6Tl2lLnkymS67gII/ANZ0yDE3jn19wAAAABJRU5ErkJggg=="},1175:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfsAAABqCAMAAACMGAiyAAAC8VBMVEUAAACXgmaeiGueiGueiGueiGueiGueiGueiGueiGueiGviyaDky6IJCAadh2oQDgueiWwGBQQBAQGeiGwBAQF6aVOeiGsCAgIGBgadiGzZwZndxJzRuZPIs5P9/f34+PjnzqT8/PzFr4/////hyJ/KuJvmzaTlzKL8/PznzqTmzaPDrYv+/v7+/v719fX+/v7z8/PjyqH9/f3hyJ/+/v7t7e3q6urz8/PNzc3+/v7+/v7lzKL09PTNzc3nzqRMTEz///+lln3Is5F+dWYCDzMCEzUEGjkGHjwCFzdaVlMJIj/fx58BCTEPJ0He5/Li6vTb5e+ShnLYwZtya2DQupYSLUYFFjn46+z66OdmYVq3pYceM0sABSr+08WcjncaJj/27/L95OHy8vfV3+gZLkjY4uz+39f7/P7+4dxzk6mIfG04VGz9zb50ipuunYJHZX5of5Lq7/oiQFcmK0ECEir+29L3x7f4v7BWb4QnRl0iOVEOHzj919C/rIwrPFIAAiCHm6r71Mt7mrB+kqIuTWb49/n+2stfc4cUN1Ly9PzAxcwuM0mRo7JSaHyEobXrva+VlZlXeJIAAATN2uO6uLbWpJdPb4vLlIM+XHadq7hhgptGW29raWw7NUTP0M98eHrj5OWLq783PliowdOZtcloiqOUcWleX2MHLEgCAhLc29uenZ7hrZ05Sl7/7OTBwb+otb/ttKKBZ2xITV9IO07z+v7r7u7isqamj47RnYyPjYyBhISng35ZQkn+9vKwsLCqqanhl4oYGjP2zMX2tKbBkIW8i3m8fHFyV2GIXlbwqJqFhpSqeGlqTEk4LDbx2ti8oJl6Uku7z96lpKLIiHpsV3ZtOkhUMTwjFRvBo77LraX8k5TQZHBeSWsoIy+en6u8iquRZ43jeYOla2CPfz3n087dx82GPGjexlr/vPLz4+TcvraqPFj+2fvOvLWqcZqLT3nxnMyzvcN2ajnUq8a5olVWRRX3jcz//4CejU+tl0JS8hmvAAAAPnRSTlMABAkYECM9Ni1CRtufBAwHFAoNHRIHKBcdMXmRX1CQHPdIMu6tQe/Sx/vkHeXdMMxsy6W9rq6YiFbVm8O/bDnlatAAACFiSURBVHja7JlvaBJhHMf7s5cxerM3m2nOrdas9ReiAn36QxTUFkRENCoqkJLD63Yv7ibV0TnOrru47Agt5xkUbkooVDKUUno1GO1Fg80X0XohJDF60SiqVz3nuYqY6ZxTgueD+EZB4XO/7+/73C1DIOrNcsRiWfYfslylqWkFYjE0NS3VFWAw7tzWsWujyWTatHmHfovRUE3x8J+36ppbViEqpaWlpVnXblYvger679qywwT+ZtfuLYYqiTfr2tZZEFVg3Z4WnRn6r5J+4zYTKMYuvWGR6ptWNK5pW2tBVI8NW5tbG6ug36DfCP5Nh35x5nXrLYiqs74ZTv+i7Bt2gDIw6Sv6CTXtG9v3WBBLwtoWc2Pl9g3bwB8EeR+LU+IDu5fDMeHz3fPgN7YKZl81b26zIJaMtataK7WvB7+Ix/An/QTt7Le7iKlndrudph3Ot+/5ATDH5q5K4r7TglhK4Oyryb/gar8ZFBiIiQRB9PfTfTMvCO+1mSmXl4YXADE5KjKxIJhj9/IFDv3qVRbEUtOpy7e+yoY+yNJud797iCDsfZODtL0/ZD3tODEzQ5xO4vj0GIf9Gv5NxgWpb91qQdSAtvzaX8Cm75gzj9HXzp5wu8cnLxJ2ZzLp9B6KBUkHPT7uejryjmPHRJxhAjagoV+A+naU9zWis30h8o2bCmkv0AQxPtOnur/uosn0R9JLRsEgfTSkeFLHPRRHcYzAYsxc8nesKEu9eqZHR/qasba5/Nw3mkAe3uUmCPrVVGbIRfpDB11nE2Cs90kqIJHXImFrKtPnoBwci2EYjvvOFyqfoTz1OqS+lqxaXeboG4FGrHcIuifI5ITHfRa87BvqPRzZ75Eiw+HMMymdTlif2kWHg8PzYBcKN/q6ylDfoNtgQdSS7StV+eWqt9nEXucr2O8PjgPFI6WtcmY2m839iErDqcvZWWtaSTx1OURKpCiOu4NzVKzQ+LpKq0eBX3P2aI2vPPU9z8XhD2+dNOH2RMA7Ke0JpbPZ7Lecz69E/NlcYjoth2gHxeIUTkFgAPA2bfINJWpeQyt6blN79hQmv/SuH7jS/Vy8PjhD0jQMff5U1B86PO3/+j13lU+GZGn2zHQQgBDhgDX//h38Do5xFCPEBrSdX+pmHmr49aCt1M43bNLU91zpeU6RB8lTJOE65M/uuzmoKBHJ/yWX4PmJuDw9FrXFAZx7h3jjNjSPMYLAcBSrNT79v2/pbLcgak/pwtehqT+muhevD5Gp1LDb+SXHX/ArIT48dmavNAEgSWkg/Vqxcl6HKDziNPcsJ4qYNvlbirqH6pstiPrQ3ADll7ibZ+tW3d8Ue4dOZE7KntncF180HAkPgIAynTgHQDAVPw+kydHDmNdL+RhKdc8wGAV7n2ADEFNXsZ7X2NCOKn692LCmobGpmPyuQs07lnf/oBee6z3R6OuvMs+DPMFkODAijWbC8FuBeMjhFeGm5zB17lnKARs/y2srv2jPW4me1tePTnND0dTfDFR6urs19+QJwuXJpJKXw3J+nCdk+JbOjMqfgiDIJ6237lEYLPk4i7EMw2I4znGY726xlb8cJX7d0fpe8cQ/3625v/KAdF+jnRnY8RIyCKSi/qnJOPych+MvR0JWWT6LsyzOYZcYloWvmKC+C0IPUDHMm/ir0fGuvuhU+fN1fK3nqerz7u2kWz3dK0COAiBlpvwjI/DzeDySDCmH03xg4vppXISTz8YYDFa9mO/SbZ8gCA/zGbFj/sRHj23rS6d5/pW/TUv8Ofc9eff0sAKCYTjqijrz4ZSiKFJkIhhIByPWvuEjBw5ePG1nhMeMTwgEfDduQ268ASrG+To+Kno/2TfXn7bKOI5n4hJfqDEh7oXznmjUqPGWmKjx0NOetqcXZ69SKK0gtwIycbSMQlcpzOtGYaPUlYtWKBMGIuzCYMzNTdhIkLlLovHF3pj5Ykv8G/w9zzmHHz1thQpmS9x3G9DTZ0+fcz7P9/f8fs853GxtTRv1HxEjvsi+blub1g+3cmxX+5eWSJpXMnK64+DSTNfMsVO7Tx871NvfdTXodAaDzvrC1lBoz57PRz5vDxH68Tp6Sy/F9vfemXP7Ea2brUcfJ/DT2r5iG/V9mcD+08ZG/7fDvx3v6u/v+IrnYY0f//pQXl7v118d7Do1c3VYp3Y6nQanU1P9yQftB77/HtgTDaDxk23/+G3b33TdnYO5vsz2gF5iX8192ljIGZzD/eMzfO/uy5f7x0/05/X2X+44NH65o29f0K7jDAaD02AI1hfuhQq/PeTxvO/xeATjvyG3/e3V/lbQ02mM/7Boe2m9B/aaT41Og8oeHB4/fWhkZvexE3kdvTOXD42PdHV8sQ/Wes4A/1QEv1rthxq/3UOUCA0Kdd7zcttvvp3k3wIC498rM/6z1PaEPaiM5Ho9Gp0Ad9/pEyN5/MyJpRNd4xD+Dx0Z3hc0qFRNWo7jmtxNhL4Kwj5s7XlCIQ/8GSihNb7c9rdr+1tBT26RG/8xIclH30N97xTQq4avnuo6NTLeNdLff6p3xzBY3uAE6tozJ/v6+k6edBP/O52f7Onp9HjaPaFEYoAa/1mZ7XNv/xrGLaEH5MZ/jdA6uoJ93dG2IKCnXIN874mOma8O7gjuA8fDdHCqtDvczouLQxdPLgydbGoywEHj3u07PaH2ONAfvFQhy/ZIbf9/y/T0N72D9HoxV2Z8etu+bgV7eGTLCejB9gB/eHgfaJhEevLXYGhy7zhzMTox9PPCufmFpS/cTrsxqN5J8rzBds/gwEAZfWI/aUsvN7uQr2AYxZsohmEyNGQZRgnfzMqCtG8rGYbN8P8sVdhIaU3baPloLZtxgCh9QZULX5kcOKLVheeCQ5dOyapQ4uH163GS6svu4lQQ9EKi/1bettIgx2nB9oQ2RS4J0Gvd7jMXfwz7hi4uTs/98fMRpslpKwz6W0OJ+GDIM3jpEi3znlsZ8nNys7hvnz17KzSQXepV2BcwTNWK3s3p2ph5JT1udWDb9AM0s7UmC8Pgh9ERmaEVCt92KZNlTcfeDM2t0k/Q1YbpATD+/Qj/BcLqM4JdqPHq8vYOc8DeTtnTL4I4Mg04rfbqH9NhX3hxMToRXVw4udDn5A7bnNs9IQj57QP7L8V3i5v6GPKzyvKz930tI4O8GnsXw9RiF460barEN8zYeeoAgZ2FkYRzBI653szAXik/mo69AkdlwbFugF7PzVkZ9F8hqODerYD+7bK8gWEnBwLQAvtl9BwH5LVL5ybCvqLI4lzD6Pz80M9DC5zhm576wlh7nNge2L8nPsOBIf+hLEaXNXuQiWF4DNyrs3egl2DemDJ0zQSkSaDMNEBEyCtrrSumFq9fM3vam4y9A4HX4pzaAD16lxT0cbl/770yoE/QH4WIbyeQReqGZfLkqEb1a7RmosZXFP0jUgTs5xeGFvsMpdU2rqc97mlvH7g0EBrABZ/YPsvlHi8tqxDEwEtBSBLZS+awYHq0GnsztEaLAuJU6R1wyaXW2ETOnkJXmhQByh1XFCYgtGLTj4Wlk0NSKvsC8j4Oln9z4/SgGPRxud+9n8KHiP9WRU/QSA1OqYP7OTHeq7WcRmO4Ol3s89U0NFw5F/aOzkfnFhev8KpdhX5tKanxYoMDg4l28REODPnZ7OWzLGsCL7KsWe4bjAYp7M28LDBmZl9Aw7RDCSoQwFqUkrAVmJ03J9kYhezThqQAQyJ+evb4QkEaKDOwd5ALwKAwRqxbW8Wgj9X9McIe4L9dVnGg3qgD9GqOsrdT9jAX4LadXadznomWF/m8vomJaLTGO3olOjc/H53kDo/tMjZ9Eo/FPMDek8gj2iSyv/e+nM3ZPLCDoNfOHoii8VZhr0jqLvkzkhoFMAasjCpJw0lij643SZ3UspIsK8YSIJOJzi+XjD12Yf6P2L+8eUXQf5Uu9xL7bdvG1KV2Tq0B9kSQ8XEQ7gl/HWzj1c9+97Gv2dvgGz0X+bh8KhqNTk/PD7n5Mf9Y6YfvxzqBfTyRKKHJHi73W9b2+xhy9mZWEDlpQWbqW5SFhlxU1uz1fDr2yA/XflNm9nL00kRRZCCnF1dzKz2Wyl7PkwNWJQprgnXrmc0Q9IE9pnpvA3vB9nvcNuJ6CPAGATkxPcFvNNpV9VXlF5qLyr0NNZHFBm/56Pz09HQkCuwPF1a3GfcmuqHOi3sSZXR3B5f7J7IZHCzrwEwpLu4YWJFdZq2RvYkVFhYFIeVgcYohP8IBVUvg69fKvkpPzkKfkT0ct0g/8PpU9i5s+x/oLmHBxwf1yiTbv72zR6OyQzavthtUWsKeSAvsNZyqqfevaxfKvZUtvqK5H4taIOZHIpEpYM8cLhzrsVXHumPxAWC/nyb6uNw/mNXgZHn++tjXsig9di5+Jw4rSPkYE1oXlO4Qn3m919M4boYWZjLLFJIcyzxZsXZnC8ipmFLYswyyx48MbFSR/xAu+JueFdN86vujBz7Z6QTyYHzOQJFD/LerOLUWwr+7t/ava9fKi1t83hvnGoq83ono6FRkanrI3XfYv6vH37izO0TX+0v0dg6yzyLNX529WUJJkmH6V8lKkvWjlPtOzh6QKuUfY7YQ1+NFR/i81L91uZZnkkQ7o3G5Chqkz/X0tTzNNDPWeHpeGitr4nHLCgv+depBXPA3SSUe8f1bde+3fmjQQJKvUauAPcBXa4A95W883Hv897+u5RfX+Cqj0SII/VPz4XBkKjLZdOSg/5uean9bd3xwMB5LYJFHUr0NZC/HQdhZZPte2bAHRFbZx7A8MWO6MeFxFwOqTWEvS9bSszcntXcAUhl7izjW5N1HFsvSdeqBFezziPYL7Os+bz2gA5MDcGJ0kEqts9tJ1Fdxuxj+q+N/XsivrPGevfJTUXN5c2SuJgzOP8/xvbZdPW22tu2x+KCnM0bZv7RJZJ+7eevaR4Z4wECZ01whrPLkehUkoZKzNylQ5tSY71CkTDELWSgUKSoI8OL+kZQgFmRkb+Xp1Egf8x0MLStdCtZMT8JiRvbivOKFtljZ4xbU+rUVk707kD0J+Xta6zWEPbE8p1bbObtOoxbYlzK9gL44v7Llu/CPNd7KyqK5uY/B91PnufOT3xaOtRW2fdkZikvsX1lmv2Xtz+wge1ap/Gf2JFej18uRwfgZcz1kD/NL7zIls2cd1nQ5hRLvGAEHAT5GYhwcRU+aZ8rzC4TEQ1yhFArZeq+AfqVxWzAsmTZoZxfZy33/WeuBHiew10Kgt0N9p1GrVRodcNdCGHAfBPTX3833lhePTniLK4vPzs55fdPhMKM6P7TLNlb9aeP2Tk/I043socT7l+zp5Uuq4XjxQuCay+vp9VKQL2m0pvpeTy2K7Gl+lZ69JCjRYLq5HCQMwHFkj+ih64zs5QuZjL2VcUnjxtsOOA3Wr61blhP9e0T2pMZ7q+z9j4zE7WqdGup74n/OoLPBdzuw31F14/oP75bkeysvRGqKm1vO/j50/Pjs7NTvfe7J2TFb41ip/8vuhCcRSwwKMV8q8bZk+YiuVbm8kcOLvqIB0CHjqhCvl0O257pG9gjIKqfBSmG6SkFlgp9WdMDTwCTsvSF7RI9d14q7OlT6VdlT4DjuwPLH6rH5eiRnL+Z6xPh1n+/5oF6nBum0dg4mgUbHcTqjRkt9z9+oqCgpefed8u9uTJUXnw2Hb8zOzk46zk9+0TdkcuvGGgv91d2eUKIzRtm/JrLPyY59wOSgXExmMdQFMOglE3RI1yuA+6+ozOzFDV2HAIjer9OnTSkx0gRIW8wzTJSWi8Ydk4y9la7XEnuWwJS6UehXYy+vCZYX/AC+uV4h+033PEfZU98f/b61rcmoJcztpMbndDqV1mjUqVXg+zPHf6j4rOTd/Pz861Mt77zT3NLsi4TDv0zyR3bws3xQ1+gv/LA6lgjFxJj/6j0i+81ZsXehJUFWye3mpD11cUtMul5VSUlwFuu9lLm5Utnj3V2pLXYqZGf6AFn5FXLfw1gCSewDYv8mcYdAvk2dmT1Gehdpsm4h+zsE9k9R9vsp+wN7bTYdZa/m7LC3p9FAaWfTaTiN3bAU+WE3sX1+yfWWys9K3ikuPltTE5765RfHkckhyzff+m2FjV/GErHu7Z20vn9BYH8nsM/myY0ASYLxTJWi3fEQkZnykq4X4JNlwVmwh05EcHJrmURmUltMuOlrDEvJ7KtMEA6QPYgn01YPg+GtWbJ3SVtPlo3b6XtgS26OxP5v9s49pq0qjuNR43xMRFD/UOcj8xFf0aiJrz8aV9qecspVedzyuL2U6k3X0G6wlbauQBkKDKkGp8KYk6j9A3FCHY+5zbAlQCezk4yZMSMbCizOYKJzi4n/+jvn3nIuKYzUYdI/+s3WbOWW3t5Pf8/z6+nTKvbbA0jgDMAe6YE9QmDx9JZ0eTqB/duN+xsb9288UrbxSFHYIYabjvb3fzKYPdTVNtHdjZu3Ods/2lnRUfEB7ekusL8+kV00TaUF7FIrAyyyozaxY+iSLWPPls6IEmMPKmXxQyUTc/k0cjP2eQuPjfUW1OzhvNTsY2VLMUWfIHtSvzLnvzpap2JP13I+/QDgv7plU7We5zAC+EZgj6G2z8EII9re72wjBwL3wsITJ34/ceJE/ejEYPbBof7+z48dbfVt02H42HZFO7Bvl9dyGPu1msSkdrGbyTUrodeWoafXkbGn+FhzNlH2puJsbTx7mlEoKlehZV1YFRL1+cWxN4HhwwHFMvoE4r2mgNzHujyrortV7JU1XGD/8is7jDqCHiEEqR7GBg7l8ByHIPczG6sP/wX6jWj2wsxMy097f3nfMjXVtcv75/Gutn4hdLySFHkfVXR8RPffSGPsE5vYYlhirreYmXWs6arVMPYKHXZIQuxBWrUPUTmckqV+Uamy+qIgWYE9Ky3gcUQJsGdH5ZJzWSWtUcX7e6k5E5//yst7qoA4BrM3Q1nHYcSBH+AlBNLrR47N/ET199/nz5//tXWs67h7R4v087cHJvYeH7FIzi+/amiu2Al2/yb9PCZjf4cmETEszMrV4VybTakw9uwodlBi7NnvUj0rNXuW8S+QM7HHlsOJrMwelL/YbuMrSu0y7LPkuJO9evOaD92hyvPTaaL/KrR2try+1WLGpJ7HZuDPGTheh3hOgvsg8P986KUFHXF4o7t2DQ2+1+I+eajn4FeXzBAYNl3a09xB7H4fTfMZ+4Sm9eLZl9OwyK4rRc94MVjsAidQ3y/N3qT4FlZdx58gdQ2mldkX5GoK4pPR2MpRrfy4ZdiXQt9azn81q6SnFrGnyd6Wl6Gj+4MfJrM4yWjkkQF4I07QYz/PGzkENb57zNH4GlVZWVHN6KgoNh071trf1XP0m9dbgoOB7u0tzq0k3rcrqV6a0tJNZCknnn2JMl2RD9cgFjxLluJlYq2v/8S+RA4aLKxsVv8oa4kTzCVAV2Cft5mk6GyiQ82+dkMW6QRcjr1Wu6oNXdBNlD2gB6WlLcxo798XQBao6YwGDhsxwpxkNfAgKPERQp1jNcD+bSjxIdsrLHLUjIb7J8NtR3sOf3xkU13/QPfu3Q3O9nZI9egHc25JuyrGPsGWrpp9CYGQXbuZdXs0tdkFy9lqCX0wU7G8mMKkXZ69uoosWbyWV8AIqU+Q9hiWZa90jWLPU0Jfh3KisHIPOKmWZa+e489emCnUXLHuvONaxh4CPhGw37idxzk6zOlpgQ8OwI91PM8JCEuQ9LvPeRoBPWUP6O2eevuxSXtP26Hx9z6YGBkcaN63fWtDR0WHczsd1UwH9ko7P5ESj7JTeux5AA9UDswL8um/tHLAXS5GKxiW14al83y4qOXFxBBZS5meQG4WLLeV0v/mxbPPJ0++LHv2JssvMdH3kzwWkEeeiKmYvKZS8g7NX8ye3MRLc8W68Xq2hpumBPwtwP4tDufkgM0bwPLNBl4KVedwAoaKX0BGbD0nNr5N4b9G2Hs8oqd/uunAgUPffvhLU/9Ib/O+SgnYVzhb6OQGY399QrsnK6+5ANAv8vVk5IG19tTsmRJir2VTYcUKJFYygImyHiMrIdTsaYxZkX3W5ryY9yALQOrzg9FuNkpElfv/s197HWNPAv49yj5LGysFyZLDITMyGpER8UJAr+ehXcfpBYysnd/5wmWEPW3u2ez1LrF/Wmxt7WmbOFgzeti6Z98bzc4KcPrU5T8B7P9bqreBQlIufZaqqt9A5rBXZr/hMtIuYq4uI1UDeQA1SwkvDH08ezgO7r4Me21xaa36vWqCBQAKVlm8V8SeJ9+kZl+gXUKaKxWE+2uvuZmxf0LZaGn/jgCwRwjqO+L2ucA2Ixi/4OdIw8fqPknZg0iy5yDshwabvK2tB76ZcISn0KZLDRDvd+7cTT+Ol54WY5/o5IZpYcXLVJq3+CdxNW4ezFRoVkOLLqu2lt0dvwDHfIbqbmUyhJ3WkpRMyk38SyYqYLkl+22rrXUszafsM16Q917YUtkLPh+ok4U7hPlQAHGcIPCC2cphzjreFy6LGT6xe1EcHZxweF1TQ/VhT1N55RtbKfuvFZefFpvYSu2mmTx69DqW6skBH9q69FPYb72L9Tng7ZHejDDiBwK8YOD9El9tlSTJOh4NlxWWUbMvK7Q5PPWj9qnsg1MT3/fYbA7RN4CdTmD/2UtEj7Fwv16TUtLoLiXcM/YZGymw3YJkRqSvA+NamDf69/g5HmFB4vXukGR1jw/bC4sKSbQH9kUOR43oajowNHQ06nLZbTWu3GZnR0W7bPZPZwB7ZfX+Lk1KyaJH7oZwz9hTpy9vtmSts5j9PIn2MLfBGQIDfsRjCPuCzhoSpM7xU6KtELgTwQouYe/1+SKi3e4IO+xNB5sbINXbLW+1RML9VSTcp1x+MumZ61i4p+zB8G+R7R4W7/wShHsypokNgjOAKXu/wSwJbvf4mCscY18E7O0A3xeN2ArD3h6f6B3odjo7dr5GR/UygD3ZZIl+/DqlpNE64vJZuAenTw2faI9ehzgOE/aIqxqYCRp4DnOBAKe3CkHr4VNeW1ERhQ8+n7Cvd/n6Il5vdHg40vM5glSvQ95GfX3M5QP71HaayaOn1jCXz5x+5uN0FZ+z6BDmDDqwe75u4CJlj4QANluthL2PsKcqgnhv99SIfX2+M2eikejHZn1387aGTRT9ixnM5a9PfS1W8mgdc/kqp5/xvOz1SXmPkS7HqOfwX5NGM4d5zPuRmUNB9+GxiM1WBOke/WMj7F3RiOiL+KLDIQvG3c0NNNG7/xrq8q+iWX5qO83k0TNrWJavdvqZ8k7akxZo5GPYKNVYPT0/W4UkzCPcy5ndnGAdHOtzAHsQuaHsfX0uSPiA/ZABdXc3yx7/ucyM9JTZJ5/uu1s2e5k9c/rpmbdSr98YMusRtkyHLLrpmck6JEHJV90bpPG+cyziIPGe0odkz17j6vM1iV6v1zc87NZ1d79D0T9M0BOff3sq2ieV7lqjZHox9szwZa9f5rboqqYvhurqgtPSZECaDFVh6O8ZpKDb3dVnB+iQ51H2jpp6b59XFIF+9MzZah2ulL8b81aV2af2zE8erb2Bmf1iwwf4z1J2e63WutCF982zQH1+JvRPsEofCCBkdQc7vxsWSbJXRP+C2Yu+VldTk7dveHjudI7hDblB9Lza7FNfc580um+dYvYs02PZXuZtT1J4jbN1I5ZZiPbg9KelAcFsCfRysJemO3hyl89Osz2QDfp6Lu+uU8NzZ0Gnc/TvKl+Pl5mZDmYPujq1gXIyCTw+M/t4+OtfkIfx5i98MT87+cf8xeoqztBrtQQGJD0KBt2nT0VqIM4r7O2iq29sbu7sHND/Tb9Dtvpnb1PMntT2qUQvefQAQX8t20lZJdnwH3xctvzJ9y/OVM8OVvEcFPeCxR8KcgZ3MPjjucgo9PNsIFLdi96eiMt3BjQ3995LVA/H0JN901N7ZyeP1t5IPD4z+yW8/vMAn+jLkZGRujo9j42CIAH/oNUAiT4E/FGP3W7z2B12u8fj8vlcouiLAvxfF9BT9rLHTy3i/Nve/bw0GccBHE+n+2lrqfu951JqakqKPNNgynNpyug5d5jDDsN58BLTBm4oz6EFjiiC6CBWeE5PFnjQjiEqJYRilw5SlxAv/QF9vp/vnn1HM7cm7XkO3/cQhIkeXnw+32eP4nRTtxU3Pn3LlHL4H05P4b+pRkbH4/NyfCI+J48lc5HcwceUMpWZzGSAHm7mw2v7GN7Sv5endxdv/MAITyd1CISeXeidYY9r/7aEJX49X43MyAsLc5GwLMfj4YmVidzh9otUZlbJZDKzWQVe3c1myZ2dT9JZ9AI/7PVSR8Bo9OY3PrMvGfzmVnOnRFvcenX042hnaeFuND4fHZtYkZPrB7sbTwm9omQxsFe2JFoQ6cnGx7c95u+Po5e6BSMc9qUbv3Trt7qDklriRJJOdmbkKNzdSS/Lo+uH+7svUwophvTKpCrfM6TSX+b0usoG9PSwx41fBn+oV8V/9+DkRDoai0Sjo+Fc8k5y83D/eCP1cDqmKJlsLDYF8rROL6G/WqDvHuHpowGrkR729Bq/LL5HZKO/tZbYGQf79HIynN7c3Nzb/vI2BfbZybVE4YuCbkoP9k6gF/jU66Quv6WI/jz7S/kz3+0Wbkms+0urK3J6OZcOJ/e29/e3jzemGTwkmt2tBfp6e4OPX+bppO5AeXo2+Cq+J3hdKur94rdnO4+fLL3+/PXn9zePpKI6BU+B3gn0/B0wdVObtTw9w8e1D3sf9Xuk8oWGPG6V3gn73t5uG+HpIlvAYjGaTOYK6NmZr46+Zzh0PnxCbKfySE+G/mYT/62tPrL56NDDiztGXyk+6nv7/srfIw57PHl6kL8C8g4fv8jTR0Se0jdWSs8OfVUfEgZD9Oxn9YrDFoSn8jD1drvd4OOv7HRR10BB3gX0DZS+cnxVH/hJpqG+oCiGQqIYHBxu92AAj/KUvt3PZ14PdfX7rVSeDD0c9Yz+X/UZPwvdqTwdeoPg5yOvg7psbT4rk3fRfe9E+srxmT7wgz+NoqO7Ct9yTfA19d8oZONpUf9Am98XsFJ4Jo9Dz+grH33Up/wlNecnHnKS2zkNDkNLo8vs9ZrgJ1ssFiuv9lkghKfyZOjZvq9Gn/LTqDm6IzzeyEN7oEd7kwnxeRpkhBAe5asbeqZP+ak/i7mT6oAe7RuJPeLzNMgE7OCO8LDtQZ6d9FXro/+fUXbyx1nOurw94pu9wM/TIC9hN7sAnoz8heQZP/qXRr4xfMDT9YDvcBhg8kHf5TLzap8L1MEd4OnIX1ye+UNMHWLPIT5e7IE+DD9Po1qAHdwRHs/5/x0OvrMe1z7MPk+zHAYHuCO8swbybCkQfODnaRcBQPeawLPJx9nnaRqy1w6e+fP0EMxhrasrfMIfGj2q6TebOdij7E4G0AAAAABJRU5ErkJggg=="},1176:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdYAAAB7CAMAAAD+MVHsAAAC+lBMVEUAAAC4oX/nzqSeiGufiWznzqSfiGueiGueiGueiGueiGvs1bCeiGueiGvnzqTr1a/nzqTmzaPnzqTlzKPnzqTnzqTmzaPnzqTmzaPmzaTmzqTnzqTnzqTnzqTnzqTmzaPnzqTmzaPmzaPnzqTnzqTmzaShi23nzqXnzqTmzaPnzqTnzqSkjnDnzqSijG7nzqSljnChi22giWznzqXIsIzRuZOpk3TmzqS3oH64oYDSuZPErImznHvErIn79+/+/PrPt5K4oYD79u34+Pnlz6n69OvVvJb+/Pn37t/p063t17H//v3p063s1rD+/fvq1K7jzKf69Onr1a/q1K78+fT+/fr27d3Wv5vn0avw4cb269v+/fvFro3p0qz169nWwJ3ex6LKtJHjzajx4sjQupfo0art17FMTEz///+AeGvNupyom4QmOkEiOUEdNDskOT8oO0NaV1QaMjggNj4YMDbl0KzVwqEFExTdyacBDg9oY1wDFxq7q5B0bmOVingULTMACQqyo4oJGx0LJCoAAQIPKS+fk36LgXEtP0YYJSeaio6sjoI6SFDMrKOJfIKBeH9sZWwDHiQOICFSVV3Cpp/Es5aThImkiIG6m46NgYeWgYBKT1dDSVHjydTFopZyanEyQ0vVwMq/n5N3b3fLqJyikZO0lokhLCzn0Nurm51eXGLdxM4mMzXu1d+egXn+7PSSdW2JbmhBUFg2PkK9qq2hlZmplpetkYmZe3NmYWfPucKTiY53ZWYsLix9dHr9+Pv44Oq0pae6nZWgjY12Xlo7Qkfx3Obzzs7rw7/FtLviubHBrrG0n55pa3U3OTizuLtQXWVYWGGAZWBQT1ZmVE8uODz35+9YTkswMzPZtalfbHHExsjOtLOmrbBveH1VR0D93duEc3RfX2lFVl/W1dexq7GsoKbt7O3o5efbv77ZsKN5hIiOeXengnZHQ0NHPTXg3uCGkZZzV05nWFro3+PN0NKcoaaLZVCscleUcF29jF7YnXbCkIHhjHWcS0sJAAAAZnRSTlMABAVECAkLGz4uJPM4Eg6vDBYUEhkcHzg0IicQKlEwLTxESkBVJQ9gaUdcTRdlE1koIDNyKC5MbjFOOB85NLbKSULF/aJmQJKL0Pjtfe7m25FV57yf3qhbxIwv11m3Q41+arV9eWrGiGQ2AAAgrElEQVR42uzVP2vCQBjH8ShtxlqadgjX0NKhbyMghksxLV6lS/ZK3m1eQOmm4OjkrJcn3h85cjl08OT5ZgoJ3PDhxwUYhl1xA0MB5m8t4f6BxDvi+poUHBoK+Eek9awD2rAz/hfK+lIjJUnttCh7+QGTKnfbdr9/DqnfEfbik0PVRdUELsr6kW4qRe+OE7g6rPN5WGfnW6pmKkRJybI8p5TmGSuJoAVZR1h52g1mCWzPdqcqpuSB0fG0UpqmlD2SllaD5TmYPiXFZIQZm8yK37c4bG1PUtVROSmJaVoZS2lJyDFss/d+puFz8bHALH3Oi9f3E2SNqFE2rjpKs4jAZCVsj702qMl8gfWkHSUg647Kk6hgGtGfytIXjRpZZbEDnhUVh+rU9ywO3WGVWxWWylGZhrpe1nW9Wm23/38b7Z4FWDFYmytHfcGl7tizlxCngTAO4AjqRTy0u170JEhRUC/qSfDiiuD7BYqix+hBWo2BYZhDhpkGmlq0SUWwrWShSDEGfESFsOoqSy8iailBsT7QVXziA/FxdJLRZBdS1+7WW/4Uli3t6cf/+ybTrrNuYG63sNMiUHevGkPaPlszm47ZcgyzlRMzuftf2sPhKN4dBduxqjNTG9YJcSYBu2XlTO7a7VoN5m9ybaD2+dWZk/kbxeOnDKZ6o1aqZhqVarN46Om34CNrk3wST+DKVZfvEuJMLhsX8sJ23VVe1eTc4PTbflQpNZzaoFSoZDKDhUrpoyUVimbtyiUqFZ4MB4VN8sJ2cg0H8KKNQpxJZ/tyXtguujojUA226r0C1XQip9OiBjT2h0j2Q4tYTcNs5gc1qgw++XN02prs6wsHMXeNGsBL4gE8tcIu4IWduKuhKkdNrvmzUh9RouoII4QJgVSUEQZpVSUYu8VW8YVMqaKMvjzAsybJCxvlGqouE+JMMRtSXmG76CpXTfxR/X4Q1lVsVwBGAENIqAsIIQACiFHjecvJFxirIr8f/u2a6OgaHpaEOFPOwOKJXad1Un393jBd21btHMKAMFZAFCqrKsTY+8f9eu3ESYUqLKNvol3Hs8aqPct27vrPqn3JQPVlxRk5XqpUjmgIAIAA00Q05xRV6IXJkrvlyxkqeznYDlyTfR1c/b0qxPnPruE98HjVrVzonmyXnJrh6hqS6hAAgiBRxKpR0xHw2ooBun7x7X1N9iPe49/amkhEunLV+fFpqVfZ+1dXhjpONZHYvYmrIujut/OGrWNsFSABuk6kzKFqtepShLNZCHT3wYdzTxFnlUR+Il6/L3Qds16n+arLtwlxepWB2YFr5xEcqPbz59U2Ua26cXLoRbUOMESEQkCorFDbtRuNetUBzNUtlh8PabIkyRLL777u6Q9cw7p6uNNTS+MLw15mmef6r6r8bukbyFpDeadkvmjQLPaWKmHRNEJ10WoVy+eusr7Sw+U7pxRm6quKR/h+3RHh6qnOXBo/2vQ06+anOrkGi9U7A3uq+/gZWAVAtcyaZNWOla97rkTRAUHsRXS9lS/fOn8jC3Fj5EyTclP2Suf4DwD7PNd53JWz+qqzV8wS4vQym1dy1+iy8htD/8mmf44/gocvUUha6t1jknTr3c+LzDULKMEQQ+TFzp8ZOX2zDuH+EyNpReSujDU9utq/RpzTz+oaunLV1OK9QpzeZmBpKmq9sreCEcxV+Qh+YsnWRzNXr4LR2z9/XDgKPz0DAEMAAFKvP7y7v3zn6q3zQ24rf8cQZdGratrPkfd8DHPXMWN4OlusO4U4v9g515i2yjCOx0Rd1Hi/zF3cjGaaGGJGnFGj8W7UL96iMVE/qDE9PaVAT6H3O5RLxzqgA9t1rMza0Q25ypRO24lcBHFDZZ0wnQLeh2MoU+c18Xkv7dtyDq6zGD+4v8DB03POezi//p/neZ+3uti6Sjq9nsZCMKZ6Ga6Cv2xocTU3eDwmm33zn3+Ejs/M6sZdseO//fbLr79GIr92+PceOvTGO+8KfdU1zTj6wheCCiJLOisxV5ZeUQhecmrVfPH18BKJMHyaiOrjmMoHBer9zR5dl8tVOvN76Je5mQmn3RCeO378l99++/33gHfm2NdvtfdsXV9d1rWpjDKlWL94C9v1snSuKARfKzulxdcNKAwvbNYVKWZ9v0hV1Fwz0NLQ4nQFpn+Jzfr6o4LJ6eSi0fjE7OzY2Jy97Ge5vGfngKlhgw14qhNU8/Pz4QXQmktJ2QRYCdXrT5n1X9HDueIwLDIrzqxvfVGpVAtRrgGw6kLDE86JYMDtG3fGfIGAr61/pESniw10Nd4jb7SHN2GkagpVCVi33TPPrgD29GvOzblKdkr/hm7KYXYVxeAVmOqyO7BZlfnFBVNRbuOHJmeJe3rWGasKhEL9unjA19RdFZkIu0pq1u/bUi3/2NmwjZi1iAioUrs+tCyVK4TgJefLTolosbPr9dSubM46LwSTOesXRQW2TVP+mpqw3dk1HPhVF56pOhis6vQGfU1VbR2c3elpbNy47+VPPmnZVpzIqozrBpxdH12WqIbhv8WCELzu/9sM1sv+VT2J7Co2KwvBy3DB9FNBUYG6Yer1xmKDzj429EfI6+oMHQwEA3WhIMJ6ZI/Jub90d+Ou9S9tKqVU4YvZFfcQb2d2veCC63Nyb5JlpjyOy5MxcRwnk5aC43jY6HmzeDdRRUWeXuPgjRkPx1TO81q6kT7LaJVJi+fp8BqrRUj8DRZN+sXT71ljlmWj85ldWYOJmhXaS5ctW/M0AvIdMCpWVfftKStxGeLDQ00zs9GD7oAbFPJVtY1OHX7PHmuu3N/nf/uz2iIgCmJQQR/jjv8awhXseh6YNVeyG5w9Vi0cYJbGquc4eK5GjmNkMsbKc5wisRFLI8wbVPKGYeR6ekeW9Iunj6mxcFlxPWctsqu4YEqa9SnE455KNcqWn6/fOHCgyxSfhih8fM7tDta56+AnYO1//a1dsRc/fLnO31xdXEy4Mqgg1Te4g7jmskSz6fqcJWul+4bZu9UBRyjEu8krFfh65SmXY+L/OVYrB2elSiF1w2Y6cjkbQgqrFvALGlkWumkJLoaZW5lZEdXl9+GVGzwNLa58+cXqLS064/DBwAxgDfnq6gJ1CGvnsb535Ns3HqreWFMivGorwjE4SZVF4QeWY7tevGLFipycXKkOU/ZY6TMWtFJYLeAW7Fnj4mIFXvOVJ3XDGjoyYNMvjNUh4PvPRufn4rkrS60UKzXrcpxaf1BjrrbmjXsabZ7OIbcvNDTsDvoCgLWut9vbET/SKm/fvHNqvFrYU12GrcqoKtH3dzi5Lqd2vfjinCVnPyKT0sJYFdQHzBcKKawUn0Uj3g2/CPQh6hcTK1DNACsnkiRWPc9lSRX0WG7ONWeeNq8OpmUwUF2JU+sHahDC+nLN+gZTBGEdnISKKRhEWKu8kbGju9rlO8eqa4zjX+08aivCYkzh61WcXFcSu1500UU5uWsz+7i3QqEA81kVCn2e1KOTxqoXOAc73wGQFQotcTEPMsIOtIVdi5Jb8xAIRVIOxuWksWryBA6/J7PUnalROGnWFdSsS3FqLYAmL1pn69r94uYtXOggwjo0HQohrr2+7rbI0ZLo4de6Bsbf2G147TV/bdKsSpZcv8fJldr1ogtvPXttZp/3Zgwzxgoya0Xn8xB80yRlu3IC3Qgbil1Tb62XxFphpo7XVHBIlsSQZhpDxVj5PJCVBhujGCuFCr9mrWdJFGZYWcG0bM3KR/H0Rk3XxAumXt/T3D3oDgHWYaiEg73BXmhHtI26DILf5Np+uOeTA9XevldLywryiwrzU6XEyfW+lVAMXwI9xFtvXXuXLCMxhnoFEeJBpEcPkWeyYDcyzcNacWKsvOh1LVRZUlj1ibdQPbYXMqgD70ejGBlVhhXhqleg9x7426HhxVgJVBJEstS9ubQWZnUwK5hWPoCX5AArkk3l37yJcwPWYGh4eDoQ9PmCvU3d3W1HDa4XB5zhzr3bf9w1uv7Qrm1Km7oQRICSnz/IQfeTKHzJJYA1w4oJ3tc8fp8rpEsm5mHpIEf8YczLMys4UNobQyM7AVZa3mgksJoxCMIdylsthqsgduPZhbU8j64JPxHWes5CsEJyF2ElJbyxXrYYevBsiMKnScbgNctXk4qJUFUXF+7e7YpODoUgqx6cDvh8TRirtzNsCDeY7Ca7c7ZuqHP7zt4d93xqKlYVKlFSVZHsqtyHa6bVKyEKXwpU1619VpapWLI7eawsNmuMHOgEtbQWYFcAJthYgB+djJglsFbQLQA2KpKhmMVQNjYVdqvAaRHWeiiIxVjhokazbHH02NnJjgTDmiiYVt+OmxFqGoMLGw6MDfcMh6ARHAr5wKdNPqAaiZt0JrvBZHDa4/1C35FjkXb55L7S2jKVEnDCN9YHctDdq7BdLwWz3nyCQjhTrHoFFdhHwF+8IqFUrIBHCqtGkSYRPxqFxbuFlGuwNxgrlqSxWjkH7IFNniRWjWzRdFZuKtb0GLwKY/1MjVVQpLKNBCYHIak2NaFecFVVd3eVt61zRKczHTgAWEeOVZqao6OHWn1e+adbXi1VqcCsFCsuhe9YtRqwXgZY1918rywTZT5vRfUy8LOkTwkZVoGbH4S1+LU0ifjRKCzajWEzaerL4TAqKKbYC8nhSG61EKyCXgLrouo2mlwZVhaDV+Hlm48L1HSZrdQ/OTl00B0EnzYBVpA30jkXMxicsQGD67W+QrX6QP9c1Dv6xo5Dh+UfmypVICUoX7kBf7D0cojCwPXWdetufl6WiRhWrWzBiofOaQTEzwx02V6GFRmFSxefAVYahUW7YWdiCqU1l/MJoAm4FqsjmblZyWSl0x8FkoWOhiWg6lukbCLyXRQri8HJOnj15RQrXT0t6xqeHASsPsCJoSKv9sfHddApNhhc7V/XKtWb+sPx+OYd/u1v7+35opZyhexaKQc9AViRXYHqzZl8OI1hVfD832NF8wbED3dwxFj1VkuFTAKrPlFSEUlhrQceot2JURTMpMY8XJmzehv8fOJ5K7egsjPwM7hmkkytqyhWNbVrbePkIMxsQk2As61txgubjtH++OxIWIh67M4jm0uV6v2j4ehIY83I9j1O4aUNpYgrDsPbiFshuYJdAettGXQjGFYBQUibwAjp/Xot6qJirHA0L8IKR5drZAglEt2Wy1I6tUyppqU7hPlYtclePcXKO7TYeXj1pUKgWP5DrE8msLJZK0mtEIMvT+TWYpRbi8vqENbpQJM30gGKzMxEOjo74xPxsCvaNTDiqlQqi4X+ceNRT9gf1dmd/tZtNmxWZSK3Ll21GrAuOymsWj75Nwq0mZvW12XJCWGlyyRM8JQT5y9QCVvJCfqFsML52nlYWQw2c5YKOvnSoDNZYDYKmrQLKkSad/sgcuEsxbCeLp1al5JKmE5wajcMDkIMhqU4b8foaH9/Z0dbG8AdHRvx6Dwe7vX8ApWy4NhYLHpMF+2NOQ2eI/KvaklmhUqYYIUofFJY663EDlY9A0B/c6Qb2kiiLQ6aQjIMmy2JCKlZEKuAaiIzjymwRTOG1QFjzcPKIr1mfg4Xiw0nLYaVhYGsBUH4ekmskFqXsnmr2lZm2jg5NDQ0HWzyejv64xNjc6MdbZFIW8eYS6fTGVwfblMqC7b1x8ajI+PdR506p6ttcEcRoGYrrrcTrOsQ1sw+nlaeFo60CY/q01eutCTT0udawR4NIAGRf5fGyioqrjxxhpVhpVfn07HWsxEgO2OxHE1lFmHlRaldjFVmxMNkr1uksS7DWEmXCUJwYZmtsLQOsA6HfLhQmhgfOToxGgGskbhLZ7B7VMpClUq9ZTTc0qUrGbcbnM6or/fdSjXFirtMjy/FyRVVTLc9LMtA+AGmVP88NSnZxapgwoRi1QiUDH33W+kjFOdWFvdwwzgREZKVE7NzOtYKtmYOg0qL/0dYaWmQvW4TYWUV01Ky3Aof0C/b8Mm3Lw0CVcisMKsZ7Yf8GYvFOzsguU6U6EpaBioLIdwWVU6NuUwGuxN6E8aDdVu/shXRhsSneME1BWtmnX5NuZbNW8nD15KYq2HHkHU4FgXrOVYEmTXJ3VKVMC1q6byXMtSmYqUdpVSs+EMWJ4nVrEWnWpNmXgirRliU7HrOWWlYz0jHegWC8U2xusjwGvzS3jo4jKi2dXTOjZd4XLGjcxNj8YmwSddSU1mIJ6i2mmiJqYXzOMe90+5dPV+VAlbcG/4Sf0gNYV2JsWbU6Re3IxyojWMmMZdRhX0snBIDMjstjJXlUhbXtQQZxcpuIBWrwshKZ9anKk9ZnXPMw2o2sjcGkRRW9hfKstXDklgvpVivfgLReFVdWvmt/KOPPurpaT3sm2mD+vdYzGRyzY7ETIbxsa6wp2VDEaKqUtq2THlMx7zRsSZ3Xe/erV+X5ROzbpAjXQ1YVxOsz8gyFsNKTGVkZkQ4LBQy4wf+IoeIsaZu04ovvUOAYZhpU7tAerN+/gRHL44r+HyWO9gt01l2Rm4FWRaD6/OA9dyFsdKmsOE7eTvC+k5r6yt7I50wWx3RGcKz4FOna9P+gRZlPukmFRYpp7j9fq+3yt3b2913+M1SgIr8+hmetl59JcF64823vSDLSAwr8ybIyqwoYGcyfuwoayZYNSinah2kYBYwHNozZAedYBmdxQyN6Jb1ZlrK8/oT5lZWKWTP9RGM9TQRVjxtvfJqXDO9X6r+Xt7e3tO6o3XHKzu2vnekH7AaDJ4WD1TAalW+EpjCPwhroW2339/d1B101zX5/Yf31RYi0dT6+NVXLgWsyxHWDDv9YqwVrDLGyChVxo9xrTgRVno5Ab7JxoxnSuygjLFq0Xj14lt2kCtb9eRUC5/QAljRcVqByzq/PieF9ZIk1uvwxyN0m9rb3/qodcfWV1q3vrL1lTf6xiagv1+C/j8gHiiVgCiQJVjLtvj9e3t73e667iN9O5XqQsL1W7yKTrHeeGOG01YxVjNFYFEkQ59gFkVbylWbAdakdxx/sXeusS2FYRz/QOL60Qc+DJvFLuISgpDMpRaZuxCXBXGXstrFXVxmptRx0tMqR6pr2qMprWZZVFvRJqVEpekaXSRLLCzMDOEDyeKz57zP6d5xVkWcT84/kTbqsvTX//953ue8fc8xKNkXRLT4wp9gPVxFPl2yP4xLr1MN6OKctVUMjX3kyjza++81YuSw4XQmLHdryUqSwvZmwR6HCPY8tAt2n88eqzt+Rvwi+vHLTkON2AIjW3isrnlzrfXKFcB6880Vzoz9Uk2abGUqoW7N0QjLsdLhQt3VBhxQYBXDvKL8KNeTmUJHscqHc+K/eOr8VbxSvu9Cn1kbpGdVGUGWnqYPRPsyK1fAIH26aJ2VqJxqwCc5sV6AtMaOAP1Kxp1/q43Tp+GoP0ttLSHF9UFLOBlI+oBqc1jwCWHBI9w/d+4sHI7HOokbASsRPNVb7sG+tSvw687L9LlDADuzvNGUYG2dObOs7Pc6Jnxb66SmBt5S0IVjGHnwbF/WMQ99AcfH2bGebOhnvgaSpEfIaAHw5Z7Z4mySblU5jHOJOvxMUOVYt9JFUt15uv0QisjfajVgnfILrPl4zFZzzNvKGwMeTzgh2MNhQfA0W+GQgVtPoAEWqSJY8qjXXwervgQ9epr46jwEsKWvzFVksOYqrfL34gguWWn4Qt9KWxQ5Vqq+gTAo5xY3ZHmEXg/PhRV8iYhIWcVGC3X1T7Aekyacp3+oznV/H8NzyPpGhnVUH9YCssTpve72Wh2m1o+CD8zqE+DBE7t4ztG9v9EgskSuIuHqWtvjK15vLBBIBqycp0cPL+CIaVlBPixw0K2/NTqkew6qpMXoXoSKvsBNo7mwNmCy/d5w9jSMNQgbupOw6hfaJ+Xl6X0/DDuz7UjKvsCBUlB3oYFWE9zr9vdd05KR0vomy5RpfH4BpnDI7ebhpG9jUoxgIZmwgzqOX3stOBtrASaSxZbppZtzuUyOqMl29pwpceBgjc7wngyEJawzAeuCpXtyiq72D0sDJ/rpHfjrR8foJDZboOf436oOZ3Y0/bZTTp6kmYF7cLL95ZNVVfSFH3/UI4D0H2rbdLFjwkZYPhMmWPNIgH5pdT+2mmy2+yFohhOBhP1h2GExvrj00WfQE66Z2nrgYBDi2miMcvfv1jb1vKuHV8CsoKKC/PGItaxs9R5VymnEQiit2fa8INaSSXg4fxBIRU1tTZZIMmwPJ+0+k8Xkar1x7aOgq685SLCSJc7BRu4lz3FGI++wWHQRwFrrJx8MzSSKFeb8qpRT+UhaWge83gornEmFD8gecKfF5XC52mxwzkDKbhfaDF0W1vXoWqg52EjcKjIV+6fGjqSV46xWxnHbou9I1FTrnqFZJ5WIWMeJWLfvUaWcRsyaTocRA+6OAKwFeWjXr2Ybz7u6TJYm3QnO57CxrN95+971z6EYe4BgBbcSrJYAw4MYl8VSkw44D3RqSWXNm1QyAbGWlannHColNCtmMMUqW+GIxbVwE+maOk60hXiTpc0GN9G4f5t3OG1tpuvXjVyQrdaJWEVBddX7AyHGzfORKNxEpSvAsqRfWlmY19cxlamHbCmpFbNoBg+88xCLa95O4rdFKbMtxFicXV1tTYZoyOpsc7z5/Pk5F9kvulSX4ar3J70Mw1sZ7raNjYb9eNhWZV6mtIJZ1RPxlNRWNCtm8IDFFbBOAKyFGMPt3AngylqMrtRb9nYXe98UCpncrU/qDYRrn1uTQYYxcrzxvs0W9eEJpZpCKYPHji1TzaqolgztZ1bZrn46Z4IUnop3SmnpPGEJRVxG3phKdaVcUd7q6vEmO83AVZdxa63ZmfC6ec5oNZoszqZerah1RWIGE6xgVvWQLQW1dDOaFbHKvweJWDGFp+5chlzT5lRrLGIMRtJvUxyXMkWCTIv2WbXZkIlh3SFDMOn1uhmGcXPs0U4t0c6pUgaPnjtXXbMqqq0ys0pYZSks2rVCi1wNjcaeWMQajHQZnH4ny4Qftse1X9JmXa2UwubUa/djnn/MuEPuHqyr2opSksGIdYF6grCC2jFUZlb591ulXhjsWipx/VDNMrEYEwl6U2y12dyUbG/3xFtaPjVK69baQ4ZAwM0YjRDC1m4t0fpSYlbAClTnqhGsoJbMGjo9Y1aKVfZtdGrX0vXI6P3baCgQszJetzXtPOD3etrj9rinpRNyGC+n1zt7vBGwKh98L1EtmkrMOoFQLd+jSjGtmQMRjG0wYs1ydsS4jF0LS4skroteub3JHmswaE29TaeDQnN7PN7sa/Y3GoApRHE9m4iBVR8nFmWo9jfrtj2qFNOazSSC6Wkg8hTGiUR/uxZVaFEfYrEEH4lFuLTfzyV8sGsiLvgesvW4PcLc2dwTYvhuLaUKbXDJBMA6d27x/3vModJCqrIIlp/LhHNhbIaBa9HkimVaVHfC6wp6rSnW70qGPXHY5ZRoeafH3Uz1bE/AKzzQEj2omFxUWohmBaqlaruknFbNQaq0XxrwyMNR1K5SDE/euU4r4foSibZGuLdslzchxNvjHkHwwNpG3B9Ra+7sXaRFraycLEYwmnXx3CKVqkLCbgnaJSisNILlKUzsSqsrxHDeVOBaTG+h3f3Oa+30+61w7TXe7rGHW7411ojlteMZOBWl2Q1USb+UD1QXb1MTWDmVD5JRzW5XbIalGCZcK+kN7xd1v0vrmxi4/voQsHq0QXNtxytsf9GqxRLVAsC6eLE6hlBOK3YhVWyX5FhldiVrV4xh5EoMS9F+6f7S2/v+Q2/vh/cPIHupNMU/UF2gXoxTThvnDBo6klCdglRz3YBhDHRNP3NdrtHmlGY5pVqQn794tnqDQMW0ategPqoTB5MIlmkAuyLXEsp19ox5K3/FdJlm+ewMVWLWDeqlOMW0ZitAJT0wpforu1KuWF77uBKwlZpl2ZhWzpg9u3gyoUoieEO52isppVVbZ4lWJVShW0KqWbjSURMuXqG89udKDDt7xozK9ZqVPyNdXzlDhNqP6uQtKlSFtGLH9kGSVacNH5KDqsyuYnmlXIlhESxoeeX6eRrN/PnzNfPWVyyH38hAxQQuLlf3GCqjpUvKgSlClQI4xx20s3HFvkk0LIJFslTIVIJaNGN5+do1I1T9Y61Ys2rJxvKt22chU4CKVs1JFbHSbhhXr8iVGhbBAlkQAgUVZ6BiAENdXSBqDmoW1SBV39u7g9Y0wjCI4ywtrZHkoNAkrQeVYumhtFV6KNQecun3/0ideWZ9ZzcLrmwC7sLzT3LITfgx7xoj7oubFVRMFQewVXvnulp2XDVYLlayTqY8fk+oLdU0fUVRkvKJElFxVdVUe1Tbx7DPYfyds9k2YSnLvsa3TBuoW6mGa5t09maWDe1WpDQFqs5fq/bMtePaGGzAUha0DqQyrVG3/6InVx7XLb6zQR0ASlKZGrW/6qxrgYUsaGmrfsiUryvBlP+zQXhDBDyPT8focDywm8NNNjSJzmV6Z9R+1nJ57bqeYHEUQ5a0jr9rqJ+B+oB3Q6C/7LfC41F8XD/n2ZD28/2epGFq1Avn2nHF601NWMqKVomUpvgv3Iaoj3hXsPrFaLlX77PBARSiIKWpUC+v7RrPh+vBFljKgtaBVIdvbbpeF9I/0be67+ouGxA8KSpTo16o2nXlQWxYyIrWgVSmDzAFKj7dcPeRH+GOFktpflHvsoHJcwCpXNt7XekgJuyngJUsaImrNkimjzQN1HveHoV3lYub8eIuy+Uhva2yl2SqoXu1a1xhd4CVrGgdSTlUmvJDvmH6waa8Izoqjyu7Ru296iDGYAlrWdIyelIUpB4qTRfLuF2rTFGCXjPvlcFVg8UV1rAhC9vSWqQcqlChKtSimqjXT3ttDrY+iWtZ0TqR0tSonioDarJeveZeNdiA1WQhC1rYlnYgLaZEbUw1T+ARpb16sILlZLXZsHX3QSpToXKqudXRVTG7GpaypBWu4i82Faqnmk9/x5QHa1jJklYFp1rQlEM1qqpyq6OqegZrWdG6EymHWlDzqjrSfBAHrCYr2bB1Ii2mQM2pjjju1bCWha1w1SpEZZqoE6gybENWtk6iNjVqnsAjzbCWla2TqE1Zvv478ghbZE3rTGrTPH8nEIgs6xqcaTrNLHu2KlEnVsWvM7ZVkk42qMnO1Zr8SdMpBz3BGjWf9WZZlg3qP8xt64/rXn4gAAAAAElFTkSuQmCC"},1177:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT4AAABKCAMAAAAVIshhAAADAFBMVEUAAACYg2eeiGueiGueiGueiGueiGueiGueiGueiGvcyayeiGvu3L8LCQechmqch2oKCAedh2sLCghcTz4LCggHBgUODAoCAgGch2ydh2qeiGueiGueiW2eiGueiGv9/f0AAACdiW5jVUPw3sH7+/viz7JsXUns2rzhz7LWzb+fiWz+/v78/PzBsp3v3cDq17r9/f36+vr+/v79/f3o1bj+/v7gzbDcyaz7+/vt277q2LvVxazPwKrw3sHu3L/p6enq2LuvnIPQvJ/w8PD9/f3v3cD7+/v+/v7Ds5qqnIn29vbc3Nz7+/v////09PTx8fH///85OTns2r3w3sFMTEz///+qn47PwKmBenDo17tbWVZ0cGloZV/YyK8IBwq+sJyXjoDgz7W1p5UpJSOhl4eMhHgtIh0MCgwUEhHGuKIRDg4iHh0yKSYBAQJlV1IgGhjVrIw7NjMoHRl1Zl/oxamxhmx8bGZ/bF9GODJQRUFIOzgbFBPx8vDatJXWsZKQfXBiX2Dty7CBXUptTkBSPzbfuZhVVFRNQT1CMCk6LSfo5eNrWVBfUk5cT0oxLy2CcmhsXlqHZVBYRj4aGBf5+fnkwKGinp23jGxdW1t0X1NaS0bMp4mlkH/EmH3AlXVraGdlUkhAPTw7MC04Jh+mpqPfvJ94dnW+j3KheV56VUFkRjlcQDT/8dt5ZVpST05SNC/11LvQpITIoHuId2+jfWaqgGWTbFZJMint6+jDvru7trLctYyGhYSVg3qchnH39fP/6dOtmYXJn4OIcmeyg2SWdF2HZlqabE9GQ0Tf3dnZ2Nf84cv0z7KUlZGec1iQY0vN0M7Uy8P62cDPxbyur6/FuKzAT5+ekY2yfFf/+OS0qJ+SjIiwjnZ3VVluOllxV0n///nExMDaVbO/Y5/oxpqfjoOBfXyDSmPCcmJ2RziGMDJlNS0dBAOgmJOzSY69nobQr4KrYEv1wZ6eWHvVhWqjbV6qOT5gHh3nzN3Yfr6znpztl4p1Q0ZOCAvVp8bVU2OV+h71AAAAU3RSTlMAAwgOFzsfKTNBnUWvAwULBxEKBxAUDRgcFS0iGiQ2/R0wC/3IdhDJhVRC140b6LyhK+zkp5SRZjzTsEc59+Gblk0pIQzw0alaNH54Y1JOuLUjiuI+7DoAABQXSURBVHja7ZwHfBNVHMcVSisqloKjpS0VEbDIUlBRUBFUcI+kSbOaNGnTtEmTJulI9967pXvv3UJp2XtvkCFTcO+9t/7fu7tckmsjuD4fU3/6SS93L3f3vvdf791x1/yvf0zX2oj+RNeXPff0ffOWL58369mFj/9pdjfddNOo/7qgD1eJ8J5nl8/3MtGTsxZePTtEznG257SXF9z4H9aClx9YihBeMcDHZ93txZTH8oVXBQ/YjfZc8uBU1n9fU2dMmw0Erwjg4/O8htOdz18pPDA8x6VL5rBsRk+8PNvxSgDe52VNLy67QstzXPyQLdidieY84AgWaJ3fQhO3zdqwceOG82fOnH9lvQe99r4rMD2IeEtsDB7S3KWO1vnNojFtiIoK50j1kZWVkfXVXPHJGGMWueePTc/ThtzW1AAXWeO37E6S0LbSmJOZ6fotW9K1BeHqouwtnB1b4s8cILfe+/wfmJ7TEpaN6uEHRjuOGobfPaTjrvz1ra/0hki9Pjwq8sw76siCfMk7Uk58z5rzWSTA56w77gyWzWrqNMzPCr3v3/r01bcaowrUuQb1j3499Wq9PqKaK43I38KpPu3B4Megt/RBlg1r6jD2t4yg5/Hjq6+++uZ72pzKXG1kdXykITe7J75azONWVOrzq6vFVvhheqNn2zQ94Oc5JD8i7sXUvQf0PtWmR0ZGRe3q0cg7O/a0h30mOsS7mJKujtghPUnW0AuHoWfLnktoztLRjjh/MHPu+kjlpTfffPNSXnpUlDa7Pjpzb1j/6tX9IYe3HyrZY2iMAn7rCX53Pz501niIZfOaYTfaMv8uJJJGqaD30qevfmrQRjWqKut1TYVtqYmHE0tCVx3afiKkQpUXtWsHdyXBbx4DH6I3jTUCdJcT4mfadbpa3nbw+3CdtlGmrcyUJ5WFhCYmwv+HV51YFTpoyGvM2SrOIvk9b2l8QG/xw6wRoIeXOtHhjx6pbdi8+ULzxgMxQk2jTJYepesM648NDS1JTS0JBYQlNUUymTbi9DaygJ5/rYXrOo62s/nAR+ghOxT+6FkC4zjt+MbmUm95o0qpMqgy2levjk1Njd20aRP8SY2rqZDJZPVSr5Urhxi+obTh9ABrhGgRuC9tfvNw4Nu44cA2tHAmIE+mbATX7Q+JS03dFBcbGwJa3V9bqJLlpcdv8yLxeVxr4brOj7BGiB6ycwLzMzO+ZnZDQ2RugUCSo1MpZY3yrlrstS1gf3FAr6YtrBAiYnrPAcBHaJa58bmMiLyBNXWxC509ZhFZd3NdWu9+7aVLcpVMqcqUr20JhawLoS8WKWRnLcLXEJl92iuG5Dff3PjchiyYeVyRcRGW/lb5+lLHMFvL9TUem95gtopn2tzK/slzZ+p+N9r8cNp9Y/O7CcI6YfkPbymUMlmmfN1A2MBnIS0tsXFIsSFVNWGFmUptZHb16x7g41gLTY3PbhFrKHHZ3uSSmM2n13IsJEZrRVyGUCfIJqgFB/ZGS8L2YxFr/emV8I1jPDabeTps1EJM8+QLCcZsNoM1dTSmHnF2oaLfPTiQHQF8CXUJ/B/eC1DK5TJ5UtVnA0mdx8Jqqqqqdq6G4FdVu1YF+Ari13vFWM79YeNbYhUfSMgW0ydmIdzIm80Q3gMhZocE7EAW8TvOVeETs+GHpPzYAljBo/CJpDwr+GgtMka/pxGJg++2CsrTEtLS3rqkUMpV8qbCuMRVIQMdHe21NbVtZQMDgxcBX3FDjj7+FSO+u42+C8Zn/4gVfNiu/Nne6A+PODGOiSQUPgnHTCQ+IYfjx+YzOuTLZuO+8ths0VXhA2Z8EfUdfuvP9kP4JBJ0/cRXhO8uZ6j9ML4XEYlS8FthWlpvzld9xUqZXN6XVFh48eJg2MBAWFnYYGFnV1dncrJKmZ4bHk9VfqBllO+C8S0eMvBxpWwBEDO1Ky7ZRaaJetP+I+b4YoeiNoqhh/h3frT/SxBXaAfGRPs3lythS7giIG9+RHOi3iQlXz5bChcXWSPRVCAJvCJ8c+3tSO+9F4Eo7+0tv5DQ26v/qk8hkymbjoXt3bU/WJ7UHlZbNliYtCfs4sDeFLksMic//nyWh5f5xB8Yn4szM+/Sfsdl4GNaH42PXqTx+YORmGPnGHfnberqZCz4A3y+IoKeAF1cKUfAFvLA+sRUQ5E3lpAt9CZlmUOecMXJgwx9Wfsb8vI+4Wu06vf6FHJ5dF8IDHR3RecUdYSF7GzvKEy6fDkpKUWpAnzhfq/QNz5MfHeBNXwUGCuxzyo+X7bQPMpRVwD27Qu/RhKY4rNwXoyYeUgJ/c2PpOwnwj+0EDOtLCa991ky9CWklQq0kZXv9Wl0so+Pbj+UGNs/OLBn7c7EuKNJyYrgPLncoMnrzVkT7ifNMt65pH3XdQbLSuxj4MN99yY/wQfFJDOzEzfig/ZSJj4OpgUhVULBojdcGT6uNzoByO9ivpRMHWw+neyFbH9iYQh8D9ij3Etmjo11dQl1za0F4RGvZeh0iqbEc9tPhK5uK6sJSTzU0r62sDMl29CXosjLVceHS6RG87vXiM/Zfc7V4ePQn7iFdXxCIknAX4ElPuib7x/io2snNlsI7enKjhJLgK+Q1DTc8amzHgLfNFci+M3DmaOgQK1+LaFAX9GVqdH4JG/v7j60KjQ2JHZVd3do2ODg0bUfJBemBGjVBfEF+dKTxuD3OBX67B0eHh4fz3cIfH5kbIFPPnyaOa8/m2/mvGKKGjDlWeALFHBYDHw8FunO6A+dSyG1I94SZhDhwDEJ+dGJDy7MsPjuJ4MfTrxnXgN9lNyzNzlDF60MLuzu3n7oxOGSuNDt57aH1u4O23302J61GT7panW8Wr/jdJZZ6sWhbxJrOHwCDp8R+8AJLdyJxofLYfPYxyPtgGtSWAAFMBoU+1gciTk+Pw4fgTaioc9FCI1gZ740PiH2Umgj8udDW6E/jz51cORh8S1xd8b48Cy9oKFBm/Mz4OuUFys1wWu7D51YlVgS0pbafa4b8LW1lYW1dxQHqHNz1lTqOZyTFL57KHyuTw2DT8oGiQRMfCKixECfAvg0wQcrLFNHIFtI7UzAyLxQd0hN8Pnhq8EFZ+QiYfJYPKjbUSM6WqBFKqRCeTXsoAN+ZKkF7s4ucNd3HMZ36sK7rWt+7omo6NNpZIrgrd2rElviVu8+y3r99e7Du/fV7KzZvbYrWBOuVofnhL9TvSOGxodD3zD4AvEVlfgyLp/3cLEPOgmey7PEB98DsVNL+FSJzMGeDzvGVEUkPpGfEB8RrZSQFmcywMCNwPykTOtjWhhcACv4HCB3AD6iat584cg7SVv8ItbJ5RpFcPy5xNjVNWX7yl5//dyJkp3H2mvavunQBcv0arU+Oz9iR/UrFvjcSHxM0+NjOObjApwCvM1jH5VguPBVxKz7xAADBSNksRaZF2MVkKACjd5K+qjA6O1iOAmCcSAsmZswic+XyxH4mgxqyGXREPgecrC3Q/iWIwytebK8ir3ZFRH1BpUmOri+OzF2J0xR1ZQd3dm2b/Dovt3fJGUEBKv0uQXh+gI1p1pKJo/ZFD73SUOlDpEkEHWemQLZTBH4oD/QASY+zIbD5qNOiRj4ABWHaMeTBMIGsoEAmxd1LtCGOhMJXCKqDRckwPgE5qkDanlGEKQ1l8SHp6uOH9l85JO9/mvqM3TFYH2a0FWpcVVtVSU793V81NTZ3n4seZ3CJ0CrryxYE55b6bd1K5E8PMaNM+J7xErhAiM35sgTf/D4yCt9hSLSeX35fjwWl8fjM6yPjyHRvaLxgQIFYFj0Bsr5JGLYbqTnbwyQPAHwY+BjgzNwAnkUbpSl6D5YasYkV4wPl83r33jj+Ok9HHW0QhMUEB38cc2qlpayD6q2n2vZl5TU3r42eZ3OJ0DRUJCrj4+ozJXEbyWSx5Mm+KyVzURlS0tKm2QgdEQkoEcdhMOBTMe8EOKg8ygoYp+SMvBBpcLEB7iNCAL5bAGPwoc3AT8L5w00G66blZj+zCkrwOcE+BZifM3NzRfCC4p90lXB2pyAj3a3tMS1f/DN+2FhbWGDe5KTU1QBPkHFDfrc/C0V6fp3IraKD+C7lSb4Flip+yxODU9xUD0BRyK6RhcuUgiF6Ad03Qf0eGLEjZ4uoVMHKTEDnz/Yk4jchg9BhxER8POFtkTc5dOpgw8XmrZPQhLYbKmpU3DhN3EU9kJBHb+3QasUbgwKDvf+eF9bVVx/WVzc+99++OF3363r6swoDghQFEfmV+bvyDHot1REbMXJ41kjPtdJ04bHxzGPHRgnNfUmReMpoS+deWmZ1H087EzeRrvgmRYupPws8IkhB8P/HB6eWfHm0WGD4CcxL1yoQZsQbxWazFz5otNlaAWBbyKuXDYnpJWztcrm9YpgvyMfn930eVVVSEtJyU+/ffvhR12d66J9AoIUCrUkN1+sNuT2VNTvjcGJF+G75qZRULhMemwqiykOmuTzhYtr4bt8oj4D8xDgBYhSvOGnS71p7yMRCEzKZnL22o84ihQFMmAsFQJuEdo3HwHkMsZxIh6Fj8sVgl0TA1x/5Kc8DvyKoBcYyIU98Yea8XN3xvhw7tiQliYQ7FeUrlQFl576+Ozbm/rjQltCypI++PCD5K7MgGCELzp8S+WawIj0yKKIomp8s2M84CPL5knXMW51kFHMLxDHLErUrB0P4/EXoz4JUZCyjk8K9Gj8HGPRiOYFyXqFjxbJGU9keWJMCVb4myUtRmWMjo5BY4mxZwtF5KHIdUw9hPCNmjgRB79t5WnlgnJlq1e5ovn4L++/ndpfFhsaV7svKbkT0/PxURQr8/Mj86XxlZHpEUUbceij8dk7XHf9UIWftz/MfostbV+MOirx53Dp+lqA7NFyWs3bGwMgZkp5JrtlzMuC4UgJkMTsjdhfbCSGx2H0TB4DH4cYFos5SIEsvGh0XIiMEjhNpuY4oPsdE8ePx/OlR3oT6uoaGmJalc1Zv3z7+ab+s/uqSkJqdx/tyPRB9HyKlSooWiI+21qRYqjowb77vBGfi7PDlBU2+DizNa2Awg+sb/x9eMK0HKJfneyNUp/WGNl3Z2vLznZ0Fa5NSkpuCkb0AgKKZdr4XeqeHdX5RU1Fp/F01fiJ4+gJqymTR8gjGpQWQOXiCPiWeWHzY6clJMiajxeXr0z78OvPy4716WDmLzoI6GF8CllU/Jrs7Pjq+OymImx899H4UO6YPGKe0SD0hIMbxjdhOS79EhLK+bLWg7L961svfvl27Ud963QKH4BHSqGK2rKrvujy1l0RRaXEiA18F+Mjg98YG3+w1FLTIPgBvvGLMY1TcJsyr+6ANi+mdevhnwb6OjqbNEFBFL0gTaMhf1d9VMreiOw1HjhxTMD4cPDD3jvSzO8RGLY5Ar4J8zC/zeVp7P3H+bKDpRUnvi7sSkb4AgIAHXZeZVRRxK76lIzknuwsXGnPHo/x0d573ZgR8GypufkR3uuGzSlGwN+/f8P+4OZTXYffh0kCmHiOJujBiC0oWpUdUVFkyEy5vAHDnjUBhz6Mj5iunzL5sSdYI0lzHLD5TZgwCxPJSujVviJQnDqesun9L/b0yXU6TRCCBzaogLmE3PDslIymjPPETbZbjb5LjdvA/B4YWcXLAjcXbH63Eg/WH+DLNiYEt8ZU9q/+YrCjqVEFgzVQEEgj89Hos1My5ReIe2yLkfHR+EjzG3M9ayRpqieY3x2Az/lugl/DG60KgUfC0U1fnE1uNOiCghTwX5AGJrKUyoD07KjMI+STzZTxUd5Lmt/YuayRpDlLXUbfgfgtmk/478HSoLyVmzu+/PqLFHmmPBqeONBEB2nylIogVZCyPmUjQe+ZmydQiYM2P2f3SZPHzBxZ/GbYOwG/Cbfe7EnOv28obvA6dfnLt4/J5U3yzKhMnUqnU+XmBRUrg6LDyTuUT9+MjM8UH06+2H1vGFn85ro5IXzA716CzUFBVkz6529flq+LzigyZKSny5tycmRBKpmy2YOkd8utVOSzcF+H68D+FrBGkuA5Z2x+t3iC/2Kt90rbsyklo0u3Liojw1CUsk5tiC6OKqUeKn3mlpvpyGfhvhD+xsy8a0T88w5Kc2dPJ/g9BfmXUMz5qoxMQ1RKhqHeoKuIKNLWbfCgnmvxBHqE8TH/YQfBb+yKETV8e3Dx9OnTbwV+tz3qZVTWqU8+CVfDE1W9Z04eXEm/DuIpJj3afe3sgd/kMWNvuH8kFdAPT3OZPh3w3XLblBe8rOneR2/D9Mi8Yem+NL+Zj10/kgDOWDR9+s03g/3d5kl5MFMej77EpEfjM/KD/IsA3jVjBI1B5nqS/G73HNoCnwR4THpMfs6uDlOQAY6decNjd821zZdCDKVHliwCfgjgS8+8MN/iDTiPPnY7wGPSY/JzAX7IADHAG254bMW0+6+3Zd2PdBfWtEVP3YIB3n77mGcefeHJu+fPf/LOR59Z8dLtAA+ZHoMek99ocGAAeN1kguDMmTfYrGbOHDt2zJjJ101ycHd2c4H8C/UztkBMkNZt2PLA9HDOHWftNS6Yn7O9O1gguDBorC1rDNDD+OzdXJxQ/UcAxARp3ULBo+lZMUAaIBAEI7RlTQZ6UyY5uAI+GP3C9MF4TBAQ0kLsKHhMekx+EAERQFd3B4dJiKENa8oUgAfG52wH+BwnonsfmCAgpATLE5jwrL+HCSzQBQgCQncH25a7u6srSW/UqIk3AUBMEOlWTA6zY8KzDhC5MBB0c3N2trdtOTu72dk5AT38lsRxSICQFmZHwbtigNgEAaGTi4uLnS3LxcUJ4GF614IAIIGQEvn96l9cimwQNNrmBZ0cRdIjuj/OQn/m1a+28u7Xq3lB7P+vHv4LuuZ//bv6HTACyiZ1eib3AAAAAElFTkSuQmCC"},1178:function(t,e,i){t.exports=i.p+"static/time/img/page2-word5.1645448.png"},1179:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAABCCAMAAACGoFj9AAADAFBMVEUAAABnWEWeiWyeiGueiGueiGueiWyeiGueiGueiGueiGueiGueiGvf0sCchmoSDwwODAmchmkHBgWbh2ueiGsIBwWdiGwFBAMCAQGahWqchmmeiGueiGueiGsEBASeiGsAAAD7+/2fiWxdUD9WSjrn3czl2cjDtaHr4M/n28r////k2cfv5dXv5dX6+vru7u7t49Ps4dH+/v75+fn////EtqP9/f3v5dX9/f3s4tHp3s3j18T9/f3SxrXUzMD////9/f3////4+Pjs4dHt7e3azLn////9/f36+vrh2s/Zz8AvKCH////r6+vd3d3VzsT///+2pIvv7+/Ds5zu49Pd0L3+/v6IiIiBgYEAAACnp6eynoTl2skPDw9jXlbv5dVMTEz////OxrmAfXeqpJrn3c6Me5tmV3Lf1sdbWliOfp68tarXzsCMfZ1pWnZnWHVvYH14aIZtX3t1cm0AAACIeJeGdpaWkYl1ZoRxYn9sXXmOf5+KeZrQ1vFqW3hgUWyAcJBeT2mEc5NhUm7T2PJkVXBiVG/W3PV9bYxoZmPFzOzK0fDAx+mgm5K8xOmzraJ0ZYDnu8PFvrHN0/CAbo3k5/ba3fS1vubhr7J6aonH0O+Mh4BXSGIJAwz19fiuueO8ssLpuLvis7rDiY20eYGsdH2haHHByu3pwMauprbqqqbkpJ/Llp+EeJtxY4MqGint7vTxztilrNW1qb3arLS8gIeHU1tHOlPwxs7VqK3gqKzUoKVxQkxiPEkZCRLb4fnn4+ne2+O8wePX0d7cpabAi5jUlJbJjpTFfH6gbn25cXyTY3GxaW1RQ149METg6f6ttdzPxtLBu8fht8OgncCCkL2glqloeKeFfKDanJzOhYuPWGJzSlpsOz4uEBnqw82PnMumna+VjK2BY3+dUl+KSVFaKTNDJTLK1/Zaf8PXsL+HgKSXi6GwiaGiYWuDWGsaK2B9QEb11ePIwNCtpMS7laeQf5+OgZmpeImVdYmLZ3kHDDrKw9DFvM1EWY8xJzmxUwk9AAAAX3RSTlMAAgQHDx8LF0E0KjxFqgYEBxIKDSMNGRQQFAkcOi0YJxz+MQoOj4EzyJmXb/ntoxXn3tXKxlpP9ePUvaN5Zk4lv7OvoZOQilxXUz4R75+He2xTPSPfoUc6MR5IHbMhGy62nLUAAA7iSURBVHja1JlZaBNRFIatSVPwoVIqQisiCq51RyvuG7ghKCq++DBjJqmJk7bZaqYSqlWU5KGYlDy0tBW7Umtcim2tdUFxqdUqaEHcRdzAFRVxQdBz7p3JJE1uWn2x+cEmvd6EOV/+898z6aD4ShpoGvT3Grx486qVqzYvHszewi5/cLhS/7cGq/oLFNOyV8zaqmjWiuxpf0OA1K3RZOoGmjI1Gk2/OaxcEgKgguivBxBAZvqaccsnTJ/MDSxNmbt8tTYTOfSFQTNp9NaYmqTrFwIgsGj5FG6gasrYjTpNX25YsXYrS6NX9AdBWtYmbkBrzrg0xMCmsHhWRNWoiKZYHD8LUjPTVw9wBKi5a3SaVKYZskM2uHjym89qt9t3FuXtLDh8UVlemx2PgUa3cR6XCJqclc40w3rFAYd2FxXl5eXl52/bt2/f/r17d/lOHpT/bz2TQSqEwcDNgl6aqCUU2AzulKMDFAzb9u0HDMV5h+TGWMCIA41OmzXQjoM4Wk6DgcHgwjerlTQCciAU0Ay7dhWXX2BTIAzGcYmksbG8sJKWeNtWWEgoSJ5ym02yFiEG0hLF++/QLStjM8jiEktZSCESwgbq9jvSsWOFgMEXyD8FKrZLtp3bQMQLxYcphQ2xGKzmEkyT10RRmEnKO2STJMnnK7TtvuV0Oquqzh8/fkqS0AzEC8XPyK6ZUZmo045PmEwMacYWrS41nMIkUt0XG0iSCst3/HZWna+qcqKObwMK+fuoFw7R4bHX2ZipzZjAJZ7GZqRDLKg3TDQTPeXlSMG2B3xQhT54/eQ8YKi0gRdkCpfIzmmRzZCelmiBQBtifFp6WEMsI+NBjsdDMOw4BZWff/yi+8H17usvq5zHPVZKASDYycCwNDIQ0jZO5xJRy1OwIZRpmQaCh6g8UA4f/+NrR1BNTU3dQMFqz1Mo3CV71fmZNENinY5RVlAT4cTugCeAFNyVTuenB1cvd3SUVTeWHWlqw4YowpMSG2IXGRemRjTDFrYRTKXwQy+I5BeDS8/1Jb1BMNJnjhKTsmgxMnYLQmgLPlWlrhlLLOxUGK5agdwynNyNAgy5lc7X1wBCWY3/6dOa+01XnzhPeXbmKRTeESuoEHTaFHYiHODNUEkFb8YqjGZeUCrtLVov3VQiv5RXFi1mh4UWJQt2UPF8CB4+VaWuGXgzk8KMERmKFbKxqoN7dlMKgdxiZ1swWF1d4/c/bW6vPnL/rPOWB+6kyNAEVjiB21eFGWEE+7bJ6OWFUGEGWhZ51lvqdYqUmMnMG0JLZt4s0qKohL+AwAn4hgwtAisABKUbfu1BIYmCouM3Hp17FOypael5f6Ortulh1a2AHa1AKRwOOyWTIBFSNrLvGfA6Smn54WWJQqR4nu6NJT1awMvzIr6N1wASekEwoFw8Tx71URDgg3Aw+2EEpgIWQgalu3sUCjukWx+7WttePiirbbhy5UZX00PnqQDeVMvnpI8MTDROYE5KG76QY8ii1+sFswF+euEHNEUpPI0VHPEhYCEO3mEECFg9PlCUBgNWHvkyQxQE6KZSjqEJySla7Ac6JIwu2IEiGI4Wdz0829Z9rbGmu62r82rHI+fNgBWsIFO4eVAdFaAbMpIncgwJfAwphUdfrFEfS9TKRhc8VkRCEOSyBZQDmgQlhr0PxAp5RPaxO2LKsOFppB82k29REAHFcPR5W7Dh043O+/7mq6/OdV+uPvfadsxq3UnuKRECGZiylW4YPmzeP0AQeagqqp8tauV0F41A0aJkpiGWE3pngp5pqGiNp/2QtIDcPRagCIa3j16+qYbDscXvb29vf+q/XP/gub1QtcLNO+SOOgkhYDcMm8GEoJgzutwSHvwdtSqEXbJaroiBQOPUQh8dcYPRIijeQDnob4wTYnZyhhYhkFw8hAwohnsfX76B+mv8n9sbm5ubG8+0dgSKrFb8hgHvpPbfJMk4NUnuhhGj5sSDIEYchOqlikghGoKX5qQe61cgWKAcF9lVQQ9PUlmfp4OLhzgVCD+2soalaDPh+8alZEpwu90FBW7EcPT5p6897bWvzn6oK2v83NzT2dliAydYlWy8+YxMzhSCNiN5CBcPghDhyfDPyxyiQFdV60RCwEAACrDfbFTaAhSCYDFE5yLdBbRE3hsXwjoaCknkTy2Hc3LcKKRQUF9/pfr647aGDzAq9Jyu63iTD18yoBXycFioJJPzLBlCSvJ4jqUSQVSdADS8JpzhVAr9hYCfqsi5QkOPEYctGYLoNcSGUMIL+L5e/kA8COOGjUjTpSoQ3DkgBAFWeF9f39lyJljT3OxvOR2su/8+X/KFrLBNgQAUSC6O4fohESxtkGuOGIYtrtiZoEKgnPBfmJSzFXQAm6yUrHpV81tk34k4s7I1dhQkY2qoHXJyQxR2fK9rffzqxfW6+mBNy+nW55IEEIACtUKl3A5JcDhgLo7sGwEOO65Y12ICo5v6A8HYa87E15Zg9AnIo4I6QB82Gzp4F31fHK3YmjiKTs5TSTBuzwUIyAEoHP3e0Fr34sX1ztba0y1n6u3HbJLvGECgB0QlDUYVwhSOKTW1WAjwqNTzXnY7UAkCLplDuY9cZBpq9Q61G1ywQiGYsEeYmj8qGSHIR+T27bk5ubnbCYV7PyATy4KnGxvLzgRrb/jwK1e0Au2HSnpEqhDmMntAAKmTDBWnqLSCfpBYg9AHBJO8FJEhFQdMqoUqYLdqBBEaRNmH8ciEMG8ImRmHZpNhaTsV+sGd4/75sKG2w99Yfaauq6FBsgEEmgpF0A+VZFhaNTQE4Q+15hoqQxjG8Q82tyMzll23lVAuX0QSkpLI5RvxTU2Os+xuyCUW29TBMJkZo4yd0SqLgw0dtC6Fcyzrkii7arcll47zwSWKcilEnnnefb1a3o3yZZ7TudXTnvP+9v/8n+d9dhdLnGjiD0srdu2kCBACv0XSdifVQmAtEq9bcffgjMEulhevQ2EKQugt4Nh84FMiFksgBKCw8sGX9hftbW/vPm5rO3J7+alfpAAQyNjMIMziLhNq51dqaUgAut7P/3lpfU8Ig/3xIaCs8AFpY8Af2Ti+jk9h0pB+Qd+g3oKAF6hnwAAhIIUHn461nz799OnzCy0nbp8trXKlQOsBL1CTBQLBBxAm/o0n1M7T63aHmWIYhLjLqQYCSirMg8AekhYDlNl+locU+L4wESB0BQg4Mr5PuEEptC67eezK0ydHW24cOnm/oL7eTqUAEIgvCgJtkT17jPtXCI2/bnvQ3Gs9AVS0Ao9NxS7VhdAIx8SlA5F/nOVRCo3cQSHYx4UwB7dryCBBpdD68fyjI5cP77t043ouldJat21es/EUuUDgfm02QsBhqWePqX8Lgb9zYBAiYXRBKQIQ1pFju320xmLQV+jj7nFlsCcCIHa6GMJNv/3ZMNcURrvTUhdB7LsEJwUGAaL5c8vRy+cuPtx3/aVmGC+1UvP2zVAQUA9kveZDCHiTHjq8fj24fZAHAacdFDKFQO6AEXoXbCJJ8Vqfpb9HITEK33eF3T4QxQsJhz1v2QqDwiBBEHHjfjUBQSEkTrXfPHb+4sl9WsHKZExNVY3S2h3oCtfc5BmigBNjb1iu9RsS4r30Qq2aX5J41XM3iKwcaDbu0XDT1hSNVG+P1GeJAKrP/M4orihRA9HdXAHy6gHaAzijuICs3AFB1RO2dmbvHb1558TByrtKTsmYum3JuXzrluWbVpOV+wKEQNtDj2nS/4kVjfVGXLSJ6vYFv/9hP8N0wPLqx8J+QawH/3Tskm+qFNav3/u60Nl263bnq1fvvpaLjqGo7sfL7MYta3DNOt1PIaApDA954x0qf45pg/tAPYjiqCVsYFq/d+WDD5V35VLL2VcdSt7JVspaTlHllG7l9Ob7mDlPFBACmAKph/mTJM/GeHelIIqifyye7dvKWKx5w4diueP714pZyqYNQy3kVE1WFFmDr2ohiXlj/RQC1gM0yYZZkndjZBCkABAGTia2ENuaKKpGttyRt/NpJ53XVEt2EViapiuqShhMDlargdQD7JaGhBo8XBCTRg30jRgh+gNzl2Ac70zpsm3kbcXW5OtZQ7V0BTDopmkYupwkSXMDIoUA/YFIIdRrvOTZGA1dEinMJAe0U5qipmTVVsx0WpdlS4HPlOk4pmZVGcwM/KwGJoUeDfO9+co0xphufYCCPzBgAjniGXjeU6B8gOCAFwICXTMcx8koB0jChAEBUg0EAkrBbRAN8z2shZHdfAABKZBIghBU20o7BviArOtaJps1M8lhlAETAns1EgoCKHjx7SqUgmsLAKE/pTAsadu2UTQBAjDIGGZH0QYEhEH/AX50BIRAXGEQFARMTKHuvRZJno0f7dzNTsJAFIbhGForLSqlpWUoUFLrX4zGaEg0BhYGNxpgZQATNdyLKxfuiIkLvQUu0W9maA7GDLpwM4nvFdCHmWkJHPYtI03LUOhOst6nH7g5PL/hkfn15eUJBLJuSAth8bdrlhlDwVlr67sl9nZdKNyEYedkQg6zKZrNAJB10skM5gi0IYK5QuFK2/Px8ICl6U0lbDR6E3W9BgxoMxDCogIYzh817bzNuELYGB0pCC5HcwPaDKRQlQq4R3CG1u2epo/Rx9vXQqE56p19EzjrDZtkkCGQwoZQ8G2xGMBQKLQGV7frunSB9tE22unsPnCG5l3/cgHitHvXBIHKQCpgR1iRj8UABjgAQpfWkFPLJ7ZvBpab8tOxgpMBDOPxsDXo9/uD9vB+DAIsAzJQjHwYLDAlQ80BhD45To0jxH5kMSPdSkvlMhi4AwUBQUAGKgUsBjDYcAAEKPSoBoJ8Urd9PwqY4W3hqUkywCErJAJhoB6BEgxYDdyhniRJXpPwUut1O8Z2YK5AwOdq4QAIWQUCggAGS4dt5Tyg4bIAywEQcWxrUxz7vhkFFgyq1Rze7KJ0oEqSgAyWzgRiNcAhiCJTqyIQMBis5vClnKiISllFIUAEPzHkVj2DQzBmaRRjrmtwgw0MBSGCkG1KAvTLWXExKO15hl55HsappQEuYw5BKSfv1Q44JTUMA/bCAP3Bnw+sQELPvlzq4vX/p+4TfXkCWhI+JdsAAAAASUVORK5CYII="},1180:function(t,e,i){t.exports=i.p+"static/time/img/page3-img1.65fa93c.png"},1181:function(t,e,i){t.exports=i.p+"static/time/img/page3-img2.cbced1f.png"},1182:function(t,e,i){t.exports=i.p+"static/time/img/page3-img3.59afeb0.png"},1183:function(t,e,i){t.exports=i.p+"static/time/img/page4-big.3e14a6f.png"},1184:function(t,e,i){t.exports=i.p+"static/time/img/page4-small.5da02ba.png"},1185:function(t,e,i){t.exports=i.p+"static/time/img/page5-img1.bbbbe4a.png"},1186:function(t,e,i){t.exports=i.p+"static/time/img/page5-img2.73774ee.png"},1206:function(t,e,i){"use strict";var a=i(100),o=i.n(a),n=i(101),s=i.n(n),r=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o()(this,t),this.observer=!!window.IntersectionObserver,this.registers=[],this.$reference=e.$reference||window,this.eventListener=this.listenerScroll.bind(this),this.scale=0|e.scale}return s()(t,[{key:"add",value:function(t,e){var i=this,a={element:t,callback:e};this.observer?(a.io=new IntersectionObserver(function(t,a){var o=Math.floor(100*t[0].intersectionRatio),n=o>(i.scale||0);e(n)},{threshold:[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]}),a.io.observe(t)):0===this.registers.length&&(this.$reference.addEventListener("scroll",this.eventListener,!1),window.addEventListener("resize",this.eventListener,!1)),this.registers.push(a)}},{key:"remove",value:function(t){var e=this.registers.find(function(e){return e.element===t});e&&e.io&&e.io.unobserve(t),this.registers=this.registers.filter(function(e){return e.element!==t}),0===this.registers.length&&this.clear()}},{key:"clear",value:function(){this.observer?this.registers.forEach(function(t){t.io.disconnect()}):(this.$reference.removeEventListener("scroll",this.listenerScroll),window.removeEventListener("resize",this.listenerScroll)),this.registers=[]}},{key:"listenerScroll",value:function(){var t=this;this.registers.forEach(function(e){var i=e.element.getBoundingClientRect(),a=i.top+Math.floor(i.height*t.scale/100)20){switch(t.pageIndex){case 5:t.pageIndex=4;break;case 4:t.pageIndex=3;break;case 3:t.pageIndex=2;break;case 2:t.pageIndex=1;break;case 1:t.pageIndex=0}e.className="animationMobileBackgroundTo"+t.pageIndex}t.addPageAnimation(t.pageIndex)}}),e.addEventListener("animationend",function(i){i.target===e&&(t.animateProduct=!1,e.style.transform="translateY(-"+16.67*t.pageIndex+"%)")}),e.addEventListener("animationstart",function(i){i.target===e&&(t.animateProduct=!0)})},addPageAnimation:function(t){var e=document.querySelectorAll(".page"),i=document.querySelector(".page"+(t+1));e.forEach(function(t){t.classList.remove("animationIn"),t.classList.add("animationOut")}),i.classList.remove("animationOut"),i.classList.add("animationIn")},touchMoveFun:function(t){t.preventDefault()},download:function(t){this.android?this.$ga.sendEvent("Android 下载","下载页 Android 下载","下载页点击 Android 下载按钮"):this.$ga.sendEvent("App Store下载","下载页去App Store下载","下载页点击App Store下载按钮"),window.open(g.a.appstoreUrl)}}}},1359:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i(99),o=i.n(a),n=i(219),s=i(674),r=i.n(s),l=i(673),c=i.n(l),d=i(1960),p=i.n(d),h=i(218),m=i(1962),f=i.n(m);e.default={name:"homepc",data:function(){return{isShow:!1,scrollY:0,desc:{page1:{title:"聚合专家的精品课程",content:"邀请左耳朵耗子、王争、杨晓峰、丁奇、winter 等几十位顶级技术和行业专家,通过图文、音频、视频等方式,为你提供有干货、可实操、能借鉴的内容产品。"},page2:{title:"连接用户和专家的桥梁",content:"极客时间提供了留言、社群、直播等方式,为用户和专家建立了紧密的连接。用户可以与专家交流学习心得,探讨技术问题,获取成长的最佳路径。"},page3:{title:"沉浸式学习体验",content:"精心设计的文章排版,个性化的阅读风格,为你打造沉浸式学习体验。你可以使用划线、评论、收藏的功能进行深度学习,也可以在碎片时间听音频,看视频。"},page4:{title:"精准的检索服务",content:"你可以根据更新时间、订阅人数、价格、活动、热门标签等方式检索自己需要的课程和内容,还可以通过搜索服务直接搜索你需要的关键字,系统会从多个维度为你提供精准的搜索结果。"},page5:{title:"全面的行业资讯",content:"音频播客卖桃者说,采用独家视角,深度解析行业趋势及对互联网和 IT 技术的所思所想。24 小时不间断更新的 Readhub 和极客新闻模块,为你提供最新的行业资讯及热点信息。"}}}},components:{CommonHeader:r.a,CommonFooter:c.a,DescModule:p.a,ListenView:f.a},computed:o()({},i.i(n.a)({loginUser:"loginUser"})),mounted:function(){var t=this;this.$refs.wrapper.querySelectorAll(".home-wrap");window.addEventListener("scroll",function(){t.scrollWindow()})},head:{title:function(){return{inner:"极客时间-提升技术认知",separator:" ",complement:" "}},meta:function(){var t="极客时间是一款由极客邦科技倾力打造的面向IT领域的知识服务产品,旨在帮助用户提升技术认知.板块包含专栏文章、视频课程、新闻、资讯、直播、图书、商城等。内容覆盖IT从业者的全生命周期知识技能图谱,邀请左耳朵耗子、王争、杨晓峰、winter,丁奇等顶级技术和行业专家为你讲述技术本质,解读科技动态.";return[{name:"keywords",content:"极客时间,IT,职业教育,知识付费,二叉树,极客Live,极客搜索,互联网,前端开发,后端开发,编程语言,人工智能,区块链,技术大会,技术管理,产品,研发,测试,运维,数据库,架构,微服务,实战,技术专家,Java,iOS,Android,Linux,Go",id:"metakeywords"},{name:"description",content:t,id:"metadesc"},{property:"og:url",content:"https://time.geekbang.org/download"},{property:"og:type",content:"download"},{property:"og:title",content:"下载页 | 极客时间"},{property:"og:description",content:t}]}},methods:{scrollWindow:function(){this.scrollY=window.pageYOffset,this.scrollY>80?this.isShow=!0:this.isShow=!1},download:function(t){t?(this.$ga.sendEvent("Android 下载","下载页 Android 下载","下载页点击 Android 下载按钮"),window.open(h.a.androidDownloadUrl)):(this.$ga.sendEvent("App Store下载","下载页去App Store下载","下载页点击App Store下载按钮"),window.open(h.a.iosDownloadUrl))}}}},1360:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={props:["title","content","width"],data:function(){return{}}}},1361:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={data:function(){return{}},methods:{download:function(){this.$emit("downloadNav")}}}},1362:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i(1206);e.default={components:{},props:{scale:{type:Number,default:30}},data:function(){return{reportImage:new Image}},computed:{},created:function(){},mounted:function(){this.initVisible()},methods:{initVisible:function(){var t=this;this.io=new a.a({scale:this.scale}),this.io.add(this.$el,function(e){e&&t.handleVisible(t.$el)})},handleVisible:function(t){t.classList.add("active")}}}},1363:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={props:["title","content","styleObj"],data:function(){return{}}}},1430:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,"._1_P9ft2v_0{cursor:pointer}._1PNBjQIX_0{display:block;width:100%}",""]),e.locals={tag:"_1_P9ft2v_0",idea:"_1PNBjQIX_0"}},1491:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".mobile-slider[data-v-04c67726]{margin-bottom:72px;position:relative}.wrapper[data-v-04c67726]{width:82.666vw;margin:0 auto;height:34.7vw;background-color:#f5f5f5}.scroller[data-v-04c67726]{width:500%;height:100%}.slider[data-v-04c67726]{width:20%;height:100%;float:left;overflow:visible}.slider img[data-v-04c67726]{width:100%;height:100%;-webkit-transition:all .3s;transition:all .3s;-webkit-box-shadow:-1px -1px 40px 3px rgba(0,0,0,.2);box-shadow:-1px -1px 40px 3px rgba(0,0,0,.2);border-radius:6px}.slider img.scale[data-v-04c67726]{-webkit-transform:scale(.9);transform:scale(.9)}.dots[data-v-04c67726]{position:absolute;height:10px;width:100%;bottom:-28px}.dots span[data-v-04c67726]{display:inline-block;width:10px;height:10px;background-color:#e8e8e8;border-radius:50%;line-height:1;margin:0 2px;cursor:pointer}.dots span.active[data-v-04c67726]{background-color:#d9d9d9}",""])},1494:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,'.desc-module[data-v-0d33b189]{max-width:428px;text-align:left;color:#4c4c4c;z-index:10}.desc-module h3[data-v-0d33b189]{position:relative;margin-bottom:25px;font-weight:500;color:#4c4c4c;font-size:26px;line-height:1}.desc-module p[data-v-0d33b189]{font-size:20px;color:#4c4c4c;font-weight:400;line-height:1.5}.desc-module h3[data-v-0d33b189]:after,.desc-module h3[data-v-0d33b189]:before{content:"";position:absolute;left:-26px;top:-10px;display:block;width:25px;height:25px;background:#ceaf7e}.desc-module h3[data-v-0d33b189]:after{left:-16px;top:-24px;width:32px;height:32px;opacity:.3;z-index:-1}',""])},1505:function(t,e,i){var a=i(620);e=t.exports=i(571)(!1),e.push([t.i,".fade-enter-active[data-v-3b773955],.fade-leave-active[data-v-3b773955]{-webkit-transition:opacity .5s;transition:opacity .5s}.fade-enter[data-v-3b773955],.fade-leave-to[data-v-3b773955]{opacity:0}.downloadNav[data-v-3b773955]{position:fixed;top:0;left:0;right:0;z-index:99999;background:#fff;border-bottom:1px solid #eaeaea}.downloadNav .btn-lists[data-v-3b773955]{width:858px;height:65px;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.downloadNav .btn-lists div[data-v-3b773955]{cursor:pointer;position:relative;width:150px;height:40px;background:#b89477;border-radius:20px;color:#fff;text-align:center;font-weight:500;line-height:40px}.downloadNav .btn-lists div .nav-code-img[data-v-3b773955]{position:absolute;top:52px;left:24px;width:102px;height:109px;-webkit-transition:opacity .5s;transition:opacity .5s;opacity:0}.downloadNav .btn-lists div span[data-v-3b773955]{display:block}.downloadNav .btn-lists div span:hover+.nav-code-img[data-v-3b773955]{opacity:1}.home-wrap[data-v-3b773955]{width:100%;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.home-wrap1[data-v-3b773955],.home-wrap3[data-v-3b773955],.home-wrap5[data-v-3b773955]{background:url("+a(i(1168))+") repeat}.home-wrap2[data-v-3b773955],.home-wrap4[data-v-3b773955],.home-wrap6[data-v-3b773955]{background:url("+a(i(1169))+") repeat}.home-wrap1[data-v-3b773955]{position:relative;-webkit-box-shadow:0 2px 8px 0 hsla(0,0%,75%,.5);box-shadow:0 2px 8px 0 hsla(0,0%,75%,.5)}.home-wrap1 .shadow[data-v-3b773955]{height:14px;-webkit-box-shadow:inset 0 2px 8px 0 hsla(0,0%,75%,.5);box-shadow:inset 0 2px 8px 0 hsla(0,0%,75%,.5)}.block-wrapper[data-v-3b773955]{width:1082px;margin:0 auto}.wrap1[data-v-3b773955]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:122px 0}.wrap1 .logo-img img[data-v-3b773955]{width:256px;margin-right:85px;margin-top:-3px}.wrap1 .desc h3[data-v-3b773955]{color:#4c4c4c;font-size:28px;line-height:1;margin-bottom:25px;font-weight:500}.wrap1 .desc p[data-v-3b773955]{width:543px;line-height:1.8;font-size:21px;font-weight:400;color:#4c4c4c;letter-spacing:1px;padding-bottom:66px}.wrap1 .desc .btn[data-v-3b773955]{display:inline-block;position:relative}.wrap1 .desc .btn button[data-v-3b773955]{width:121px;border:none;outline:none;border-radius:20px;-webkit-box-shadow:0 2px 14px 0 rgba(250,137,25,.3);box-shadow:0 2px 14px 0 rgba(250,137,25,.3);background:#fa8919;padding:10px 0;font-size:18px;font-weight:400;text-align:center;color:#fff;line-height:1;cursor:pointer}.wrap1 .desc .btn button:hover+div[data-v-3b773955]{opacity:1}.wrap1 .desc .btn .code[data-v-3b773955]{width:118px;height:109px;position:absolute;right:-125px;top:-38px;opacity:0;-webkit-transition:opacity .5s;transition:opacity .5s}.wrap1 .desc .btn .code img[data-v-3b773955]{width:100%}.wrap2 .main[data-v-3b773955],.wrap3 .main[data-v-3b773955],.wrap4 .main[data-v-3b773955],.wrap5 .main[data-v-3b773955],.wrap6 .main[data-v-3b773955]{display:-webkit-box;display:-ms-flexbox;display:flex}.wrap2 .main .left[data-v-3b773955],.wrap2 .main .right[data-v-3b773955],.wrap3 .main .left[data-v-3b773955],.wrap3 .main .right[data-v-3b773955],.wrap4 .main .left[data-v-3b773955],.wrap4 .main .right[data-v-3b773955],.wrap5 .main .left[data-v-3b773955],.wrap5 .main .right[data-v-3b773955],.wrap6 .main .left[data-v-3b773955],.wrap6 .main .right[data-v-3b773955]{-webkit-box-flex:1;-ms-flex:1;flex:1;position:relative}.wrap2[data-v-3b773955]{padding:99px 0}.wrap2 .title[data-v-3b773955]{width:333px;margin:0 auto}.wrap2 .title img[data-v-3b773955]{width:100%}.wrap2 .main[data-v-3b773955]{padding-top:160px;padding-bottom:239px}.wrap2 .main .right img[data-v-3b773955]{position:absolute;width:426px}.wrap2 .main .right .img[data-v-3b773955]{top:-45px}.wrap2 .main .right .item1[data-v-3b773955]{left:0;top:0;z-index:3}.wrap2 .main .right .item2[data-v-3b773955]{left:28%;top:-100px;z-index:2}.wrap2 .main .right .item3[data-v-3b773955]{left:22%;top:116px;z-index:2}.wrap2 .main .right .shadow[data-v-3b773955]{bottom:-120%;width:580px;height:91px;z-index:1;opacity:.7}.wrap3[data-v-3b773955]{padding:218px 0 276px}.wrap3 .main .right[data-v-3b773955]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.wrap3 .main .left img[data-v-3b773955]{position:absolute}.wrap3 .main .left .bg[data-v-3b773955]{width:663px;top:-186px;left:-62px;z-index:2}.wrap3 .main .left .shadow[data-v-3b773955]{width:580px;bottom:-200px;opacity:.6;z-index:1}.wrap3 .main .left .dialog[data-v-3b773955]{opacity:0;z-index:5}.wrap3 .main .left .dialog1[data-v-3b773955]{width:277px;left:283px;top:191px}.wrap3 .main .left .dialog2[data-v-3b773955]{width:250px;left:0;top:142px}.wrap3 .main .left .dialog3[data-v-3b773955]{width:242px;left:163px;top:65px}.wrap3 .main .left .dialog4[data-v-3b773955]{width:158px;left:342px}.wrap3 .main .left .dialog5[data-v-3b773955]{width:163px;left:55px;top:-10px}.wrap3 .main .left .dialog6[data-v-3b773955]{width:130px;left:294px;top:-77px}.wrap4[data-v-3b773955]{padding:218px 0 276px}.wrap4 .main .right img[data-v-3b773955]{position:absolute}.wrap4 .main .right .item1[data-v-3b773955]{width:240px;top:-118px;left:110px;z-index:3}.wrap4 .main .right .item2[data-v-3b773955],.wrap4 .main .right .item3[data-v-3b773955]{width:187px;top:-64px;z-index:2}.wrap4 .main .right .item2[data-v-3b773955]{left:0}.wrap4 .main .right .item3[data-v-3b773955]{left:274px}.wrap4 .main .right .shadow[data-v-3b773955]{width:466px;height:86px;bottom:-166px;z-index:1}.wrap5[data-v-3b773955]{padding:272px 0 207px}.wrap5 .main .left img[data-v-3b773955]{position:absolute}.wrap5 .main .left .big[data-v-3b773955]{width:352px;left:0;top:-175px;z-index:2}.wrap5 .main .left .small[data-v-3b773955]{width:318px;left:102px;top:-109px;z-index:3}.wrap5 .main .left img.shadow[data-v-3b773955]{width:520px;bottom:-125px;left:-46px;z-index:1}.wrap5 .main .right[data-v-3b773955]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.wrap6[data-v-3b773955]{padding:228px 0 291px}.wrap6 .main .right img[data-v-3b773955]{position:absolute}.wrap6 .main .right .item1[data-v-3b773955]{width:274px;top:-122px;left:178px;z-index:3}.wrap6 .main .right .item2[data-v-3b773955]{width:259px;top:-59px;z-index:2}.wrap6 .main .right .shadow[data-v-3b773955]{width:567px;bottom:-196px;left:-47px;z-index:1}.describe[data-v-3b773955] .common-wrod,.img[data-v-3b773955],img.shadow[data-v-3b773955]{opacity:0}.active .describe[data-v-3b773955] .common-wrod,.active .img[data-v-3b773955]{-webkit-animation:slideUp-data-v-3b773955 1s ease-in-out both;animation:slideUp-data-v-3b773955 1s ease-in-out both}.active img.shadow[data-v-3b773955]{-webkit-animation:fadeIn-data-v-3b773955 .5s ease-in both;animation:fadeIn-data-v-3b773955 .5s ease-in both}.active .describe[data-v-3b773955] h3.common-wrod,.active .describe[data-v-3b773955] p.common-wrod{-webkit-animation-delay:.3s;animation-delay:.3s}.active img.shadow[data-v-3b773955]{-webkit-animation-delay:0;animation-delay:0}.active .item1[data-v-3b773955]{-webkit-animation-delay:.1s;animation-delay:.1s}.active .item2[data-v-3b773955]{-webkit-animation-delay:.3s;animation-delay:.3s}.active .item3[data-v-3b773955]{-webkit-animation-delay:.5s;animation-delay:.5s}.active .wrap2 .img.item2[data-v-3b773955],.active .wrap2 .img.item3[data-v-3b773955]{-webkit-animation:slideLeft-data-v-3b773955 .4s ease-in both;animation:slideLeft-data-v-3b773955 .4s ease-in both}.active .wrap2 .img.item1[data-v-3b773955]{-webkit-animation:slideRight-data-v-3b773955 .4s ease-in both;animation:slideRight-data-v-3b773955 .4s ease-in both}.active .wrap3 .dialog[data-v-3b773955]{-webkit-animation:scale-data-v-3b773955 .2s ease-in both;animation:scale-data-v-3b773955 .2s ease-in both}.active .wrap3 .dialog1[data-v-3b773955]{-webkit-animation-delay:.4s;animation-delay:.4s}.active .wrap3 .dialog2[data-v-3b773955]{-webkit-animation-delay:.5s;animation-delay:.5s}.active .wrap3 .dialog3[data-v-3b773955]{-webkit-animation-delay:.6s;animation-delay:.6s}.active .wrap3 .dialog4[data-v-3b773955]{-webkit-animation-delay:.7s;animation-delay:.7s}.active .wrap3 .dialog5[data-v-3b773955]{-webkit-animation-delay:.8s;animation-delay:.8s}.active .wrap3 .dialog6[data-v-3b773955]{-webkit-animation-delay:.9s;animation-delay:.9s}.active .wrap4 .img[data-v-3b773955]{-webkit-animation:slideUp-data-v-3b773955 1s ease-in-out both;animation:slideUp-data-v-3b773955 1s ease-in-out both}.active .wrap4 .item2[data-v-3b773955]{-webkit-animation-delay:0s;animation-delay:0s;-webkit-animation-delay:.3s;animation-delay:.3s}.active .wrap4 .item3[data-v-3b773955]{-webkit-animation-delay:.7s;animation-delay:.7s}.active .wrap5 .small[data-v-3b773955]{-webkit-animation:scale2-data-v-3b773955 .6s .5s ease-in-out both;animation:scale2-data-v-3b773955 .6s .5s ease-in-out both}.active .wrap6 .item1[data-v-3b773955]{-webkit-animation:transfromRightIn-data-v-3b773955 1s ease-in-out both;animation:transfromRightIn-data-v-3b773955 1s ease-in-out both}.active .wrap6 .item2[data-v-3b773955]{-webkit-animation:transfromLeftIn-data-v-3b773955 1s ease-in-out both;animation:transfromLeftIn-data-v-3b773955 1s ease-in-out both}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:.8}}@keyframes fadeIn-data-v-3b773955{0%{opacity:0}to{opacity:.8}}@-webkit-keyframes slideUp{0%{opacity:0;-webkit-transform:translate3d(0,30px,0);transform:translate3d(0,30px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideUp-data-v-3b773955{0%{opacity:0;-webkit-transform:translate3d(0,30px,0);transform:translate3d(0,30px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes transfromLeftIn{0%{opacity:0;-webkit-transform:translate3d(30px,40px,0);transform:translate3d(30px,40px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes transfromLeftIn-data-v-3b773955{0%{opacity:0;-webkit-transform:translate3d(30px,40px,0);transform:translate3d(30px,40px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes transfromRightIn{0%{opacity:0;-webkit-transform:translate3d(-30px,40px,0);transform:translate3d(-30px,40px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes transfromRightIn-data-v-3b773955{0%{opacity:0;-webkit-transform:translate3d(-30px,40px,0);transform:translate3d(-30px,40px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes slideLeft{0%{opacity:0;-webkit-transform:translate3d(30px,0,0);transform:translate3d(30px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideLeft-data-v-3b773955{0%{opacity:0;-webkit-transform:translate3d(30px,0,0);transform:translate3d(30px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes slideRight{0%{opacity:0;-webkit-transform:translate3d(-30px,0,0);transform:translate3d(-30px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideRight-data-v-3b773955{0%{opacity:0;-webkit-transform:translate3d(-30px,0,0);transform:translate3d(-30px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes scale{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scale-data-v-3b773955{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes scale2{0%{opacity:0;left:80px;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;left:102px;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scale2-data-v-3b773955{0%{opacity:0;left:80px;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;left:102px;-webkit-transform:scale(1);transform:scale(1)}}",""])},1514:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".desc-module[data-v-5599ef02]{height:100px;position:absolute;width:76vw;margin-left:-38vw;left:50%;top:70%}.desc-module h3[data-v-5599ef02]{margin-bottom:15px;font-size:1.3rem;color:#4c4c4c;font-weight:500;line-height:1;text-align:center}.desc-module p[data-v-5599ef02]{font-size:.8rem;color:#4c4c4c;line-height:21px;text-align:justify;letter-spacing:1px}@media only screen and (max-width:375px){.desc-module[data-v-5599ef02]{top:75%}}@media screen and (min-width:375px){.desc-module[data-v-5599ef02]{top:72.5%}}@media screen and (min-width:414px){.desc-module[data-v-5599ef02]{top:70%}}@media screen and (min-width:768px){.desc-module[data-v-5599ef02]{top:80%}.desc-module p[data-v-5599ef02]{text-align:center}}",""])},1527:function(t,e,i){var a=i(620);e=t.exports=i(571)(!1),e.push([t.i,".download-btn[data-v-79eac304]{display:inline-block;border:none;outline:none;border-radius:25px;-webkit-box-shadow:0 2px 14px 0 rgba(250,137,25,.3);box-shadow:0 2px 14px 0 rgba(250,137,25,.3);background:#fa8919;font-size:18px;font-weight:700;text-align:center;color:#fff;line-height:42px;height:42px;cursor:pointer}.animationMobileBackgroundTo0[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo0-data-v-79eac304 .6s;animation:animateMobileBackgroundTo0-data-v-79eac304 .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes animateMobileBackgroundTo0{to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes animateMobileBackgroundTo0-data-v-79eac304{to{-webkit-transform:translateY(0);transform:translateY(0)}}.animationMobileBackgroundIndexTo1[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo1-data-v-79eac304 .6s;animation:animateMobileBackgroundTo1-data-v-79eac304 .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.animationMobileBackgroundTo1[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo1-data-v-79eac304 0s .6s;animation:animateMobileBackgroundTo1-data-v-79eac304 0s .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes animateMobileBackgroundTo1{to{-webkit-transform:translateY(-16.67%);transform:translateY(-16.67%)}}@keyframes animateMobileBackgroundTo1-data-v-79eac304{to{-webkit-transform:translateY(-16.67%);transform:translateY(-16.67%)}}.animationMobileBackgroundTo2[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo2-data-v-79eac304 0s .6s;animation:animateMobileBackgroundTo2-data-v-79eac304 0s .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes animateMobileBackgroundTo2{to{-webkit-transform:translateY(-33.34%);transform:translateY(-33.34%)}}@keyframes animateMobileBackgroundTo2-data-v-79eac304{to{-webkit-transform:translateY(-33.34%);transform:translateY(-33.34%)}}.animationMobileBackgroundTo3[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo3-data-v-79eac304 0s .6s;animation:animateMobileBackgroundTo3-data-v-79eac304 0s .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes animateMobileBackgroundTo3{to{-webkit-transform:translateY(-50.01%);transform:translateY(-50.01%)}}@keyframes animateMobileBackgroundTo3-data-v-79eac304{to{-webkit-transform:translateY(-50.01%);transform:translateY(-50.01%)}}.animationMobileBackgroundTo4[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo4-data-v-79eac304 0s .6s;animation:animateMobileBackgroundTo4-data-v-79eac304 0s .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes animateMobileBackgroundTo4{to{-webkit-transform:translateY(-66.67%);transform:translateY(-66.67%)}}@keyframes animateMobileBackgroundTo4-data-v-79eac304{to{-webkit-transform:translateY(-66.67%);transform:translateY(-66.67%)}}.animationMobileBackgroundTo5[data-v-79eac304]{-webkit-animation:animateMobileBackgroundTo5-data-v-79eac304 0s .6s;animation:animateMobileBackgroundTo5-data-v-79eac304 0s .6s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes animateMobileBackgroundTo5{to{-webkit-transform:translateY(-83.24%);transform:translateY(-83.24%)}}@keyframes animateMobileBackgroundTo5-data-v-79eac304{to{-webkit-transform:translateY(-83.24%);transform:translateY(-83.24%)}}.animationIn .shadow[data-v-79eac304]{-webkit-animation:FadeInShadow-data-v-79eac304 .6s .5s;animation:FadeInShadow-data-v-79eac304 .6s .5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.animationIn .book-img1[data-v-79eac304],.animationIn .phone-img1[data-v-79eac304]{-webkit-animation:Page1Book1In-data-v-79eac304 1s .8s;animation:Page1Book1In-data-v-79eac304 1s .8s;-webkit-animation-timing-function:cubic-bezier(.4,0,.33,1.92)!important;animation-timing-function:cubic-bezier(.4,0,.33,1.92)!important}.animationIn .book-img2[data-v-79eac304],.animationIn .phone-img2[data-v-79eac304]{-webkit-animation:Page1Book2In-data-v-79eac304 1.3s .5s;animation:Page1Book2In-data-v-79eac304 1.3s .5s}.animationIn .book-img3[data-v-79eac304],.animationIn .phone-img3[data-v-79eac304]{-webkit-animation:Page1Book3In-data-v-79eac304 1.3s .5s;animation:Page1Book3In-data-v-79eac304 1.3s .5s}.animationIn[data-v-79eac304] .desc-module h3{-webkit-animation:PageWord1In-data-v-79eac304 .6s 1.1s;animation:PageWord1In-data-v-79eac304 .6s 1.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.animationIn[data-v-79eac304] .desc-module p{-webkit-animation:PageWord2In-data-v-79eac304 .6s 1.2s;animation:PageWord2In-data-v-79eac304 .6s 1.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.animationIn .dialog1[data-v-79eac304]{-webkit-animation:Page2DialogIn-data-v-79eac304 .6s .5s;animation:Page2DialogIn-data-v-79eac304 .6s .5s}.animationIn .dialog2[data-v-79eac304]{-webkit-animation:Page2DialogIn-data-v-79eac304 .6s .6s;animation:Page2DialogIn-data-v-79eac304 .6s .6s}.animationIn .dialog3[data-v-79eac304]{-webkit-animation:Page2DialogIn-data-v-79eac304 .6s .7s;animation:Page2DialogIn-data-v-79eac304 .6s .7s}.animationIn .dialog4[data-v-79eac304]{-webkit-animation:Page2DialogIn-data-v-79eac304 .6s .8s;animation:Page2DialogIn-data-v-79eac304 .6s .8s}.animationIn .dialog5[data-v-79eac304]{-webkit-animation:Page2DialogIn-data-v-79eac304 .6s .9s;animation:Page2DialogIn-data-v-79eac304 .6s .9s}.animationIn .dialog6[data-v-79eac304]{-webkit-animation:Page2DialogIn-data-v-79eac304 .6s 1s;animation:Page2DialogIn-data-v-79eac304 .6s 1s}.animationIn .bg-img[data-v-79eac304]{-webkit-animation:FadeInShadow-data-v-79eac304 .6s .6s;animation:FadeInShadow-data-v-79eac304 .6s .6s}.animationIn .phone-big[data-v-79eac304]{-webkit-animation:slideUp-data-v-79eac304 .6s .6s;animation:slideUp-data-v-79eac304 .6s .6s}.animationIn .phone-small[data-v-79eac304]{-webkit-animation:Page4SmallScale2-data-v-79eac304 .6s 1s;animation:Page4SmallScale2-data-v-79eac304 .6s 1s}.animationIn .phone-left[data-v-79eac304]{-webkit-animation:Page5Phone2-data-v-79eac304 1s .5s;animation:Page5Phone2-data-v-79eac304 1s .5s}.animationIn .phone-right[data-v-79eac304]{-webkit-animation:Page5Phone1-data-v-79eac304 1s .7s;animation:Page5Phone1-data-v-79eac304 1s .7s}.animationIn .item-img[data-v-79eac304]{-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.animationOut .bg-img[data-v-79eac304],.animationOut .dialog1[data-v-79eac304],.animationOut .dialog2[data-v-79eac304],.animationOut .dialog3[data-v-79eac304],.animationOut .dialog4[data-v-79eac304],.animationOut .dialog5[data-v-79eac304],.animationOut .dialog6[data-v-79eac304],.animationOut[data-v-79eac304] .desc-module h3,.animationOut[data-v-79eac304] .desc-module p{-webkit-animation:PageWordOut-data-v-79eac304 .5s;animation:PageWordOut-data-v-79eac304 .5s}.animationOut .book-img1[data-v-79eac304],.animationOut .phone-big[data-v-79eac304],.animationOut .phone-img1[data-v-79eac304],.animationOut .phone-left[data-v-79eac304],.animationOut .phone-right[data-v-79eac304],.animationOut .phone-small[data-v-79eac304]{-webkit-animation:Page1Book1Out-data-v-79eac304 .5s;animation:Page1Book1Out-data-v-79eac304 .5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.animationOut .book-img2[data-v-79eac304],.animationOut .phone-img2[data-v-79eac304]{-webkit-animation:Page1Book2Out-data-v-79eac304 .5s;animation:Page1Book2Out-data-v-79eac304 .5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.animationOut .book-img3[data-v-79eac304],.animationOut .phone-img3[data-v-79eac304]{-webkit-animation:Page1Book3Out-data-v-79eac304 .5s;animation:Page1Book3Out-data-v-79eac304 .5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}@-webkit-keyframes FadeIn{to{opacity:1}}@keyframes FadeIn-data-v-79eac304{to{opacity:1}}@-webkit-keyframes FadeOut{to{opacity:0}}@keyframes FadeOut-data-v-79eac304{to{opacity:0}}@-webkit-keyframes slideUp{0%{-webkit-transform:translateY(30px);transform:translateY(30px);opacity:0}90%{opacity:1}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes slideUp-data-v-79eac304{0%{-webkit-transform:translateY(30px);transform:translateY(30px);opacity:0}90%{opacity:1}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@-webkit-keyframes FadeInShadow{to{opacity:.8}}@keyframes FadeInShadow-data-v-79eac304{to{opacity:.8}}@-webkit-keyframes PageWord1In{0%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes PageWord1In-data-v-79eac304{0%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes PageWord2In{0%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes PageWord2In-data-v-79eac304{0%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes PageWordOut{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}90%{opacity:0}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@keyframes PageWordOut-data-v-79eac304{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}90%{opacity:0}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@-webkit-keyframes Page1Book1In{0%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes Page1Book1In-data-v-79eac304{0%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes Page1Book2In{0%{-webkit-transform:translateX(-100px);transform:translateX(-100px);opacity:0}90%{opacity:1}to{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@keyframes Page1Book2In-data-v-79eac304{0%{-webkit-transform:translateX(-100px);transform:translateX(-100px);opacity:0}90%{opacity:1}to{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@-webkit-keyframes Page1Book3In{0%{-webkit-transform:translateX(100px);transform:translateX(100px);opacity:0}90%{opacity:1}to{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@keyframes Page1Book3In-data-v-79eac304{0%{-webkit-transform:translateX(100px);transform:translateX(100px);opacity:0}90%{opacity:1}to{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}}@-webkit-keyframes commonOut{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-100px);transform:translateY(-100px);opacity:0}}@keyframes commonOut-data-v-79eac304{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-100px);transform:translateY(-100px);opacity:0}}@-webkit-keyframes Page1Book1Out{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-100px);transform:translateY(-100px);opacity:0}}@keyframes Page1Book1Out-data-v-79eac304{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-100px);transform:translateY(-100px);opacity:0}}@-webkit-keyframes Page1Book2Out{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-60px);transform:translateY(-60px);opacity:0}}@keyframes Page1Book2Out-data-v-79eac304{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-60px);transform:translateY(-60px);opacity:0}}@-webkit-keyframes Page1Book3Out{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-60px);transform:translateY(-60px);opacity:0}}@keyframes Page1Book3Out-data-v-79eac304{0%{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}80%{-webkit-transform:translateY(-60px);transform:translateY(-60px);opacity:0}}@-webkit-keyframes Page2DialogIn{0%{-webkit-transform:scale(.6);transform:scale(.6);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes Page2DialogIn-data-v-79eac304{0%{-webkit-transform:scale(.6);transform:scale(.6);opacity:0}90%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes Page4SmallScale2{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes Page4SmallScale2-data-v-79eac304{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes Page5Phone1{0%{opacity:0;-webkit-transform:translate3d(-20px,20px,0);transform:translate3d(-20px,20px,0)}90%{opacity:1}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Page5Phone1-data-v-79eac304{0%{opacity:0;-webkit-transform:translate3d(-20px,20px,0);transform:translate3d(-20px,20px,0)}90%{opacity:1}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Page5Phone2{0%{opacity:0;-webkit-transform:translate3d(20px,20px,0);transform:translate3d(20px,20px,0)}90%{opacity:1}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Page5Phone2-data-v-79eac304{0%{opacity:0;-webkit-transform:translate3d(20px,20px,0);transform:translate3d(20px,20px,0)}90%{opacity:1}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fixed-header[data-v-79eac304]{position:-webkit-sticky;position:sticky;top:0;z-index:1000}.fixed-header .common-header[data-v-79eac304]{-webkit-box-shadow:0 0 1px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1)}.fixed-content[data-v-79eac304]{position:fixed;top:0;left:0;width:100%;z-index:50}.wrapper[data-v-79eac304]{position:absolute;left:0;top:0;bottom:0;right:0;overflow:hidden}#scroller[data-v-79eac304]{width:100%;height:600%;position:absolute;top:0;left:0}.page[data-v-79eac304]{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:16.67%;position:relative;overflow:hidden}.page .word[data-v-79eac304]{position:absolute;z-index:999;width:100%;height:100%}.page .word[data-v-79eac304] .desc-module h3,.page .word[data-v-79eac304] .desc-module p{opacity:0}.page .word[data-v-79eac304] .desc-module p{font-weight:400}.page .item-img[data-v-79eac304],.page .shadow[data-v-79eac304]{position:absolute;background-size:100% 100%;z-index:1}.page .shadow[data-v-79eac304]{z-index:0;width:120%;height:36%;background-image:url("+a(i(1855))+");bottom:0;left:-11%;opacity:0}.wrapper[data-v-79eac304]{background:url("+a(i(1169))+") repeat}.page1[data-v-79eac304]{background:url("+a(i(1168))+") repeat}.page1 .logo[data-v-79eac304]{position:absolute;top:25%;left:23.3%;width:53.3%;height:100%;background-image:url("+a(i(1854))+");background-repeat:no-repeat;background-size:100% auto}.page1 .download-btn[data-v-79eac304]{position:absolute;bottom:28.8%;left:29%;width:42%;font-weight:500}.page2 .img-box[data-v-79eac304]{position:absolute;top:19%;left:0;width:100vw;height:69.6vw}.page2 .book-img1[data-v-79eac304]{width:67.7vw;height:27.3vw;background-image:url("+a(i(1170))+");left:6vw;top:50%;margin-top:-13vw;z-index:2;opacity:0}.page2 .book-img2[data-v-79eac304]{width:63.7vw;height:27.3vw;background-image:url("+a(i(1171))+");top:8vw;right:4.5vw;opacity:0}.page2 .book-img3[data-v-79eac304]{width:63.7vw;height:27.3vw;background-image:url("+a(i(1172))+");bottom:1vw;right:15vw;opacity:0}.page2 .shadow[data-v-79eac304]{height:30%;bottom:-12%}.page3 .item-img[data-v-79eac304]{opacity:0}.page3 .img-box[data-v-79eac304]{position:absolute;top:15.5%;width:92vw;height:89vw;left:50%;margin-left:-46vw}.page3 .bg-img[data-v-79eac304]{width:112vw;height:103vw;top:-7vw;margin-left:-12vw;background-image:url("+a(i(1173))+")}.page3 .dialog1[data-v-79eac304]{width:47vw;height:8.6vw;background-image:url("+a(i(1174))+");bottom:24%;right:3vw}.page3 .dialog2[data-v-79eac304]{width:41.3vw;height:8.6vw;background-image:url("+a(i(1175))+");bottom:33.8%;left:3vw}.page3 .dialog3[data-v-79eac304]{width:38.8vw;height:10vw;background-image:url("+a(i(1176))+");bottom:45.8%;left:26.6%}.page3 .dialog4[data-v-79eac304]{width:28.2vw;height:6.5vw;background-image:url("+a(i(1177))+");right:11vw;top:32%}.page3 .dialog5[data-v-79eac304]{width:28.2vw;height:6.5vw;background-image:url("+a(i(1178))+");left:11vw;top:27%}.page3 .dialog6[data-v-79eac304]{width:22.3vw;height:6vw;background-image:url("+a(i(1179))+");right:23vw;top:16%}.page3 .shadow[data-v-79eac304]{width:131%;bottom:-10%;left:-21%}.page4 .item-img[data-v-79eac304]{opacity:0}.page4 .img-box[data-v-79eac304]{position:absolute;top:17%;left:10vw;width:79.4vw;height:80.1vw}.page4 .phone-img1[data-v-79eac304]{width:54%;height:100%;background-image:url("+a(i(1180))+");left:23%;z-index:3}.page4 .phone-img2[data-v-79eac304]{width:42%;height:79.6%;background-image:url("+a(i(1181))+");left:0;top:12.7%}.page4 .phone-img3[data-v-79eac304]{width:42%;height:79.6%;background-image:url("+a(i(1182))+");right:0;top:12.7%}.page4 .shadow[data-v-79eac304]{bottom:-4%}.page5 .img-box[data-v-79eac304]{position:absolute;top:14%;left:6vw;width:81.4vw;height:86.6vw}.page5 .phone-big[data-v-79eac304]{width:75%;height:97.8%;background-image:url("+a(i(1183))+");left:10%;top:2%;opacity:0}.page5 .phone-small[data-v-79eac304]{width:64%;height:55.5%;background-image:url("+a(i(1184))+");left:32.7%;top:14.7%;opacity:0}.page5 .shadow[data-v-79eac304]{width:105%;height:36%;bottom:-6%;left:1%}.page6 .img-box[data-v-79eac304]{position:absolute;top:11.3%;left:10vw;width:81vw;height:89.6vw}.page6 .phone-right[data-v-79eac304]{width:66%;height:91.5%;background-image:url("+a(i(1185))+");right:0;top:2%;z-index:2;opacity:0}.page6 .phone-left[data-v-79eac304]{width:61%;height:86.4%;background-image:url("+a(i(1186))+");left:-3%;top:14%;z-index:1;opacity:0}.page6 .shadow[data-v-79eac304]{bottom:-3%}.fade-enter-active[data-v-79eac304],.fade-leave-active[data-v-79eac304]{-webkit-transition:-webkit-transform .75s;transition:-webkit-transform .75s;transition:transform .75s;transition:transform .75s,-webkit-transform .75s}.fade-enter[data-v-79eac304],.fade-leave-to[data-v-79eac304]{-webkit-transform:translate3d(0,-55px,0);transform:translate3d(0,-55px,0)}i.touchup[data-v-79eac304]{position:fixed;bottom:10px;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);color:#e3c390;left:50%;font-size:18px;margin-left:-8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-animation:slideup-data-v-79eac304 1.2s ease 0s infinite normal;animation:slideup-data-v-79eac304 1.2s ease 0s infinite normal}@-webkit-keyframes slideup{0%{bottom:0;opacity:0}40%{bottom:10px;opacity:1}60%{bottom:10px;opacity:1}to{bottom:20px;opacity:0}}@keyframes slideup-data-v-79eac304{0%{bottom:0;opacity:0}40%{bottom:10px;opacity:1}60%{bottom:10px;opacity:1}to{bottom:20px;opacity:0}}",""])},1534:function(t,e,i){e=t.exports=i(571)(!1),e.push([t.i,".download-btn[data-v-acdaf402]{display:inline-block;border:none;outline:none;border-radius:25px;-webkit-box-shadow:0 2px 14px 0 rgba(250,137,25,.3);box-shadow:0 2px 14px 0 rgba(250,137,25,.3);background:#fa8919;font-size:18px;font-weight:700;text-align:center;color:#fff;line-height:42px;height:42px;cursor:pointer}.download[data-v-acdaf402]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:55px;padding:0 25px}.logo[data-v-acdaf402]{width:114px;height:33.3px}.logo img[data-v-acdaf402]{width:100%;height:100%}.download-btn[data-v-acdaf402]{height:29px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:12px;padding:0 17px;line-height:31px}",""])},1585:function(t,e,i){var a=i(1430);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("2d1d11c0",a,!0,{})},1646:function(t,e,i){var a=i(1491);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("5c094934",a,!0,{})},1649:function(t,e,i){var a=i(1494);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("7dbf4de1",a,!0,{})},1660:function(t,e,i){var a=i(1505);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("4eed5ef3",a,!0,{})},1669:function(t,e,i){var a=i(1514);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("0b18e06e",a,!0,{})},1682:function(t,e,i){var a=i(1527);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("0820b850",a,!0,{})},1689:function(t,e,i){var a=i(1534);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("78559f24",a,!0,{})},1696:function(t,e,i){var a;/*! iScroll v5.2.0 ~ (c) 2008-2016 Matteo Spinelli ~ http://cubiq.org/license */ +!function(o,n,s){function r(t,e){this.wrapper="string"==typeof t?n.querySelector(t):t,this.scroller=this.wrapper.children[0],this.scrollerStyle=this.scroller.style,this.options={resizeScrollbars:!0,mouseWheelSpeed:20,snapThreshold:.334,disablePointer:!p.hasPointer,disableTouch:p.hasPointer||!p.hasTouch,disableMouse:p.hasPointer||p.hasTouch,startX:0,startY:0,scrollY:!0,directionLockThreshold:5,momentum:!0,bounce:!0,bounceTime:600,bounceEasing:"",preventDefault:!0,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT)$/},HWCompositing:!0,useTransition:!0,useTransform:!0,bindToWrapper:void 0===o.onmousedown};for(var i in e)this.options[i]=e[i];this.translateZ=this.options.HWCompositing&&p.hasPerspective?" translateZ(0)":"",this.options.useTransition=p.hasTransition&&this.options.useTransition,this.options.useTransform=p.hasTransform&&this.options.useTransform,this.options.eventPassthrough=!0===this.options.eventPassthrough?"vertical":this.options.eventPassthrough,this.options.preventDefault=!this.options.eventPassthrough&&this.options.preventDefault,this.options.scrollY="vertical"!=this.options.eventPassthrough&&this.options.scrollY,this.options.scrollX="horizontal"!=this.options.eventPassthrough&&this.options.scrollX,this.options.freeScroll=this.options.freeScroll&&!this.options.eventPassthrough,this.options.directionLockThreshold=this.options.eventPassthrough?0:this.options.directionLockThreshold,this.options.bounceEasing="string"==typeof this.options.bounceEasing?p.ease[this.options.bounceEasing]||p.ease.circular:this.options.bounceEasing,this.options.resizePolling=void 0===this.options.resizePolling?60:this.options.resizePolling,!0===this.options.tap&&(this.options.tap="tap"),"scale"==this.options.shrinkScrollbars&&(this.options.useTransition=!1),this.options.invertWheelDirection=this.options.invertWheelDirection?-1:1,this.x=0,this.y=0,this.directionX=0,this.directionY=0,this._events={},this._init(),this.refresh(),this.scrollTo(this.options.startX,this.options.startY),this.enable()}function l(t,e,i){var a=n.createElement("div"),o=n.createElement("div");return!0===i&&(a.style.cssText="position:absolute;z-index:9999",o.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px"),o.className="iScrollIndicator","h"==t?(!0===i&&(a.style.cssText+=";height:7px;left:2px;right:2px;bottom:0",o.style.height="100%"),a.className="iScrollHorizontalScrollbar"):(!0===i&&(a.style.cssText+=";width:7px;bottom:2px;top:2px;right:1px",o.style.width="100%"),a.className="iScrollVerticalScrollbar"),a.style.cssText+=";overflow:hidden",e||(a.style.pointerEvents="none"),a.appendChild(o),a}function c(t,e){this.wrapper="string"==typeof e.el?n.querySelector(e.el):e.el,this.wrapperStyle=this.wrapper.style,this.indicator=this.wrapper.children[0],this.indicatorStyle=this.indicator.style,this.scroller=t,this.options={listenX:!0,listenY:!0,interactive:!1,resize:!0,defaultScrollbars:!1,shrink:!1,fade:!1,speedRatioX:0,speedRatioY:0};for(var i in e)this.options[i]=e[i];if(this.sizeRatioX=1,this.sizeRatioY=1,this.maxPosX=0,this.maxPosY=0,this.options.interactive&&(this.options.disableTouch||(p.addEvent(this.indicator,"touchstart",this),p.addEvent(o,"touchend",this)),this.options.disablePointer||(p.addEvent(this.indicator,p.prefixPointerEvent("pointerdown"),this),p.addEvent(o,p.prefixPointerEvent("pointerup"),this)),this.options.disableMouse||(p.addEvent(this.indicator,"mousedown",this),p.addEvent(o,"mouseup",this))),this.options.fade){this.wrapperStyle[p.style.transform]=this.scroller.translateZ;var a=p.style.transitionDuration;this.wrapperStyle[a]=p.isBadAndroid?"0.0001ms":"0ms";var s=this;p.isBadAndroid&&d(function(){"0.0001ms"===s.wrapperStyle[a]&&(s.wrapperStyle[a]="0s")}),this.wrapperStyle.opacity="0"}}var d=o.requestAnimationFrame||o.webkitRequestAnimationFrame||o.mozRequestAnimationFrame||o.oRequestAnimationFrame||o.msRequestAnimationFrame||function(t){o.setTimeout(t,1e3/60)},p=function(){function t(t){return!1!==a&&(""===a?t:a+t.charAt(0).toUpperCase()+t.substr(1))}var e={},i=n.createElement("div").style,a=function(){for(var t=["t","webkitT","MozT","msT","OT"],e=0,a=t.length;e0&&(r=o?o/2.5*(d/8):0,c=s.abs(t)+r,l=c/d),{destination:s.round(r),duration:l}};var r=t("transform");return e.extend(e,{hasTransform:!1!==r,hasPerspective:t("perspective")in i,hasTouch:"ontouchstart"in o,hasPointer:!(!o.PointerEvent&&!o.MSPointerEvent),hasTransition:t("transition")in i}),e.isBadAndroid=function(){var t=o.navigator.appVersion;if(/Android/.test(t)&&!/Chrome\/\d/.test(t)){var e=t.match(/Safari\/(\d+.\d)/);return!(e&&"object"==typeof e&&e.length>=2)||parseFloat(e[1])<535.19}return!1}(),e.extend(e.style={},{transform:r,transitionTimingFunction:t("transitionTimingFunction"),transitionDuration:t("transitionDuration"),transitionDelay:t("transitionDelay"),transformOrigin:t("transformOrigin")}),e.hasClass=function(t,e){return new RegExp("(^|\\s)"+e+"(\\s|$)").test(t.className)},e.addClass=function(t,i){if(!e.hasClass(t,i)){var a=t.className.split(" ");a.push(i),t.className=a.join(" ")}},e.removeClass=function(t,i){if(e.hasClass(t,i)){var a=new RegExp("(^|\\s)"+i+"(\\s|$)","g");t.className=t.className.replace(a," ")}},e.offset=function(t){for(var e=-t.offsetLeft,i=-t.offsetTop;t=t.offsetParent;)e-=t.offsetLeft,i-=t.offsetTop;return{left:e,top:i}},e.preventDefaultException=function(t,e){for(var i in e)if(e[i].test(t[i]))return!0;return!1},e.extend(e.eventType={},{touchstart:1,touchmove:1,touchend:1,mousedown:2,mousemove:2,mouseup:2,pointerdown:3,pointermove:3,pointerup:3,MSPointerDown:3,MSPointerMove:3,MSPointerUp:3}),e.extend(e.ease={},{quadratic:{style:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",fn:function(t){return t*(2-t)}},circular:{style:"cubic-bezier(0.1, 0.57, 0.1, 1)",fn:function(t){return s.sqrt(1- --t*t)}},back:{style:"cubic-bezier(0.175, 0.885, 0.32, 1.275)",fn:function(t){return(t-=1)*t*(5*t+4)+1}},bounce:{style:"",fn:function(t){return(t/=1)<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}},elastic:{style:"",fn:function(t){return 0===t?0:1==t?1:.4*s.pow(2,-10*t)*s.sin((t-.055)*(2*s.PI)/.22)+1}}}),e.tap=function(t,e){var i=n.createEvent("Event");i.initEvent(e,!0,!0),i.pageX=t.pageX,i.pageY=t.pageY,t.target.dispatchEvent(i)},e.click=function(t){var e,i=t.target;/(SELECT|INPUT|TEXTAREA)/i.test(i.tagName)||(e=n.createEvent("MouseEvents"),e.initMouseEvent("click",!0,!0,t.view,1,i.screenX,i.screenY,i.clientX,i.clientY,t.ctrlKey,t.altKey,t.shiftKey,t.metaKey,0,null),e._constructed=!0,i.dispatchEvent(e))},e}();r.prototype={version:"5.2.0",_init:function(){this._initEvents(),(this.options.scrollbars||this.options.indicators)&&this._initIndicators(),this.options.mouseWheel&&this._initWheel(),this.options.snap&&this._initSnap(),this.options.keyBindings&&this._initKeys()},destroy:function(){this._initEvents(!0),clearTimeout(this.resizeTimeout),this.resizeTimeout=null,this._execEvent("destroy")},_transitionEnd:function(t){t.target==this.scroller&&this.isInTransition&&(this._transitionTime(),this.resetPosition(this.options.bounceTime)||(this.isInTransition=!1,this._execEvent("scrollEnd")))},_start:function(t){if(1!=p.eventType[t.type]){if(0!==(t.which?t.button:t.button<2?0:4==t.button?1:2))return}if(this.enabled&&(!this.initiated||p.eventType[t.type]===this.initiated)){!this.options.preventDefault||p.isBadAndroid||p.preventDefaultException(t.target,this.options.preventDefaultException)||t.preventDefault();var e,i=t.touches?t.touches[0]:t;this.initiated=p.eventType[t.type],this.moved=!1,this.distX=0,this.distY=0,this.directionX=0,this.directionY=0,this.directionLocked=0,this.startTime=p.getTime(),this.options.useTransition&&this.isInTransition?(this._transitionTime(),this.isInTransition=!1,e=this.getComputedPosition(),this._translate(s.round(e.x),s.round(e.y)),this._execEvent("scrollEnd")):!this.options.useTransition&&this.isAnimating&&(this.isAnimating=!1,this._execEvent("scrollEnd")),this.startX=this.x,this.startY=this.y,this.absStartX=this.x,this.absStartY=this.y,this.pointX=i.pageX,this.pointY=i.pageY,this._execEvent("beforeScrollStart")}},_move:function(t){if(this.enabled&&p.eventType[t.type]===this.initiated){this.options.preventDefault&&t.preventDefault();var e,i,a,o,n=t.touches?t.touches[0]:t,r=n.pageX-this.pointX,l=n.pageY-this.pointY,c=p.getTime();if(this.pointX=n.pageX,this.pointY=n.pageY,this.distX+=r,this.distY+=l,a=s.abs(this.distX),o=s.abs(this.distY),!(c-this.endTime>300&&a<10&&o<10)){if(this.directionLocked||this.options.freeScroll||(a>o+this.options.directionLockThreshold?this.directionLocked="h":o>=a+this.options.directionLockThreshold?this.directionLocked="v":this.directionLocked="n"),"h"==this.directionLocked){if("vertical"==this.options.eventPassthrough)t.preventDefault();else if("horizontal"==this.options.eventPassthrough)return void(this.initiated=!1);l=0}else if("v"==this.directionLocked){if("horizontal"==this.options.eventPassthrough)t.preventDefault();else if("vertical"==this.options.eventPassthrough)return void(this.initiated=!1);r=0}r=this.hasHorizontalScroll?r:0,l=this.hasVerticalScroll?l:0,e=this.x+r,i=this.y+l,(e>0||e0?0:this.maxScrollX),(i>0||i0?0:this.maxScrollY),this.directionX=r>0?-1:r<0?1:0,this.directionY=l>0?-1:l<0?1:0,this.moved||this._execEvent("scrollStart"),this.moved=!0,this._translate(e,i),c-this.startTime>300&&(this.startTime=c,this.startX=this.x,this.startY=this.y)}}},_end:function(t){if(this.enabled&&p.eventType[t.type]===this.initiated){this.options.preventDefault&&!p.preventDefaultException(t.target,this.options.preventDefaultException)&&t.preventDefault();var e,i,a=(t.changedTouches&&t.changedTouches[0],p.getTime()-this.startTime),o=s.round(this.x),n=s.round(this.y),r=s.abs(o-this.startX),l=s.abs(n-this.startY),c=0,d="";if(this.isInTransition=0,this.initiated=0,this.endTime=p.getTime(),!this.resetPosition(this.options.bounceTime)){if(this.scrollTo(o,n),!this.moved)return this.options.tap&&p.tap(t,this.options.tap),this.options.click&&p.click(t),void this._execEvent("scrollCancel");if(this._events.flick&&a<200&&r<100&&l<100)return void this._execEvent("flick");if(this.options.momentum&&a<300&&(e=this.hasHorizontalScroll?p.momentum(this.x,this.startX,a,this.maxScrollX,this.options.bounce?this.wrapperWidth:0,this.options.deceleration):{destination:o,duration:0},i=this.hasVerticalScroll?p.momentum(this.y,this.startY,a,this.maxScrollY,this.options.bounce?this.wrapperHeight:0,this.options.deceleration):{destination:n,duration:0},o=e.destination,n=i.destination,c=s.max(e.duration,i.duration),this.isInTransition=1),this.options.snap){var h=this._nearestSnap(o,n);this.currentPage=h,c=this.options.snapSpeed||s.max(s.max(s.min(s.abs(o-h.x),1e3),s.min(s.abs(n-h.y),1e3)),300),o=h.x,n=h.y,this.directionX=0,this.directionY=0,d=this.options.bounceEasing}if(o!=this.x||n!=this.y)return(o>0||o0||n0?e=0:this.x0?i=0:this.y-1&&this._events[t].splice(i,1)}},_execEvent:function(t){if(this._events[t]){var e=0,i=this._events[t].length;if(i)for(;e0;var o=this.options.useTransition&&a.style;!i||o?(o&&(this._transitionTimingFunction(a.style),this._transitionTime(i)),this._translate(t,e)):this._animate(t,e,i,a.fn)},scrollToElement:function(t,e,i,a,o){if(t=t.nodeType?t:this.scroller.querySelector(t)){var n=p.offset(t);n.left-=this.wrapperOffset.left,n.top-=this.wrapperOffset.top,!0===i&&(i=s.round(t.offsetWidth/2-this.wrapper.offsetWidth/2)),!0===a&&(a=s.round(t.offsetHeight/2-this.wrapper.offsetHeight/2)),n.left-=i||0,n.top-=a||0,n.left=n.left>0?0:n.left0?0:n.top0?a--:e<0&&a++,i>0?o--:i<0&&o++,void this.goToPage(a,o);a=this.x+s.round(this.hasHorizontalScroll?e:0),o=this.y+s.round(this.hasVerticalScroll?i:0),this.directionX=e>0?-1:e<0?1:0,this.directionY=i>0?-1:i<0?1:0,a>0?a=0:a0?o=0:o-this.scrollerWidth;){for(this.pages[r]=[],t=0,o=0;o>-this.scrollerHeight;)this.pages[r][t]={x:s.max(c,this.maxScrollX),y:s.max(o,this.maxScrollY),width:d,height:p,cx:c-i,cy:o-a},o-=p,t++;c-=d,r++}else for(n=this.options.snap,t=n.length,e=-1;rthis.maxScrollX&&l++;this.goToPage(this.currentPage.pageX||0,this.currentPage.pageY||0,0),this.options.snapThreshold%1==0?(this.snapThresholdX=this.options.snapThreshold,this.snapThresholdY=this.options.snapThreshold):(this.snapThresholdX=s.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width*this.options.snapThreshold),this.snapThresholdY=s.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height*this.options.snapThreshold))}}),this.on("flick",function(){var t=this.options.snapSpeed||s.max(s.max(s.min(s.abs(this.x-this.startX),1e3),s.min(s.abs(this.y-this.startY),1e3)),300);this.goToPage(this.currentPage.pageX+this.directionX,this.currentPage.pageY+this.directionY,t)})},_nearestSnap:function(t,e){if(!this.pages.length)return{x:0,y:0,pageX:0,pageY:0};var i=0,a=this.pages.length,o=0;if(s.abs(t-this.absStartX)0?t=0:t0?e=0:e=this.pages[i][0].cx){t=this.pages[i][0].x;break}for(a=this.pages[i].length;o=this.pages[0][o].cy){e=this.pages[0][o].y;break}return i==this.currentPage.pageX&&(i+=this.directionX,i<0?i=0:i>=this.pages.length&&(i=this.pages.length-1),t=this.pages[i][0].x),o==this.currentPage.pageY&&(o+=this.directionY,o<0?o=0:o>=this.pages[0].length&&(o=this.pages[0].length-1),e=this.pages[0][o].y),{x:t,y:e,pageX:i,pageY:o}},goToPage:function(t,e,i,a){a=a||this.options.bounceEasing,t>=this.pages.length?t=this.pages.length-1:t<0&&(t=0),e>=this.pages[t].length?e=this.pages[t].length-1:e<0&&(e=0);var o=this.pages[t][e].x,n=this.pages[t][e].y;i=void 0===i?this.options.snapSpeed||s.max(s.max(s.min(s.abs(o-this.x),1e3),s.min(s.abs(n-this.y),1e3)),300):i,this.currentPage={x:o,y:n,pageX:t,pageY:e},this.scrollTo(o,n,i,a)},next:function(t,e){var i=this.currentPage.pageX,a=this.currentPage.pageY;i++,i>=this.pages.length&&this.hasVerticalScroll&&(i=0,a++),this.goToPage(i,a,t,e)},prev:function(t,e){var i=this.currentPage.pageX,a=this.currentPage.pageY;i--,i<0&&this.hasVerticalScroll&&(i=0,a--),this.goToPage(i,a,t,e)},_initKeys:function(t){var e,i={pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40};if("object"==typeof this.options.keyBindings)for(e in this.options.keyBindings)"string"==typeof this.options.keyBindings[e]&&(this.options.keyBindings[e]=this.options.keyBindings[e].toUpperCase().charCodeAt(0));else this.options.keyBindings={};for(e in i)this.options.keyBindings[e]=this.options.keyBindings[e]||i[e];p.addEvent(o,"keydown",this),this.on("destroy",function(){p.removeEvent(o,"keydown",this)})},_key:function(t){if(this.enabled){var e,i=this.options.snap,a=i?this.currentPage.pageX:this.x,o=i?this.currentPage.pageY:this.y,n=p.getTime(),r=this.keyTime||0;switch(this.options.useTransition&&this.isInTransition&&(e=this.getComputedPosition(),this._translate(s.round(e.x),s.round(e.y)),this.isInTransition=!1),this.keyAcceleration=n-r<200?s.min(this.keyAcceleration+.25,50):0,t.keyCode){case this.options.keyBindings.pageUp:this.hasHorizontalScroll&&!this.hasVerticalScroll?a+=i?1:this.wrapperWidth:o+=i?1:this.wrapperHeight;break;case this.options.keyBindings.pageDown:this.hasHorizontalScroll&&!this.hasVerticalScroll?a-=i?1:this.wrapperWidth:o-=i?1:this.wrapperHeight;break;case this.options.keyBindings.end:a=i?this.pages.length-1:this.maxScrollX,o=i?this.pages[0].length-1:this.maxScrollY;break;case this.options.keyBindings.home:a=0,o=0;break;case this.options.keyBindings.left:a+=i?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.up:o+=i?1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.right:a-=i?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.down:o-=i?1:5+this.keyAcceleration>>0;break;default:return}if(i)return void this.goToPage(a,o);a>0?(a=0,this.keyAcceleration=0):a0?(o=0,this.keyAcceleration=0):o=c)return n.isAnimating=!1,n._translate(t,e),void(n.resetPosition(n.options.bounceTime)||n._execEvent("scrollEnd"));g=(g-l)/i,f=a(g),h=(t-s)*f+s,m=(e-r)*f+r,n._translate(h,m),n.isAnimating&&d(o)}var n=this,s=this.x,r=this.y,l=p.getTime(),c=l+i;this.isAnimating=!0,o()},handleEvent:function(t){switch(t.type){case"touchstart":case"pointerdown":case"MSPointerDown":case"mousedown":this._start(t);break;case"touchmove":case"pointermove":case"MSPointerMove":case"mousemove":this._move(t);break;case"touchend":case"pointerup":case"MSPointerUp":case"mouseup":case"touchcancel":case"pointercancel":case"MSPointerCancel":case"mousecancel":this._end(t);break;case"orientationchange":case"resize":this._resize();break;case"transitionend":case"webkitTransitionEnd":case"oTransitionEnd":case"MSTransitionEnd":this._transitionEnd(t);break;case"wheel":case"DOMMouseScroll":case"mousewheel":this._wheel(t);break;case"keydown":this._key(t);break;case"click":this.enabled&&!t._constructed&&(t.preventDefault(),t.stopPropagation())}}},c.prototype={handleEvent:function(t){switch(t.type){case"touchstart":case"pointerdown":case"MSPointerDown":case"mousedown":this._start(t);break;case"touchmove":case"pointermove":case"MSPointerMove":case"mousemove":this._move(t);break;case"touchend":case"pointerup":case"MSPointerUp":case"mouseup":case"touchcancel":case"pointercancel":case"MSPointerCancel":case"mousecancel":this._end(t)}},destroy:function(){this.options.fadeScrollbars&&(clearTimeout(this.fadeTimeout),this.fadeTimeout=null),this.options.interactive&&(p.removeEvent(this.indicator,"touchstart",this),p.removeEvent(this.indicator,p.prefixPointerEvent("pointerdown"),this),p.removeEvent(this.indicator,"mousedown",this),p.removeEvent(o,"touchmove",this),p.removeEvent(o,p.prefixPointerEvent("pointermove"),this),p.removeEvent(o,"mousemove",this),p.removeEvent(o,"touchend",this),p.removeEvent(o,p.prefixPointerEvent("pointerup"),this),p.removeEvent(o,"mouseup",this)),this.options.defaultScrollbars&&this.wrapper.parentNode.removeChild(this.wrapper)},_start:function(t){var e=t.touches?t.touches[0]:t;t.preventDefault(),t.stopPropagation(),this.transitionTime(),this.initiated=!0,this.moved=!1,this.lastPointX=e.pageX,this.lastPointY=e.pageY,this.startTime=p.getTime(),this.options.disableTouch||p.addEvent(o,"touchmove",this),this.options.disablePointer||p.addEvent(o,p.prefixPointerEvent("pointermove"),this),this.options.disableMouse||p.addEvent(o,"mousemove",this),this.scroller._execEvent("beforeScrollStart")},_move:function(t){var e,i,a,o,n=t.touches?t.touches[0]:t;p.getTime();this.moved||this.scroller._execEvent("scrollStart"),this.moved=!0,e=n.pageX-this.lastPointX,this.lastPointX=n.pageX,i=n.pageY-this.lastPointY,this.lastPointY=n.pageY,a=this.x+e,o=this.y+i,this._pos(a,o),t.preventDefault(),t.stopPropagation()},_end:function(t){if(this.initiated){if(this.initiated=!1,t.preventDefault(),t.stopPropagation(),p.removeEvent(o,"touchmove",this),p.removeEvent(o,p.prefixPointerEvent("pointermove"),this),p.removeEvent(o,"mousemove",this),this.scroller.options.snap){var e=this.scroller._nearestSnap(this.scroller.x,this.scroller.y),i=this.options.snapSpeed||s.max(s.max(s.min(s.abs(this.scroller.x-e.x),1e3),s.min(s.abs(this.scroller.y-e.y),1e3)),300);this.scroller.x==e.x&&this.scroller.y==e.y||(this.scroller.directionX=0,this.scroller.directionY=0,this.scroller.currentPage=e,this.scroller.scrollTo(e.x,e.y,i,this.scroller.options.bounceEasing))}this.moved&&this.scroller._execEvent("scrollEnd")}},transitionTime:function(t){t=t||0;var e=p.style.transitionDuration;if(this.indicatorStyle[e]=t+"ms",!t&&p.isBadAndroid){this.indicatorStyle[e]="0.0001ms";var i=this;d(function(){"0.0001ms"===i.indicatorStyle[e]&&(i.indicatorStyle[e]="0s")})}},transitionTimingFunction:function(t){this.indicatorStyle[p.style.transitionTimingFunction]=t},refresh:function(){this.transitionTime(),this.options.listenX&&!this.options.listenY?this.indicatorStyle.display=this.scroller.hasHorizontalScroll?"block":"none":this.options.listenY&&!this.options.listenX?this.indicatorStyle.display=this.scroller.hasVerticalScroll?"block":"none":this.indicatorStyle.display=this.scroller.hasHorizontalScroll||this.scroller.hasVerticalScroll?"block":"none",this.scroller.hasHorizontalScroll&&this.scroller.hasVerticalScroll?(p.addClass(this.wrapper,"iScrollBothScrollbars"),p.removeClass(this.wrapper,"iScrollLoneScrollbar"),this.options.defaultScrollbars&&this.options.customStyle&&(this.options.listenX?this.wrapper.style.right="8px":this.wrapper.style.bottom="8px")):(p.removeClass(this.wrapper,"iScrollBothScrollbars"),p.addClass(this.wrapper,"iScrollLoneScrollbar"),this.options.defaultScrollbars&&this.options.customStyle&&(this.options.listenX?this.wrapper.style.right="2px":this.wrapper.style.bottom="2px"));this.wrapper.offsetHeight;this.options.listenX&&(this.wrapperWidth=this.wrapper.clientWidth,this.options.resize?(this.indicatorWidth=s.max(s.round(this.wrapperWidth*this.wrapperWidth/(this.scroller.scrollerWidth||this.wrapperWidth||1)),8),this.indicatorStyle.width=this.indicatorWidth+"px"):this.indicatorWidth=this.indicator.clientWidth,this.maxPosX=this.wrapperWidth-this.indicatorWidth,"clip"==this.options.shrink?(this.minBoundaryX=8-this.indicatorWidth,this.maxBoundaryX=this.wrapperWidth-8):(this.minBoundaryX=0,this.maxBoundaryX=this.maxPosX),this.sizeRatioX=this.options.speedRatioX||this.scroller.maxScrollX&&this.maxPosX/this.scroller.maxScrollX),this.options.listenY&&(this.wrapperHeight=this.wrapper.clientHeight,this.options.resize?(this.indicatorHeight=s.max(s.round(this.wrapperHeight*this.wrapperHeight/(this.scroller.scrollerHeight||this.wrapperHeight||1)),8),this.indicatorStyle.height=this.indicatorHeight+"px"):this.indicatorHeight=this.indicator.clientHeight,this.maxPosY=this.wrapperHeight-this.indicatorHeight,"clip"==this.options.shrink?(this.minBoundaryY=8-this.indicatorHeight,this.maxBoundaryY=this.wrapperHeight-8):(this.minBoundaryY=0,this.maxBoundaryY=this.maxPosY),this.maxPosY=this.wrapperHeight-this.indicatorHeight,this.sizeRatioY=this.options.speedRatioY||this.scroller.maxScrollY&&this.maxPosY/this.scroller.maxScrollY),this.updatePosition()},updatePosition:function(){var t=this.options.listenX&&s.round(this.sizeRatioX*this.scroller.x)||0,e=this.options.listenY&&s.round(this.sizeRatioY*this.scroller.y)||0;this.options.ignoreBoundaries||(tthis.maxBoundaryX?"scale"==this.options.shrink?(this.width=s.max(this.indicatorWidth-(t-this.maxPosX),8),this.indicatorStyle.width=this.width+"px",t=this.maxPosX+this.indicatorWidth-this.width):t=this.maxBoundaryX:"scale"==this.options.shrink&&this.width!=this.indicatorWidth&&(this.width=this.indicatorWidth,this.indicatorStyle.width=this.width+"px"),ethis.maxBoundaryY?"scale"==this.options.shrink?(this.height=s.max(this.indicatorHeight-3*(e-this.maxPosY),8),this.indicatorStyle.height=this.height+"px",e=this.maxPosY+this.indicatorHeight-this.height):e=this.maxBoundaryY:"scale"==this.options.shrink&&this.height!=this.indicatorHeight&&(this.height=this.indicatorHeight,this.indicatorStyle.height=this.height+"px")),this.x=t,this.y=e,this.scroller.options.useTransform?this.indicatorStyle[p.style.transform]="translate("+t+"px,"+e+"px)"+this.scroller.translateZ:(this.indicatorStyle.left=t+"px",this.indicatorStyle.top=e+"px")},_pos:function(t,e){t<0?t=0:t>this.maxPosX&&(t=this.maxPosX),e<0?e=0:e>this.maxPosY&&(e=this.maxPosY),t=this.options.listenX?s.round(t/this.sizeRatioX):this.scroller.x,e=this.options.listenY?s.round(e/this.sizeRatioY):this.scroller.y,this.scroller.scrollTo(t,e)},fade:function(t,e){if(!e||this.visible){clearTimeout(this.fadeTimeout),this.fadeTimeout=null;var i=t?250:500,a=t?0:300;t=t?"1":"0",this.wrapperStyle[p.style.transitionDuration]=i+"ms",this.fadeTimeout=setTimeout(function(t){this.wrapperStyle.opacity=t,this.visible=+t}.bind(this,t),a)}}},r.utils=p,void 0!==t&&t.exports?t.exports=r:void 0!==(a=function(){return r}.call(e,i,e,t))&&(t.exports=a)}(window,document,Math)},1851:function(t,e,i){t.exports=i.p+"static/time/img/code.f041ed7.png"},1852:function(t,e,i){t.exports=i.p+"static/time/img/code2.484bdd7.png"},1853:function(t,e,i){t.exports=i.p+"static/time/img/logo.522f12a.png"},1854:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY8AAAFtCAMAAADIyBZcAAACslBMVEUAAABMTExMTExtbGxsbGxsbGxMTExsbGxsbGxMTExMTExMTExsbGxMTExMTExMTExMTExsbGxsbGxMTExMTExMTExMTExtbWxsbGxsbGxMTExsbGxsbGxsbGxsbGxsbGxsbGzOr37Or35sbGz////+/v7x8fH39/fm5uaWlpb9/f36+vrz8/Pm5ua5ubm4tK39/f39/f339/fo6Ojb29vt7e3Dw8OioqL+/v77+/v5+fnu7u74+Pjv7+/z8/Ozs7Pe3t7Hx8eMjIzOr37Or375+fn8/PzZ2dnNzc3n5+fPz8/V1dXq6urh4eHGxsbOr37Or37Or37Or37Or37///9MTEzrYQ/saRTrYg/rZBHrYxDsZhPsahbsZxPxiSzvgCbxjS/sZRHvfSTwhyvykTLwhirudB3zmDjOr37wgijylTXveyPueSLueCHtbRftcBvrXw/tbhntchvxiy7xii7xjjDyjzHwgynykjPykzTvgSftbBfucx3zljbudh/tbxrzlzfudx/tcxztcBrqVw74wJ7qXA7qWw///PrtZh///vz++PP85dXpUhT/+vf97ePsYhPoTgz61b7pVA34wqDtaiDsXxv98Ob96dj73MjudCPoSQv+8un5yKLykFrtYxvrWBr73835yaz3to7ve0LtaC/+9O384dHvdD3uci7tZxnrVhf71rf2sob0onDxiFLubyTtaxrrXBXpUAz97d/96d34w6L3wJj4wIjznGjwhUvwfUfwfDnubjb+9u/60LX60aj6zqH1r4P2r331qXHtaSnsYCH73cD61a/3upX3tHP0ombyjE/wgULsYyzrWyT4wZL1p3n0nkbxh0TyjULwhzb85M384MX3uo/yl2LzmVbyk1P0m0D3t3j2q231o2D1p1Xzmk32sGbzn1X0ok/yjjYme4ntAAAAVHRSTlMAQL8DBxCAGSYQ7zABYN+fIAUvz3CPrw02ClASFiQqIBxEiDL8+KfKlkDq1JGGKyTu7b6ghHJjR/Ljz7Onn4NQTzUtYvvh3HtzbWJcWURDM/HOoJLAdsF5AAAbU0lEQVR42uzXvWoiURTA8YBzmWaaqS6XUbSY0eDHmASEJBjRFIGQj+o8wBYBIf0GtxC2FAzZclNk38DSwkqcSrFaLGKjrJvNg+ydMbKQrGTuTNSBM78XmOLPOWfuVvAoihJZA4XbCrlIoaqqtHL8I/xTYZN3YvAUjFFKyYpRShnjUcIkSyxiUJI/LxUP0waskJE+LJbO84TOk4RF/lfDiXGRzeiwJnome2EnCYssqWGWTmDNTkpmWOSVlxqVog4boBcr8yJhkMVwqCqj+aQOG6In85SpajgiixwS1Qr7sEH7BY1KYZCXXcWouQcbtmdSFu4snoNfDlLehY3bLRN+RZAHcXYVKegQAHqBUORB5qcjCwGR1XAHCVgO7EEClwN3EEWJSEwrQKAUNCYh/e3l48FIORCn/B+9TBjOAXFymGkImLSJM4hzPKIbfwa+tRdFeUJ4D6qdQgCdahRfD2db5QPwLH9rN49wYykRvq2OIJCO+MZC1sMeD61igG+Nh/txa9CzLKvXa/Uf213wz6ho2AbEGY8k+NK4taaz6muTp07rO/iTRDcg9niYBnjXHQwn1aVmnXEDvDNMe0C28HDGIwde3Q2equ8ZdW7BsxyyAVFURhIZ8OZbZ1J1ZTa4A28yCcJURD0iKo1egif3w/pX10aWxyKXUYpoYfF1ReRt8KA9rIsZWQ3wYFsmiBaWwq95IgXCmp36tbDnPohLJTREC8teV8cGiOqPrj0ZPoAo4xjTwopIVD4DQc1h7YtHkwGIOpOphKWHEmFEzoGYx1HNh2kTxORkwrAcEOd8JEGIVbvy5bkNQpKIDojdI54CAY3pzZVP1TGISMXx9LDPefwA3Gv+uvHvqgcCDuJ4DrrdI7YDrnX/fP4QP8C9nRiiHhKVY4b7HL8/fZCf4JoRw/OD9Zf9OmptGooCOP4k7kvsW53nRTIqhKQUnRAIpUV96W3aDYRkWWhIVXC06ySVSYeEOWjcxG5QaDtHCx0ifg8Rn4Rz03vv+ub5P+eeh/vjXMifv/NNEM1FOFST2JDNhw/+J48NEGz3584aOwfRNsgDq758ts52LsnjXh6n21tr7VdAHvfw6BW21twPlzyUPfZm26srFGzH0TTHMeyCwOdL8lD1qM9XWtialXge+5uXhLqx0uScPBQ9xnYhN1sPPZbenX793jgJbi6jb4skZolp5J96tE8eSh4n+RyG5bH5eevfjTo8TX0WarknR+Sh5DG3c3JC1hmcAVJjdBEnup1TjzwUPHqawc/0OlEdOO0vfRbmnJ7ukoe0R21qcNNCNsy902Die7rBbUwe0h6R5vDSvTSAFY39uOjwmp2Rh6RHbabxMtmdwINz0/FDjdeYPCQ9Il3jZMXHIFIr5YPMXPKQ85jyOQYgljtpc0Ei8pDyuLR0PJPdgmhu6oc63pQ8pDxGPA4vA/FaHb+o4x2Qh4SHy1uPZFIHiQ7bzNTRMvKQ8IgsE63ypQVSDY5KJppdIw9xj4WJx96AZBO/YqL1yEPYww0ttPInkC1oMwstIw9hjx7uUYwDkC5rly2sGXkIe2SVIlZpDvK12qyIFpCHqMekiBY3QKFRG9eNyEPQw/WeY5WvQaWg2UfHZeQh6HFQqmD1B6BU6qPjpuQh6DEoP8aKXVDq9gidF9bIQ8wjQ+8Pea6EHyzUd488xDwWqEd1CIpddFGP1+Qh5pGWsbqvQLErHx34mTzEPJIXWPE+KDb8UMIGRuQh5tF9isVAteioig0cAHmIeNRRj1IKqh00UY+3QB4iHrVuCesaVGs0+9jAYyAPdY/qFah2gnsMgTzEPF4iVReg2rtmH5tIHoIecRXpSc5+fHzfW7Ef2ER6r36zXz89iQNhHMff5C+ATnvoGzDjmWtLUQoWUNkNLi4gCBrFxagRQ0gwbGL8d9V3s8GEVZtn6HS4Pt9rZ57DfDJM0HzPw02qZ6hqbv3ZKyx/P6iB7KHnAdqjD0XdWXYzW4G6ipulBr6xh57H4QbVYR50T9bGRvYa6h78LDXQYw89jxl5fOIHyH6FGzEej0MSuMUeeh5HVpYoTR95bWv+calHL8xSVdhDz6ORtqhuQTWyrXlLPEpF26IK2EPP415YVH0Q3YTWR7tQNqlaZAX20PNohRZV2CT+WuxbsR6NoYKXPfQ8rugDTJ8j2vaRiPUo/aav2xN7aHrgb5psr4RI7XDxTe2x69LTpuyh6zESaSpxg+8F++l4j05Ie1TYQ9ejrTjCfh5fy/dEvEfLtclZVoE9dD0Cn/aw2/jafZiO9cirrscT2EPXAy9C8YIc4LPjof0ppfI482161Bt76Hs8hooL0sD/8mORjvW4Ol2jJ4kr9tD3+OnbdI6HReeh/ZmgPfJjadM9gz30PdBxbLqT5oJsKOI93n1h0z2wRxKPqbQVXexgXqkj7FiPtitUrF32SOLRPRWq+jUAuA3FtzxiyLXrCEXvYI8kHmhINcgOUPFFrMeDmiM8Zo9kHoErlF00CzMnzmP73BfKRmCPZB4YSEfZyXPoRPKiHCPfUZapsEdSj8B19KI92lVH3QjskdQDjdyafutRj7GvXpxqskdyj9ppagWPV1+99h3skdwDZ+66uUevqty812UPE4/tTs7cw6tL1a+VB/Yw8UBQlOuaZbwo5ms1Q68cgD3MPDCtZkw90KrTmFsH7GHqgTvX2AMvJKacgD2MPbqvOWOPSZ3YK6dgD3MPBMVcRifqkR5fpqLL5ADssYoHJkVp6lGp+1GOoxJ7rOYB71IaeqAX2So7XbDHih5ol6WhR/P7BZGzHbCHgQcBYuSBu3IqysEeK3vAK+fMPIIvF0SOa5jHHit7YFJ0ZWpp0gPVoLzYl7sr4CP2WN0DwT/27KAlmSCO4/gDEXnoUheJsjpkaSFIRNEhgi5B5x+9jnkRw6yYtqwbj48YoqYpSAqJgUnPA8ETdDE8Pu/m2dkyK7VyxsPC7Pdatw///8y4T5SIeDTS9PnPWjOKbq6HtAcuC3Um4IFMmjuS6xv0cj3kPYB7g5LRPZJpkxDtLoZ3uR7yHii1TTayBy7SRr0TwYdcD3kPRO7jlIzqAT2hY0Cuh7QHoNcMSoZ5jJjrIe8B5FqWiOvhGA8gVzNMRlwPp3gAyc6TQRlxPRziAUQT/7KGqZGeCTuDYK6HqEc58wu9cp1y3DCpxogVy55jSNF8MYG+XA95j8un9G0Cb4rGzpqtdiVtGOUcBndy0U430Z/rIe8BPVs3/14l+0cAQ0plKtSsYWCuh7QHYnFKiFZ4PMc3KlUfKCOsFcHgXI+3Hn6IlIpr9q+1d51UFJ/0O5/hGNa/Fk4hkl81jzAE4iDsmEfYdaGa19FfpPSYKVL77iXOgbBqHrsQy54QO0KY9rOcqT7mE6VSI1ZK/bm5at4WKWW2hRQHdhXz8K1BsFSFvnsIWiyMaTzGCJfoxVqiHFjzqeThnfKtQrRYlpLj78RqEYi26pvyKuMx413whSCc3v4WCP9EK1zIt+CdUchj6QjinRTML0GIdgGJjpbU8ZiemZtfOvBDvGjVYF9wPCQgkf9gaX5uZvqHEnGPZc8aZMpXPt1ZrKxDpjXPskIeE3PWhTcAqfS74V/TCa1GIFXAuu7OTSji8XzB2odc0athX9NZMQXJ9hW6Xr0c6IsbkKzRqmukX+O6cwrJNhYVOs67B0gI0iWKH0QIo5kkpAupdHxYHvYLPeiHfImC8fr7CCE029Qhnz/IX+fKHB/dhbWKcZS8L8fr1Mp8qOVPMY5W1VpX9sKaXPbs+DGmLvWGfn6CMeXf8SxPKrSu7IXFB2QPjmyPj4dK64ovLH6iB8NwYOEgP81VWlevA3IIB3ao3nhYHvaAzG7CcW3O2uOhlkd3QILrcFjrQQXH43lArDfI4vYKHNXK9qL19lBuPGwQL99YW3BUW3xbedXj4B58Y3lmA3BQgVkP31YKerxsrP/s1kGOgjAUxvGNDW6HjdNQWpKigq4MBIwsXJl4gN7/LPO9lhiSUeOmQtL+L9DFL6/vKZk2ZjE1qVRB/laTFbIgkCYNdHk4D9xYPCOQdhFLvWyJI+O4rYL0cCskKwDSnczsnTpwFFmYy2MKQhPS783M7XuajqA5HiC4snR7NjN2bjUuq9A5RhAGEKnr3WxbpNzVWoKDhc7hQDgTtET0dZhFpByumlaHYDx4DgLB2Wv/LIj01c18uVvVQ8P+VTh0g+cAiPuzMCIkorvm+LUpKY9Np0kDw0F/VaiH7n8QGhEnApL6Xg2Xw9Z4bHu4DNW9BobToOGIHNM/a2VFlCNBv57TyGIoq7GKf9UU5CGSEMlaytR7Uq4JIxk14nA8FWFEUiiV52DxFiBypQrCYFHjjYglgYkQieeEgIXFiBovRUYSvtlAxW94go8YUeMtCUyA4r0fWESMT1F8Fylisdgfe3AgAAAAAADk/9oIqqqqqqqqqsKOHe3GCgIBGB64IEECmiBc+F7z/q9yhmFdDOpqT7Y3db60qVV30/BHx64QQgghhBBCCCGEEEL8HZrATy0m6wD/wyqlHPR8zCAYEvoxqT0HZxSSBW7qX9n3dwERE4hND4N7Gk5pRMzf6gEjEgWF3ntWqZs9DF4y8JL0xp0eEBFxsEAO/4wn+YUeGjdu9XBIsvRoPZQhSExV1jT9do/GrHcs3Xlqj3470abvFizoU6HvETUZbvfgO1aAPenR1nTqehhgk06+HmpM30OtG2DV1lxaKTJths3aaXp0j6QLJJqkbQ/eHI4X3Mbyivs91Oe7G59DcvDw7OtD76YmkjZg8/GCjyXV9PUeFkB6nPaYaWs+XPAR95PEf6EHSI/zHrzqDhp+/lJ84ICph497TGZrLDUNUX0P0/FP68Hmfp4rKAKPj73x85Nu3+PT81XfAzv6kT3ypofF9S41IfVYp3xjNRbBNJlfIz2+xGLh21rVKe7bomyoAats4cUPfJL0+BKPzLceA5DxoIdNdQ+ftNRdfF60Bz1GQ8IPe7QDT+2hsVJAFizKUmdNYlnW/hOTBG7gLIpi1i179qaMu5koPe6Y8GVw64q3BL6bDGO5LtoUyaHN8s89fECcpccN46sGfdm1x7Ad9Q4aG/UEbB7wJSq47pH4P0jpcefyCEjmOgU0Mg9VqQRbFio3B3wZl5MesyKxrrUt+bL0uHN5JCQQ+dYUShZKBGzhRezZZeQYjTbKXjxfLUiUPF9dcIjouIeiEHVFlvL9vl152FLzpkWcNb4FnYxS6qwHbwTpcUEjauAekNDxUkUIiOE96i1Ukzc5YBOSK3sT72vsWQ+uPkuPy49K/KuHnevv4/upamy3K47TRI5RuRQ3B+CsB7/bYK96RLV6YA/H95Dag2UuYQd+GHJIFKzyu8VidxPF6IBFOu/BI93IPP/Hvh3kNgwCURieYYFkELalgm/m+1+l1OS1KLIIZNEseN+qlbLKL9oB4xdb81D3cPknX5aJwV980PzbYTXZe0G8Busb5yX2WiDs0eDOVaoeHnuPFaciQf4ovp1bpjlfYYEc7NGynaHukbA319sv+f0ehXWR+48mbwQ9sCwCyvzwoz2a90sWLy97OAMz9hBf91AMrJim0ovLKKA3PYDn7cPODBPUhgskP5xnjw/A/XbMt+LdWTj91x7mSZq6x4H5NuLEN4v9PcafD/J+SaOHPubb3ZQcPuHB7Gd76Jw9lvVaHks6L6vHkLXq2/Mu7oIWXkvabazHNmeP8kLM7urrCuG8xLEeyOClVvJCTw88PZ7uzanfHoeULC7W10nWpa9HC+pC7Oqx4OMqM8F5u1sehxq7wP6FTWH9Yftk6+qx18fAXT0wpm0yFdw5UMmiUanZOPD/vO0whQ3S2SOYLM21OgZpdv8GMxEREREREREREREREREREREREX2zT+dEAMJAAABvBgVU1GAAEUkfHhPxrwAFSXkNux4WAAAAAIBfaPvQGWR7+lgtQa7WZ64g195n6hKkWu8+8QbJtnIMFT0AAAAAAAAAPvbgQAAAAAAAyP+1EVRVVVVVVWG/bHYdhWEo7GQRyYnyIwWyyHv5/V9lGqihoYZLmc7cDd+iQlUwto9zAjc3Nzc3NzOxmIpwTHWwJcH/xEWPcJbkLyVXIgLjDPwWnh5E/GFNGPoVSHn4seohvyyJCNcxLUcH51BEYUzbCLYMTspxWG9b0x0pVPiAquBrDPQgwAom2BKJrMG+ZqIiKqJG5EDWqiVjsgY+wPn++Q88vKGDEvUgioKi5MRRU8tDLC+wrTo8nyzRiPAtND1QwKAlAxswN81SX56VPcRZO3CxaxMLEWUHZ8FAOsFCXuVAhIWRiEZRDwMLyH9q8fFx6bwjFqROIzq8Bd5j6k79pmNZmODOaZRmzvQDO+7H485bbiPSAxvftFM7tPjrhkLewW5EsNQh56qASXMYRQFBJBMFt1whVxcl1zxkgCsgbEmdF1RqZBQ2kekHNsEOY9s7fEWONc8ojPIhhZex+pmyq4p5pqoO9VA0ORKS3jcbsomzHWb5xdWYQMbwXFwg0Sn0TpFuLp8Hds9siCqLW576WZSasX8mT2Oblnodu6TqN7YT71V9r3zL+MivI2er51syfvy6ARfx6gxvZQYan632bNGH+YXFplqLuHEysh4ZZYtIS0rc+CM9yvPFQ5MCGZYB0vMitP3yqR4G/hZToQNt3KaBasGb9lvmaTNrW6r10MMycMtmQ67wqR66RfLt0W381ALyYLGLyXoYzxmESRdx7dRFy91stU1xHfyCHppC18oi1JdJwhWizCJuXkR9mkNp9oI4Dd4Al/Tgxm87xJ3GPT3ab3w9HA1lybxbgMhx9HRL4IKiFrZJCbHiP9JDYJROf9x6PYsgfBmECi8jZibXieyuXvpeGGzx6UiPIh5W5s2tsKrGn+LNJclxEAbDwIIqieJRZfDC9+L+V5kCW8EoQDqdzMy/6EcS21ifEEJyYlmWpTsjnqWFS44SkKOeAShxN7GMkWwQh0EWitl2+Xd4bDzHtGIk7zQIsaMOLSfYVFXO/aIK58DIwFAODOSaZnyFVE5n5zxwFJcCPq+h7tm7PH0qjEzm8ytZMT5oM3+Dh+KUpykZHtVPfbgCiNNFLu/1d5/zrOUnNRs8BjxovTWmlNn4tiEry2YzJZDyxlISLCeYAHOUU6k82dPvNNz/xMMX48hrl56gDqgtlpad1Mup0mzfFHORHvNIJVxJsvLtRTCYnYYRXNk2F67dRXw2rFxuDFxqp2fViozwP3hQGkj+VBdypMFkPpA4GxjhQ6/NEHmR5DzoqMgzbHsGSYNUWGPeKxs2ezsEnsK+WZgHrRjLIIWy/8HDt+2RrOM4KJ6bgoeH/bhKC5ntmMt5zoMuEuoL3XXQPCzjOqMizUEWpKBt+HmdiMtA8SwF6xps/Af51Xh6YLgvvYenqx9sHAZnHhdCMawzixIpmYvzSIV5z8NgxdFKf2x3V7Tb8x/76NX4frSBPGBY8w2YXtnOfJnH9pxfqeGl6coyCHAZAemDPOV0ZJthzXdT8GJPFTkPyq2JR0wXji109RDJI188x+jrcJKL8Jjc3SUwiKC4NsK5kOxs5b/CI2Pf4pFnkgpPV7YPgB6OfNisFBKq3J3xrFvtiqtWxJJYCfAe3m2+M4eLh60ObbDrNmw9D8xF8ig/wvmOu+qbqt9gRVXv3+teidLApRK1R8DuOX/KQ+3T/qdGDX1tMN4LoaYYwOhzyiCbUce+H+VGk+6FVDNeySpDp/GYiYfMZ25dC/z1vi26g0U67MIVFhQ1d9J5f1RQ43kDr/tMOyuTrRTiVtD5j3nkjEmOdLDWis5e3+NvWVmT0BWS+WHRP7K91VzkbkpXHpRNXEFEFfWtuCOBSNl2oeOMoiFjwDrjYldQr+X3hXxucWMtmVw+0zv9OY+1YnM+LyzGe36i6uq6XTcaftbv2gnxUiaeaVa4rx9xo3lSPXI3fZBzRpiukqmueuIRdD765iK4GjdnPnQEAaoa+KXAeqxsS5z5Cg+1QNVGtPlqUBUE1XRlCVmh/klVxblK2T5VA7/WUd0tow68XtJ48PUt8Wmnc5ZUbw9ZP6oLQO61h1VK4bY7DTsJbUZvuUoV3t/kEe6+2Xi0EXrq9B9wVZHOQhPmKOB1uJIZ1Z2GUWYSh/ecm78tefhVjQnzLoiH2h/RUr/qf7F0kfXT+cQ45aUQX+bhtgiPDZkzTzxkC6rq9DKQVKsX9lW4Yn0r6maNJkYVlaMWPKS2wVIRlyoz4RYaMRCPoEBMW5NrHmQRDkTqLV/CFIT4Kg8yvqqqJrGMB1twYjcCe/Y2XvNYPbZjaGKQv614lM96052ZyeXI+4Ph/OCAyDF6iCLe/2NAHjCoarbmIb2K7/NQ+lRd6hgP1hKHfi4/d0slE3lx+48BSZnEepOch9FtbZnziHkXnEc6t6guDfOM19r40xethLrmUe92f5uHbi8lMeUh+QbC1fjyu2cl4J4fFVFOM+QBUu/YQC54AG7wxOMKkXLw9FeYxKt1Wopx1a/ltrAf8NBTHuAyA6KHW6YwjlfrkE07iiGP5BrHV2fWaATnYcnDU+tYMK158B5Y6+Gu6yWRptf3eZw5q+qmXySDMb3JQ2xsf8brJTpXefuaRyg4OA9Ff1Mu8QkPEXOa7hEm0fDbPMjJoE5A3XUA0uc8zLisrYkH4Lm2yNc8jBFPPGT/UJ39kIcYvg15cCDgr3g0zXkYfDwLhUCvVNmPeQg5mzZU06+70xkPLs5DZQx3L7Yf8Jg9ygd+2Ne1+CselP5sUx5QcBBxSTgw1RnyCQ+uAJN+z5IHLHjY++UPqmN9zINQK6X1lWzg4HbK+fa3eLh21yorM+QBW8FBy5a8cDgjdqqWfouHLpuhpLV3ucj8iIfGOOMBNe+pUkWzMjqA6O7vlfpC+7w8f7ydX7m2BzOhzWqGw99SODgnooL6Dq+W8kTLvsGDCu0kJ37CQzaf4Dxs7oWu/Bh3y5TXmhrvPxdEpHPDuFTsfl9PNOYRuTscaG8XSNWLMVL6N/tylctq19rj24UEu+VLcsDDPO00XXsYivMwDYVKUYI4pvH82HlOvRbfCDgzaUHL3/PYMburbnLHocLdH0Qoh4YuyxpWqE1lsfK4dT8IrRjwkHks98yD9qzoo2kGmjks3YoXb0p2HskTLP1Rvd2ky77tFceCc8SsJL8LXnYjlMxUK/FEUZnBfS/qs0MeMWPqDljFc/nL73C4STfBuHW2w9NJNfeSRpU9ORxUocEP0GZhWGfEu/LsInwj8ZoHXobQwG/brwy7S/G+QhBDJTbFl5qG9ZTn37sEjd48E7QLw25WvC8YITx+fqpwwPTM62z7q4rhjRg9+/CxW5gO2MKbhg3iQ/0BQvbZlRaXuHYAAAAASUVORK5CYII="},1855:function(t,e,i){t.exports=i.p+"static/time/img/mobile-shadow.2ba153b.png"},1856:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOUAAABDCAYAAABjjMLlAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQwIDc5LjE2MDQ1MSwgMjAxNy8wNS8wNi0wMTowODoyMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE0QUE2M0VEODVEQjExRTlBM0YxQzNEQkNEMUE4MzlFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE0QUE2M0VFODVEQjExRTlBM0YxQzNEQkNEMUE4MzlFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QUZEQjE0MTg4NUM4MTFFOUEzRjFDM0RCQ0QxQTgzOUUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTRBQTYzRUM4NURCMTFFOUEzRjFDM0RCQ0QxQTgzOUUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz65bDyaAAAVjklEQVR42uxdCXhU1fU/780+ySQBAgJCCSAgRQEtoFKoKcqioihalqIWDEixRBalIItFpEVR/FuIIJVFlvBHNjdE0mjBClJRSlAqIiApsgaEkJlk9vd6zswNeXnMvJnJLJnEd77vfm/edu89993fPcs99w43fvx4CJN4TBwmDftdeZ5sJGISWPJKzsOiRYsWgUoq1SZpQ9znWNI2adLEMHbs2DtTU1PvMhgMPXieb8NxnCXpECmKVkEQvnc6nXttNtuHS5cu/aikpMSJtzx0Oy8vT5Q+H8GgpJJKtQ5KkoSarKwsU05Ozui0tLTJCMRrk50hGig0Gk0Xs9lMacyMGTNOlZWVvbJ8+fJlxcXFdgShF4EpqJ9epWQlXuG6Ljc396YJEybszsjIWFAXABmQEaw31Z/4IH6ILwQmr356leoSKMlmNEyfPn1Qu3btdmq12hvqhUqAfBA/xBfxh8DUqJ9fpboASjrXT5s27b6mTZvmoypoqk/MEj/EF/FHfKoSU6VkByU5dHRoP3Zu3rz5CuzA2vrIMPFF/BGfxC8kpwdZJRWUfg8r2l6pnTp1egM7rrk+M038EZ/EL/idXSowVUpKUJI6N1Kn090Y91IFL4iOUhDKToFw6TgIF4/isRgE62kQnWUAYvydo8Qn8Ut8q6BUKZmoUkXVWCyWlEaNGj0ZNxyWHALP0QLwnN4Pwo9HwD+nH0yUaUDTqB1oWnYHbfuBwGf8LC51In6R7zVWq9UFEQQYqKRSvEHpsyVHjRqVrdVqY9v7USJ6jm4HV1G+TyKGTaIXvBe+9SXXv1cDn3k9GLqPBk2rXrFlHvklvhcuXLgVWHCB2iVUSgZQ+jyujRs37h/LjL0n94Jz1wKfWho1ts8fAvsHTwHfsD0Y+z4LPErRWBHj+++YKOrHq3YJlZIBlDRfpzeZTL+IDRpd4Pj0FXAf3BzzypLkLM8fgVLzd6C/7YmYmIKMbz1rBxWUKiWNpNTqdLqsaDMT7ZfA/k4ueFGyxZOce1eA5+R+MD2QB5zWGFVejO/KdlBJpVqnytUeGp7n06NSMW3noHz9o+A5+x80CYX4JkFAUO6D8jWPgOiuiK4B/HxrVFCqlEyg5KLVA0V7KVRs/D0IF08gOoWEJeHid1CRn4NKpzvadoi6DVRSKZbqK0TVIUUB7O9PBeH8sVphwHvuINi3TQfTvS9FC8roUM0Fz2L4kCH/xYNUExn4/xs27KoLHQTrno+HeySXXsC6v1DXOjry8RgenpVcmoN8rFB4/jY8fCa5RN75rvjOfxIFyprbd3uWgfv73RGAmCSrB0QXD5qmrUCT2RQ4vQFEpwMl32nwXjoJnIGPCCbOog9Ae10f0HW8K1n7RLoMlFpZB2iKh/VRlkHqwgPYaWwxrnuKrO7GGAKltSzvcOgU8ni+BsWlYWolOw9KWMYerN9K/DlK8s1ex2u/wnsiqz8F2nyaVKAULp0Axz8Xo7gSwgKjUOoCbYsOYLx3HGivvzOgk0Z0WMF98D1w7l4LgvW/YYGTQwxXbJ4NaVN6I6BT66LGQg1xe5R5rAoGSOw88/AwLgpQSmka5jexhnk9gXVcJzn/P0yDIsxjEqZXE/RdptFAhymDndNE+e8wvcnONTUYVOILSkfhfByfnaHx6BSAc5nBMmYRaDvcoQwwowX03UZg+i249q4De8HLVFIYoC8Dx0fzwXTPnPpiWvwAwaOM0iUdhQ158GeFvEwx7DwGlmpC+rr0AXAAKcEBaCb+zJNcfgmvvYf3LoJ/Cu1yDIqygMTRWGNQeku+A9ehwtBYKfeCpkErsEzfBJy5QURmnr7HCNC26QnWFSNR5T0bWo3dvQWMdzyNwE6rD6DsjB++NIjk+wgP0tFtAz57JIK8z2H6NgE8dAsgaZXoO0x22bXGmJrX4nd4HVMOppvYeSbZ1Zgexzb/WjY41lSNL8JDl6hB6dyzCsdxMaSE5M3NwTL53RqrlXxma7CMXQe2xQ+C4Lio/LDGCc5/rQJjdi7UV8IPeKsMkBBCSgai7dihRiagrtU6Wxg0FOtVJMtjIlNz5XlHas/Jpfs8zGM2HtdhmU8oSEsvPkeq/x6oMqZGk71JdmfSOHpEjxPtvg+VQUkOnYscWF7Ij9rO49OvBfOwv4JtxSMQKjzVuWtLvQYl0gzZ+btsxI4GPKTaLpf1hz9jvl8kcTtEa88ZWTLL2sIsU7Nt2A6f43Vqn9FX1Di/0+dmAm1SgNLz/ecgVFwO4QRyQ8qwKcA3bBmbira+BXQ3DgTXgXeVyz1/HISys8CnNU20BPt1oBFdYjNIaRk+b4vU1sJ3SIUaKLv8lxhUn+r9oOScPLnbsLxOUebbMI5NHqk9Z4DqnmNyVJBDRB59spg5cyqJvutOBN8YPI5JRF+qGSiP7QkpJcFrBkPv2PJg6vcUuIre960iCWqJGjgcNP4F+q73J3rkTo9AVWtbwzKmys4LsLPsDeO9T2TneyVAJxVulOw+7ciwNMr2cLIOLo2U+iaGTpiI7LkAavAzmEfEXlzMhzDTIoqqk+S9EHNQek8d9EfVBMNkhReMt98NnM4Y017PZ1wLuqwe4D62W8k/BN4fDgAkHpQ0ah8IcJ2Ww8k9XBRpIZeUHUN0Bro/RG4XhdmB38bD27L8MhhohsdLzcZyF9RD84EAeTyK91dhGhl7UJ47qigpyeOq73pffET7dT3BfUQ5GMZ75njCvxR2wB146BoATOSivlN2eTQ+v1PyTFYYH3oqVJ+1JXd0azYBL6ezmP/2IOAmm4m8ieTqbxJAdSuMkHXqYPK5Rloi9AqolDj11Ys2m9KWHYLTC5oWXeJSYU2LziCG2C5EsJUmUxu3j4G9SqB9WHaZjOaVQV75G6btkvdJhczGNBjTCAW1j8BK80lLENSfhVGnRQFs3I1U18qolzjb8aQ53C25RPOHWxL8fcsxHVWyuiLtAzWbEnGHCAD3CMCnXROXFvDlG2oqpqIiKdCInaYxU1+jJYosiWSf2n/Km43ZiNfJrl9kandriTOEwP8w1p3mPSnuNR87+lEJT82Y1P49VJ9moNjQWZheTAQgGR2ROWV+ifV7B8tP5NYuX2J52Qp9gLSn/RH18YirIIphpAjwfbAAPMX7YluH5FnwcbvCx5LuqXsG0wRMXwV5nFzODwRJs+WKAvh3UpCq1pWA8bUe+OfcRjP7iEZx8rzulOXTjuV9BOtKUwKTMZE9VMzqKgUk5dedAtUTCEjiizq71JahQac/1HGKXFJybJWToDA9wwkgWEuAtzRRFqjHPoeypY+Bvn1vsOSGF48tWi8oOpl8xRuTZg/pAQr3hmInn8MAR/Ggi7CTLcRrvfF3LkhC7PD6hwrg7ie7VBgkYHsD+KcEyGN7RnaPVL4tmFc7JnnITpT+TUUPluREq9mfA39EUSzAOALrkB3uwMaIVGjp5k3Udh/+5GxKPjUThMvBw944HQfekweB79gnOLhcdihfOwE40QuiLfyFDZSvXxoqgNKUUusNi51Lx2w4JaJJ3PEsHcJ3XsPjauzgQ8IsIyWArflWEKlCIH8zRJYlmChgoAGTpKHmT8n+pGVdJqwLzeUVR9lsT9fgHfIqn4aqULwBNLhEGHZYD0CZ2Qa8lxRiUQ08uPa9CzoFUFZsmgGe88U+eRDJNq+ubz4J+Tx/TZtkaNuBcPVUiNxBICWa8qDA5xewU72Bx5exY50OUcZQqB6YYGUSMRxAa1mZN2Oi0L2emG5QMGnIO0yeW6mzgKTpIyxVrhuluFxyEtFc6KF4RLzIBhs3lkvxqZUrETg2yE34SYFS07wjuL8LPldIE/j2gm2Q8tsF+ImvLsJ9aCc4dudXWThieJqPYD0PrsOfKD/vFUHX8sZkaNsJITrTRuxMP2cSiVTGRuwWxSTS8qTxrLPNC6BuEgCo8z0lu/wmPlse4Nnr8UBl0bEDA98NISQhNfI+pgpuoZhUVubNTDoOYCqt1AFF6xVzWPINPPgO2X1fs7Qb8/lKoUxyRslH+1vDsBPpvZkSfkbR6g4sy5qA72xknuhg1DwhoNS16wmOHW8o237CRXDsXA7GPmOrX3dYwbZ6YhWwRAjbMVSx9SU0RF3K5ToE0La9pbZV11slthCtxiCPZXoAYJJN9hQ+T/ODcre6jtlHOXiftlWYj89L3cqDGNCuDEcQPMxvO1Rf4BtwOAN/8ANJOQr0/hjL+1FW30qgUpqD9aIB5FeY+rDjTbI+lcLsvV4Sh5VSVMfrQQLS+4cY4GiJFTklHmWXLEx6L07A574FogsmiBEoO2b7onXILgxud/JgW/YX0He7v9r0SPm6KSCUnqo+HodBnh++AueutSGlKp+Rhep1K6hlek7ymzyW08IARDAilfFPmB7DjjcJO+BmNu/4vOy5tXgvks5BoxttbVHE0j6ZSt0SywkncJlU7LUsGRkwb2GpFVRt3xlvek0CSp/DB+u/JJHe4FoFJWdIAX3nu8D5hcI8LSk6hnIomz0YMubvwJL04Cr6AJx7NwdWlBTV1h/Bmjcy9AZZmI+x1921LSVpT5J+ko6/IgxQBopHnMjA2EDiFNpEC2zBPwUh/d9QdwCQVlNrMV0C/7zeYUw7WH43QdU6wXgQScYhTKJTcLsnjrblXpq6YYMBMFW9L8imh+JAl9mgFoxIm/hF3EHp60XZOYEBJsUljpGeC4fg8ux7wDJxOZSvffpqSUenCsEAQulpuPzig3g8EbJOolMLpgETahOQBK6FkksrmWoV6tVGsnMHvvdXfG8NA9s4qJp8vY8lKS3G548pdNjZsnombHIdy3ZJpHG8ido+X3I+PgGgLIp18ECNQalt2wN07XuC+7ByHCqH3dR98ku4NL0HExyBpGRgUNK6zdI5fUG0nQldIZ+UvB+41Ea1KSgJQNdJpFe4y6p+Ljs/zDo0Rdz8gdlLK+DqiByi80yiRkNvQWx2IsiG6PcaioY2YfojVIUR3oBtdw2247l6r75eMXZ+MxdK5/YJPaeh41BAuoKCKZiZKFw6g6rrmbDqIrpNYB5Se/vz4MenzjhZcmk5doYTYb4u90ztl0mbT9lK+9WYfiN7tgz8W1REs1fMeizjnRi0wezaBCWTyl2hjlNUu4Jrf9YZTHeOhSoXajTpatJktgJt804h3xU9AqQ+PBP4tCa12ZbLJO15KVzpxYIM5OpoIJWLwpRuC3Cd1mbuZYusVaoHFPVW/ebBzyI4u8QDk76QPvPgmcrvoZDWt8/GwWFcbbelFIS0gLYkzPfuBf/mUJVE4U1bZcDlGOiDLa6lFf4F+NxwtUuroAROa4C0P+QDn940toBkpO/SH3RZ3YK+y6e2g7TJ+bXekGw/U4rI+Rj8S6fCkZLU/s/JLq8KMOk9HaqH7BH3D4Hfu3nFSMC0FvN8Qu3WdZu0MUF2w2shbeImKFswCG3ACzXIQRmZ5gdnwuWXr96zlzO1hoy5H/imaJKEKMKmQQRzYxQ7Kp3aoHnCuTLgPiC/Bv4t92m+kuxAmp8bKxlkX6MQOgpuV7t3QiiL2dLBqGmtgNKXUctOkD69AMpeeQi8Jccjw2OILqzreDvoOmSD+9udV97RZN4I6X96ByVlo6T5OszREI2n72nM46wEkBQpI1cD3qqUrpLtD8nZM0XyDE2nWPH+ShUzcadWEL33Oz6g9DlmmrSFjFk7wPq3x8H1dWynh1Iemgmlc3f6YlsNPYeCJSfPF5BQj4jU1tclgCSP7HvMwVNJNOk/UiqJ2e8/4vO0vvFJqeMJr5Wy/XlC0dthzKUmgvYnST3qvvpaTaVMyYC0SRvAuSsfyjfNBqHsfGwq2qYbpD25HlXWVJSaverbd6A5yMclgKRIFIrMkOrltOqC/sAn2H84TGTq8EiJKrsG8+oZIghcpciI7LNRUbx/NOGgrCRDrxGg734/2LcvBMeOlQjOkqjz1HcdUN8+MAUYPIqgWSMB5DDwz0fqZIDsh89dVlCdRXyXbEsKn6vcQZ1A/R5e7y5b+ExqTCLmjz4PcZ/snAMR5lnTUf68rKxg+ZyQPWeTtTOdvxnjdjpcTbCNHz+ePlzmokWLimNZCoXH8enN/DsVeN3g/Pf74PpiK7gO7QSxXPL3AwL2vk59IX3KxjAy9YJguwh8WuOYtkhubm4WGwHLsR1UWaBS/VJfK8l74iBcXNAXzPcNAeOvx4Ch+2Bf8vlpykt9OxeIdiuIbgdoWyvH63rPHgFH4RKwf1wADeZtQSWtsfrlVFJBGSnpOvcDy9iZUJY3DqxrFoCuVScw9LwD9Hid7ENN8+uDvitWXAbPkT3g+vpjcO79BLwXDvvmQ9OnrgdNsw7qV1PpJwFKURCEMp7nY/ofcoaewyEN1Vfr8vFoUx6Ciq3fQPnmhSgdReDNjUCbieqtyQSc0YhS0w6iww7Cj6dAcF327V7AaTnf2gjacyd90hpUc/vEvAGIb4ho/z2VVIo/KH0zhW63u9hgMHSOdQGG24YBl9IArEtGATgrfJtq+akUvNZS/64y1bw5ALy+KtCI02VC+jMbQZsVn2V/xDdEtP+BSirFl3i/qwW8Npstbuvd9J37Q8asfyiqrAFHjGY3Q4MXP40bIIkY314I/q/JKqlUK6D0nDhxYkc8CyJAEjBN/XMDbqZV/WEzmAdNhYznC4HPaBbXBmB8e1RQqpRMoCQp4crPz9+DqtwP8SyMM5ghZejz0GDObjCivUnn1e4bG4Cx9yPQcP6XCMpnsHbx3dqF+CW+wb/62qt2B5WSxaYkCeFyOp0VKDWWt23bdna8C9U07wCpo5dAas5r/mkRr9vnXeWMqWwH9sQQ8Ut8M1CqklKlpJGU5OCgyBL7kiVLNmInPZSw0jkeOHM68JZM4EyWhAKS+CR+iW/Gv+roUSlpQAlMdbNjR7UWFhZOFQTBXp+ZJv6IT+KXgVJVXVVKOlCKTIWzFRQUfFNUVDRFFEVPfWSY+CL+iE/wxzW6VCmpUrKCkkBI9lXZypUrC/fv3z8JJYqjnklIB/FF/IF/DWIF41sFpUpJB0qQ2JYkPUqx4/5927ZtI1DFO1wfGCU+iB/ii/hjfKq2pEpJDUqfMGHqHNlal1DFOzBr1qzhx44dm+d2u8/VRQap3lR/4oP4Af9Oc8SfKy8vT/W4qpR0FGgWn5weTgZQj91ud7366qur9Xr9pmHDhvXMysrqZbFYuuB5C57nU5NQRbW5XK6TVqv1QHFx8a7169d/huekppYz6Ui/3SogVUpWovWUSlKUZu9pzw0TS0Z2rmX32N86Jw1VxrB6ma1IUp/sYjtLlUECQQGprqdUKRklpVSVrezgbtapCZC6OgRKNwOiG6ocOqoNqVKdBaW0k7tYp3YwMPIscUnIE9ui2R9oLzlXSaU6Qf8TYAAKoZvW24fG6QAAAABJRU5ErkJggg=="},1857:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqUAAAAyCAMAAABS+lLSAAAAM1BMVEUAAABVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1NVU1N7OyHkAAAAEHRSTlMAgEC/7xCfMCDPYN9Qj3Cvk1KQDgAAC5hJREFUeNrsm922oyAMhQXCP+p+/6edGRgNVFpsT9dpL9w3s3QOGvAjCYFOX6slvNTMhumrFEJt3PSS9PMt3HRKcrHVhRJyuvSUCCT04FuQOXwNkZsN9IsfQ1X2SPhwgjjhTWj6FeO4mWgIS/DLGbYTQGZraPHvyk6XTkvir0hMD7UCxh3ujTk1Md1/76ynNwrAbuSSuzQGDn/ll2YoSAxnA6B2Muf8VnlylG1lK31ZLPpuzcgyA2cK0HK8hyhHHCjXf2IEKL1zsmWRLBPoFAeC0ckyyNi6IaVAaq7InTKvmVFXzH9GMQ9zcsOIBay6A0YYcUCz6KiANL95shmRmSOwlxxYF7lPLreKYkxptI0HH7jfEaVX6B/KMmpjF+IPMR8g/ZCDgfxbJ9vKfSo+ckypmlpX6vWZiN/AF6cfUSqg3HTpoQzyqA+V2GvcOB85olT+19JecD78Q7EprlwsbOoTlDri2D2mtHrT/CNKLXLqc+mRqAuairKfGXQQtyNK+UvdXhg9vUlLnVt7dvFjStvO7LiEmMaUlmjiXqaUM9trKTV0kbH3zUU38Tu05sZWhWcpFdO75Ctc9PHRekypa1pZuln3haQ7lNL9QGRFLZOfvilPqf0/LkxHWnsj5OjeWomOtVZbORnzKUpd7UrDwZWuJIaUqpyAbPK3RQIF+NkypdyJe7sJEU9purRJu87XjZ2g1llIMAisYFwbcz9EqahjqOcns8v3luegbSnlsKB2oSjdrh5bSsXN6Mk6h7FJspqcPPd9kY2uBRRLE06ph6l6uLZw5cnmM5TGCh2XTVeVqF35KbIHSjU13Q25hRKuodRoprQ3H3QEvL7qpT/WokStUiC8K900LcHNKNGTR9H8CUplvYiZcUdmd5tkbyldG750SXlu44vkvJQTYH27l6XHlF6J6DMKzwyXlra0UTeKqG6tn6DU1F6cgCgbKRTZ3fOSbSkNTXSf1oLbgNLcSsldCbiL6dJQD1w10vNSVV4lz8LaY4SMvJ8vdte55o2UulLoZHTksdpGRgjN3pZsTakleAVl+RH5L0aUruhq7Q7E4qqr8PfCXZwO1FmiAmvQr1eBsD659/RGSkX9qPjfFLtTlrgyWxXSNVOqPbx2AGZdmC2QjijVAFb5XyHOctM+MKFKIWhhe6Oagy4Hty49tY3y8laQLnFOvLD3JN63JJzd7gdJl1eTSZuvX47O1TClBkqXK78npWkaUhrqir7sBJREynJrKN3MXRcAEhenZ1yprCmF0s8H/cQrk89U9UVdNYpA4rsxZermXpV4p3Qp1rsSWbQv/44p9XUAkehsNTuPWbOFc23wUsygK+7fl1zD5Bu6RjvSXAsMFA7bpO5zlGoC9mgt9i6JDYzQ32ygjVIJw5lLcL6U88eUyobKBb0lkTaIssxjSu2o8F7EpdFxTHaLTM3wPOgC5VpI1ulDlLKjkv+N8ZpvZ7eq/KFJqiN+CNWiSnJOOqLUAAqtFbZbfjD8zJtRMflZlwaUpukxpbyFsqLaNZVES1PNkp+jVFNFqQHp2+0oo3u9J3c4uefUuvIx6BGlDoiJuVTcuQOmfCL1ZssqXb70BKXrNKbUodayJ1zK1ds+n6N0BvwGpGSXxZT2RJErUSzpi1GLmhc5otQAUmOpCx3+7izyunt+QAPk3LUL9ZBS0gNKs4Tg86BzlXDRwq70c5RawKfNBs+QMqWnz5eWo7Z2m8LpIaVlTYb10SmHvayFqPvvFSrpCPU9C30pfkfyPKVp6lNqhe43CK0PU45d6acoVSC7FStENnAOuqbUjSllRlfJZ18f+1KRyfPQveFhSQKIX9OZHXPOB76FHYHfkThdKoXsU6ojKD0qW3FlcqkWDR+p6gdAbrbpGPiX2xulGuEEpUHxL564rw8o1ZR7vSJVS3zX3RhVzuS2fUotxj9/+T12vovSP+2d3ZKjIBCFRWj+BOX9n3ZrIOMBBYya2s1Wea4yNWoAP5qmaYgPHUoZPlYohZxAGLDXvPwls/uDfWDqZFE2WsO3wq22lLeHfZ9oUV6EYJja1dW5JqUswc/CggjstCudDOGn5+g0BeATEh+CwOfkfH0HpXr8O9JvWaAXpbpCKSEHr08pfK5/NuIvwaJsxXblldKxaqjghw5T4N5Rpa5aBN+gVAf5eyVlq1ml1BQEI+ROjVOWSTiJwDMtvdf2Vez8Nak1eGNDW7JLKSCUPYr6lLrb+2Hstmz0Ck5i9sSrhoqYCCZSqlqLcgahty2l0qx9e0ZtWoe/+LV8eJb14dnh3JOOHn1qOFNkp088kz+2paG9rIrMaValVInF0u3x3u7KZhMvoPTnv4YqjAYf/cNRsq1k7HwL8vB2lHrAO/1yKDYu6cQobya28R5YmIdHTZEJQbqOXwr1KaXoU3WnqN67bSbwJzWWZYPbCEpTRFfuGQ0yzWJIhK58SemMGXuWGi5w4T7ZweA5aGrNghkedSEdxvuUUgxkK3Gwn7xJKTH90bQZ2C1VUmpDkRSlI6NYIaViQ1h/jm+nTVKJjpMmF7nrT314kUQmfr7kq9zArxKZ+Mo+QKmM4yHO4TlL6dI4yIkcc5cplavVAqWUF11LeN0sT7uX+pBSxkOQyZnNDSWL/5SdwsH+Ik1F/9z4qAWpcMNdSgHpGjCwZyl1jS+0WFE8Tykh5sBKdCcqlv2XNW4JChkdezcSLkUWNcb19XPgUPMsaVsEMTxqQGr0cJ9SQJo+4n+Q7lCKeFf1ImB6klKGgmSUutwvtHh8TqmGf12jFBY4UQqt+DaHLqGGglKenBL+7NBrtVkE8T6l5X44U41L6/CO5C52lTRfoZQEaMwopZD7jSZBCkpRI6EajcNQ2C2ltns2pEwnAYDSl71PEy/xPQv43yMy0Vrcp5R4wRGJ6s2Sy9YpNNCWxvCSuUIpw32gNJEFfFUQ1DqBx3RmiglSUFr0UdaGlF61yrFmsRyPZ1oTQ6PcolQZjI6HBySejESJ8NIFSkkEoUtK8Rlo2d3ZJrDirRFfiwhpjVLedsvnn5tQc1yvX77CE9mv6TKl5HGDEyF42ucFfIRSeYNSj7deUupAKQRKYeOWzmrwMlQp9RUPBU+0eGBms+WaijI9Y/7HKCUmMAz7ELiq7HbmH6FUi8uUapg0UIooqj+glOL1zdVgTTVKscYsaf94o1BAgW4odJYf/WB6mVIyXG8ZZc4EScqEyVaTkf1dSuFOwH84UxkOSEEpKqfblCZ5YRuNA4FSQJo2S61IYlTwlH8Rnj3n44Z8ML1Kqc/2UVrxmwFJJkxgtJRd6AKlbBpbxzyerowDpKAUaPl2fil0llKbWkaJXdIkSeEALO7Jt0eTCI81vU6py1aeOX64I+WpSNvN8FL0PqVjdd6hULYzlRE2Ma4qlI7cDh+lFJAahSyzvAfPhM/T2pq+oJKlu54pVPfwnTFTNGBjkgjYMTqvueR4G0X+1MKY51EGlx5SigUdWU9OPk0pDtU3nDEm3t33BI1+Hil20vcolamN0DCJU8g6tXb6+YW1oU0U6wlIHZmf0Bd/vRaQp0zoSrqUtUtNSns/NYVxUF8dGLBSf55StaQkevEWpbSAL2AahEfZ5+mnN6cme5lcQ+WwkTQ9P//QfrHzOzv9dDkqsw7aAnPqM7I7DOZb7gutnOozlJaEqwNKtSknTIT+a8CcFb8cJkg5IC1DBPzhtPdij8WW0tZZOYWqAJf07ITU7izSu5WxOKPxXUqxDSRp6FPqRH7222pb0xGU4x5eFyH1rUMlOPfDo60czMUljeMYFz2jO/rBnxgjQHqO0on2L3+hs5RiHPAdSif1c6vUteexejrDHA+EcfV0lOVJNG2+IP6NZ2o4hMDOVGbawjG+4+vBscy19H9elQtG2oDRXK5Wdp6a2jaOfybzZEa1NLIvDX/YC0d5U6Uu8xv1W4TUNdRkr/+qH/Bw37GcV3EnyrPN6dEV/c2Blv6LUf0P1jUzVvOYAqkAAAAASUVORK5CYII="},1955:function(t,e,i){function a(t){i(1646)}var o=i(22)(i(1354),i(1974),a,"data-v-04c67726",null);t.exports=o.exports},1958:function(t,e,i){function a(t){i(1682)}var o=i(22)(i(1358),i(2092),a,"data-v-79eac304",null);t.exports=o.exports},1959:function(t,e,i){function a(t){i(1660)}var o=i(22)(i(1359),i(2027),a,"data-v-3b773955",null);t.exports=o.exports},1960:function(t,e,i){function a(t){i(1649)}var o=i(22)(i(1360),i(1981),a,"data-v-0d33b189",null);t.exports=o.exports},1961:function(t,e,i){function a(t){i(1689)}var o=i(22)(i(1361),i(2115),a,"data-v-acdaf402",null);t.exports=o.exports},1962:function(t,e,i){function a(t){this.$style=i(1585)}var o=i(22)(i(1362),i(2049),a,null,null);t.exports=o.exports},1963:function(t,e,i){function a(t){i(1669)}var o=i(22)(i(1363),i(2053),a,"data-v-5599ef02",null);t.exports=o.exports},1974:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"mobile-slider"},[i("div",{ref:"wrapper",staticClass:"wrapper"},[i("div",{staticClass:"scroller"},t._l(t.imgUrls,function(e,a){return i("div",{key:e.id,staticClass:"slider"},[i("a",{on:{click:function(i){return t.selectColumn(e.id,i)}}},[i("img",{class:{scale:t.page!==a},attrs:{src:e.small,srcset:e.big+" 2x",alt:"image"}})])])}),0)]),t._v(" "),i("div",{staticClass:"dots"},t._l(t.imgUrls,function(e,a){return i("span",{key:e.id,class:{active:t.page===a},on:{touchend:function(e){return t.select(a)}}})}),0)])},staticRenderFns:[]}},1981:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"desc-module",style:{width:t.width+"px"}},[i("h3",{staticClass:"common-wrod"},[t._v(t._s(t.title))]),t._v(" "),i("p",{staticClass:"common-wrod"},[t._v(t._s(t.content))])])},staticRenderFns:[]}},2027:function(t,e,i){t.exports={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("common-header",{attrs:{loginUser:t.loginUser}}),t._v(" "),a("transition",{attrs:{name:"fade"}},[a("div",{directives:[{name:"show",rawName:"v-show",value:t.isShow,expression:"isShow"}],staticClass:"downloadNav"},[a("div",{staticClass:"btn-lists"},[a("div",{on:{click:function(e){return t.download(0)}}},[t._v("App Store")]),t._v(" "),a("div",{on:{click:function(e){return t.download(1)}}},[t._v("Android")]),t._v(" "),a("div",[a("span",[t._v("扫码下载")]),t._v(" "),a("img",{staticClass:"nav-code-img",attrs:{src:i(1852),alt:""}})])])])]),t._v(" "),a("div",{ref:"wrapper",staticClass:"wrapper"},[a("listen-view",[a("div",{staticClass:"home-wrap home-wrap1"},[a("div",{staticClass:"block-wrapper wrap1"},[a("div",{staticClass:"logo-img"},[a("img",{attrs:{src:i(1853),alt:""}})]),t._v(" "),a("div",{staticClass:"desc"},[a("h3",[t._v("极客时间,一种新的学习方式")]),t._v(" "),a("p",[t._v("极客时间是由极客邦科技精心打造的一款面向 IT 领域的知识服务产品,旨在通过好内容、好产品、好服务帮助用户轻松学习、高效学习。")]),t._v(" "),a("div",{staticClass:"btn"},[a("button",[t._v("下载 App")]),t._v(" "),a("div",{staticClass:"code"},[a("img",{attrs:{src:i(1851),alt:""}})])])])]),t._v(" "),a("div",{staticClass:"shadow"}),t._v(" "),a("div",{staticClass:"shadow"})])]),t._v(" "),a("listen-view",[a("div",{staticClass:"home-wrap home-wrap2"},[a("div",{staticClass:"block-wrapper wrap2"},[a("div",{staticClass:"title"},[a("img",{attrs:{src:i(1857),alt:""}})]),t._v(" "),a("div",{staticClass:"main"},[a("div",{staticClass:"left describe"},[a("desc-module",{attrs:{title:t.desc.page1.title,content:t.desc.page1.content,width:"380"}})],1),t._v(" "),a("div",{staticClass:"right"},[a("img",{staticClass:"img item1",attrs:{src:i(1170),alt:""}}),t._v(" "),a("img",{staticClass:"img item2",attrs:{src:i(1171),alt:""}}),t._v(" "),a("img",{staticClass:"img item3",attrs:{src:i(1172),alt:""}}),t._v(" "),a("img",{staticClass:"shadow",attrs:{src:i(934),alt:""}})])])])])]),t._v(" "),a("listen-view",[a("div",{staticClass:"home-wrap home-wrap3"},[a("div",{staticClass:"block-wrapper wrap3"},[a("div",{staticClass:"main"},[a("div",{staticClass:"left"},[a("img",{staticClass:"img bg",attrs:{src:i(1173),alt:""}}),t._v(" "),t._l(6,function(t){return[a("img",{class:"dialog dialog"+t,attrs:{src:i(2133)("./page2-word"+t+".png"),alt:""}})]})],2),t._v(" "),a("div",{staticClass:"right describe"},[a("desc-module",{attrs:{title:t.desc.page2.title,content:t.desc.page2.content,width:"388"}})],1)])])])]),t._v(" "),a("listen-view",[a("div",{staticClass:"home-wrap home-wrap4"},[a("div",{staticClass:"block-wrapper wrap4"},[a("div",{staticClass:"main"},[a("div",{staticClass:"left describe"},[a("desc-module",{attrs:{title:t.desc.page3.title,content:t.desc.page3.content,width:"413"}})],1),t._v(" "),a("div",{staticClass:"right"},[a("img",{staticClass:"img item1",attrs:{src:i(1180),alt:""}}),t._v(" "),a("img",{staticClass:"img item2",attrs:{src:i(1181),alt:""}}),t._v(" "),a("img",{staticClass:"img item3",attrs:{src:i(1182),alt:""}}),t._v(" "),a("img",{staticClass:"shadow",attrs:{src:i(934),alt:""}})])])])])]),t._v(" "),a("listen-view",[a("div",{staticClass:"home-wrap home-wrap5"},[a("div",{staticClass:"block-wrapper wrap5"},[a("div",{staticClass:"main"},[a("div",{staticClass:"left"},[a("img",{staticClass:"img big",attrs:{src:i(1183),alt:""}}),t._v(" "),a("img",{staticClass:"img small",attrs:{src:i(1184),alt:""}}),t._v(" "),a("img",{staticClass:"shadow",attrs:{src:i(934),alt:""}})]),t._v(" "),a("div",{staticClass:"right describe"},[a("desc-module",{attrs:{title:t.desc.page4.title,content:t.desc.page4.content,width:"417"}})],1)])])])]),t._v(" "),a("listen-view",[a("div",{staticClass:"home-wrap home-wrap6"},[a("div",{staticClass:"block-wrapper wrap6"},[a("div",{staticClass:"main"},[a("div",{staticClass:"left describe"},[a("desc-module",{attrs:{title:t.desc.page5.title,content:t.desc.page5.content,width:"430"}})],1),t._v(" "),a("div",{staticClass:"right"},[a("img",{staticClass:"img item1",attrs:{src:i(1185),alt:""}}),t._v(" "),a("img",{staticClass:"img item2",attrs:{src:i(1186),alt:""}}),t._v(" "),a("img",{staticClass:"shadow",attrs:{src:i(934),alt:""}})])])])])])],1),t._v(" "),a("common-footer")],1)},staticRenderFns:[]}},2032:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"home"},[i(t.mobile?"home-mobile":"home-pc")],1)},staticRenderFns:[]}},2049:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",[t._t("default")],2)},staticRenderFns:[]}},2053:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"desc-module",style:t.styleObj},[i("h3",{staticClass:"common-wrod"},[t._v(t._s(t.title))]),t._v(" "),i("p",{staticClass:"common-wrod"},[t._v(t._s(t.content))])])},staticRenderFns:[]}},2092:function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",[i("transition",{attrs:{name:"fade"}},[0===t.pageIndex?i("div",{key:"header",ref:"header",staticClass:"fixed-header"},[i("TopNav")],1):i("div",{key:"tips",staticClass:"fixed-content"},[i("download-nav",{on:{downloadNav:t.download}})],1)]),t._v(" "),i("div",{staticClass:"wrapper"},[i("div",{ref:"scroller",staticClass:"animationMobileBackgroundTo0",attrs:{id:"scroller"}},[i("div",{staticClass:"page page1"},[i("div",{staticClass:"logo"}),t._v(" "),i("div",{staticClass:"download-btn",on:{click:t.download}},[t._v("立即下载")])]),t._v(" "),i("div",{staticClass:"page page2"},[t._m(0),t._v(" "),i("div",{staticClass:"word"},[i("mobile-desc",{attrs:{title:t.content.page1.title,content:t.content.page1.con,styleObj:t.content.page1.styleObj}})],1)]),t._v(" "),i("div",{staticClass:"page page3"},[t._m(1),t._v(" "),i("div",{staticClass:"word"},[i("mobile-desc",{attrs:{title:t.content.page2.title,content:t.content.page2.con,styleObj:t.content.page2.styleObj}})],1)]),t._v(" "),i("div",{staticClass:"page page4"},[t._m(2),t._v(" "),i("div",{staticClass:"word"},[i("mobile-desc",{attrs:{title:t.content.page3.title,content:t.content.page3.con,styleObj:t.content.page3.styleObj}})],1)]),t._v(" "),i("div",{staticClass:"page page5"},[t._m(3),t._v(" "),i("div",{staticClass:"word"},[i("mobile-desc",{attrs:{title:t.content.page4.title,content:t.content.page4.con,styleObj:t.content.page4.styleObj}})],1)]),t._v(" "),i("div",{staticClass:"page page6"},[i("div",{staticClass:"word"},[i("mobile-desc",{attrs:{title:t.content.page5.title,content:t.content.page5.con,styleObj:t.content.page5.styleObj}})],1),t._v(" "),t._m(4)])])]),t._v(" "),5!==t.pageIndex?i("i",{staticClass:"iconfont touchup"},[t._v("")]):t._e()],1)},staticRenderFns:[function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"img-box"},[i("div",{staticClass:"item-img book-img1"}),t._v(" "),i("div",{staticClass:"item-img book-img2"}),t._v(" "),i("div",{staticClass:"item-img book-img3"}),t._v(" "),i("div",{staticClass:"item-img shadow"})])},function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"img-box"},[i("div",{staticClass:"item-img bg-img"}),t._v(" "),i("div",{staticClass:"item-img dialog1"}),t._v(" "),i("div",{staticClass:"item-img dialog2"}),t._v(" "),i("div",{staticClass:"item-img dialog3"}),t._v(" "),i("div",{staticClass:"item-img dialog4"}),t._v(" "),i("div",{staticClass:"item-img dialog5"}),t._v(" "),i("div",{staticClass:"item-img dialog6"})])},function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"img-box"},[i("div",{staticClass:"item-img phone-img1"}),t._v(" "),i("div",{staticClass:"item-img phone-img2"}),t._v(" "),i("div",{staticClass:"item-img phone-img3"}),t._v(" "),i("div",{staticClass:"shadow"})])},function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"img-box"},[i("div",{staticClass:"item-img phone-big"}),t._v(" "),i("div",{staticClass:"item-img phone-small"}),t._v(" "),i("div",{staticClass:"shadow"})])},function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"img-box"},[i("div",{staticClass:"item-img phone-right"}),t._v(" "),i("div",{staticClass:"item-img phone-left"}),t._v(" "),i("div",{staticClass:"shadow"})])}]}},2115:function(t,e,i){t.exports={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"download"},[t._m(0),t._v(" "),i("div",{staticClass:"download-btn",on:{click:t.download}},[t._v("立即下载")])])},staticRenderFns:[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"logo"},[a("img",{attrs:{src:i(1856),alt:""}})])}]}},2133:function(t,e,i){function a(t){return i(o(t))}function o(t){var e=n[t];if(!(e+1))throw new Error("Cannot find module '"+t+"'.");return e}var n={"./page2-word1.png":1174,"./page2-word2.png":1175,"./page2-word3.png":1176,"./page2-word4.png":1177,"./page2-word5.png":1178,"./page2-word6.png":1179};a.keys=function(){return Object.keys(n)},a.resolve=o,t.exports=a,a.id=2133},577:function(t,e,i){var a=i(22)(i(1250),i(2032),null,null,null);t.exports=a.exports},620:function(t,e){t.exports=function(t){return"string"!=typeof t?t:(/^['"].*['"]$/.test(t)&&(t=t.slice(1,-1)),/["'() \t\n]/.test(t)?'"'+t.replace(/"/g,'\\"').replace(/\n/g,"\\n")+'"':t)}},625:function(t,e,i){"use strict";var a=i(43),o=i.n(a),n=i(146),s=i(218);e.a={getCategory:function(){return new o.a(function(t,e){n.a.post(s.a.timeServer+"/serv/v3/search/category").then(function(i){200===i.status&&0===i.data.code?t(i.data.data):e(i)}).catch(function(t){e(t)})})},getHotWords:function(){return new o.a(function(t,e){n.a.post(s.a.timeServer+"/serv/v3/search/hot_words").then(function(i){200===i.status&&0===i.data.code?t(i.data.data):e(i)}).catch(function(t){e(t)})})},getSearchResult:function(t){var e={keyword:t.keyword,category:t.category,size:t.size,prev:t.prev};return t.filters&&(e.filters=t.filters),new o.a(function(t,i){n.a.post(s.a.timeServer+"/serv/v3/search",e).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):i(e)}).catch(function(t){i(t)})})}}},654:function(t,e,i){function a(t){this.$style=i(667)}var o=i(22)(i(664),i(675),a,null,null);t.exports=o.exports},661:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAACsCAMAAACuLY/DAAADAFBMVEVMaXFZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVlZZVla+TRpZVlZZVlZZVlZZVla0Sxy8TRvAUBvCVR3eXRq1XCS6ThvTTxjJTxm8URzqizPbURXDTxrCby3nVBDmURG+ZCfeUBTLThngUxPQXh3PUBjdVRXGTxrHYSPQTxjYURbkVRLSZiLegjLMWh3haSDgWRTRVxq/Vx/SfDLDVhzoWBLoXhPNWBvqgi3YWRnRYR/layHIcy7OdC3Vei/iURPshzDETRrVXhzieyvkXhXZVhfVUxjseyfcayPDaCm8YibLXyHNZiTlhzPacCblYxvPUxnnVRHpaR3UWxvVZiLpYxfndCTUfDHlgi7seCXhWRXZXx3iZBzZaCHafjDUaSPcXhnlZhreWxfYWxnhbSHnXxPdfS7obSDqbh/DXCHtdCHiXBXwjjPkdSbqdCHbdSnEYSTDZCbkWxTviC7KZSTpZhfwijDbXBnvgirjbyHsciDugCjpZxvtgyzgeCnuhi7caiPsbBzlXhftbxznciLEWB5ZVlbrYQ/rYxDrZBHsZhPsaRXrYg/sZRHrYhDxiS3saBTsahbxjTDxjC/vfSTtbBftbxrwhyvsZxTzmDfwgijwhCnzljbvfiXvgCbtchzveyPucx3tbRjwhyzrYA/qVxDueiLueCHudx/xjjHxii7tcxztcRvtbhjsZRPxiCzxiy7yjzHrXw/ykjTwgynwhSrykDLykTPwhirvfybrZBDqVQ/ylDXykTLykjPykzTrXQ/vgSfsZxPsaxfzlzfylTXvfCPrXg/saRTqWQ/udB7qWg/ueSLqWxDwgiftcBvrXBDqURDudh/udR7saxbqUxDudB3udh7saRbtcBrrZBTvfSXsaBXrYBHrYhPrXhDrYRDudiLsZRTtbh7saRrueiPrXBPtcRzwhCrtciHtbhrrYhHrYRPqWhLsZhfudyHueCLtbBrxiC3taxztcR7xiy/vgCfveyTudCHucx7tbRvxiS7xjDDxjDHtch4TyfjSAAAAh3RSTlMAYOAwEPCgwECAINBQcFCQsBY9UE/NFim1hRTH0GIU9fU93ZbbSpPOdHWlweiljJbdy6Q8Sif09HDXsFzpJzhu6eV1j6vYwLP00U8qhZWqjeiB9PV+tfTYXLrz28Hbw31trce8nqnlnvX0Y/K58svksGNj5/OG8/Kc8bny8fPzzfPR/Ov9z1PpaScSAAAACXBIWXMAAAsSAAALEgHS3X78AAAeQElEQVR4nO2deXwUx5XHW8fovjlkMIcwGAgY1thgY+OLYJs4G9sx8Z3EsXNnk002597XX0KWY2xpA9EqEBxL40Q4YZeRBGhHa6QQ0EryhJG9453MaHRfgCQOgRDYZj/doxl11119TA92/f6yUVW97upvv3n16mjJoO5ef+/atder9MjatevvMdqqkJC1Wv+lR66vOXSotvZIY+Ox3bt37z52rLHxyJHa2kMHazZfv/bpRaL/heJR96y9/uCh2iONx3b/Qda/R6T83+7djY21hw5+uPmRewXAQvGlpx/5y0O1jbt3q6kFJCPceKS25sM7vnS3eHpCcaJpcvHczugPfzh25JDgVyg+dPfazQq5dHAjYcRuhd9nnhYPUMhWrX+kRo4WmMmN8NtYe7B8swh/hezT+utrlHBBh3Yfqz1Y/qO1Al8hW7T++pq3jigJMX1qrD34wb88KvAVirnufqb8kBF05STwkdoP3998r3h2QjHVorX7yt9qPGZUjbUHLlbd8Wnx7IRip/WbPzwgz6IZV+3B8vdHviFiB6EYadEzF2veqj1ikt468MH5zcL5CsVE6//6w0O1ZupQzcUq4XyFYqBvXKw5+Ja5OnTgg/N3iHVnQhZr0R0Xaw4eMl0HPnz/n0TaQchS3fOj8gP/bYUOlO+r/yvx7ISs073nyw8ctEYHyveN/LMIfIWs0trz5TUHrFJN+fmRp/5cPDshS3R/1cXyGgv1wfmRTy0Rj07IAt1fta/cWl08XyfoFbJA99e//4HF8H6wr0rQK2S+7q9/5d+sl6BXyHzdP3L+Ygzgvfh+VeWzgl4hM3V/XdW+/4yF9p2vn3xW5ByEzNO9I1Xv74uRzo9MPiXyvUJm6em6qvOvxExVI5PfFY9OyBzd87exZPeVV6rqGsRMsZApWnRHfdV/8KsqLD01D1cGnxfPTsgEPVN3uIpTh+vrR0bqZI2M1Ncf/jlv/ZFJkXIQMkFfaq7/ObsOH64fqatsnmwIRtTQMFlZVzdSf5ijlfq6oBi0CRnWPf8wwoydAu5kQ/DSYG/v1Mmwpnp7z14KBhuaufitbw6uEc9OyKDuqKw/zKb6X1Q2NwQHe6dOXujv77/roYceevjhJx566KH+/gsnp3oHg3smK3/B3FZdQ6/hfW3JaRolxS0K2utMi4MrMlEJqVolx870o5N19UwaqVPIlcG9ec0PNBHr3E8//Nw3+0/2Dob9L1tzzYN3zTV47WnFGqUabM46aa+zOG6vUyX2nk12aO8uN2bXePenKn/BpMrm4KXek/3933ziB2jmlvz4ZoXfyco6tgaDvUYDBwGvdeLo2Wzg9mL2y/LdBibUKisbgr0n+yf+9ROkxpas+ebJ3sE9zUzvQ93k4EmDgYOA1zrx9Gyq9vYyY3SJmy411zGosiF49mT/xBPU9NbcT9x1slcOHlgaDfbebOzqafAmpRmRsWvT6CMObxJwf+naP4NBsRGpxzXfC1YyqCE4ONU/8Rzbcpoff2vqbLChmaXZwZNER04VDV7AI/DJTD/+EYdXytXenyND89d0I48BkMqlPHqpgYpYcxjdu5h/4ueu6T/JhO9ksNfYmM1SeOPb8/L9oujIw5B7FhA4ZtOWtwbeRc/uaf4jRc17LvVemJh4mOfGl9zcPzUY/CWt6T82XJriaheUlfDinpeuOAR8AnqkvQxzboYgvvo5gMEc9R+tgffRYEMzRYrbHbiLdy53zYQS+lI0Gez9lhHXayW8OMdrtPd1y8hlWA4v2NWJ6mSvJfAuejbY8Euy9hw/c3Vi4Dl+wr7/uQu9l/bQmg8OXjXiei2EF/u4DHe/Xhm5DOvhzQAsqpO9lsD76KU9dHYvTAzoSscuUeiltN9w3JDrtRBebMRruPv1yshlWA8vRGgS/k9GFH0u3z6+p4EoOdwdGNCZEZh7c7885UZW8OwFAwkH6+DFPy0THwSfjFxGDOBNTtSaVCV7rYD3+bM/20NU8DUD7Cr0Tg3STAxO3aW3fSvhxacajPe/Thm5jBjACz6M4uzoX6yA96nBIJksJWYw4Bhlei+RTew5fqb/+7oNWAYvYY7IhAegT0YuIxbwSnlamzPJXgvgvaf3tZ+RdfbCwMBn+G97RnM/N3zmONnG8bNXn9PdPie82dgEFZBkL07A2zTxQfDJyGXEBN4MINmbF/2DoYnOTE2j0/B+jcLV8bevTow/wX/Xai353NWzNCuXJ3RvhOeEFx8LAPFaIsGmYQj1yshlxAReyMPmMNShS/sQp5/ht98mYyXnd79o1PInJqYGyWZem+rX7d3NgjcB6HWC4xXwEqR1ktpkr26h4N009cZxkt44c2HgSeOHg6wZ7iXbee3MBd3Lc8yCl8PxxnCZAtGS9oLTYdkBLzhmM2VlLwrev+sdfI2gwTNXJ8b/wrjpuTdfpRvS+46YBC/Y5yTHG5fwothCF8hlXtClqe+Y/kcajSnANZuxtwUF79+fJSH12ttT/QNfMMG0tKT/MsVSm+64wSR4walNos1rG15DS5WMLtDRJwS8m9p+/QZBb787PPCk0V06Ya3pp5nq1xtamwMvl+MV8BIFbqrIplWgCwHv1955mwSUHDT8mXHDsub+4zDR1htnrg7ofE3MgZfL8Qp4yQIMOIyP2RDwfq/3bYLOtvUPfNaw2Wl9ZuLqGZKxM1cndM6EmAIvn+OlwQsMnIwsCiZaojKFLmA5vOCmijxqDZpgeO+++s6vCXp3eCBgbJODWp/tbztDMHbm6hWd6WRT4OVzvBR4waSbkREL0RKVKXQBy+EFN1UYX9MPw/v8ZSJOl6+Mm+Z4FddLelXOtJ3QacwMeDkdLxkpUwcsREtUM+gCZsKrPTUj8pqCXUBzBlTB8H7t8ju/wUt2vCZFvJIS9Z5oI1j7TdsJPy3oTUBkMtPTgcwMlO4E8rdIeMEgjXYzwOPU/tFUt0O0hGeKWMBMeNPwfzJTMLxPkWh65/KJ8S5zUg1hrbnyJuVdoWWUDXb6zI2DAh1vOvk6yEiBm2GMPVCSpY81vCfa3sHr3b0TgTvNtH/rwDDJXtvwAM3PWwYv9+gYaFP9pyTgF7M40dAub4KljzW8Nw6/9394vXfC32XC5JpKXzz1K4K9d/eeo82HWAUvt+MlwJsMTO2bLMJlsMPLfpKFpn4mENgi+i528D4/3PYuXm9eGb/d3AvYcm4vwWDb3nO0EZtV8AJRM0NaEmhz5g8Ws2sOvOyi17cL3keHL7dhdXl4IGDKzPCMbh04QTDYtvfcONcd6BQML7htkO54JeC3PfrvprObh7OkiAoOtQBF9Pp2wfvl4V+9h9WvdvlHzUvyhvWTU2/iDb6398r4rTx3oFMwvPyOF6cMs9mlXAsVHGoBiuj1KfCiE0R0ZQDtoODFa++V8VEKS9z6wjmKxdnkFq2BV4fjxSgNHKsZFmVVAJUtagGK6PUp8Op9ZOBTguA9t5eA0vC5gMkhryRtGThBgveUn7KwzBp4TXO8Zu7SCouGG7UwV2u66tsG72/fxGuXf3QO/82SNdt/ai/e4t5TfkquzBJ4zXK8GaZcnUYO8McTlKb0xwreDVcI8O7d5R+9hf9myZo/foUE7y6/Dovgymfu6WGTHK/5bpdh+xf5xj/K8N54bngvVsNX/KMmzg1Pa/zcCYLJU34dvh7qHU54zXG8CcAcdDH/5ATcAme6+eMF7xUSvOfGRynDJx36ovnwQs+cE17Qc+fg8vUEj4xCtziFz4VnQ4O9FHol8o1/tD3vid9itevo+JD58M45ugtv8rdX9MAL3TYfvKDjxQt7BUh0ix1cy3EQATMDux9rz0uEN3BNwAsue+aFFwqZccI8+YxcbHosMYHZ98Jul4ndjzG8m87tOoHVKX9gyMwlZWF9wX8Kb/LEuXF+eMElXJzwJjP3JmrLbHICeVLCkcK0DB2Vp2BiVz+82ZpZAvzAkGrALni37Nz1J6x+5w8MMfUfl7b4f4c3+aednfzwwoN8LnjZcwTQA87IzmOolkl1v8moa2AcNpJvnFBAu+QYv1ScaoAPXvYBKw3ex4+e2oXV6/4uC+B9wf863uSuozo8L/xm88ALLvgnCEi5JrFPBKcQo19UxOygbeSIiHzjhAJAqI+1RzXABy/pXrTvMDXmJcMbGCog2Ypq4xz27Owc0+GF6eOBl93xQs4JOUrDVc7FzTbkoJrJZN7zRr5xUoE8alU2A7bBW0aA91QZ44DtztHRIeaEsOnwwuM1Hng5HC8Ug4KbLCnKzEaEDznIiJAjx0a+cVIBYAkz7nWhGrANXv/rv8NK9rws8L4QCARCP2QoqGiOfyfBZFkfN7wIhDjg5ZgVg8c0CPBS09Bps7DygPAXk2LjOVWRfOPEAlrjuPEh1YB98JJJGlpJshXWxr7Ozr7RMXrBsJ4kvi864EVkuqD+A8ZVM93C4XiLYW8Ibr8oDqcW0N40UiRKZnI2GvM8rqkN8o0TCwCvPcYs1YBt8HYefR2vsj6GaGDDT/x+//joGGtGOODfibe40x94kLGdqBAEwF2ck+LQ3HhEybjJtLS0tDxao0B/Js6EBRkphJfCofCbhCmSyLnRmHqN+ALAm4tJb1AN2AWvRIZ3PERH6cv+sqNlnV2s8M6mwNvFu5oCEfIiuzg5IRXbLWgBbwVqXe3MY3MACQVy/teRgvmrI513URD1xgkFtLBgNvtTDdgGb1/ZTrzKKkY/T7Il6/GKsqM7OeDd2OcnW+SFFzzRLdp/SXkJwAA/OhXGBC/4ViCzBeEOdaSgolScbyUohbYAEhaVLUIBpmwZ1YBt8H6WgtJYPrnrNvzEf3TnzqPs8H6V/Lr0hRaytYO5JVX/yV2amQ6MocP+kAleIJZGf1olqbg4MxfbnNrbMyhVz9EkRuAF7hF9i/EL75dJ8B71B8YoLM3pPLqTC94HOknw+vt4V1MgJ3ej8CoJVi2/aSmM8AJuE7MbJ4niKzNyWbPButA1eDI6MOJEXgGpPqqV2MH7QmfZUbz8gSHy7MPjAb9cuaxzdGwWsWBE87toBimuHhQy16qGV3mkGsIyQHfM1LD+LZk5LOGDTnSNfpNCG3ojs2XE+orsgndLRdn/4vVSX4gY9N7a1alUZ4d3Y+Algj05dmZqZkbIxQUAvPK/sM62RgX84Bs6oZMePjiYXiiUKA2jekYl4BVF/YwQ6yuyC94b+14qw8vfNzpWSDD2wHRtfwUrvF+h2VvB1ExU6LW4MLzFxQ7s/CxTw9zwq5SUzRL6OvKy+Ydrhr8GRM+WketLNsK7IUCEqTMwthRva0ug088H7/zRCj/B3kt9Ic4tbKhcAxpeTvcLHPNIPTMSp4yEPI6cQ2IKmCGhir3xYhRZ9GwZub5kI7zSk50EmMpe6uu+CWvq1q4IiczwbgyQzQVYpvTUQqdLMfDK0S9j6ArOvOn6FlNSdgrP2p3INfIBzNc4RBY9W0auL9kJ75zSl0gqDeGpfCDwaqRmacjJBO8DfZ0kaxVdY2zL2CJCzVCQ4JVTskxkgMM17h/0tHQejwsqMS+bNQbmaxiGT5stQyzrpdS3E94tNJyGcFHoV7sqosUY4Z09SnlVem5jaEUlzA4eArzUxbVhJSIaZFVSAm7+jE+p6TkMvxOcbUL1gfcf7ht6R9gG741dr5Jw6uwLYYZss7tUIDLCOydAM8Y3XsPt4FH6j3BoGDUvxXvEf7ReQi7TtERibg5bRJGYl025VpZWVHcON6C9YDirQqtvI7zSKNn1lnYNbUXZmf/1QKeaOhZ4Z4+WUmyNzaO3gr1ZqP+S8BMEFHw5v62ifNA8ndXfRqZNktIZK2SmZON33bM1Eb1vuAFatoxW3054vxIgAiWvdkRx+TeBCnUhJnjn0EyFOENeHJsz/ZeD3WRGwpfrpGkZW/ZZ4FRNPiw5gXn9Q2Jeeg41DUs3T+1FaGhKrW8jvI+f/v3/kFTR1Y34Lb/xdKmqzqv7WeDdpKkDqyLQzRfyYncyqPsPt2qWhC/b8U/JaQnpeTzRrSMFtRUzKZ1jAURqSnqaFmHsjTMXALJl4CVS69sI74ZQoOJVgir2h+Af8/lf11SqCHTT4QXqwNrfM4aMULDCBwXaGlj3i8EXnKBAzprybuhOJeUPcnJ5XgLNVZNunK0AMHIA43tqfbt2D8t6oIvMVEVX923gmO2FrlJNERZ4v6qtA9sJhJxcS8pUfUZbN44lLQ/1SwzmMJB5MlyLKKUyfAAzmR1gk+GlZMvo9e064lSOG3rIUL26//TYAm0zm3r2A9zR4Z3ds5/8kpR2DW2jtIG9GSCA4Ok/eK8jk+NlhpcF3IgYATYbXnK2jF7fRng3dHeVVpBUGgg5NZPE828HapR2DdHghepACoT4ogZVl6VyfgFTIwc4HGNyvCzw0vNcCCWnUWNgs+EFf9h569sIr/RAVx8ZK5DN74AVGOD9fA/VCEPooZYqQEowAm9xcaJmHwSYasDsqiV3vINthgEn8sSy6fACB2ZxjghthXdj6MXfk/VyyLNtJom1qedloHRpSRMFvDvpNno8+GUUCKkiBUeyMXiLi1Mz8GUxM8PYtmRu9SwPA5Wclp6HJth0eImb4On17YR3/u2n95cStf9099hNkVXi828vAYvvP+11E+G9s5vBhJNrhkLV3ym8H85GKLpih9HxIuHNTEknneGrQ0iCzYdXuzhPmy2j17cTXtktkslS6F02Te9XQhCHNHgf6z4doFgIhDxunk0U6pRghgnwRmMHcMSEc6I6n4guZWZrpkHMhxdYRJfNV99WeDcM0fxiaSBK72PdJQi2ifDeQmd3f0m3k2e4pu7tVMhd0voPveBLOewDnPjAnjM6/XdHam56WpI533nBKrxWIzqTZz68pGwZvb6t8ErrqK5XoVeOewtv74FBJ8N7J53d0kCP103as0Hq7ARueNFnihY7sqVk8DcaG70mpuam56RhDJgs1f1kpGVrd5SSb5wVXiA9mMNV3154Zw/1BPZTFDgd8t42S1oX6oLLyehlYbpl/rpuhsZ7hpwLMA3QuisRDlSp8EpSBnrzG7CBgvnbKjGDFxK1IFtL+GwZvT4XvKRvdGv9PyO80rruHS++TFPJjlDTd3pQ5V7Ew7vhhyGGpne4xnw4+lFSB6bZDPACMIS7nGE+gPmjVtc8vPhsGb2+fWsbFM3yhEqohL38YklJCRJEAryfdzGw+2KPl8vxqgfHCl988EZ2aiE+AwGI8ulUXMearRjAi8+W0evbDK+0onsHHV4SfBh4N3p7GN6KHd1jPo7FkBlq6NLh7oP6LwPz52TKt1QY1vEiO9ZsxQJe7JGR9Pp2w1swFip5UbdKQh7Mr/6dTT30dktCHvd1pJsi3EX4h50CL/Bn1W4BcuzAPrl77cOLPTKSXt9ueKWt3h4r4F3HAm9Pk7OII9WgyainI7oP6j9gg7xmFEY4XZrjoJFrH17sB1bo9W2Hd/5tBlwvHt4VXnqzJaExH+F0CFCaoGF6REWBF4gOtCtWsV+7pn6zGtuxxSmIM8O4RL4ftagFWVvCbYKn17cdXmmel8FHcsO73EOFt6TH67yPdEuke0hHdR/Uf0BsAK4KxwzcmEdr1O/D8ot8P2pRCzK3pE0e5rHXtx9eaV33T/9Lp0qqcfAWOqmt7nC18qTJNDcYSWWR4QU3GUNtIp0v+2jtIwKvXgPxAG9Bu6unRJ92uNpx/G31uHYQ29zh8rhXMfThtLQLpyO/bWR4c4h/VYRyvjwffxfw4ovEAl7pMS+FMwKAWHgLnU3biVWrvc772FfkaKdvo86RDC8wbYaEEnVECceXTQS8+CIxgVda11Stj14CvBTXu2M7X4o3D30DZHiB9QpIspAZX/ZP+Ql48UViA2/hbd1EL6kLXrLr7elud3NkGrQ5r5luIsILHmiGahj++LYi5i+iCXjxRWIDr7SwXR+9JHilW9rxrldmdzW57/C9pJqAJ8ILRA2o7G0GdqKYMeUg4MUXiRG80vKx7u06IgcivPnbvJhoZMf27nY3R8ALRLyq2JUILxA1oM4dI8yzYRf0aiTgxReJFbzS6rGm0A5u9XSPdeCzXcud6DZ7qpva3UVcBzwlqTxkomo4RYIXjAgQozBwIaS2MZZhm4AXXyRm8OYva+/mp5cMb/42j6sHza6zg/PLVQnoqyfBC05+wY1iAt6IMhnoFfDii8QMXmn+Nh30kuFFu94wu58k3QtK0ayA5kA4ArzgESLwTeMD3mk56EkHAS++SOzglQq2tbdU/5RP21taSfDmL253bQca3C7HDB0csxMRTYeniRp3SIAXyIHB82bJYMALs0ynV8CLLxJDeKWCbR5eeinwSvOcTUCLYXZ51kFGNL10T3vteHjBPBk8XIMyvGlpEL4O2unSAl58kVjCq8P30uCVbgJdr252p3EETpHFwwtQBe/rgb4nlC5JSfBhHxR6Bbz4IjGFl59eKrwrnV5NgwbYVXADx1BYeMGxGDQ1DA3WlDQwFErQ6BXw4ovEFl6FXjBINQSv7Ho15Q2wK0kpUAyKhZfmeJPACGH6tUBsECLSK+DFF4kxvFLB4tYm13ZmVTc5KfDKrjfamkv2u9x5hhklQ5O2rPCCAIKfW1MNzfjoFfDii8QaXjnf2+SqNg9eJeqdLmyUXYQY4QW/yQ9HB6rXAt4fRKBXwIsvYvGhIwjlP9jqbWGllwHeLGdTuLXqFm8r57waXYzwAtEGzK5mJQP8yQs8vQJefJHYwytPLXhYnS8DvNIKj/wuVLtaPE7fDTxH6rGIDV7wQzdQZADMvnHQK+DFF7EDXmnWYqenhQlfFnhnOT1NLS1NnlZdUxMUMcELBg0Qu1C3s9Mr4MUXsQVeKX+Bmy12YIFXWuBsbW9vdfuKOJczsIgFXjBFAbGLWMPATK+AF1/EHnglaZ7PyTJwY4I3y+d2u30dC8wOGSRGeAHsIHYTUetvYHrRM8XAA8okfbCJRbj7gaUp6EA0zdwSi4FrCV6pcIG71UPNmjHBKy28r6OjiO/7rKxigBeYnoDYxaxfgOhFl4uTQ0cMtcRi4JqCV5LmFTlbvRTnywavJBWYnGSIig4vMBZjZRdFL+osEgEvvoiN8Er51/loeQdWeC0TFV7d7CLoRa3vFfDii9gJryQVKLEDIfEQ9/DS2MVEsmHB9MJlBLz4IvbCK0lZC9zOdi8W33iHF0jwcq5bgBeewbsxBLz4Ikmkw9AJAn/g9MIrSVmr3U6s+41veIHFuMkwaLTVuhDt0J5iAa8RE2zSD68kFW5dLLtfFL8ubxzDC5wcwr3aUULRCy4NEvAaMcEmI/BKUv7KZW5na7u3pcVVrQa4Op7hBVJk8Dpzhh1q8N54sJKA14gJNhmDV3a/88L8yg7YVV2tMBxeJmZVFoxJWHjTAcgQO3yYjnSC/DWQcsg1OitBFLgoQy0BL1YLiz4JzogVzlvtkwH2yAS3tLhcLU0ep4/thN3C624w72ZUon1QJSJ4woyNXcSqdRJQsRTfIIj58DVV31LrJxs1wSbtwI/hPIL8GzqKlsITullLVxf5fG6n09na2trqdPuYzl/IWt1h8jpeISGC8u/r8BVdh4oJ8rOWrlpwQ4eiBQwR78plHR0dHIfqCQkZVUGRz+fzLVuJXU9TkJVFX2tTsGqxz9dhYN+akJAOFRT53E6327dV91LGwseWyQvKfIJdoVgrSw5uW1udzm16+C18bJlTltvXYfoGCiEhmj7pU5ILnvZWp3v1PJ6c2MJbbpKrKjUFu0J2aKXb6fG2tLQ0eT3tTudNTADnL1y+ztnq8TY1ydVaBbtCNmmlvB9InpRwKSQ6ne4Vq+bNwtFYsHD5g7LHnZ7JcLV42y3YdCkkxKaV0e1A0wC3t8px7IoVq5YvXzgronnLlz+44ianEmSEwZ2egBPsCtkohd7IWobqanlercnr9bS3K7MUiuT/aveEJ95cM6sfqi3Z7C4kxK6C29q1e9kUhF0tWrlcypIHdTGZ3dWCXSE7VbCtHbMTszoi1N9kdkV+V8hmFSxr5Ti/bHqlr7xox/xDRoSEOJW/zOlhPr9se+RcMrEWRygutNVN3QavcbvtTl+RravUhYSimudzMh8e6ZLd7g22LlIXElIpazFj6CDvDfJ1XCfSDELxo/wFTMeXKUeZWnS4k5CQXi2lnx05PasmQgaheFPBMrLzrZYTZG6xa0IoLrVcOTsSja+8EKfVLdyuULyqcHUYX4jf6TVkItoVimNlIU7fq652NXlbnb4OxIZjIaE4Uvj0vcjpI8pKM3mtr69oVaF4TELxrqyti8Nrd2V5ZXLdvvvmCa8rdE0of6V8/F5YbrfvhlVimCZ0Lalg4dJVCxasXrqU4fwGISEzJEnS/wNPjylCwxf4CwAAAABJRU5ErkJggg=="},662:function(t,e,i){t.exports=i.p+"static/time/img/logo_pc@2x.90583da.png"},663:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i(43),o=i.n(a),n=i(65),s=i(223),r=i(625);e.default={props:{theme:{type:String,default:"white"},showMenu:{type:Boolean,default:!0},loginUser:{type:Object,default:null},wrapperClass:{type:String,default:""},isFixed:{type:Boolean,default:!1},showSearch:{type:Boolean,default:!0}},data:function(){return{isMenuMobileShow:!1,menu:[{link:"https://time.geekbang.org/",name:"讲堂",alias:"Index"},{link:"https://time.geekbang.org/college/algorithm/100034301?utm_source=time_web&utm_medium=menu&utm_term=timewebmenu",name:"算法训练营"},{link:"https://service.geekbang.org/?utm_source=geektimeWeb&utm_medium=menu&utm_campaign=qiyezhanghao",name:"企业服务"},{link:"https://www.infoq.cn/hotlist?tag=day&utm_source=geektime&utm_medium=menu",name:"热点资讯"},{link:"https://h5.youzan.com/v2/feature/TJe4bYhxyP?dc_ps=2293231415741009926.200001",name:"极客商城"},{link:"https://time.geekbang.org/download",name:"客户端下载",alias:"Download"},{link:"https://time.geekbang.org/service/exchange",name:"兑换中心",alias:"Code"}],couldReply:!1,showDropdown:!1,isShowSearch:!1,placeholder:"搜索课程、课程内容等",hotWords:"",query:""}},computed:{routerName:function(){return this.$route.name}},watch:{isMenuMobileShow:function(t){t?n.a.fixedBody.open():n.a.fixedBody.close()}},created:function(){this.$store.state.loginUser&&this.getUserData(),this.requestHotWords(),document.addEventListener("scroll",this.scrollHandler)},mounted:function(){document.body.addEventListener("click",this.closeDropdown)},beforeDestroy:function(){document.removeEventListener("scroll",this.scrollHandler)},methods:{getUserData:function(){var t=this;s.a.getUserData().then(function(e){t.couldReply=e.could_reply}).catch(function(t){console.log("get user type error: ",t)})},dropdownHandler:function(){this.showDropdown=!this.showDropdown},closeDropdown:function(t){this.checkParentsByClassName(t.target,"profile")||(this.showDropdown=!1)},checkParentsByClassName:function(t,e){for(var i=n.a.getParents(t),a=0;a-1)},jump:function(t){this.$ga.sendEvent("导航栏跳转","导航栏跳转成功","url:"+t.link),window.open(t.link)},login:function(){window.location.href="//account.geekbang.org/signin?redirect="+encodeURIComponent(window.location.href)},logout:function(){window.location.href="//account.geekbang.org/logout?redirect="+encodeURIComponent(window.location.href)},signup:function(){window.location.href="//account.geekbang.org/signup?redirect="+encodeURIComponent(window.location.href)},search:function(){this.isShowSearch?this.doSearch():(this.openSearch(),this.$refs.searchInput.focus())},openSearch:function(){this.isShowSearch=!0},closeSearch:function(){this.isShowSearch=!1,this.query="",this.$refs.searchInput&&this.$refs.searchInput.blur()},doSearch:function(t){this.query||this.hotWords===this.placeholder||(this.query=this.hotWords),this.query.trim()&&window.open("/search?q="+this.query)},blur:function(){var t=this;setTimeout(function(){t.isShowSearch&&t.closeSearch()},200)},scrollHandler:function(){this.closeSearch()},requestHotWords:function(){var t=this;return new o.a(function(e,i){r.a.getHotWords().then(function(i){t.hotWords=i.search_bar||t.placeholder,e(i)})})}}}},664:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i(43),o=i.n(a),n=i(221),s=i.n(n),r=i(99),l=i.n(r),c=i(65),d=i(218),p=i(219),h=i(625);e.default={props:{customStyle:{type:Object,default:function(){return{}}},allshow:{type:Boolean,default:!1},routeParams:{type:Object,default:function(){return{}}}},data:function(){return{isShowDropPage:!1,params:null,defaultPlaceholder:"搜索课程、课程内容、每日一课等",placeholder:"",hotWords:""}},watch:{isShowDropPage:function(t){t?c.a.fixedBody.open():c.a.fixedBody.close()}},computed:l()({},i.i(p.a)({loginUser:"loginUser"}),{isShow:function(){return!c.a.isInApp()&&!this.$route.query.code},isPC:function(){return c.a.isPC()},routeRelatedData:function(){var t=this.params;return this.$route.query.utm_term&&(t.utm_term=this.$route.query.utm_term),{jump:this.$route.meta.appLink,data:t}},urlScheme:function(){var t=this,e="";if(this.$route.meta.urlscheme){var i=this.$route.meta.urlscheme.match(/{{\s*[\w]+\s*}}/gi);e=this.$route.meta.urlscheme,i&&i.forEach(function(i){e=e.replace(i,t.$route.params[i.match(/[\w]+/)[0]])}),this.$route.query.utm_term&&(e=c.a.addUrlParam(e,"utm_term",this.$route.query.utm_term)),this.routeParams.aid&&(e=c.a.addUrlParam(e,"aid",this.routeParams.aid),e=c.a.addUrlParam(e,"title",this.routeParams.title))}return e},appLink:function(){if(c.a.isPC())return"https://time.geekbang.org/download";if(c.a.isIOS()){var t=l()({},this.routeRelatedData);return this.urlScheme&&(t.urlscheme=this.urlScheme),"https://static001.geekbang.org/misc/download/zeus.html?params="+encodeURIComponent(s()(t))}var e=this.$route.meta.urlscheme?"views?urlscheme="+encodeURIComponent(this.urlScheme):"tab=1",i="geektime://time.geekbang.org:80/main?"+encodeURIComponent(e);return c.a.isInWeixin()?d.a.appstoreUrl+"&android_schema="+i:i}}),created:function(){this.params=this.$route.params||this.$route.query,this.requestHotWords()},methods:{goApp:function(){window.location.href=this.appLink},goArithmeticTraining:function(){window.location.href="https://time.geekbang.org/college/algorithm/100034301?utm_source=time_web&utm_medium=menu&utm_term=timewebmenu_h5"},goFrontEndTraining:function(){window.location.href="https://time.geekbang.org/training/100028201?utm_source=time_web&utm_medium=menu"},goLogin:function(){window.location.href="//account.geekbang.org/signin?redirect="+encodeURIComponent(window.location.href)},goAccount:function(){window.location.href="//account.geekbang.org/dashboard?redirect="+encodeURIComponent(window.location.href)},goGift:function(){window.location.href="//time.geekbang.org/service/exchange"},goIndex:function(){window.location.href="//time.geekbang.org"},goDownload:function(){window.location.href="//time.geekbang.org/download"},goService:function(){window.open("https://service.geekbang.org/")},goMall:function(){window.open("https://h5.youzan.com/v2/feature/TJe4bYhxyP?dc_ps=2293231415741009926.200001")},goInfoQ:function(){window.open("https://www.infoq.cn/?utm_source=geektime&utm_medium=menu")},goChannel:function(){window.open("https://jinshuju.net/f/7y04KD")},goRecomandAuthor:function(){window.open("https://jinshuju.net/f/MANYIf")},goHome:function(){window.location.href="//time.geekbang.org"},focus:function(){this.$router.push("/search?hotwords="+this.hotWords)},requestHotWords:function(){var t=this;return new o.a(function(e,i){h.a.getHotWords().then(function(e){t.hotWords=e.search_bar,t.placeholder=t.hotWords||t.defaultPlaceholder})})}}}},665:function(t,e,i){var a=i(620);e=t.exports=i(571)(!1),e.push([t.i,"._352wsGxH_0{height:63px}.Wz6esVdU_0{width:100%;height:63px;background:#fff;position:fixed;top:0;left:0;z-index:20;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 13px;-webkit-box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38);box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38)}._28dOln0j_0{height:40px;width:110px;background:url("+a(i(662))+") no-repeat 0;background-size:110px;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;cursor:pointer}._1k9ecCKw_0{width:50px;height:30px;padding-top:2px;padding-left:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:14px;color:#888;margin-left:-10px;cursor:pointer;background:transparent}._1U_jCCZU_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}._3oCJiu8W_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 13px;background:#fbf5ee;border-radius:15px;height:30px}._7Xrmrbox_0,.gBs4U5qC_0,.JjI7sqpW_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;color:#fa8919;font-size:13px;font-weight:500;cursor:pointer}.JjI7sqpW_0{font-size:14px}._3lsV2-l9_0{height:13px;width:1px;background:#fa8919;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:10px;margin-right:10px}._1UaW_Eq1_0{position:fixed;top:0;left:0;right:0;bottom:0;z-index:21;background:#fff;overflow:hidden;-webkit-transform:translateY(-20px);transform:translateY(-20px);opacity:0;visibility:hidden;-webkit-transition:all .3s ease;transition:all .3s ease}._1UaW_Eq1_0._2mIjHHvm_0{-webkit-transform:translateY(0);transform:translateY(0);opacity:1;visibility:visible}._33xATrPo_0{width:100%;height:calc(100% - 63px);overflow-x:hidden;--webkit-overflow-scrolling:touch}._1qHJ5OLn_0{height:63px;-ms-flex-align:center;padding-left:15px;padding-right:15px;-webkit-box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38);box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38)}._1qHJ5OLn_0,._2FYmyQEJ_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center}._2FYmyQEJ_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:35px;-ms-flex-align:center;background:#f6f7fb;border-radius:20px;padding-left:16px;padding-right:20px}._1CLulytQ_0{font-size:14px;color:#b2b2b2}._1reF0JJk_0{height:20px;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-left:10px}._1reF0JJk_0 input{background:transparent;border:0;color:#353535;height:20px;line-height:20px;font-size:14px;font-weight:400;width:100%;vertical-align:top;outline:none;outline-offset:0}._33xQ4nNG_0{font-size:16px;font-weight:400;color:#b2b2b2;height:30px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:20px;margin-right:10px}._1y_WRr3L_0{font-size:18px}._1y_WRr3L_0 ._2HnUZhdg_0{color:#888;font-weight:400;padding-left:28px;height:63px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:.5px solid #e8e8e8}._1y_WRr3L_0 ._2HnUZhdg_0._1r7t-t9P_0{color:#fa8919;font-weight:500}._3IeMxVb7_0{margin-top:60px;padding-bottom:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-sizing:border-box;box-sizing:border-box}._3IeMxVb7_0 ._2HnUZhdg_0{position:relative;padding-top:46px;font-size:13px;color:#888}._3IeMxVb7_0 ._339_Pvt6_0{position:absolute;color:#c3c3c3;height:46px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:36px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;top:0;left:0}",""]),e.locals={shim:"_352wsGxH_0",main:"Wz6esVdU_0",logo:"_28dOln0j_0",dropMenu:"_1k9ecCKw_0",space:"_1U_jCCZU_0",btns:"_3oCJiu8W_0",openApp:"_7Xrmrbox_0",login:"gBs4U5qC_0",user:"JjI7sqpW_0",split:"_3lsV2-l9_0",dropPage:"_1UaW_Eq1_0",on:"_2mIjHHvm_0",dropPageWrapper:"_33xATrPo_0",top:"_1qHJ5OLn_0",search:"_2FYmyQEJ_0",searchIcon:"_1CLulytQ_0",inputWrap:"_1reF0JJk_0",close:"_33xQ4nNG_0",menus:"_1y_WRr3L_0",item:"_2HnUZhdg_0",activedMenu:"_1r7t-t9P_0",bottomMenus:"_3IeMxVb7_0",icon:"_339_Pvt6_0"}},666:function(t,e,i){var a=i(620);e=t.exports=i(571)(!1),e.push([t.i,'@font-face{font-family:gc-iconfont;src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot");src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot?#iefix") format("embedded-opentype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.woff") format("woff"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.ttf") format("truetype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.svg#gc-iconfont") format("svg")}.gc-icon[data-v-702109a0]{font-family:gc-iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.common-header[data-v-702109a0]{height:65px;background:#fff;font-family:Avenir,Helvetica,Arial,sans-serif!important;border-bottom:1px solid #eaeaea}.common-header.fixed[data-v-702109a0]{position:fixed;top:0;left:0;right:0;z-index:10000}.common-header .common-header-wrapper[data-v-702109a0]{max-width:1080px;width:94vw;height:100%;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative}.common-header .common-header-wrapper .common-logo[data-v-702109a0]{width:151px;height:65px;background-image:url('+a(i(661))+');background-repeat:no-repeat;background-position:50%;background-size:contain}.common-header .common-header-wrapper .info[data-v-702109a0]{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .info .menu[data-v-702109a0]{opacity:1;-webkit-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.common-header .common-header-wrapper .info .menu.hide[data-v-702109a0]{opacity:0}.common-header .common-header-wrapper .info .menu a[data-v-702109a0]{position:relative;padding:8px 12px;font-weight:400;-webkit-transition:color .2s ease;transition:color .2s ease;white-space:nowrap}.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:link,.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:visited{color:#353535}.common-header .common-header-wrapper .info .menu a.on[data-v-702109a0],.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:hover{color:#fa8919}.common-header .common-header-wrapper .info .menu a img[data-v-702109a0]{position:absolute;width:20px;height:12px;left:calc(100% - 18px);top:0}.common-header .common-header-wrapper .info .search[data-v-702109a0]{position:absolute;right:15px;bottom:-1px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:4px}.common-header .common-header-wrapper .info .search .close[data-v-702109a0]{margin-right:10px;font-size:12px;font-weight:500;color:#e2e2e2;cursor:pointer}.common-header .common-header-wrapper .info .search .inputWrap[data-v-702109a0]{width:0;border-bottom:1px solid #d8d8d8;overflow:hidden;-webkit-transition:width .3s;transition:width .3s}.common-header .common-header-wrapper .info .search .inputWrap.open[data-v-702109a0]{width:300px}.common-header .common-header-wrapper .info .search .input[data-v-702109a0]{width:100%;font-size:12px;font-weight:400;color:#353535;outline:none;border:none;background:transparent}.common-header .common-header-wrapper .info .search .input[data-v-702109a0]::-webkit-input-placeholder{color:#b2b2b2}.common-header .common-header-wrapper .info .search .search-btn[data-v-702109a0]{position:relative;width:32px;height:32px;line-height:32px;color:#404040;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.common-header .common-header-wrapper .info .search .search-btn img[data-v-702109a0]{position:absolute;top:0;right:-10px;width:20px;height:12px}.common-header .common-header-wrapper .userinfo[data-v-702109a0]{height:65px;line-height:100%}.common-header .common-header-wrapper .userinfo .control[data-v-702109a0],.common-header .common-header-wrapper .userinfo[data-v-702109a0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .userinfo .control[data-v-702109a0]{margin-top:2px}.common-header .common-header-wrapper .userinfo .control a[data-v-702109a0]{font-size:16px;color:#888;display:block;height:65px;line-height:65px;font-weight:400;cursor:pointer}.common-header .common-header-wrapper .userinfo .control a.mobile[data-v-702109a0]{display:none}.common-header .common-header-wrapper .userinfo .control a[data-v-702109a0]:first-child:after{content:"|";margin-left:8px;margin-right:8px}.common-header .common-header-wrapper .userinfo .profile[data-v-702109a0]{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown[data-v-702109a0]{visibility:hidden;position:absolute;width:152px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 3px 10px 4px rgba(139,162,192,.13);box-shadow:0 3px 10px 4px rgba(139,162,192,.13);top:70px;right:-16px;border-radius:6px;z-index:200000;-webkit-transition:all .2s ease;transition:all .2s ease}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .arrow[data-v-702109a0]{-webkit-box-shadow:0 0 8px 3px rgba(139,162,192,.13);box-shadow:0 0 8px 3px rgba(139,162,192,.13);cursor:pointer;width:10px;height:10px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;right:32px;top:-5px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]{background:#fff;height:0;font-size:14px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:20px;padding-right:37px;color:#888;cursor:pointer;position:relative;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box;font-weight:300;overflow:hidden;-webkit-transition:height .2s ease;transition:height .2s ease}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.exit[data-v-702109a0]{border-top:1px solid #e9e9e9;border-radius:0 0 6px 6px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info[data-v-702109a0]{height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e9e9e9;border-radius:6px 6px 0 0}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info .username[data-v-702109a0]{width:110%;font-size:14px;color:#404040;font-weight:400;line-height:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info .cellphone[data-v-702109a0]{margin-top:7px;line-height:1em;font-size:12px;color:#b2b2b2;font-weight:400}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]:hover{background:#f6f7fb}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item .gc-icon[data-v-702109a0]{color:#888;font-size:16px;margin-right:13px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item .iconfont[data-v-702109a0]{display:inline-block;width:14px;text-align:center;margin-left:1px;font-size:13px;color:#999;margin-right:13px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.router-link-active[data-v-702109a0]{color:#ff5a05}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]:last-child{border-bottom:none}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show[data-v-702109a0]{visibility:visible}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show .navbar-item[data-v-702109a0]{height:48px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show .navbar-item.user-info[data-v-702109a0]{height:64px}.common-header .common-header-wrapper .userinfo i.icon-profile[data-v-702109a0]{color:#404040;font-size:17px;display:block;margin-top:-2px;margin-right:8px}.common-header.opacity[data-v-702109a0]{background:transparent;border-bottom:none}.common-header.black[data-v-702109a0]{background:#1e1e1e;border-bottom:none}.common-header.black .common-header-wrapper .common-logo[data-v-702109a0]{background-image:url(https://static001.geekbang.org/static/live/img/logo.bb6fd3f.png)}.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:link,.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:visited{color:#fff}.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:hover{color:#ff5a05}.common-header.black .common-header-wrapper .info .profile .profile-dropdown[data-v-702109a0]{background:#1e1e1e}.common-header.black .common-header-wrapper .info .profile .profile-dropdown .arrow[data-v-702109a0]{background-color:#1e1e1e}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]{border-bottom:1px solid #353535}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:link,.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:visited{color:#fff}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:hover{color:#ff5a05;background:#353535}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a .gc-icon[data-v-702109a0]{color:#888;font-size:20px}.fixed-rect[data-v-702109a0]{width:100%;height:66px}',""])},667:function(t,e,i){var a=i(665);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("1f3b662a",a,!0,{})},668:function(t,e,i){var a=i(666);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("493205de",a,!0,{})},671:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAYCAYAAACIhL/AAAADYGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB0aWZmOk9yaWVudGF0aW9uPSI4IgogICB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI3QjM4OTU3MkMzMTExRTlCNzY0REIyQzU3QTQxRURCIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI3QjM4OTU2MkMzMTExRTlCNzY0REIyQzU3QTQxRURCIgogICB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+CiAgIDx4bXBNTTpEZXJpdmVkRnJvbQogICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyN0IzODk1NDJDMzExMUU5Qjc2NERCMkM1N0E0MUVEQiIKICAgIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjdCMzg5NTUyQzMxMTFFOUI3NjREQjJDNTdBNDFFREIiLz4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz5yai+2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsFJREFUeNrMV01IVFEU/hzGQOzXIKEMMqKNOBEuzCHImqggc1FKUa0ialr0SxTRolZFRVFBMQ7UKpPo17EiibHaWFIgEoVUoKQJGVlmJdjCvsO9j5k3770pLjIzH3xzmXffu/d7551z7jl545vz4YE8MkSuJ6vIeeR0TAy+k73kc/IOGSfHXUV4CFxOniUXIzPoJA+SbakTvpT/ojaib8yUOOi94nrvfC+Bk8jb5E5kD7L3Xa3FIfA8uQ7Zx1ryQqrAVeQu5A7C5GpLoETrGeQeTos2P3+qyYBtatpCvkMUeNVK1z3pfHRPC/Cm3T5XewqoWAkUFAKjv4Dul8DDc8Dwu8QzBVO85YyOABdtHiaalonADY6bSxZxOgh87HZfLLAU+D2SeJmjMWDOfODDa6D/PTBzNlCzDQjW0A5bgb6n6pqIFxRMBopmAUODFPZTC3QVX+fXSdgcB5q4WTFwYgutejNxfS4/zKFrirtLgGMVdmtv3A88bgRih9OtXuXTJ4QZyuqBBeX81Dfs4gRitXuXlKVCR0x3KBWBRcYCAyE1iq+5wfLRsqDpDjP8aafFj4ReKJyqRisQ3CB+li44/gEROORpxQ5Gce9b53Xxn/+FFRhm+ObXVYW7wC+f3J24docaB/vUWMm82hFx3icRLgK/DpgK7PHpQ9oMz66onFe9yX2+/rgaW6OmO8RFYLOxQPG9WFTlTEnEEtVWitl+nUVbHfDklopoMzTLJ+aRAGZYlBstYbmAfPZKOT4bE3P3rwJNYVNxoqndKlhl5UeOHNff5R6hYqEfA8458cXiUuBzD4+6tvTRLeun5k471ohzJFfUl3OooolYWpLrwX1kSw6Ie0DudStYx3Th0JBFcQ26SRvz6kn+6GJxhW5kMoVO3UGGk8Wl6+qS206x6hI5uCX1TpCgYUnC5AvdB3m2nX8FGADx9bC5TrF3fAAAAABJRU5ErkJggg=="},672:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAYCAYAAACMcW/9AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAy9JREFUSInFl11IVEEUx38uWxBBpg8FWZBiYsi65QebPphmZZD1kEpoPonk9hAVFYEEEURh0NdTW9RDkFmohX1AQmaFaEK6qSzVGhlYQT5YBhHYQz2cnfbevXfWJWT3B8vMnHN25n/vmbkzk/SnbgEakoByYBdQBKwGluqC/5PvwEdgALgL9AB/bMVohJYB54D18yxsLvzAEeBppMMR0V4A+EKB8RZJaMyekAbTGzQKXQh0Ak3x06WlCbiHaALMQi8CO+KtKArbgUuqoYRuBfYlRE50vEAFyGJKAl4DuZawnBr4NAIzQWsXOTUQaA/XdQTaYVUp/Phi7cfYhyI5C5asgMlnyjIKrHMCpVqRza3wfgxO5Jt9O1tg9yE4HWo3t+qF3imAnXthfARaSsP2Wh9UNsDDcmjzhu3eq7DGDY0pypILbHQCVfpRgEyXdGrszI7eDhi4Z7UH2mGtRwY3kl1oLhVr3PJQZqqdyMdcz+cP8uR9t43psDI1aU2j4s0g5BabU53pgukpKRU5NbBoscSbKXIgO46evi5J/35f1LCoPL8uZW65lJ5Qdm6eMreVX8WHSXcAqXMOdO0wpC6Hxlv6mC174Oxb8+/kkPhmgpIZlWZXibzNQZ+UrhKxZxdKnHXxpjjnFAmS8vtXZQHZzUOA6a8w+c5s+/kjXA8OQ1m11LPyYNwv9XG/tEGmQW+HbfdOYJpY3ur9Y5C/GbwXoP+h1T/0RGJ0jL0QoR4vpGVA9w2xB/rBUxFOv/2L+OZATi+xcb5WJntxZcx/+cdgaI7XH5fyVae5rD8Ov37qFuSEEzkE5MU02EwQ2s5Cw0mrb9kq+w+/ccMY7ZfVb5yHav6mZYjfnh4n0AUcjUkoQM8ZKKiQAY2UVYfnoJHeDrhWJ3X1mQoOm2OCwyLU+llSdKktdARwWdx2W5ydL9oWGrkF223LyVmw0q0bawxwq4NzBfBYP1pC2QZ0q9NTN3A5gWJ0+BBtpvPoQeBBQuTY8wg4oBpGobPIAeVKvBXZcAW5VM4qQ+Sd6TdyWN2EXLTijR+5+XoxiAT9LRTC1+UqYAOQDiTPs7AZYAJ4idzXtNflv9ZX9cVjIeNoAAAAAElFTkSuQmCC"},673:function(t,e,i){function a(t){this.$style=i(679)}var o=i(22)(i(677),i(687),a,null,null);t.exports=o.exports},674:function(t,e,i){function a(t){i(668)}var o=i(22)(i(663),i(676),a,"data-v-702109a0",null);t.exports=o.exports},675:function(t,e){t.exports={render:function(){var t,e=this,i=e.$createElement,a=e._self._c||i;return e.isShow?a("div",[a("div",{class:e.$style.shim}),e._v(" "),a("div",{class:[e.$style.main],style:e.customStyle},[a("div",{class:e.$style.logo,on:{click:e.goHome}}),e._v(" "),a("div",{class:[e.$style.dropMenu,"iconfont"],on:{click:function(t){e.isShowDropPage=!0}}},[e._v("")]),e._v(" "),a("div",{class:e.$style.space}),e._v(" "),a("div",{class:e.$style.btns},[a("div",{class:e.$style.openApp,on:{click:e.goApp}},[e._v(e._s(e.isPC?"下载":"打开")+"APP")]),e._v(" "),a("div",{class:e.$style.split}),e._v(" "),e.loginUser?a("div",{class:[e.$style.user,"iconfont"],on:{click:e.goAccount}},[e._v("")]):a("div",{class:e.$style.login,on:{click:e.goLogin}},[e._v("登录")])])]),e._v(" "),a("div",{class:[e.$style.dropPage,(t={},t[e.$style.on]=e.isShowDropPage,t)]},[a("div",{class:e.$style.top},[a("div",{class:e.$style.search},[a("div",{class:[e.$style.searchIcon,"iconfont"]},[e._v("")]),e._v(" "),a("div",{class:e.$style.inputWrap},[a("input",{attrs:{type:"text",placeholder:e.placeholder},on:{focus:e.focus}})])]),e._v(" "),a("div",{class:e.$style.close,on:{click:function(t){e.isShowDropPage=!1}}},[e._v("关闭")])]),e._v(" "),a("div",{class:e.$style.dropPageWrapper},[a("div",{class:e.$style.menus},[a("div",{class:[e.$style.item,e.$style.activedMenu],on:{click:e.goIndex}},[e._v("讲堂")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goArithmeticTraining}},[e._v("算法训练营")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goService}},[e._v("企业服务")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goInfoQ}},[e._v("热点资讯")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goMall}},[e._v("极客商城")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goDownload}},[e._v("客户端下载")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goGift}},[e._v("兑换中心")])]),e._v(" "),a("div",{class:e.$style.bottomMenus},[a("div",{class:e.$style.item,on:{click:e.goChannel}},[a("span",{class:[e.$style.icon,"iconfont"]},[e._v("")]),e._v("渠道合作")]),e._v(" "),a("div",{class:e.$style.item,on:{click:e.goRecomandAuthor}},[a("span",{class:[e.$style.icon,"iconfont"]},[e._v("")]),e._v("推荐作者")])])])])]):e._e()},staticRenderFns:[]}},676:function(t,e,i){t.exports={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"common-header-container"},[a("div",{class:["common-header",t.theme,{fixed:t.isFixed}]},[a("div",{class:[t.wrapperClass,"common-header-wrapper"]},[t._t("left"),t._v(" "),a("a",{staticClass:"common-logo",attrs:{href:"https://time.geekbang.org/"}}),t._v(" "),a("div",{staticClass:"info"},[t.showMenu?a("div",{class:["menu",{hide:t.isShowSearch}]},t._l(t.menu,function(e,o){return a("a",{key:o,class:["menu-item",{on:t.routerName==e.alias}],attrs:{target:"_blank",href:e.link},on:{click:function(i){return i.preventDefault(),t.jump(e)}}},[t._v(t._s(e.name)+"\n "),"算法训练营"===e.name?a("img",{attrs:{src:i(671),alt:"hot"}}):t._e()])}),0):t._e(),t._v(" "),t.showSearch?a("div",{staticClass:"search"},[t.isShowSearch?a("div",{class:["iconfont","close"],on:{click:t.closeSearch}},[t._v("")]):t._e(),t._v(" "),a("div",{class:["inputWrap",{open:t.isShowSearch}]},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.query,expression:"query"}],ref:"searchInput",staticClass:"input",attrs:{type:"text",autocomplete:"off",maxlength:"100",placeholder:t.hotWords},domProps:{value:t.query},on:{blur:t.blur,keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.search(e)},input:function(e){e.target.composing||(t.query=e.target.value)}}})]),t._v(" "),a("div",{class:["search-btn"],on:{click:t.search}},[a("span",{class:["iconfont"]},[t._v("")]),t._v(" "),a("img",{attrs:{src:i(672),alt:"new"}})])]):t._e()]),t._v(" "),a("div",{staticClass:"userinfo"},[t.loginUser?a("div",{staticClass:"profile"},[a("a",{attrs:{href:"javascript:void(0);"},on:{click:function(e){return e.preventDefault(),t.dropdownHandler(e)}}},[a("i",{staticClass:"iconfont icon-profile"},[t._v("")])]),t._v(" "),a("div",{staticClass:"profile-dropdown",class:{show:t.showDropdown}},[a("i",{staticClass:"arrow"}),t._v(" "),a("a",{staticClass:"navbar-item user-info",attrs:{href:"//account.geekbang.org/dashboard/info"}},[a("span",{staticClass:"username"},[t._v(t._s(t.loginUser.nick))]),t._v(" "),a("span",{staticClass:"cellphone"},[t._v(t._s(t.loginUser.cellphone))])]),t._v(" "),t._m(0),t._v(" "),t.couldReply?a("a",{staticClass:"navbar-item",attrs:{href:"/reply"}},[a("i",{staticClass:"iconfont",staticStyle:{"font-size":".75rem"}},[t._v("")]),t._v("\n 留言回复\n ")]):t._e(),t._v(" "),t._m(1),t._v(" "),a("a",{staticClass:"navbar-item exit",on:{click:t.logout}},[a("i",{staticClass:"iconfont"},[t._v("")]),t._v("\n 退出登录\n ")])])]):a("span",{staticClass:"control"},[a("a",{staticClass:"pc",on:{click:t.login}},[t._v("登录")]),t._v(" "),a("a",{staticClass:"pc",on:{click:t.signup}},[t._v("注册")])])]),t._v(" "),t._t("right")],2)]),t._v(" "),t.isFixed?a("div",{staticClass:"fixed-rect"}):t._e()])},staticRenderFns:[function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("a",{staticClass:"navbar-item",attrs:{href:"//account.geekbang.org/dashboard/setting"}},[i("i",{staticClass:"iconfont"},[t._v("")]),t._v("\n 账号设置\n ")])},function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("a",{staticClass:"navbar-item",attrs:{href:"//account.geekbang.org/dashboard/buy"}},[i("i",{staticClass:"iconfont"},[t._v("")]),t._v("\n 我的订阅\n ")])}]}},677:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"Footer"}},678:function(t,e,i){var a=i(620);e=t.exports=i(571)(!1),e.push([t.i,".WtP5PP79_0{background:#fafafa}.l6aXLfrU_0{width:100%;max-width:1400px;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;height:45px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}._12M2EHoc_0{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:11px;color:#888;white-space:normal;text-align:center}._12M2EHoc_0 a{color:#888;text-decoration:none;margin-left:5px;line-height:45px}._12M2EHoc_0 a img{position:relative;top:4px;margin-right:5px}.F5HBRb7i_0{margin-left:20px;-webkit-box-flex:0;-ms-flex:0 0 17%;flex:0 0 17%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:12px;color:#888}.F5HBRb7i_0 span{white-space:nowrap}._1Mrq_d2y_0{margin-left:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}._1Mrq_d2y_0,._1Mrq_d2y_0 .lV4by6QP_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:45px}._1Mrq_d2y_0 .lV4by6QP_0{position:relative;cursor:default;margin-right:16px}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0{width:25px;height:25px;border-radius:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0{display:block;width:25px;height:25px;color:#d6b88a;line-height:1em;background-size:100%}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0._2RNene5h_0{background-image:url("+a(i(681))+")}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0._3GMyWGDp_0{background-image:url("+a(i(683))+")}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0._3arAtDLc_0{background-image:url("+a(i(685))+")}._1Mrq_d2y_0 .lV4by6QP_0:hover ._6JLLJHV0_0{display:block}._1Mrq_d2y_0 .lV4by6QP_0:hover ._3bzMOyip_0 .A6EymYX5_0._2RNene5h_0{background-image:url("+a(i(682))+")}._1Mrq_d2y_0 .lV4by6QP_0:hover ._3bzMOyip_0 .A6EymYX5_0._3GMyWGDp_0{background-image:url("+a(i(684))+")}._1Mrq_d2y_0 .lV4by6QP_0:hover ._3bzMOyip_0 .A6EymYX5_0._3arAtDLc_0{background-image:url("+a(i(686))+')}._1Mrq_d2y_0 ._6JLLJHV0_0{display:none;position:absolute;white-space:nowrap;bottom:110%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:5px 10px;text-align:center;-webkit-box-shadow:0 2px 7px 0 rgba(46,61,72,.12);box-shadow:0 2px 7px 0 rgba(46,61,72,.12);border-radius:5px;background:#fff;color:#888;font-weight:400;font-size:12px;z-index:50}._1Mrq_d2y_0 ._6JLLJHV0_0.HazgCUjH_0{white-space:normal;width:110px}._1Mrq_d2y_0 ._6JLLJHV0_0 img{width:72px;opacity:.6}._1Mrq_d2y_0 ._6JLLJHV0_0:after{content:"";position:absolute;bottom:-4px;left:50%;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg);width:5px;height:5px;z-index:51;border-left:0;border-top:0;background:#fff}@media screen and (min-width:860px) and (max-width:1192px){.WtP5PP79_0{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}._12M2EHoc_0 em{display:none}._12M2EHoc_0 ._4D6VOtS7_0{white-space:nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}._12M2EHoc_0 ._4D6VOtS7_0,._12M2EHoc_0 ._4D6VOtS7_0 a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._12M2EHoc_0 ._4D6VOtS7_0 a{line-height:1}._12M2EHoc_0 ._4D6VOtS7_0 a img{top:0}.F5HBRb7i_0{margin-left:5px}.F5HBRb7i_0 ._1Mrq_d2y_0{margin-left:0}}@media screen and (max-width:859px){.WtP5PP79_0{display:none}}',""]),e.locals={footer:"WtP5PP79_0",contentBlock:"l6aXLfrU_0",footerCopyright:"_12M2EHoc_0",footerItemList:"F5HBRb7i_0",footerItems:"_1Mrq_d2y_0",footerItem:"lV4by6QP_0",iconLink:"_3bzMOyip_0",icons:"A6EymYX5_0",cellphone:"_2RNene5h_0",email:"_3GMyWGDp_0",location:"_3arAtDLc_0",itemBox:"_6JLLJHV0_0",locationItem:"HazgCUjH_0",beian:"_4D6VOtS7_0"}},679:function(t,e,i){var a=i(678);"string"==typeof a&&(a=[[t.i,a,""]]),a.locals&&(t.exports=a.locals);i(572)("817fad60",a,!0,{})},680:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAFGUlEQVQ4ER3BbWwbZwHA8f89dz6fz++JY8ckpWsarU1Z24y2wEZItw7tBbVhy6SyIoQYKmMCjQnEPoDGh2l8GF8qMU0DVIZEp34AhjTRVmVdFsS2VnQvaqGt+pKlaRo7TRM7jn32ne3z3cO5v58ipQS7QZePQEgfRy8QCfUD9X77+rmJf538+Actp6M/8PD2wz3btr0NQ4VWSxJ2HBAKILgjEUeRUuLaVVAkwpOoehp4/8GZk6eePf3PaxPSmTEWWiZqOsX6jIFTMjtjDw0dG9k3+Sfp3XVctupIRQEkanIAQaCmWNTlGtJMg940pn/3xvR3n5naX2/OG3fHVA4at3nWWOD++3L03JfTDj7z7hOnXn3lmBJRw7au0OQTXO1TugRdqkCoCTRRHmyde/md3x6tcuDgEN8brJH8wyXKVz3Ksx7Vvb/nm94Fnj/yFIf/7iKv/vFvMbNpCCOGEQ3TJQjEWhbRcHXk5vEXZ8f3XhhPDef4ceYCc0driHUpPKsNLR+lL8WZ506z3zxH7qv38vW9J/atfPjGdXv+/KbL7/2DLkEg3HLQmu/Ejl2N6x8t7uSxnRb18zXEzSpKKkx41aN5+jahDb0YdYfSn88y+Uib6c+28OYHXj6mNCKIUboEgepKadD/z3uHfCUCmk3CWqS2BCHPhdUmykYTfUcKcauBjk9pzmGgpwWKQqUuCPdphzaPTW4gIAjMX3n3yXaxOJaO6dAJI/N5MmP91JFY9/fiHRgk9tIo5vPbEH0m2R0ZGnYbpCSfNaFw/sHVhTPfJyAImLH0SM1yGeprgtHLqbMm2p4E5X3r8YoWyv8a2Cdu486tob8wRs9Pt/PWkQoQZXSrRmN2mWZhdpCAIOCvLu6rVTTuGbQY/JLO629G+fcrBUZ35UmacexLFfzlFs0LFeLFNS6+fI1Xj4TJjabYOlClVGzhrl4ZIyAICK2RsmqCxMo19j/i0XFjuMeX6P3Lp4iBEO0+FT+rkdmTJz99ndLhizTaKpMTIeLlGayahhYXIQIagYj5+Smx6caElxvg6S9bHBro4/XiCO7CJXrLM4hkBOdSBWs4SzGd568iAokUT39lmU58kNQXFMz0uhMENO4QWVmTLM5a3DMyx69/voMXXxjnuLUVai4TdpmelOCtE3HqmECan/3IYNfwDIszQNPG71jbCWgEtFR7Zyeew11yKSxf5idjYSanokyftLkitvHols/IR0p0jg3Qrjis22zyy0dvcPvMDWzXwMjoaCl9MwFFSkmr/tG3y2d/c9RZatMquVCYZ+Pjo4RzBnhlvLJGfdkhuaEH1vdCocTc21dx4hliQzEi/SbJ4QO79fQ33leklHR1Gv/9zurFQ695TSdZ+mAJLSrp3z2Ct+rg2g2EaWD0RFH0EOUzs3Q8jeTOjbhNyslN409FU4kpRX8YjYDrzOOsOMXmUsQxcn4yt2cYr9rAs2pg6qh6Cj0C7bU6jUIFY30vxmCO1ppNs2jJyLo6aiJBBBAEZPs6Kh/+IvvFeH8onadV9fE9Dd9Taa5YIH3a5Sr1mRUUNQSKQvNWiVBEkPtaPqOb1g99hzsEAV1NEO7d9bhlJ1+zC4WGrq6RyHYIKTa64qK21pCOQ3xzhsRwAqHX0ZI6Srr/Zke791eaefe3VH2FLo0u6aKENLtWjj7nXM695FRXHmu5C7s/t6Vvi28pMSMlerRIHOsWNyN9KVvLjp9fnV2ecuYrpwZ2Z31FVZFek67/Ay4iNxP5+UK0AAAAAElFTkSuQmCC"},681:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAJEklEQVRoQ9Vae3CUVxX/nbu7SQg0tAoy2uBQOkD2W7CiFGkFLK/sboBWYwdaeY3WlgIO2pL9EqnOLK0t7LcBlPoY1EKxgEBVcKDZXfrgJSRgpUKSbwMRKQWq4GNKgASS7D3O3WQxySTZRzad4ftrZ+45v3t+93Fedwlp+KqDaz7B1DRZQIwF83AAwwAMBKEfGDYAVwF8xIwPidhk4LiVLPtHOItq0jA9KFWQqn3efpYb2Y8CmMeE+wFUgHGQwKYkPmVtsl7KbhDXc5HbWJl9JicrC3c1N1uHAjwChHFgTGbGDQjaTsQbtXy9NlVbkiZxanfpgGarXEaEpwAcIuA1q8zaM6xg6c1kjajaa3yeJOYKtRBAuRD8o7z84neTxUmYBHu9whzX5ykBWsHEuyMRWjmqQD+T7ISdyZ8I+fvaGE8C7CFQSDSRPmJm0b8TxU6IRE3If49kbAYgBWNJnttzMtEJkpGrLVuX0yQaVgD0OAFL7C7994noxyVhhnzTwLSVCKvzyusN8nplIsA9kakOGhMI2Ayi7fb8omIi4u7wuiURDvq/weA1xPSY3e3Z3xPDktUNv/XSJ7nZtgskL8grDQtGzvI2doXRJYnqkG8OgXwAuTSnpypZI9Ihf37Hmj5Xc5p/SwDl1Q0ppFmzIp3hdkoiHFjlZCFesUBMTZcvT5VU1Q5vhsjJVnfjvObSFydEIhxYOQRkOUoChXn5+uFUJ0+n3ru7vdnZtuyjzPRTh9uzviN2u53gHTss4Zz3DzPhdw6nXppOQ3qKdSpUmhdheUgwTenoHduRqA74lxLx1+xOz+R4HqGnRqWiXx30PU0Q8+zOovFt7btFovKtFwdZmm1VEQtPHDWtOBxvkhNlvlyboBIABQCGEOikRGSOw1VSHU831XEVcMPjso8weL3DVbwxhnOLhBk0fCDqpzk9S+JNEg74H2LinQDuBBAGuBKgQoAqNJdnQjz9noxXBVaNJ4hNl7PqR0ya5G1WWFESJ/esvMtqtfxNWuTokdNKPuhuksrQ6sEWjqiITUQ0z+707Fby4aB/A4O/GbGwlshO9oSIGTL2s6RfO9welUW0kDBDxiIwP6S5imfHAw+HfD9hpqVgTNfcellMvibomyRB7wDk01wedcx67TNDvq+C8YzmKv5KWxLlkHihrVFdWWAGjdMMRBwu3d5WRp3XmnHZ5ySj0eHW7+01BgBaY8dFQTQ2z+k5S7VlLw1sEtba+gH9B44Zs7Ap3uRm0GBibLG79bkdZasDxkoilIBoVG9HeTNovALguObSf0ZmyJjNEnMcbv3heASiRy9oSBC2aE59Xkd5M+DzgMgQAuN7O1BG8zriRzWnXkhm0LcWoH9oLt1IkMQ5Zpx3uPXxbeWryko1IfgowP+1yazhqRRJicwfk2l1MMc0l/5ptRNvEPALu1PfkwhIOGTsYMYjmRb5qXunlVxROi2JWtNfARpKTBPtbk95Ilg9lTGD/quZlkgumUF/rWA5I89dfCoR0Gh2y7QZTN/W3B51LpV7fZLBvyTm5XZ38cpEcNIhYwaNvwjBC8kMGnU2mZU7rGBpXSLAZ/d5sxpuZp8HcNleUT9KFUlm0NAB+Iily+4uCSWCkw6ZcNAISBLrFAnWXHrcCq/tpGbQ/0OAn2fCEw6nvqEm4BshiaoJOJ5XN+SBrvL+dBje3g7fdhD9ISUS0TvQv7mWGDarbB45rGD5v8yQ3wCzh4i8dqdnRboN7gzPDBrbQNiZ9HGKgbVETdqpQJSbqy1bl9kkblQAuI8IDyfqKHpCts1xSu5it9vOgP9VEC8A6BnN5fmxKqiYLMdU549BMxxOzzs9MTKe7v8vdpIuti1wS79IxQbkMbPT4S5+uybg/5wkPgQgE4QFmlPf3tEYlXDaKGNg3vXBZ3pyf5RTyrTIwS3BjvGh5i72x2Pe6bncawyDhDpGVgk5caSr5ER12erRJCIq7nyGiNddb2z4/piZ3npVOZr9z71AzMqbWQC6BuYjRDgsif6Uc8VSPnjWsw2J2NEx2CWVdnQ2Qc1e48uS8SaYPxKMSSrmnNq95u6ILbINYBXZPwBoLcAzAExR2T8Yb4PwIIAvANGms/qug2me5vaoWqXbr13aEUsAL2XWD4gVGfEAOhsPh/wzmVl1Ja6wtOQ7Cpa9p1a+JufsIga9CCAnqse06Y6rlkWxFVdNgL7WvmNZkSV8D8A1zaUPiWdDuwRQCZshI+FUvDvw1lZPyypK+pbm9mxTP8+8uap/oxQT0CzP2aeXVHaFYQaNTQDmx4tbran4BUH0pWgqHiUR8C0G0UTNpT8WbwXijbfeh10APqtWPdMa+W4sx4qnawaNCgLusbv0Qd3JdloUJVOexjNEjav2f8TG6wEuJOAyA89dyqx/tbvjGg4YjzNhKzFetrv1pd2SCBr7AN6guYpfU3IpNQoSIdJ6TGcTo5SBXADvE9PLzbbGLaOmPncphsHMFA75nwDwcwD/JGvzaPvU5f/pao4uGwVKIdaysZCYkM7WZbR7l5G9EMAyMO6OXm3QSSYZZqYbBH4QoOHM+LuQFrd9+rLTXRGI27JRir3ZPNu3z2sddCM7H4ILwZgAkPJAVnXvVRufbvLavEeK1dtel191wL+QCPO7bJ5FvV9LG/MIE16/bduYisht31CO7WN1qNRNkL8SkqckWvEletmTlYu19olw0e7Un+5M/3Z4ZNlKgEj6keXWjgT8c4m4lCRm2wv0A8muYk/kbz13gS/Kuvr5KT13xQwI7zXyWWILwKX2igb/x/HwGE0oJbYy8LpWUa/HmzOh2jr6BAzeCkYTReSS7vKfnqx+zR99d8gMWkGEOQAWp+0J+FZkbXG/3wHwAwC7IhKreuMxnoH90tr0bNuoHm9hEtqJtiCteVERwOpvEQeJ+TdW7vNGKh2/quCq+wRZ5hDzAgaOSRbPj3QX/Tme0R3HkyYRA1Cv/42i4esEmg/gi2CUM+EAMYWZIqfVH1Qy+l27NuQAGivHZPbPsFnvjEg5lAQNB9MDIJ6sjicztglp2dhduhGPVMok2gKrwqqRrA+RoPtb/yqk/i40EEA/ABmqUAJQx4wLRAiD+T0IcTBdnfP/AciLYQ9XOyq0AAAAAElFTkSuQmCC"},682:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAHoUlEQVRoQ91ae1CcVxX/nW93eS/PsIRHBMojsCSpqeZRmyattiyktlNbJ3VqGrWjTdrpOI6F5Q//YRxrBapOnYlOxwd27LRJtNppmwA+Goc0sbEJOgF2YzYhQMMSIGxgCSzs47vOvcAKZGHvt0Cinr92Zs/rd88955577kdYAeps/lEqI99nFShbwVgxgCIA6SAkgMEAYAzACGNwEjEbA9r0pPvrekvV+RUwD4pUScfx2gTdZNwXATzFCLsA6LTqYgxdUOgwEWs0l1sdWuVn+TWD+Ne7L6/x69UXiPAsgKRIDS+QUwG8qyjseyXlNWe06pQGwWprFdv22GcI9CKAVK2GJPkZgX6t+Mi6/uGqa5IyctvpfEtDvsrwOsA+I6t4mXzDBOwvrbC+JaMnbCRsLXUPgtERAMkyCleUh6ihtLyqhojYUnqXBGFvbniSgTUCiFpR57QoI3ZIHfV8ZcOeWu9iYouC6Gyp+zIx+g0gt+W0+KWVl4B3Stx5j9GePYFQsiFB2Jt+YGGkvHNbI3Cztz8zV1ifkwJhb3opj5GuDUCK1hVbbX7G6EBZZfWrC+3MiwQ7ckRnT+w+CWDbajsUof5JhdG2ksrqc3Pl54HobGr4JhF7JUIDt0iMTpVaqnbMrVhBEO1/fjFD5zdcAJAo440hxoi0/G1ISL8DhtgkTI4NwnnuKKZuSJ9RMmZC8jCwp8sqanjVFBQEYWuurwNgldEcl7oOOZu/AJ0+GlPjw5gauwZjRhE8I070/P1NGRXL4uE912DMxPr776/1B0Gce++lFL1e3wuwhHDaeQTy7/maQN937ihuDF0SIpkbKpCcvRFdH/xKAFttYoyeKqusfj0IwtZS/ywYfipjOKPkc0jNvQsft72FG0NdQZG41E8gd8sTGL58GoMXWmVULZOHtZoranj3PL2dbC31fwPDdhmtBfd+HWAMlz745Xx2IhTu3A+wAC62/lxG1XJ5mEJUUGKpvkyOY99P9yn6AdmTudRSjdF+m0jihWQq3imSvetk4y1JcADPmyusB8nWUv8EGA7JLosA4bTB2X4ziLT8rTAV70L36TfgGemTVRk5H+EPZov1MbI11/0YoG/JairctR/+yTHh6FyKTkhD3va9CPgmcenEL8DUkG2OrBlZvqvmCmsmj8RRMOyWlcq+8xEYTYW4cPwgVP+UECOdHnfc/VUY4pJEieWl9lZRtE5NJltzgwNghbJGkzLNyNr0EPo7mzFypV2IJedsQmaZBYOOExju+lBW1YrwKQrbQrbmejcAo6xGUvQo2nUAfu8Euk41iko1mwu9Z3+H8WuXZVWtCB8jZTcHseStKZSlNQV3I71wB/o7mjHS146o+FQU3PM0PO4BdJ/mt1jNKiMHRPhSRCB4DhTu+AagKKKcBrwToirxiAxdPIlrl05F7pRWyRkQmrbTrA2jqQg5mx/F2IADV/75NkjRieoUYzTh47bfB9sRrT5p5Z/ZTtoSe66RrI2VSMragIHz78PVc1Z0s/nb90LRRYm2ZNzVq9UnzfzTia2xxM61ougMYvWj49PQe/a3GB/uQbQxHXlbnxSRcbYfg/vqzZNKnSEGuqhYeCdGlp0/MyVW22G3cKmi4lIEECJFnBH8XhGTaMK6ux6HPjoBrp42DDlaoQZ8ABFMhTtEa8J/qwGvOFMmrvfBc/0KJkadYAHRXctS8LDT1HaE0h6bnI3cT+9BwD+Fno8OwTvugj4mAdmbHkZcSg58k264us8gIb0A8Wm5mBobwrirB1wuJjFDLAAnDpS3MzzPpGi27dDaAC6mnDvIE131TaH37BFMugfFaqes2wxT0b1Q9NOjq1FnB/ptfwquON+SMUlrBdjU3E9B9ftwsfWmWcBiZqcbQP6vllZ8qRWKX5OPdZ98VLA4O5vg7p/OB0UfHYwIj8JilLVxN5KyymBvaZAJxH9acQGiqe45EB2UkQzHw/OBX10NMYli1a/a3w/2WOFkeW7xCuc4LuPKgkuRlutpOEf4/7zyZJrLYcwoFu3JkOMERvs6wBif4IemxMxSZG/6PFy9bRiw/0XCDNtnrqjhE8rIBgUSFgRL4toSmNbfB34v93lGhYNupx1+7/g8FbyBXGt+EP6pcVw+9RoCPs+SJkIOCriE1pGNLBCeuMk5dyItb4uoWJx4GfbecIGpflGhouJT4POMgDeQ3vHrYVUvOrLhkqs5PONlNH5NHoymYpHkhthEUVq9nhFxU3T1nIHqX3TwPQfYEsMzzjUzxuTd29awy3F7GMKPMblf//MD5dnF7Wx5uZKY+vZ/02ifCK+WWqwHQm2A/99HlmBEmhr2EjE+Jbt9z13AYdU9sS+i565ZIPY/1pczFYdvx8MjA35o/nDCSrW1i5+SslM/8QQM9obsqHMFCpeLgGdW7Al41qGZ8vs8gNpVjAofMbyp6n3f3vjAd/hoVYrCvmMv1MI/iwgYWBXA+GcRUg8yEp7w7XJMZcp3N1RWfSTBP49FM4hZacexnyR6Fc/jBNoHYCfvuLUaB9DNGA4pqq6x9KEX+CtVRBQxiLnW+MXKS/r7SKEtM58K8c+F0gHwZolXtlEAbsZwhQh2MPYPKEqr2VLdEZHXC4T+DdCRAQCP0JG5AAAAAElFTkSuQmCC"},683:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAHeElEQVRoQ91afZBT1RX/nZtkv9wuRaFOZ9YZagskLzCUKSpO1SLC5mWpraUWpCD+U4WCQ6dl84JtZxr6IZuXFVunneqI0hZFgVZx+MjLjjPAOgpaK8XdTcDV2qlAi2M7ddFduknu6bxswuwy2X0fCVaaP3PPx+9377nnnnvuI1Th12tsvpwpO19AXAvmaQCmApgMQiMYPgBnAfybGaeJOM3Aa17yHJweajteBfcgt0Z6DsQaPecabgdwJxOuAXAEjC4CpyXxCW/We6ZhUHzYjOah7oa3murqMDGX814N8HQQ5oIxnxnnIGgHEW9VWrQ+t1gckzixp2NSzivXE+EeAC8QsM0r6/ZObV33H6cgejr1z5PECmFOBHBYCP6pvyX6qlM7tklwLCbSc+vvEaCNTLwnn6dNM1u1t5w6LCd/LJW4zMe4G+AIgVIiS9r0W9ves2vbFonjqcRnJOMJAFIw1vrDkdftOnAi17f/oaasGNwI0DIC1gZU7Q929C1JpFPxhWDaToQH/IcHdIrFpB3Dlcj0GvqNBDwBoh2BlrYoEfF49sYlkTES32TwZmK6IxCOHKwEmFPdzPP3X8E5326QPCnfH7xrxpLY0Fg2xiTRm4ovJ1AcIFUJRXqcgqiG/Ds7N9efbco9RQD5+6cspiVL8uXsliWRSbaHWIjHPBALqpXL3ZLq2RmrEU0N5t54R1G1NbZIZJKbpoA8L5PAYn+L9qJb59XUe3VPrKHB1/AyM/0yGI48cqHtUSvBO3d6Mk1/fZEJvw+GtI5qAqnU1olUhz/P8gXBdMuF2XEUid5kYh0Rfy0Qisy3ygiVgnKj32vEVxPEnYFQ2w0j8Z0n0f38z6705Hw9eQ/fNHNhNOPGycXWMQ/czNyGlxj8SFCNbi35O08ibehxEDUqocjaiw2mEvs9yfYbCOK379YNTL/55ljOtFUg8freTRO9Xs+b0iNnz1i44W+VOPkodNMp/SBL2hIMR8wqYphEOqV/G8zzFDW61ApEOhW/DUxbAFxhJetw/J8g/pYSiu620hvGgO8qavRLI0kchsRPlLC239KAof8LwESAu5hxwErezjgRmWDmmXcORdUmWukUz45TguhafyjyNvXtv39yVnj7BiZNmDxnzqqslYG0oTPARwGaDWBLoH/K6rFOUitbw5XxZb8g8L0EOsbgWYqqWdZzhegx9McAvKao2q8ondKXssTyYFj7ipXTojIz80ZB5GPg+yA868vXLXN6nxiezfptAC0B40EG9xPRj+ySKNR1xLcrIW0xpY34gwD9XVE13QmJYDgaSxv6dwD8HIRDtUJ+9bMLN7xvx8bx5+KfkLX0DIAFAG9Q1Gi8NxmPOSHRnXrgKg/nX1FU7dPmSuwj4NeBkLbXDgAznMyVMEmY8sVK9zcESufzrM5YpP1jPDvF8E0CmM2Eu4Mh7XFT3imJ4ahInK315JspbST6BMsv+8PRE25IFIgMF4zPgnGakVeD6n1vlrNl1mVMnk4QmplpWVCNPFeSc0dC/5MQvIrSht7vk3XNU1vX9bslUZjJVOI6Yt5LgJTSowZb1x8daS+zr30me4QBoBEkblVCbV0jx92QyBh6UpJ4yCTBdjfTyI1dCqeRQIpFWieACQJ8m1+NFlKwecoKEvsADAimULnrrRsSaSO+A0TPVJWECfjY/nizT1AKwOeYsYJAOQh+0gw1rzffMm3BfX8pt+LuSOhPm9mxauE0KjSMzZcTcmaiuL74/5+zRKFZoci7Y4WsGxIjwqnyjV0O2NsHYnXnhuqXMpMvS/TUrFDkw/H2nBsSaaO0sStMsXaSgR0ZlyT6az3yquHDjnFaCUcTdpxdeE7Y0bEj45TEhYedq7KjXHayA7Zae2JU2VEqAM/UDkwqXTLGA/NxWYlRBWAh96d0J6X4qLKjktl3e9gVS/GTgui6QileIJGMrwHRTYqq3WEFKmPoZxh4j5l3Wck6GSeibwD4lKJqk630yl6KnFxPize7hwFcaeXMyTgB5hmyxk4TOW3oBwB+XFGj20wf/z+NApNNqWXjIXHj/7p1OdYKWrZsTMWPffMsmVhFhJVjNs9MEsU25ktM2HXJtjFNIpd8Q7kUi72pjjBBPiok32L3xuckEzmRLbX2iXAqENJWl9O9FB5ZthMgHD+ynF+RZGIFEXeQxNJAq3bIyQxWKnv+uQt8SvYPrHT13FUCkenUW1jiSYA7AkcGEx/Fw+PxTv2LUmI7A7uUIwOalU9b3bbCEzB4OxhZysu1gUUbuiud6XL6hX5UDW0kwnK7p/eoE9sKVDH93gvghwB25yXaL8ZjPAMHpTf7vZkLfnDGClNp3NZKjDRmfhaR93EbwOZnEV3E/Dsv1+9z2sY0bfYY7bMEeZYT810MvCJZ/HhGuO2PdsG7JlFSNF//h8Tg1wm0EsAXwDjMhEPElGHKv2F+oFLT+MEHUw5hqHtO7YQan/eTeSmvJkHTwHQ9iOeb4cmMp4X0bA0sWv+GU/AVkxjp0LxYDZF3Hgm6pvipkPm5kFlSNwKoAWD2aPuZcZIIGTAfhRBd1Xof/y9spQ0PWQGe8gAAAABJRU5ErkJggg=="},684:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAF/ElEQVRoQ91aaWxUVRT+zpulGy1tbaFFyiJL2ylNCHvQqDTSaUETwlKNCib+QEA0RtrpD/9MjIhtUSMRDT8MJhIFKsGA0A5qMCSgxgJJoTPQomALlBYopYPTZabvmDt06tD1vtehBe7Pme8s3z3n3XveOY8QglVV/kk8kzdLgTIPzNMBTAOQCMIoMEwA3ACamXGViJ0MnDKS4ddUa/65EJgH6VVy9qh9lKEtciWA1Ux4BoBBqy5m/A2F9hDxTku2rUarfACvmcT5g1sTfEZ1ExHWAxit13APORXAQUXhD9KyCyu06pQmwXa74lwQsZZAmwHEazUkiWcCfa14yZb6Qv4NSRm5dDrnKJmsMnYBvFBW8RBxNwl4Iz3Htk9Gz6CRcDqKFoNpL4BYGYUhxRCVpGfnFxIRD6R3QBKu8pKXGbwTgDmkzmlRRrxbvd362ow8e0d/Yv2SqHIUvUJM3wByKafFL61YAg6ktUxaTnl5nX3J9knCVfaRlUk5MKIR6O3tl5Yc2wYpEq6yLZOYDKcAxGndsfuNZ6Z1GbkFO3rauScSvHevwRVz6TiA+ffbIZ362xSm+Wm5BZXB8veQqCoreZuIP9NpYJjE6ES6Nf+p4BOrm8SZnzePNfhM1QBihskb3WYY/HpGTqE4Nf2rm4SzvLgIgE235mEUFDVXY7gnddEiu6+bROWPW+KMRmMtwKOG0ZchmWKm1Rm5Bbu6STgdxevB+EJGa/SYaUieYYXBFCEDl8Z0eltRf9YBd6NsMcvHLDmFonq+m05OR/FvYCyQsTg96y0YTOHw3LoMT1OtjMigmMi4FETGp6DT147qX7YNiu8CsEI0Jc1acJFqDn+Y6FWMDbI3c7q1AG0tjQiPGYPmy5Wodx4BeMDSpn+niJCUloW4CbPQ5m5EePQYuBwlsiQEbqMlx7adnI7iF8HYLSspSNz46wRAChKeWAB3Qw2uVB4Eq31WBP2qJcWAcZlLEZOUiqZ/KqD6OpAwZaE2EoT9FqttOTnLiz4F6B2tJK5fOI74ibMxNi0LnqY61J3eD9XXLqVGMZoxfuYyRD02EY3Vx3Dz4h9InPqkdhLANUuOLVlE4hAYS6SsAwhEQpAQKyY5HeMyl6D9zg3UnfwevvZ/B1RlMEdiwuyV/tSpr3Kg+coZP14nCYQZ1FhylpfUADxVLwkhF5UwGSkzl8HbfsdPpMNzq091pojRmDBnFUxh0f4UdDde6MbpJaEoPJec5cUtAKKHQkLIRoxORsqsFWAw6k6W+h/+4BUWneiPgGIwo+7UPv/pFrz0kmBSlggSmo6WnukU7Ig5Kh4T5uTBYAzzPyOBIzgybryfoNrpRe3JUrS7r/faM70kQHgppCSEZ6bwaKTMXgVzZCyunjkEZhWPZz7vT7XailJ4W5v7DPpQSYQknYI9E5eh2PmI2HH+n8UdUFdRCl+Hp9+s1UuiK52G/mD35RkpRsQkpYEUBS31Ln8qDbT0krj7YA/xiJU9EAbD6SXRdcTqv+wGc0zL/zpJdF92usqOwGWnxdGQp1Og7NBTAIra6YEgESgAxe5oKcUHuieGEhUd6fR/Ke4nUVa0AUTbZZyYtuhNdHa0wt1wXgYujYkemwqjORLVRz+XlOnxUqTl9VS82SVlLIbRHCVpTA4m7pBrzp/gbhC9CpnFayw5haJD+Qg1CgSbR6JlI4g89M0zQaKrjXkCwDyZrBwBzOBtTOHUQ99QDuxslWNrLrH6w4PU2ifCjnSrbV2fxWZ/KfHQD1m6I1JW8ioRfzXCEdmjtnjW6Bp3BYi4jhRns4o9IzF4ZOBjy+8eG9ntYs7d7xp0eiok/SNg8Leyrc4QnFpNBKwN2Qg44FDX8bsRgP0+RkU0RL9Tjd53M597T7RWpZZUJII1ic8iOk2cD7D4LCJUAxmRLodVVt6fkZv/p5TnQSDNJAKyNYe3xXQorSsItAbA0wAUrcYBXGLGbkU17Exfukm28utlRjeJYE3ixaqDjM+SQnO7PhUSnwslAhBDGzHIvw2ghRmXieAC82koyjGLteCsDuK9RP4DTdms8TFPyDwAAAAASUVORK5CYII="},685:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAKJElEQVRoQ9Vae3QU1Rn/fXd2SQgYa4UjKvSgFZKZxCqnQCm+EbKzUVSsRSs+etr6QJQqZGdB2xqsCjsboUWpWrUeq6Jgiw+UnY2eAz7BFB+VZDcYbW0FC6KtBBOQzd6v5252wyYNZGYT/+j8s+fMfs97v/c3hAF4mpyl32RKTREQE8E8FsAYAMNBGAqGH8AeAF8w4xMiTjDwto+0DWWBmuYBYA8qlEjj+tqh2r6SiwBczoQJADaB8QqBE5J4qy/l21myV7SNxMj9W0o+LC0uxhEdHb7jAS4DYRIYU5ixD4JWEfHDRpXVUqgsnpXYurZuWIdPzifC1QBeJeBRnyx+fkz13K+8CtFYb59MEpcJdRDARiH49vKq8GavdFwrwbW1IjFp8NUCtIiJ16bTtPjEautDrwx7g/9rPDrEz7gK4BCB4iJFVtn0ms/c0nalRHM8epxkPAZACsac8mDoPbcMvMC1rFtemhJ7FwH0IwLm6Kb1Zzf4fSqRiEemgWklEe4q39huU22tdEO4PzBNjn0aAY+BaJVeVRMmIj4UvUMqkXSilzJ4KTFdogdDG/ojmFfc5Et3Hskd/mdAcpvcvffKypm1+w9G46BKNMUjswgUAcg0AqFGr0IMBPzHq5cO3lPa8QQBVN46+kKaOTPdG91elUjGlgRYiIc0iKkDFcsLVapxde0gUVqifONjw7Suc6VEMrZ4NEh7kwQuLK+yXi+UucJTAqjfQ5mCG/qb19aWlPhL3mSmeyqCoft74nS7CV69WkuWfvQ6E/5UEbDq3DDIh1EHwNAuA1EA4O8AKM3+3wrQe2COE9KP6cGFH3mlvTVeV55m+apgOrtndOymRFMsOpeIZ+iB0JS+IkI34TNOqC0G6CcANBWKAWwFsA3IVAXHAigDIACkAf4D+dIL9ak3f+5FmSYnci1BXK4Hak7Nl69LiS0v3XGU1uFvTGt8+onTwkm3xBtjdROEkE+DM4JuJcLSfYP8q8edddMX+TTee37xEX6/9kNmng/QWBC2SylmVAZr/uKWl0q4yUklbzD4/goz/HAOr0uJhGNHQDTUCITmuCWajC+ZzBAvgVFEwKK2YYcvHj/+mtSh8Ddvvt8/5LPdCxm4FYSvCHKqHljwhluejbElpxLEI58Wt5eddVZth8LLKKFOyefTPpCaHFc5bcE/3RBsro8cIyW9C+BIEC41AtYqN3g5mETcvhiMlQA+F4JPLq8Kf+IWPxG3N7CkByuCIVVFdCqRiNuzwXymYYYv9kBoDRgziGm+Hgwt7Q1P1UTq/UmBUFtv/zfF7RpiREF42ghYF7rnHbkAjJsMM3xGvhIbIfFrI2itc0OouT4yXkpSttygB0KT8p1s/fpa34h9Q+YyYTbAJ3TSow+Ice+O4rblORNQb5mZkvHoJgATheAJbivYbO7YLogmlgdCf6eWdXcOTwlfS/uww4f3Zc9dpuBEfg/QVUSYrges53PvM8QPK1kLQhWANjA68wzhFABDwKiXe9qn5+eNZNw+lxlrAX7AMMOqvHf1JBz7IQBvG6a1gpRtssSsiqB1nivsTvPbppxZbx09Ir8USDr2HQzcrITVOsSsXDmtepC0Tz6ulCPgTt20bsnxyuamHcrJjYA10q0MmbqO+CJlhpRwIssA+pdhWrYbAtlQvIOA53TTOj+H07JueVFK7FNxf0+K6ISeftDZM8gWgEr9svjI/CYq6djPMnBe2pcaceLUW3a6kiN+1yiN0w2GaR2tbuIFAu7NN4tDEVHdmJB4hxh360FrbpcpqXxBsoFB91SYoRt6dWQnejeBr5csJubnh2TMXs6EG6TAuMoqS0U8V0/Cie4p0tIjKeFEWwTLc8uDYZVh+3wyyY1kAxjLjKA1L4fQXG+fIiVe62ku+QRz5iYETs2vy7LWcCORGK8Hat7qU4gsQMKx3xKCr6GEY7f6ZfHIMdVzW90gZ+zbL3cxKF5hhsyum3jBHiE0qFi/yTCtyb3RSji2SmqTZBrHVJ5j7cjBNDlRh8ABLSWGe2lLk44dkySWKyXYMK0+O7x8oRKOnQBwnF8WH5WvfMKJrAMoyODZFWb4vnyczrqH7gU4Zpjh6q4bfDZymCymnWB8ZJiW4eYgczAJJ7IKRGsKUiLp2L9iYBGBb9DN8D0HTnTxCQStAcARAK1hxtPqPyLMAFgls/8w0hMrzIUfdAkSi1wHohUE3Kqb1m3elLCfVInSszkpJtkI9Q8Cdg1t9Y0dNXPe3hzzLS9GdC1NjwL4bg+B3kprfHl+canqqMG7djcTYZQQPNpL6aFo55mTN8c+cJX2bwD8HIxfGkHr9nyBVSZO1NdNhMTJmfcC7xpVNQ09y/uEE70R4GUA7jNMa7aXW1CwBxzbY4jNMcpm+vcB+LWUr6xs+rztXoRIOMuOBlKZMWaKaMxJgdCnXvCzSrQWaXJUZ7JjfGIEw1GvRLqclVGvmyHTSyOVcOxnAKhkeaNhWr/1yntLj2TnuezIMcwUcE7UydRKzHOMYPh3boRJxKI/BfGDAL2mb2o7o5BZVreyI1cA7ixqH5ZfYboRRsFsXbv02LS/oxGEIpkW4yura1T4PeiTdXw1b+3w+dLjxk5d+De3vPLhuhWAGduK255K8Z5Mm5zoTAKrpqilSJMTvj1twe7eBGtWOaGI3gSgE+NSPWg9UYgC2VJ8myD6XqYUzyjRGatPN0zrkkKIZp0sE61UWW2YofN7+ke2d1gD4AIAKwzTur5gXvFemqJC2tOeAqhm6Kj9JarfPgPgOwwz/It8mGTMjjKhRvmBbG07uz+zqIRjr1cTE8MMq3x0YMlSyKCgpyLZJKgy9rfA9DMjGFKNS+6mV6gOzy9Tk8dU37yr0Fs46KBAEcyNbDQSp/VndJl1XFXolYIxnQRpzKzC6b8hMLk/G6E+RzZKkUKHZ//r6JnR/IugzBANYJAQmNrfsWhTLHoNEa446PAsw6tzjPkGE54qZIzZzQfi0enM/Ih6J5l/XBkMP1eoCWVCudsxpgIeyIGyuv6M4/VzMeNpoJw7qaZ4XZAgHxCSz3bb8fXnlA+FmxvtE2G7HrCu7Q32/2HJspIA4XnJ0nUjsehlRFxHEhfr1dbLX9dp90a3a90F3i5b268oaN2VI5yst6tY4nGA6/RNe6P9tW83B5EdOqxk4CljU7vVF09XvXVmBQxeCUaK0nKOfs6CLW6E8QqTqa0G0SIizAJw3YCtgHOCZMOvqndUOfFMWmLJ17GMZ2CD9KXmuR2idSs73J5a58iGawBWc9NXiPmPPh78QkGfRThLThKkzSLmKxlokCxu87J0ycnsypx6U1Bt//eLvT8g0BWZoQBjIxNeJqYkU/p99YHKoKFffjn6ZezfMr7o8EF+3zfSUh5PgsaC6fsgnqLMkxlPCqk9rJ8zX7W6BT0FK5HPTTVW+8l3JgmakP1USH0uNBzAUABqg6r6i1ZmbCNCEszvQIhXBmo//l/CteUPqsjmKAAAAABJRU5ErkJggg=="},686:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAImUlEQVRoQ91aeVCU5xn/vd8u941cyiGHXEu0nhGJxiOJQNJ2orW0E0VnbJpEazudhuOP/sN0mqZC2k4PzTg9bGKSKj3s5BBo02CMQRwJOigLATlFue9rWZZ9O8+3fsuyrPi9Cx1n+vz57ftc73M/7zIsAdSW/jKQs+ldEqTHwXkCgHgAwWDwBocLgFEAQ5zjHmNcz4FqLdNcTEzPqV8C9mDOErlVXuCtMXjuA5DNGbYD0IjS4hzNkNg5xvhp3e68RlF85bywEl9+8EaQSWt+lTEcAeDnLGM7PDOADySJ/zRpd36VKE3VSvCCAkmf6vESA3sNQKAoI5XnOQP7szTN8hK/ltOnEkedO9WXFcWYOd4BeJpawos818+Al5Mz8v6uhs5DLaEvO/4MOCsG4K+G4JKeYawoeXdOPmOML0R3QSXqSote4OCnAbguqXAixBg/ax6ePPRYVoHxQWgPVKK27Ph+xtkZQJ3LicglepYB7yeNRO9lWVkzjnAdKlFX8vN0zqT3H6kF5kv7pi4j76gqJepKXo/mTFMNIED0xuzPM8lSOrjZ4QUKk+ecvZKSmXtqHh/bD7y4WFPn2/o5gM3CHAC4ePjBb4UOXsui4e4TAklrCSWzyQjDaA/G+1sxfE+P6clhZ8gTjkHibHNSZm6NLYE57lRbUvQDxvivRTloXDwQkvAk/MNXA4wBnGNqYgAmA3UbDFp3b7h5Blp/G7p7Ez0NlzAzPSnKiuhVJKfnbLXNWFYlbn78WqjG5NIAwFeEsodfGCLW7pEFNY4PoL+1CqNd9ZgxTc0ho3Fxh09oIpZFb4KrVwBMhjF03DiPyeEuEXYW9wQ/nJKRT1lTBqsS+tLC4wDyRCh6+Idj5cYskO/3NlWgv7kSnFMH8WBgTMKy2FQEx6XJsdJWVYzJobsibMnQzT3uE4k7dxaYrErUfPh6gFarbQe4t1pqWjdvxKYdArnS3ZoPMdIl1pD6hiUhfM1XZZdqrngLpqkxtawt1uAsOyUz9x2rEvqywiPgOClCJWLt8/AJjUf3l+UYaHXcs0ka6sIB88y0Q9LkWiGJOzDa3YiOG/8UYU9qXNJl5FP3bHEnfVnhFXCkqqXi7huGmC3ZmBzuRGulfBlWIHcJWLkeAZFr4eppydLGiUEM3rmBwbbqee4WnXoAHn7L0XLlDAwjQvHBJcbiktJzW1jjhZ8FT0vabpHKvDwlHf4Ra3Cn+h8Y622aVUDSIHL9XjnF0u0rvk6xQ1ahFEs4tnXDOzhOxhnqqEFnbZnae1TOHdNl5J1g+rLCb4HjrAh2/PYjcjA3XDwhp1MFguO3ISg2VRaW4mTGaEmhGlcP2f9Jub7mSvQ2fmZrOiTs+J6sWOOnb4qIQX50Xpeet5fpS4//CmA/VIutdfVC/M6jGO25jY7r5+dYIWHX9+XC1vTZ7+fFAVkibtt35QLY8Mlv51gjYt0e+ISsQmP5SZiM42pFoXNduoy85WSJj8DxrFpMqsQxaYcw0F6N7rr/WNGoXkSnZmOwvRpdNt9t6YYlP4WAqPVorTwzpz6EJj+FwKj1aKl4S67sIuCmMfszfWlRI8BXqUVUhB1oq0J3ffmsEv7hiN78wnx3sSGsuFvr1ffm1IbQpF0IXLkBLVfehmGEwlM9SBLfxPSlhSMAfNSikX8n7DyG8b4WtH/xNyua1s0L8TuOYnLoHlqvvuuQXPTm/fDwX4HGiydhmpp1m6gN++AVFIOG8t9Z40itPJxJz5ISC05NjojFbj0MVw8/NJSfkGNAgcgN++AdFIMu/b/llGoLlHLDdM9grK8Fd2yUpxihwDYahtF8+U9qZbdJDPi2U0oExaUheNUTsu9TDChAdYHyPvVJo90NGO2xbGF8QuLhE5qAmWmDXFeobigQELUOYclPo/f25+hrqnBaCSF3Ii6UoVZtfxkm4wSaLv8BfEZuYWRw81qGFWueg7tv6ByByNfv1XyEqfF+63cqjHHbvgOtuy9uf3pKuPUgQvfdSSywFQmUYOy9fRl9TVfm3SBVYXffEPm7YaRHru72QMFMdMj1yAWdAUtgC6ZYhZHG1RNx214E3SZZg1prEaBEELf1RRmF6gpZ1Rm4n2LFip0tIyVYqUK3V/1VSAalwHXXf4KBti+EcG0OW4udcNthyzFq4zfldqKr7mMMtl9XJYx/xGosT8nAxGAH2q6dndO6qCKgHFLaDmcaQFtGNNHFPnEYEtOgpfJtTI3NBq4jgSjwo7dky4LTHDE9OSQkt91hSwNIH0VbcXuuvmGJCP/K1+XUSS212W40Vc5TTaAUTIrIg1Rn3WIUmG3FZSVKjh8FYycWQ1HJVtSaU7vtCCLWPS/XDHI7cr/Fgd1Q5Mx4ai8AZamojVnwDIx02D/RBEeTHMVBe1XxEuyi+EFdRj5tKBe3KLBXhIpg9JYDcHH3RWdtKYY6bspHlKpM7kbN34yT6VTh53BRQD86u7KxV4T8fWXqfmg0rrhzndyKIXLdHkvLcfXdOS2Hs+70wJUNEXR2eWYvjGdAhOxa1qmPAW3XxFczjpVcYHlGCPfXmNSFPe7sLSl4NDuvWG2ZtTpvlciT4BLAw9eYxGQpF8rySlO+HeFu36G+qhbKCmZt2RuZjJtpEfToHlfs1GAMp5LT815xpN3/7yOL1SIlRQcY4398xBY5Zx6ZOOjUc5eiSN2/CndzM849iodHDvxCVzmRxwoKFtxSP/T1lJSRn4DB3xNZdS4yEw0w4KUlewK2VknLK9IxAAX/Q6tQHvuLWTv9o9VP/1j17kaVJWxvlf4WMePCcwBOf4sQepBZwDrkLhfMXPrJY5k510StKKyEwqDxwm98jdLkNxjYQQBPApBEmQNo5RxnJbPmdPJzr9IrlVPgtBK23GiwMjLtDiaxTff/KkR/FwoGQI82VGvopXGEc3Qwhjpwfh2SdEmXnnvLKantkP4L9j6DAGori9cAAAAASUVORK5CYII="},687:function(t,e,i){t.exports={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:t.$style.footer},[a("div",{class:t.$style.contentBlock},[a("p",{class:t.$style.footerCopyright},[t._v("Copyright © 2019, The Holding of GeekBang (Beijing) Co., Ltd. All rights reserved. 极客邦控股(北京)有限公司"),a("em",[t._v(" | ")]),a("span",{class:t.$style.beian},[t._v("京 ICP 备 16027448号-3. "),a("a",{attrs:{href:"http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502037384"}},[a("img",{attrs:{src:i(680),alt:""}}),t._v("京公网安备 11010502037384号")]),a("a",{attrs:{href:"https://static001.geekbang.org/resource/image/42/10/4293759746d85360176d36d3f55aff10.jpg",target:"_blank"}},[t._v("增值电信业务经营许可证")])])]),t._v(" "),a("div",{class:t.$style.footerItemList},[a("span",[t._v("联系我们")]),t._v(" "),a("div",{class:t.$style.footerItems},[a("div",{class:t.$style.footerItem},[a("p",{class:t.$style.iconLink},[a("span",{class:["iconfont",t.$style.icons,t.$style.cellphone]})]),t._v(" "),a("div",{class:t.$style.itemBox},[t._v("\n 010 - 53934972\n ")])]),t._v(" "),a("div",{class:t.$style.footerItem},[a("p",{class:t.$style.iconLink},[a("span",{class:["iconfont",t.$style.icons,t.$style.email]})]),t._v(" "),a("div",{class:t.$style.itemBox},[t._v("service@geekbang.org")])]),t._v(" "),a("div",{class:t.$style.footerItem},[a("p",{class:t.$style.iconLink},[a("span",{class:["iconfont",t.$style.icons,t.$style.location]})]),t._v(" "),a("div",{class:[t.$style.itemBox,t.$style.locationItem]},[t._v("北京市朝阳区容和路1号院1号楼5层")])])])])])])},staticRenderFns:[]}},934:function(t,e,i){t.exports=i.p+"static/time/img/shadow.4c5d43f.png"},950:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i(65),o=i(223);e.default={props:{theme:{type:String,default:"white"},showMenu:{type:Boolean,default:!0},loginUser:{type:Object,default:null}},data:function(){return{isMenuMobileShow:!1,currentLink:window.location.href,menu:[{link:"https://time.geekbang.org/",name:"讲堂",alias:"Index"},{link:"https://h5.youzan.com/v2/feature/TJe4bYhxyP?dc_ps=2293231415741009926.200001",name:"极客商城"},{link:"https://time.geekbang.org/download",name:"客户端下载",alias:"Download"},{link:"https://time.geekbang.org/gift/card",name:"兑换中心",alias:"Code"},{link:"https://service.geekbang.org/?utm_source=geektimeWeb&utm_medium=menu&utm_campaign=qiyezhanghao",name:"企业服务"},{link:"https://www.infoq.cn/?utm_source=geektime&utm_medium=menu",name:"免费资讯"},{link:"https://jinshuju.net/f/7y04KD",name:"渠道合作"},{link:"https://jinshuju.net/f/MANYIf",name:"推荐作者"}],couldReply:!1}},computed:{location:function(){return window.location.href},routerName:function(){return this.$route.name}},watch:{isMenuMobileShow:function(t){t?a.a.fixedBody.open():a.a.fixedBody.close()}},created:function(){this.$store.state.loginUser&&this.getUserData()},methods:{getUserData:function(){var t=this;o.a.getUserData().then(function(e){t.couldReply=e.could_reply}).catch(function(t){console.log("get user type error: ",t)})}}}},991:function(t,e,i){var a=i(620);e=t.exports=i(571)(!1),e.push([t.i,'@font-face{font-family:gc-iconfont;src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot");src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot?#iefix") format("embedded-opentype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.woff") format("woff"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.ttf") format("truetype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.svg#gc-iconfont") format("svg")}.gc-icon[data-v-70634a4f]{font-family:gc-iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.common-header[data-v-70634a4f]{font-family:Avenir,Helvetica,Arial,sans-serif!important;height:3rem;border-bottom:none;-webkit-box-shadow:0 0 30px rgba(0,0,0,.1);box-shadow:0 0 30px rgba(0,0,0,.1);z-index:1;background:#fff}.common-header .common-header-wrapper[data-v-70634a4f]{width:100%;padding:0 3vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 auto;position:relative}.common-header .common-header-wrapper .icon-mobile[data-v-70634a4f]{display:block;position:relative;cursor:pointer;width:1rem;height:1rem}.common-header .common-header-wrapper .icon-mobile span[data-v-70634a4f]{display:inline-block;position:absolute;width:16px;height:1px;background-color:#000;-webkit-transition:all .35s;transition:all .35s}.common-header .common-header-wrapper .icon-mobile span[data-v-70634a4f]:first-child{top:2px}.common-header .common-header-wrapper .icon-mobile span[data-v-70634a4f]:nth-child(2){top:8px}.common-header .common-header-wrapper .icon-mobile span[data-v-70634a4f]:nth-child(3){top:14px}.common-header .common-header-wrapper .icon-mobile.is-active[data-v-70634a4f]{z-index:11}.common-header .common-header-wrapper .icon-mobile.is-active span[data-v-70634a4f]{background-color:#fff}.common-header .common-header-wrapper .icon-mobile.is-active span[data-v-70634a4f]:first-child{-webkit-transform-origin:left top;transform-origin:left top;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.common-header .common-header-wrapper .icon-mobile.is-active span[data-v-70634a4f]:nth-child(2){display:none}.common-header .common-header-wrapper .icon-mobile.is-active span[data-v-70634a4f]:nth-child(3){top:13px;-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.common-header .common-header-wrapper .menu-mobile[data-v-70634a4f]{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.9)}.common-header .common-header-wrapper .menu-mobile ul[data-v-70634a4f]{margin:0 1.5rem;width:100%}.common-header .common-header-wrapper .menu-mobile ul li[data-v-70634a4f]{line-height:1.5;padding:1.2rem 1.2rem .8rem;border-bottom:1px solid #353535;font-size:1rem}.common-header .common-header-wrapper .menu-mobile ul li a[data-v-70634a4f]{color:#fff}.common-header .common-header-wrapper .common-logo[data-v-70634a4f]{width:9.4375rem;background-repeat:no-repeat;background-position:50%;background-size:contain;height:1.2rem;background-image:url('+a(i(661))+");position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.common-header .common-header-wrapper .info[data-v-70634a4f]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .info .menu[data-v-70634a4f]{margin-right:2rem}.common-header .common-header-wrapper .info .menu a[data-v-70634a4f]{padding:.5rem 1rem;font-weight:400;-webkit-transition:color .2s ease;transition:color .2s ease}.common-header .common-header-wrapper .info .menu a[data-v-70634a4f]:link,.common-header .common-header-wrapper .info .menu a[data-v-70634a4f]:visited{color:#353535}.common-header .common-header-wrapper .info .menu a.on[data-v-70634a4f],.common-header .common-header-wrapper .info .menu a[data-v-70634a4f]:hover{color:#ff5a05}.common-header .common-header-wrapper .info .userinfo[data-v-70634a4f]{height:4.75rem;line-height:100%}.common-header .common-header-wrapper .info .userinfo .control[data-v-70634a4f],.common-header .common-header-wrapper .info .userinfo[data-v-70634a4f]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .info .userinfo .control a[data-v-70634a4f]{font-size:1rem;color:#353535;display:block;height:4.75rem;line-height:4.75rem}.common-header .common-header-wrapper .info .userinfo .profile[data-v-70634a4f]{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.common-header .common-header-wrapper i.icon-profile[data-v-70634a4f]{color:#888;font-size:1.2rem;display:block;margin-right:.5rem}.common-header.opacity[data-v-70634a4f]{background:transparent;border-bottom:none}.common-header.black[data-v-70634a4f]{background:#1e1e1e;border-bottom:none}.common-header.black .common-header-wrapper .common-logo[data-v-70634a4f]{background-image:url(https://static001.geekbang.org/static/live/img/logo.bb6fd3f.png)}",""])}}); \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/aliplayer-min.css b/re/geekbang/routes/download/source/static/aliplayer-min.css new file mode 100644 index 0000000..c3fac55 --- /dev/null +++ b/re/geekbang/routes/download/source/static/aliplayer-min.css @@ -0,0 +1 @@ +.prism-player .prism-big-play-btn{background:url(./img/bigplay.png) no-repeat;background-size:contain;width:64px;height:64px}.prism-player .prism-big-play-btn .outter{border:7px solid rgba(255,255,255,.51);width:64px;height:64px;border-radius:100%;position:absolute;box-sizing:border-box;top:0;left:0}.prism-player .prism-big-play-btn:hover{cursor:pointer}.prism-player .prism-play-btn{width:24px;height:24px;background:url(./img/smallplay.png) no-repeat;background-size:contain}.prism-player .prism-play-btn:hover{cursor:pointer}.prism-player .prism-live-display{font-size:12px;color:#ebecec;line-height:44px;text-align:center;margin:0}.prism-player .live-shift-display:hover{cursor:pointer;font-size:14px}.prism-player .prism-play-btn.playing{background:url(./img/smallpause.png) no-repeat;background-size:contain}.prism-player .prism-play-btn.playing:hover{cursor:pointer}.prism-player .prism-fullscreen-btn{width:24px;height:24px;background:url(./img/fullscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn:hover{cursor:pointer}.prism-player .prism-fullscreen-btn.fullscreen{background:url(./img/smallscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn.fullscreen:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-volume{position:relative}.prism-player .prism-volume .volume-icon{width:28px;height:28px;background:url(./img/volume.png);background-size:contain}.prism-player .prism-volume .volume-icon .long-horizontal{width:3px;background:#ebecec;height:18px;position:absolute;right:5px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon .short-horizontal{width:3px;background:#ebecec;height:8px;position:absolute;right:10px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon:hover{-ms-transform-origin:0 50%;transform-origin:0 50%;background-size:contain;cursor:pointer}.prism-player .prism-volume .mute .long-horizontal{-ms-transform:rotate(-45deg);transform:rotate(-45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume .mute .short-horizontal{-ms-transform:rotate(45deg);transform:rotate(45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume-control{position:absolute;bottom:44px;display:none;background:rgba(60,60,60,.95);box-shadow:0 0 6px 0 rgba(0,0,0,.1);width:32px;height:130px;z-index:10000}.prism-player .prism-volume-control .volume-control-icon{width:32px;height:32px;background:url(./img/unmutevolume.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon:hover{cursor:pointer;background:url(./img/volumehover.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute{background:url(./img/volumemute.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute:hover{background:url(./img/volumemutehover.png) no-repeat;background-size:contain;cursor:pointer}.prism-player .prism-volume-control:hover{cursor:pointer}.prism-player .prism-volume-control .volume-control-icon{position:absolute;bottom:6px;left:8px;width:26px;height:26px}.prism-player .prism-volume-control .volume-range{position:absolute;left:14px;bottom:10px;border-radius:1px;background:#6c6262;box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);width:4px;height:100px}.prism-player .prism-volume-control .volume-value{width:100%;height:0%;background:#30adf2;position:absolute;border-radius:1px;bottom:0}.prism-player .prism-volume-control .volume-cursor{position:absolute;bottom:0;background:#fff;width:15px;height:15px;border-radius:15px;left:-6px}.prism-player .prism-volume-control .volume-cursor:hover{background:#00c1de}.prism-player .prism-animation{width:64px;height:64px;border-radius:64px;opacity:0;position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-play-animation{background:url(./img/playanimation.png) no-repeat;background-size:contain}.prism-player .prism-pause-animation{background:url(./img/pauseanimation.png) no-repeat;background-size:contain}.prism-player .play-apply-animation{animation:prismplayanimation 1s 1;-moz-animation:prismplayanimation 1s 1;-webkit-animation:prismplayanimation 1s 1;-o-animation:prismplayanimation 1s 1;animation-fill-mode:both}@keyframes prismplayanimation{0%{width:32px;height:32px;border-radius:32px;opacity:0}50%{width:32px;height:32px;border-radius:32px;opacity:1}99%{width:76px;height:76px;border-radius:76px;opacity:0}100%{width:0;height:0}}@keyframes spinoffPulse{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@keyframes hoverAnimationRotate{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}50%{transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg)}100%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}}@keyframes hoverAnimationScale{0%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}50%{transform:scale(1.2);-webkit-transform:scale(1.2);-moz-transform:scale(1.2)}100%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}}@keyframes hoverAnimationScaleX{0%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}50%{transform:scaleX(1.2);-webkit-transform:scaleX(1.2);-moz-transform:scaleX(1.2)}100%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}}@keyframes hoverVolumeAnimation{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.volume-hover-animation{animation:hoverVolumeAnimation .3s 1;-moz-animation:hoverVolumeAnimation .3s 1;-webkit-animation:hoverVolumeAnimation .3s 1;-o-animation:hoverVolumeAnimation .3s 1}@keyframes hoverPlayButtonAnimation{0%{width:63px;height:63px;border:7px solid #fff}60%{width:90px;height:90px;border:7px solid rgba(255,255,255,.51)}100%{width:97px;height:97px;border:14px solid rgba(255,255,255,0)}}@keyframes warn{0%{transform:scale(1);opacity:0}25%{transform:scale(1);opacity:.1}50%{transform:scale(1.1);opacity:.3}75%{transform:scale(1.5);opacity:.5}100%{transform:scale(2);opacity:0}}.big-playbtn-hover-animation{animation:warn 1s ease-out;-moz-animation:warn 1s ease-out;-webkit-animation:warn 1s ease-out;-o-animation:warn 1s ease-out}.big-playbtn-hover-animation1{animation:hoverPlayButtonAnimation 1s 1;-moz-animation:hoverPlayButtonAnimation 1s 1;-webkit-animation:hoverPlayButtonAnimation 1s 1;-o-animation:hoverPlayButtonAnimation 1s 1}.prism-player{background-color:#000;position:relative}.prism-player a{text-decoration:none}.prism-player video{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform-origin:center;-moz-transform-origin:center;-webkit-transform-origin:center;-o-transform-origin:center}.prism-player .x5-full-screen{object-fit:fill;object-position:50% 50%}.prism-player .x5-top-left{object-fit:contain;object-position:0 0}.prism-player .prism-cover{width:100%;height:100%;background-repeat:no-repeat;background-position:center;background-size:cover;position:absolute;top:0;left:0;z-index:11}.prism-player .prism-ErrorMessage{width:100%;height:100%;background-color:#000;background-repeat:no-repeat;background-position:center;background-size:contain;position:absolute;z-index:99;top:0;left:0;overflow:hidden;display:none}.prism-player .prism-ErrorMessage .prism-error-content{margin-top:20px;padding:0 5px}.prism-player .prism-ErrorMessage .prism-error-content p{text-align:center;font-size:12px;color:#fff}.prism-player .prism-ErrorMessage .prism-error-operation{margin-top:10px;margin-bottom:10px;padding-bottom:5px;border-bottom:1.5px;border-bottom-color:rgba(255,255,255,.15);border-bottom-style:dotted;text-align:center}.prism-player .prism-ErrorMessage .prism-error-operation a{width:80px;height:32px;line-height:32px;vertical-align:top;display:inline-block;margin-left:10px}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh{color:#21c5e0;border:solid 1px #21c5e0}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:hover{color:#05d3f5;border-color:#05d3f5;cursor:pointer}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:active{color:#026a7b;border-color:#026a7b}.prism-player .prism-ErrorMessage .prism-error-operation .prism-button-orange:visited{color:#05d3f5}.prism-player .prism-ErrorMessage .prism-detect-info{color:#fff;font-size:10px}.prism-player .prism-ErrorMessage .prism-detect-info p{padding:0 5px;word-break:break-all;margin:0 0 4px}.prism-player .prism-ErrorMessage .prism-detect-info span.info-label{display:inline-block;font-weight:700}.prism-player .prism-ErrorMessage .prism-detect-info span.info-content{color:gray}.prism-player .prism-big-play-btn{display:none;z-index:1000}.prism-player .prism-controlbar{width:100%;height:44px;position:relative;z-index:10;font-size:14px}.prism-player .prism-controlbar .prism-controlbar-bg{background:rgba(75,75,75,.15);width:100%;height:40px;position:absolute;bottom:0;left:0;z-index:-1}.prism-player .prism-time-display{height:40px;line-height:40px;color:#a4aab3;font-size:12px}.prism-player .prism-time-display .current-time{color:#fff}.prism-player .prism-live-time-display{height:44px;line-height:44px;color:#a4aab3;font-size:12px}.prism-player .prism-live-time-display span{display:inline}.prism-player .prism-live-time-display .live-text{margin-left:5px;font-size:12px;color:#ebecec}.prism-player .prism-live-time-display .current-time{color:#fff}.prism-player .prism-fullscreen-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-liveshift-progress,.prism-player .prism-progress{bottom:40px!important;width:100%;height:4px;background:rgba(195,197,198,.5);box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);position:relative;cursor:pointer}.prism-player .prism-liveshift-progress .prism-progress-time,.prism-player .prism-progress .prism-progress-time{position:absolute;top:-25px;background:rgba(0,0,0,.8);box-shadow:0 0 5px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.1);color:#fff;font-size:14px;border-radius:7.5px;padding:0 6px 0 6px;text-align:center;white-space:nowrap}.prism-player .prism-liveshift-progress .prism-progress-loaded,.prism-player .prism-progress .prism-progress-loaded{position:absolute;top:0;left:0;width:0;height:100%;background:#c3c5c6}.prism-player .prism-liveshift-progress .prism-progress-played,.prism-player .prism-progress .prism-progress-played{position:absolute;top:0;left:0;width:0;height:100%;background-color:#00c1de}.prism-player .prism-liveshift-progress .prism-progress-cursor,.prism-player .prism-progress .prism-progress-cursor{position:absolute;border-radius:8px;top:-5px;width:16px;height:16px;overflow:hidden;box-sizing:content-box;background:url(./img/dragcursorhover.png) center;display:none}.prism-player .prism-liveshift-progress .prism-progress-cursor img,.prism-player .prism-progress .prism-progress-cursor img{width:14px;height:14px;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-liveshift-progress .cursor-hover,.prism-player .prism-progress .cursor-hover{border-radius:9px;width:18px;height:18px;top:-5px!important}.prism-player .prism-liveshift-progress .cursor-hover img,.prism-player .prism-progress .cursor-hover img{width:16px;height:16px}.prism-player .prism-liveshift-progress .prism-progress-marker,.prism-player .prism-progress .prism-progress-marker{width:100%;height:100%;position:absolute}.prism-player .prism-liveshift-progress .prism-progress-marker .prism-marker-dot,.prism-player .prism-progress .prism-progress-marker .prism-marker-dot{position:absolute;background:#d9edf7;width:5px;height:100%;border-radius:20%}.prism-player .prism-progress-hover{cursor:pointer;height:6px;transition:height .1s}.prism-player .prism-progress-hover .prism-marker-dot{width:10px;height:80%;top:8%;border-radius:30%}.prism-player .prism-progress-hover .prism-progress-cursor{top:-4px}.prism-player .prism-liveshift-progress{background:0 0}.prism-player .prism-liveshift-progress .prism-enable-liveshift{cursor:pointer;position:absolute;background:#fff;height:4px}.prism-player .prism-liveshift-progress .prism-enable-liveshift:hover{height:6px;transition:height .1s}.prism-player .prism-liveshift-progress .prism-liveshift-seperator{height:15px;position:absolute;right:0;top:-8px;color:#fff;margin-right:5px;margin-left:5px;right:-65px}.prism-player .prism-marker-text{padding:5px;background:rgba(0,0,0,.8);position:absolute;max-width:180px;max-height:100px;bottom:50px;color:#fff;border-radius:3px;z-index:9999;display:none;overflow:auto}.prism-player .prism-marker-text p{text-align:center;word-break:break-all;margin:0;font-size:12px}.prism-player .prism-loading{width:55px;height:55px;z-index:10}.prism-player .prism-loading .circle{background-color:rgba(0,0,0,0);border:5px solid;border-color:rgba(0,193,222,.2) rgba(0,193,222,.5) rgba(0,193,222,.7) rgba(0,193,222,.1);opacity:.9;border-radius:50px;width:45px;height:45px;margin:0 auto;-moz-animation:spinoffPulse .9s infinite linear;-webkit-animation:spinoffPulse .9s infinite linear}.prism-player .prism-hide{display:none}.prism-player .prism-snapshot-btn{width:32px;height:32px;background:url(./img/snapshot.png) no-repeat;background-size:contain}.prism-player .prism-snapshot-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-snapshot-btn:active{displa:block}.prism-player .prism-info-display{width:100%;color:#fff;font-size:18px;text-align:center;top:50%;position:absolute;z-index:900;height:44px;line-height:28px;font-size:16px;padding:10px 12px 10px 12px}.prism-player .prism-info-display span{color:#00c1de}.prism-player .prism-info-left-bottom{width:auto!important;top:auto!important;bottom:70px;left:20px!important;text-align:left}.prism-player .prism-info-top-center{width:auto!important;top:20px!important;left:50%!important;text-align:left!important;-ms-transform:translateX(-50%)!important;transform:translateX(-50%)!important;color:red!important}.prism-player .prism-info-black{color:#000!important}.prism-player .prism-auto-stream-selector{position:absolute;bottom:50%;width:100%;margin:auto;color:#efeff4;display:none}.prism-player .prism-auto-stream-selector p.tip-text{text-align:center}.prism-player .prism-auto-stream-selector .operators{width:100px;margin:auto}.prism-player .prism-button-cancel{font-size:16px;border:1px #ffffffa8 solid;padding:2px 5px 2px 5px;color:#ffffffa8;margin-left:5px;background:#503f3f3d}.prism-player .prism-button-ok{font-size:16px;border:1px #fff solid;padding:2px 5px 2px 5px;color:#fff;background:#503f3f63}.prism-player .prism-button-cancel:hover,.prism-player .prism-button-ok:hover{color:#f5f5f5}.prism-player .prism-cc-btn{height:24px;width:24px;background:url(./img/cc.png) center no-repeat;background-size:contain}.prism-player .prism-cc-btn:hover{cursor:pointer;animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-setting-btn{height:24px;width:24px;background:url(./img/setting.png) center no-repeat;background-size:contain}.prism-player .prism-setting-btn:hover{cursor:pointer;animation:hoverAnimationRotate 1s 1;-moz-animation:hoverAnimationRotate 1s 1;-webkit-animation:hoverAnimationRotate 1s 1;-o-animation:hoverAnimationRotate 1s 1}.prism-player .prism-setting-list{background:rgba(60,60,60,.95);width:220px;position:absolute;right:14px;bottom:45px;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-list .prism-setting-item{font-size:14px;color:#ebecec;height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content{width:100%}.prism-player .prism-setting-list .prism-setting-item .setting-content:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-list .prism-setting-item .setting-content span{line-height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content .setting-title{margin-left:15px}.prism-player .prism-setting-list .prism-setting-item .setting-content .current-setting{float:right}.prism-player .prism-setting-list .prism-setting-item .array{display:inline-block;border-right:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(-45deg);transform:rotate(-45deg);margin-right:10px;margin-top:10px;margin-left:10px;float:right}.prism-player .prism-setting-selector{right:40px;position:absolute;bottom:45px;width:150px;background:rgba(60,60,60,.95);font-size:14px;color:#ebecec;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-selector .header{background:#242424;width:150px;height:30px}.prism-player .prism-setting-selector .header:hover{cursor:pointer}.prism-player .prism-setting-selector .header .left-array{display:inline-block;border-left:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(45deg);transform:rotate(45deg);margin-right:6px;margin-top:12px;margin-left:16px;float:left}.prism-player .prism-setting-selector .header span{line-height:30px}.prism-player .prism-setting-selector ul{list-style-type:none;padding-left:0;max-height:150px;overflow-y:auto;padding-left:16px;margin-top:5px}.prism-player .prism-setting-selector ul li{height:28px;padding-left:10px}.prism-player .prism-setting-selector ul li.current{color:#30adf2;padding-left:0}.prism-player .prism-setting-selector ul li.current:before{content:"";display:inline-block;line-height:0;border:5px solid transparent;border-left-color:#30adf2;border-right-width:0;margin-top:5px;padding-right:5px}.prism-player .prism-setting-selector ul li:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-selector ul span{line-height:28px}.prism-player .prism-thumbnail{border:1px solid rgba(0,0,0,.8);width:174px;height:98px;position:absolute;bottom:50px;display:none}.prism-player .prism-thumbnail .none{border:none}.prism-player .prism-thumbnail span{font-size:12px;color:#fff;line-height:20px;background:rgba(0,0,0,.8);text-align:center;text-shadow:1px 1px 4px #373d41;padding-left:5px;padding-right:5px;display:inline-block;position:absolute;bottom:0;left:33%}.prism-player .prism-tooltip{background:#3c3c3c;box-shadow:0 0 5px 0 rgba(0,0,0,.1);height:28px;margin:0;padding-left:5px;padding-right:5px;padding-top:0;padding-bottom:0;position:absolute;bottom:50px;color:#fff;line-height:28px;font-size:10px;white-space:nowrap;display:none}:-webkit-full-screen{width:100%!important;height:100%!important}:-moz-full-screen{width:100%!important;height:100%!important}:-ms-full-screen{width:100%!important;height:100%!important}:-ms-fullscreen{width:100%!important;height:100%!important}:-webkit-full-screen{width:100%!important;height:100%!important}:fullscreen{width:100%!important;height:100%!important}body.prism-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.prism-fullscreen{position:fixed;overflow:hidden;z-index:99999;left:0!important;top:0!important;bottom:0!important;right:0!important;width:100%!important;height:100%!important;position:absolute}.prism-button{cursor:pointer;text-align:center;text-shadow:0 1px 1px rgba(0,0,0,.3);border-radius:.5em;box-shadow:0 1px 2px rgba(0,0,0,.2)}.prism-button-orange{color:#a56117;border:solid 1px #a56117}.prism-button-retry{color:#f2dede;border:solid 1px #f2dede}.prism-button-orange:hover{color:#d67400;border-color:#d67400}.prism-button-orange:active{color:#d67400;border-color:#d67400}.prism-button-orange:visited{color:#d67400}.prism-button-retry:hover{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:active{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:visited{color:#fcf8e3}.prism-center{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.prism-width90{width:90%}.prism-stream-selector{font-size:16px;position:relative;line-height:32px}.prism-stream-selector .current-stream-selector{text-align:center;width:70px;display:none;color:#efeff4}.prism-stream-selector .current-stream-selector:hover{cursor:pointer;color:#00c1de}.prism-stream-selector .stream-selector-tip{color:#fff;text-align:center;padding:2px 5px 2px 5px;display:none;position:absolute;bottom:61.5px;white-space:nowrap;left:43%;font-size:18px}.prism-stream-selector .stream-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;width:70px;margin:0;display:none}.prism-stream-selector .stream-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-stream-selector .stream-selector-list li:last-child{margin-bottom:10px}.prism-stream-selector .stream-selector-list li.current{color:#00c1de}.prism-stream-selector .stream-selector-list li span.current{color:#00c1de}.prism-stream-selector .stream-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-speed-selector{font-size:16px;position:relative;line-height:32px}.prism-speed-selector .current-speed-selector{color:#efeff4;text-align:center;width:60px}.prism-speed-selector .current-speed-selector:hover{cursor:pointer;color:#00c1de}.prism-speed-selector .speed-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;display:none;margin:0}.prism-speed-selector .speed-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-speed-selector .speed-selector-list li:last-child{margin-bottom:10px}.prism-speed-selector .speed-selector-list li.current{color:#00c1de}.prism-speed-selector .speed-selector-list li span.current{color:#00c1de}.prism-speed-selector .speed-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-ai-container{position:absolute;overflow:hidden}.prism-ai-container .prism-ai-marking{font-size:12px;position:absolute}.prism-ai-container .prism-ai-marking[vh=large]{font-size:18px}.prism-ai-container .prism-ai-marking[vh=middle]{font-size:16px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region{position:relative;display:inline-block}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title{height:0;-ms-transform:translateY(-40px);transform:translateY(-40px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title p{background:#ff1d00;text-align:center;width:100%;color:#fff;word-break:keep-all;margin:10px 0 0 0}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-left-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-left-color:red;border-left-style:solid;border-width:1px;-ms-transform:translate(-5px,10px);transform:translate(-5px,10px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-right-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-right-color:red;border-right-style:solid;border-width:1px;-ms-transform:translate(5px,5px);transform:translate(5px,5px);float:right}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect{border-style:solid;border-color:#ff1d00;border-width:1px;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;color:rgba(255,29,0,.3);background:rgba(255,29,0,.1)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash-container{overflow:hidden;width:100%;height:100%;position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash{content:"";display:block;box-sizing:border-box;border-top-width:1px;border-top-style:solid;height:10px;margin-top:15px;border-bottom-width:1px;border-bottom-style:solid;transform:rotateZ(-45deg) scaleX(2);-ms-transform-origin:bottom center;transform-origin:bottom center}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-top-slash{margin-top:-10px!important}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .anchor-plug{position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-left{top:-7px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-right{top:-7px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-left{bottom:-8px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-right{bottom:-8px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-labels{color:#fff;float:right;background:rgba(0,0,0,.4);padding-top:5px;padding-bottom:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p{text-align:left;padding-left:5px;padding-right:5px;margin:0}.prism-ai-container .prism-ai-marking .prism-ai-labels a{padding-left:5px;padding-right:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=large]{padding-left:25px;padding-right:25px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=middle]{padding-left:15px;padding-right:15px}video::-webkit-media-text-track-container{overflow:visible!important}video::cue{line-height:1.7}.disabled{pointer-events:none;color:gray}.center{position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)} \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/aliplayer-min.js b/re/geekbang/routes/download/source/static/aliplayer-min.js new file mode 100644 index 0000000..d06872e --- /dev/null +++ b/re/geekbang/routes/download/source/static/aliplayer-min.js @@ -0,0 +1,2 @@ +/*! Aliplayer - v2.8.2 - 2019-05-09 16.34.41 */ +!function n(a,s,l){function u(t,e){if(!s[t]){if(!a[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=s[t]={exports:{}};a[t][0].call(o.exports,function(e){return u(a[t][1][e]||e)},o,o.exports,n,a,s,l)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;ei.offsetHeight){t=i,e.fastClickScrollParent=i;break}i=i.parentElement}while(i)}t&&(t.fastClickLastScrollTop=t.scrollTop)},l.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},l.prototype.onTouchStart=function(e){var t,i,r;if(1i||Math.abs(t.pageY-this.touchStartY)>i},l.prototype.onTouchMove=function(e){return this.trackingClick&&(this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0},l.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},l.prototype.onTouchEnd=function(e){var t,i,r,o,n,a=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,i=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,d&&(n=e.changedTouches[0],(a=document.elementFromPoint(n.pageX-window.pageXOffset,n.pageY-window.pageYOffset)||a).fastClickScrollParent=this.targetElement.fastClickScrollParent),"label"===(r=a.tagName.toLowerCase())){if(t=this.findControl(a)){if(this.focus(a),u)return!1;a=t}}else if(this.needsFocus(a))return 100"+a.get("Cancel_Text")+"",e},bindEvent:function(){var r=this;r._player.on(s.Private.AutoStreamShow,function(e){var t=document.querySelector("#"+r.getId()+" .tip-text");if(r._player._getLowerQualityLevel){var i=r._player._getLowerQualityLevel();i&&(r._switchUrl=i,t.innerText=a.get("Auto_Stream_Tip_Text").replace("$$",i.item.desc),o.css(r.el(),"display","block"))}}),r._player.on(s.Private.AutoStreamHide,function(e){document.querySelector("#"+r.getId()+" .tip-text");o.css(r.el(),"display","none")});var e=document.querySelector("#"+r.getId()+" .prism-button-ok");n.on(e,"click",function(){r._player._changeStream&&r._switchUrl&&r._player._changeStream(r._switchUrl.index,a.get("Quality_Change_Text")),o.css(r.el(),"display","none")});var t=document.querySelector("#"+r.getId()+" .prism-button-cancel");n.on(t,"click",function(){o.css(r.el(),"display","none")})}});t.exports=l},{"../lang/index":11,"../lib/dom":18,"../lib/event":19,"../lib/ua":31,"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],3:[function(e,t,i){var r=e("../ui/component"),s=e("../lib/dom"),o=e("../lib/event"),n=e("../lib/ua"),a=e("../lib/function"),l=(e("../lang/index"),e("../lib/util")),u=e("../config"),c=e("../lib/playerutil"),d=e("../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-liveshift-progress",this.addClass(this.className),this._liveshiftService=e._liveshiftService},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='

      00:00:00
      ',e},bindEvent:function(){var i=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.controlNode=document.querySelector("#"+this._player._options.id+" .prism-controlbar"),this.seperatorNode=document.querySelector("#"+this.id()+" .prism-liveshift-seperator"),this.progressNode=document.querySelector("#"+this.id()+" .prism-enable-liveshift");var e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),t="//"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1a&&(sec=a),sec},_onMouseClick:function(e){var t=this,i=this._getSeconds(e),r=this._liveshiftService.availableLiveShiftTime-i;this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()});var o=this._liveshiftService.getSourceUrl(r),n=t._player._options.source,a=c.isHls(t._player._options.source);a&&o==n?t._player.seek(i):t._player._loadByUrlInner(o,i,!0),t._player.trigger(d.Private.Play_Btn_Hide),t._liveshiftService.seekTime=i,t._player.trigger(d.Private.EndStart,{toTime:i}),t._updateCursorPosition(i),a&&setTimeout(function(){t._player.play()})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()}),o.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),o.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),o.on(this._player.tag,"mouseup",function(e){t._onMouseUp(e)}),o.on(this._player.tag,"touchend",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"mouseup",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"touchend",function(e){t._onMouseUp(e)})},_onMouseUp:function(e){e.preventDefault(),o.off(this.controlNode,"mousemove"),o.off(this.controlNode,"touchmove"),o.off(this._player.tag,"mouseup"),o.off(this._player.tag,"touchend"),o.off(this.controlNode,"mouseup"),o.off(this.controlNode,"touchend");var t=this._liveshiftService.availableLiveShiftTime,i=this.playedNode.offsetWidth/this.el().offsetWidth*t;this._player.seek(i),this._player.trigger(d.Private.Play_Btn_Hide),this._liveshiftService.seekTime=i,this._player.trigger(d.Private.EndStart,{toTime:i})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._updateProgressBar(this.playedNode,this._getCurrentTime()),this._updateCursorPosition(this._getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._getCurrentTime()})},_getCurrentTime:function(){var e=this._liveshiftService.seekTime;return-1==e&&(e=0),this._player.getCurrentTime()+e},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){if(1!=this._player._switchSourcing){var i=0;if(-1==this._liveshiftService.seekTime)i=1;else{var r=this._liveshiftService.availableLiveShiftTime;1<(i=r?t/r:0)&&(i=1,this._liveshiftService.seekTime=-1)}this.liveShiftStartDisplay;e&&s.css(e,"width",100*i+"%")}},_updateCursorPosition:function(e){if(this._player.el()&&1!=this._player._switchSourcing&&(0!=e||0!=this._player.tag.readyState)){var t=0,i=1,r=this._player.el().clientWidth;if(-1==this._liveshiftService.seekTime)t=1;else{var o=this._liveshiftService.availableLiveShiftTime;1<(t=o?e/o:0)&&(this._liveshiftService.seekTime=-1)}if(0!=r){var n=18/r;i=1-n,t-=n}this.cursorNode&&(ie.seekTime&&-1!=e.seekTime){var i=o._liveshiftService.getBaseTime(),r=n.formatTime(i+o._player.getCurrentTime());t.innerText=r}else e.currentTimeDisplay&&(t.innerText=e.currentTimeDisplay)}),this._player.on(a.Private.LiveShiftQueryCompleted,function(){o.updateTime()})},updateTime:function(){document.querySelector("#"+this.id()+" .end-time").innerText=this._liveshiftService.liveTimeRange.endDisplay,document.querySelector("#"+this.id()+" .live-time").innerText=this._liveshiftService.currentTimeDisplay}});t.exports=o},{"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],5:[function(e,t,i){t.exports={domain:"g.alicdn.com",flashVersion:"2.8.2",h5Version:"2.8.2",cityBrain:!0,logDuration:10,logCount:100,logReportTo:"https://videocloud.cn-hangzhou.log.aliyuncs.com/logstores/newplayer/track"}},{}],6:[function(e,t,i){e("./lang/index").load();var r=e("./player/adaptivePlayer"),o=e("./lib/componentutil"),n=e("./config"),a=function(e,t){return r.create(e,t)};a.getVersion=function(){return n.h5Version},o.register(a);var s=window.Aliplayer=a;a.players={},"function"==typeof define&&define.amd?define([],function(){return s}):"object"==typeof i&&"object"==typeof t&&(t.exports=s),"undefined"!=typeof Uint8Array&&(Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:Array.prototype.slice}))},{"./config":5,"./lang/index":11,"./lib/componentutil":14,"./player/adaptivePlayer":40}],7:[function(e,t,i){var r=e("../lib/oo"),o=e("../lang/index"),n=r.extend({init:function(e,t){this._player=e,this._options=e.options()}});n.prototype.handle=function(e){if(this._options.autoPlayDelay){var t=this._options.autoPlayDelayDisplayText;t||(t=o.get("AutoPlayDelayDisplayText").replace("$$",this._options.autoPlayDelay)),this._player.trigger("info_show",t),this._player.trigger("h5_loading_hide"),this._player.trigger("play_btn_hide");var i=this;this._timeHandler=setTimeout(function(){i._player.trigger("info_hide"),i._options.autoPlayDelay=0,e&&e()},1e3*this._options.autoPlayDelay),this._player.on("play",function(){a(i)}),this._player.on("pause",function(){a(i)})}},n.prototype.dispose=function(){a(this),this._player=null};var a=function(e){e._timeHandler&&(clearTimeout(e._timeHandler),e._timeHandler=null)};t.exports=n},{"../lang/index":11,"../lib/oo":27}],8:[function(e,t,i){t.exports=t.exports={OD:"OD",FD:"360p",LD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Speed:"Speed",Speed_05X_Text:"0.5X",Speed_1X_Text:"Normal",Speed_125X_Text:"1.25X",Speed_15X_Text:"1.5X",Speed_2X_Text:"2X",Refresh_Text:"Refresh",Cancel:"Cancel",Mute:"Mute",Snapshot:"Snapshot",Detection_Text:"Diagnosis",Play_DateTime:"Time",Quality_Change_Fail_Switch_Text:"Cannot play, switch to ",Quality_Change_Text:"Switch to ",Quality_The_Url:"The url",AutoPlayDelayDisplayText:"Play in $$ seconds",Error_Load_Abort_Text:"Data abort erro",Error_Network_Text:"Loading failed due to network error",Error_Decode_Text:"Decode error",Error_Server_Network_NotSupport_Text:"Network error or \xa0the format of video is unsupported",Error_Offline_Text:"The network is unreachable, please click Refresh",Error_Play_Text:"Error occured while playing",Error_Retry_Text:" Please close or refresh",Error_AuthKey_Text:"Authentication expired or the domain is not in white list",Error_H5_Not_Support_Text:"The format of video is not supported by\xa0h5 player\uff0cplease use flash player",Error_Not_Support_M3U8_Text:"The format of m3u8 is not supported by this explorer",Error_Not_Support_MP4_Text:"The format of mp4\xa0is not supported by this explorer",Error_Not_Support_encrypt_Text:"Play the encrypted video,please set encryptType to 1",Error_Vod_URL_Is_Empty_Text:"The url is empty",Error_Vod_Fetch_Urls_Text:"Error occured when fetch urls\uff0cplease close or refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Error_Playauth_Decode_Text:"PlayAuth parse failed",Error_Vid_Not_Same_Text:"Cannot renew url due to vid changed",Error_Playauth_Expired_Text:"Playauth expired, please close or refresh",Error_MTS_Fetch_Urls_Text:"Error occurred while requesting mst server",Error_Load_M3U8_Failed_Text:"The\xa0m3u8 file loaded failed",Error_Load_M3U8_Timeout_Text:"Timeout error occored\xa0when the\xa0m3u8 file loaded",Error_M3U8_Decode_Text:"The m3u8 file decoded failed",Error_TX_Decode_Text:"Video decoded failed",Error_Waiting_Timeout_Text:"Buffering timeout,\xa0please close or refresh",Error_Invalidate_Source:"Video shoud be mp4\u3001mp3\u3001m3u8\u3001mpd or flv",Error_Empty_Source:"Video URL shouldn't be empty",Error_Vid_Empty_Source:"vid's video URL hasn't been fetched",Error_Fetch_NotStream:"The vid has no stream to play",Error_Not_Found:"Url is not found",Live_End:"Live has finished",Play_Before_Fullscreen:"Please play before fullscreen",Can_Not_Seekable:"Can not seek to this position",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Request_Block_Text:"This request is blocked, the video Url should be over https",Open_Html_By_File:"Html page should be on the server",Maybe_Cors_Error:"please make sure enable cors,refer to document",Speed_Switch_To:"Speed switch to ",Curent_Volume:"Current volume:",Volume_Mute:"set to mute",Volume_UnMute:"set to unmute",ShiftLiveTime_Error:"Live start time should not be greater than over time",Error_Not_Support_Format_On_Mobile:"flv\u3001rmtp can't be supported on mobile\uff0cplease use m3u8",SessionId_Ticket_Invalid:"please assign value for sessionId and ticket properties",Http_Error:" An HTTP network request failed with an error, but not from the server.",Http_Timeout:"A network request timed out",DRM_License_Expired:"DRM license is expired, please refresh",Not_Support_DRM:"Browser doesn't support DRM",CC_Switch_To:"Subtitle switch to ",AudioTrack_Switch_To:"Audio tracks switch to ",Subtitle:"Subtitle/CC",AudioTrack:"Audio Track",Quality:"Quality",Auto:"Auto",Quality_Switch_To:"Quality switch to ",Fullscreen:"Full Screen",Setting:"Settings",Volume:"Volume",Play:"Play",Pause:"Pause",CloseSubtitle:"Close CC",OpenSubtitle:"Open CC",ExistFullScreen:"Exit Full Screen",Muted:"Muted",Retry:"Retry",SwitchToLive:"Return to live",iOSNotSupportVodEncription:"iOS desn't suport Vod's encription video",UseChromeForVodEncription:"This browser desn't suport Vod's encription video, please use latest Chrome"}},{}],9:[function(e,t,i){t.exports=t.exports={OD:"OD",LD:"360p",FD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Forbidden_Text:"Internal information is strictly forbidden to outsider",Refresh:"Refresh",Diagnosis:"Diagnosis",Live_Finished:"Live has finished, thanks for watching",Play:"Play",Pause:"Pause",Snapshot:"Snapshot",Replay:"Replay",Live:"Live",Encrypt:"Encrypt",Sound:"Sound",Fullscreen:"Full Screen",Exist_Fullscreen:"Exit Full-screen",Resolution:"Resolution",Next:"Next Video",Brightness:"Brightness",Default:"Default",Contrast:"Contrast",Titles_Credits:"Titles\xa0and\xa0Credits",Skip_Titles:"Skip Titles",Skip_Credits:"Skip Credits",Not_Support_Out_Site:"The video is not supported for outside website, please watch it by TaoTV",Watch_Now:"Watch now",Network_Error:"Network is unreachable, please try to refresh",Video_Error:"Playing a video error,\xa0please try to refresh",Decode_Error:"Data decoding\xa0error",Live_Not_Start:"Live has not started, to be expected",Live_Loading:"Live information is loading,\xa0please try to refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Live_End:"Live has finished",Live_Abrot:"Signal aborted,\xa0please try to refresh",Corss_Domain_Error:"Please ensure your domain has obtained IPC license and combined CNAME, \r\n or to set\xa0\xa0cross-domain accessing available",Url_Timeout_Error:"The video url is timeout,\xa0please try to refresh",Connetction_Error:"Sorry\uff0cthe video cannot play because of connection error, please try to watch other videos",Fetch_MTS_Error:"Fetching video list failed, please ensure",Token_Expired_Error:"Requesting open api failed, please ensure token expired or not",Video_Lists_Empty_Error:"The video list is empty, please check the format of video",Encrypted_Failed_Error:"Fetching encrypted file failed, please check the permission of player",Fetch_Failed_Permission_Error:"Fetching video list failed, please check the permission of player",Invalidate_Param_Error:"No video url, please check the parameters",AutoPlayDelayDisplayText:"Play in $$ seconds",Fetch_MTS_NOT_NotStream_Error:"The vid has no stream to play",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Open_Html_By_File:"Html page should be on the server",Cant_Use_Flash_On_Mobile:"Mobile doesn't support flash player\uff0cplease use h5 player",Flash_Not_Ready:"Flash Player plugin hasn't been installed install plugin, or check if disable Flash plugin"}},{}],10:[function(e,t,i){t.exports=t.exports={OD:"\u539f\u753b",FD:"\u6d41\u7545",LD:"\u6807\u6e05",SD:"\u9ad8\u6e05",HD:"\u8d85\u6e05","2K":"2K","4K":"4K",FHD:"\u5168\u9ad8\u6e05",XLD:"\u6781\u901f",SQ:"\u666e\u901a\u97f3\u8d28",HQ:"\u9ad8\u97f3\u8d28",Forbidden_Text:"\u5185\u90e8\u4fe1\u606f\uff0c\u4e25\u7981\u5916\u4f20",Refresh:"\u5237\u65b0",Diagnosis:"\u8bca\u65ad",Live_Finished:"\u76f4\u64ad\u5df2\u7ed3\u675f,\u8c22\u8c22\u89c2\u770b",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Snapshot:"\u622a\u56fe",Replay:"\u91cd\u64ad",Live:"\u76f4\u64ad",Encrypt:"\u52a0\u5bc6",Sound:"\u58f0\u97f3",Fullscreen:"\u5168\u5c4f",Exist_Fullscreen:"\u9000\u51fa\u5168\u5c4f",Resolution:"\u6e05\u6670\u5ea6",Next:"\u4e0b\u4e00\u96c6",Brightness:"\u4eae\u5ea6",Default:"\u9ed8\u8ba4",Contrast:"\u5bf9\u6bd4\u5ea6",Titles_Credits:"\u7247\u5934\u7247\u5c3e",Skip_Titles:"\u8df3\u8fc7\u7247\u5934",Skip_Credits:"\u8df3\u8fc7\u7247\u5c3e",Not_Support_Out_Site:"\u8be5\u89c6\u9891\u6682\u4e0d\u652f\u6301\u7ad9\u5916\u64ad\u653e\uff0c\u8bf7\u5230\u6dd8TV\u89c2\u770b",Watch_Now:"\u7acb\u5373\u89c2\u770b",Network_Error:"\u7f51\u7edc\u65e0\u6cd5\u8fde\u63a5\uff0c\u8bf7\u5c1d\u8bd5\u68c0\u67e5\u7f51\u7edc\u540e\u5237\u65b0\u8bd5\u8bd5",Video_Error:"\u89c6\u9891\u64ad\u653e\u5f02\u5e38\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Decode_Error:"\u64ad\u653e\u6570\u636e\u89e3\u7801\u9519\u8bef",Live_Not_Start:"\u4eb2\uff0c\u76f4\u64ad\u8fd8\u672a\u5f00\u59cb\u54e6\uff0c\u656c\u8bf7\u671f\u5f85",Live_Loading:"\u76f4\u64ad\u4fe1\u606f\u52a0\u8f7d\u4e2d\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Live_End:"\u4eb2\uff0c\u76f4\u64ad\u5df2\u7ed3\u675f",Live_Abrot:"\u5f53\u524d\u76f4\u64ad\u4fe1\u53f7\u4e2d\u65ad\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Corss_Domain_Error:"\u8bf7\u786e\u8ba4\u60a8\u7684\u57df\u540d\u5df2\u5b8c\u6210\u5907\u6848\u548cCNAME\u7ed1\u5b9a\uff0c\r\n\u5e76\u5904\u4e8e\u542f\u7528\u72b6\u6001\uff0c\u6216\u8d44\u6e90\u5141\u8bb8\u8de8\u8d8a\u8bbf\u95ee",Url_Timeout_Error:"\u60a8\u6240\u89c2\u770b\u7684\u89c6\u9891\u5730\u5740\u8fde\u63a5\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Connetction_Error:"\u62b1\u6b49,\u8be5\u89c6\u9891\u7531\u4e8e\u8fde\u63a5\u9519\u8bef\u6682\u65f6\u4e0d\u80fd\u64ad\u653e,\u8bf7\u89c2\u770b\u5176\u5b83\u89c6\u9891",Fetch_MTS_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4",Token_Expired_Error:"\u8bf7\u6c42\u63a5\u53e3\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4Token\u662f\u5426\u8fc7\u671f",Video_Lists_Empty_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u4e3a\u7a7a\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6570\u636e\u4e0e\u683c\u5f0f",Encrypted_Failed_Error:"\u83b7\u53d6\u89c6\u9891\u52a0\u5bc6\u79d8\u94a5\u9519\u8bef\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Fetch_Failed_Permission_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Invalidate_Param_Error:"\u65e0\u8f93\u5165\u89c6\u9891\uff0c\u8bf7\u786e\u8ba4\u8f93\u5165\u53c2\u6570",AutoPlayDelayDisplayText:"$$\u79d2\u4ee5\u540e\u5f00\u59cb\u64ad\u653e",Fetch_MTS_NOT_NotStream_Error:"\u6b64vid\u6ca1\u6709\u53ef\u64ad\u653e\u89c6\u9891",Cancel_Text:"\u53d6\u6d88",OK_Text:"\u786e\u8ba4",Auto_Stream_Tip_Text:"\u7f51\u7edc\u4e0d\u7ed9\u529b\uff0c\u662f\u5426\u5207\u6362\u5230$$",Fetch_Playauth_Error:"\u83b7\u53d6\u64ad\u653e\u51ed\u8bc1\u51fa\u9519\u5566\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Open_Html_By_File:"\u4e0d\u80fd\u76f4\u63a5\u5728\u6d4f\u89c8\u5668\u6253\u5f00html\u6587\u4ef6\uff0c\u8bf7\u90e8\u7f72\u5230\u670d\u52a1\u7aef",Cant_Use_Flash_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301Flash\u64ad\u653e\u5668\uff0c\u8bf7\u4f7f\u7528h5\u64ad\u653e\u5668",Flash_Not_Ready:"Flash Player\u63d2\u4ef6\u672a\u5b89\u88c5\u5b89\u88c5\u63d2\u4ef6\uff0c\u5982\u679c\u5df2\u7ecf\u5b89\u88c5\u8bf7\u68c0\u67e5\u662f\u5426\u88ab\u7981\u7528"}},{}],11:[function(n,e,t){var i=n("../config"),a=n("../lib/storage"),o=(n("../lib/io"),"aliplayer_lang"),s=function(){if(void 0===window[o]||!window[o]){var e=(navigator.language||navigator.browserLanguage).toLowerCase();e=e&&-1\u53c2\u8003\u6587\u6863",Speed_Switch_To:"\u500d\u901f\u5207\u6362\u5230 ",Curent_Volume:"\u5f53\u524d\u97f3\u91cf\uff1a",Volume_Mute:"\u8bbe\u7f6e\u4e3a\u9759\u97f3",Volume_UnMute:"\u8bbe\u7f6e\u4e3a\u975e\u9759\u97f3",ShiftLiveTime_Error:"\u76f4\u64ad\u5f00\u59cb\u65f6\u95f4\u4e0d\u80fd\u5927\u4e8e\u76f4\u64ad\u7ed3\u675f\u65f6\u95f4",Error_Not_Support_Format_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301flv\u3001rmtp\u89c6\u9891\uff0c\u8bf7\u4f7f\u7528m3u8",SessionId_Ticket_Invalid:"DRM\u89c6\u9891\u64ad\u653e\uff0csessionId\u548cticket\u5c5e\u6027\u4e0d\u80fd\u4e3a\u7a7a",Http_Error:"Http\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25",Http_Timeout:"http\u8bf7\u6c42\u8d85\u65f6",DRM_License_Expired:"DRM license\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0",Not_Support_DRM:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301DRM\u89c6\u9891\u7684\u64ad\u653e",CC_Switch_To:"\u5b57\u5e55\u5207\u6362\u5230 ",AudioTrack_Switch_To:"\u97f3\u8f68\u5207\u6362\u5230 ",Subtitle:"\u5b57\u5e55",AudioTrack:"\u97f3\u8f68",Quality:"\u6e05\u6670\u5ea6",Auto:"\u81ea\u52a8",Quality_Switch_To:"\u6e05\u6670\u5ea6\u5207\u6362\u5230 ",Fullscreen:"\u5168\u5c4f",Setting:"\u8bbe\u7f6e",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",CloseSubtitle:"\u5173\u95ed\u5b57\u5e55",OpenSubtitle:"\u6253\u5f00\u5b57\u5e55",ExistFullScreen:"\u9000\u51fa\u5168\u5c4f",Muted:"\u9759\u97f3",Retry:"\u91cd\u8bd5",SwitchToLive:"\u8fd4\u56de\u76f4\u64ad",iOSNotSupportVodEncription:"iOS\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e",UseChromeForVodEncription:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e\uff0c\u8bf7\u4f7f\u7528\u6700\u65b0Chrome\u6d4f\u89c8\u5668"}},{}],13:[function(e,t,i){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";if(window.Uint8Array)for(var d=new Uint8Array(256),r=0;r>4,c[l++]=(15&r)<<4|o>>2,c[l++]=(3&o)<<6|63&n;return u},encode:function(e){var t,i=new Uint8Array(e),r=i.length,o="";for(t=0;t>2],o+=n[(3&i[t])<<4|i[t+1]>>4],o+=n[(15&i[t+1])<<2|i[t+2]>>6],o+=n[63&i[t+2]];return r%3==2?o=o.substring(0,o.length-1)+"=":r%3==1&&(o=o.substring(0,o.length-2)+"=="),o},unpackPlayReady:unpackPlayReady}},{}],14:[function(e,t,i){var r=e("./oo"),o=e("../player/base/event/eventtype");t.exports.stopPropagation=function(e){window.event?window.event.cancelBubble=!0:e.stopPropagation()},t.exports.register=function(e){e.util={stopPropagation:t.exports.stopPropagation},e.Component=r.extend,e.EventType=o.Player}},{"../player/base/event/eventtype":43,"./oo":27}],15:[function(e,t,i){var r=e("../lang/index");t.exports.LOAD_START="loadstart",t.exports.LOADED_METADATA="loadedmetadata",t.exports.LOADED_DATA="loadeddata",t.exports.PROGRESS="progress",t.exports.CAN_PLAY="canplay",t.exports.CAN_PLYA_THROUGH="canplaythrough",t.exports.PLAY="play",t.exports.PAUSE="pause",t.exports.ENDED="ended",t.exports.PLAYING="playing",t.exports.WAITING="waiting",t.exports.ERROR="error",t.exports.SUSPEND="suspend",t.exports.STALLED="stalled",t.exports.AuthKeyExpiredEvent="authkeyexpired",t.exports.DRMKeySystem={4:"com.microsoft.playready",5:"com.widevine.alpha"},t.exports.EncryptionType={Private:1,Standard:2,ChinaDRM:3,PlayReady:4,Widevine:5},t.exports.VodEncryptionType={AliyunVoDEncryption:1,HLSEncryption:2},t.exports.DRMType={Widevine:"Widevine",PlayReady:"PlayReady"},t.exports.ErrorCode={InvalidParameter:4001,AuthKeyExpired:4002,InvalidSourceURL:4003,NotFoundSourceURL:4004,StartLoadData:4005,LoadedMetadata:4006,PlayingError:4007,LoadingTimeout:4008,RequestDataError:4009,EncrptyVideoNotSupport:4010,FormatNotSupport:4011,PlayauthDecode:4012,PlayDataDecode:4013,NetworkUnavaiable:4014,UserAbort:4015,NetworkError:4016,URLsIsEmpty:4017,CrossDomain:4027,OtherError:4400,ServerAPIError:4500,FlashNotInstalled:4600},t.exports.AuthKeyExpired=7200,t.exports.AuthKeyRefreshExpired=7e3,t.exports.AuthInfoExpired=100,t.exports.VideoErrorCode={1:4015,2:4016,3:4013,4:4400},t.exports.IconType={FontClass:"fontclass",Symbol:"symbol",Sprite:"Sprite"},t.exports.SelectedStreamLevel="selectedStreamLevel",t.exports.SelectedCC="selectedCC",t.exports.WidthMapToLevel={0:"OD",640:"FD",960:"LD",1280:"SD",1920:"HD",2580:"2K",3840:"4K"};var o=function(){t.exports.VideoErrorCodeText={1:r.get("Error_Load_Abort_Text"),2:r.get("Error_Network_Text"),3:r.get("Error_Decode_Text"),4:r.get("Error_Server_Network_NotSupport_Text")},t.exports.VideoLevels={0:r.get("OD"),640:r.get("FD"),960:r.get("LD"),1280:r.get("SD"),1920:r.get("HD"),2580:r.get("2K"),3840:r.get("4K")},t.exports.QualityLevels={OD:r.get("OD"),LD:r.get("LD"),FD:r.get("FD"),SD:r.get("SD"),HD:r.get("HD"),"2K":r.get("2K"),"4K":r.get("4K"),XLD:r.get("XLD"),FHD:r.get("FHD"),SQ:r.get("SQ"),HQ:r.get("HQ")},t.exports.SpeedLevels=[{key:.5,text:r.get("Speed_05X_Text")},{key:1,text:r.get("Speed_1X_Text")},{key:1.25,text:r.get("Speed_125X_Text")},{key:1.5,text:r.get("Speed_15X_Text")},{key:2,text:r.get("Speed_2X_Text")}]};o(),t.exports.updateByLanguage=o},{"../lang/index":11}],16:[function(e,t,i){t.exports.get=function(e){for(var t=e+"",i=document.cookie.split(";"),r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},hexadecimalInteger:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var i=new Uint8Array(t.length/2),r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},decimalFloatingPoint:function(e){return parseFloat(this[e])},enumeratedString:function(e){return this[e]},decimalResolution:function(e){var t=r.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}},parseAttrList:function(e){var t,i={};for(o.lastIndex=0;null!==(t=o.exec(e));){var r=t[2];0===r.indexOf('"')&&r.lastIndexOf('"')===r.length-1&&(r=r.slice(1,-1)),i[t[1]]=r}return i}},t.exports=n},{}],23:[function(e,t,i){var P=e("./attrlist"),r=e("../io"),o=e("./URLToolkit"),c=/#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g,u=/#EXT-X-MEDIA:(.*)/g,w=new RegExp([/#EXTINF:(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/|(?!#)(\S+)/.source,/|#EXT-X-BYTERANGE:*(.+)/.source,/|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/|#.*/.source].join(""),"g"),C=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,k=function(){this.method=null,this.key=null,this.iv=null,this._uri=null},I=function(){this._url=null,this._byteRange=null,this._decryptdata=null,this.tagList=[]};I.prototype.getUrl=function(){return!this._url&&this.relurl&&(this._url=o.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},I.prototype.Seturl=function(e){this._url=e},I.prototype.getProgramDateTime=function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime},I.prototype.GetbyteRange=function(){if(!this._byteRange){var e=this._byteRange=[];if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var i=this.lastByteRangeEndOffset;e[0]=i||0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange},I.prototype.getByteRangeStartOffset=function(){return this.byteRange[0]},I.prototype.getByteRangeEndOffset=function(){return this.byteRange[1]};I.prototype.getDecryptdata=function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata};var n=function(){this.loaders={}};n.prototype={parseMasterPlaylist:function(e,t){var i,r=[];for(c.lastIndex=0;null!=(i=c.exec(e));){var o={},n=o.attrs=new P(i[1]);o.url=this.resolve(i[2],t);var a=n.decimalResolution("RESOLUTION");a&&(o.width=a.width,o.height=a.height),o.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),o.name=n.NAME;var s=n.CODECS;if(s){s=s.split(/[ ,]+/);for(var l=0;l",quot:'"',"#x27":"'","#x60":"`"}[t.toLowerCase()]||e})}},{}],27:[function(e,t,i){var o=e("./object"),n=function(){};(n=function(){}).extend=function(e){var t,i;for(var r in t=(e=e||{}).init||e.init||this.prototype.init||this.prototype.init||function(){},(((i=function(){t.apply(this,arguments)}).prototype=o.create(this.prototype)).constructor=i).extend=n.extend,i.create=n.create,e)e.hasOwnProperty(r)&&(i.prototype[r]=e[r]);return i},n.create=function(){var e=o.create(this.prototype);return this.apply(e,arguments),e},t.exports=n},{"./object":26}],28:[function(e,f,t){var _=e("./object"),i=e("../config"),r=e("./dom"),o=e("./cookie"),n=e("./constants"),a=e("../lang/index"),s=e("./ua"),g=e("../player/base/plugin/defaultemptycomponent"),y={preload:!0,autoplay:!0,useNativeControls:!1,width:"100%",height:"300px",cover:"",from:"",trackLog:!0,logBatched:!0,isLive:!1,playsinline:!0,showBarTime:5e3,rePlay:!1,liveRetry:5,liveRetryInterval:1,liveRetryStep:0,vodRetry:3,format:"",definition:"",defaultDefinition:"",loadDataTimeout:20,waitingTimeout:60,delayLoadingShow:1,controlBarForOver:!1,controlBarVisibility:"hover",enableSystemMenu:!1,qualitySort:"asc",x5_video_position:"normal",x5_type:"",x5_fullscreen:!1,x5_orientation:"landscape|portrait",x5LandscapeAsFullScreen:!0,autoPlayDelay:0,autoPlayDelayDisplayText:"",useHlsPluginForSafari:!1,enableMSEForAndroid:!0,encryptType:0,language:"zh-cn",languageTexts:{},mediaType:"video",outputType:"",playConfig:{},reAuthInfo:{},components:[],liveTimeShiftUrl:"",liveShiftSource:"",liveShiftTime:"",videoHeight:"100%",videoWidth:"100%",enableWorker:!0,authTimeout:"",enableMockFullscreen:!1,region:"cn-shanghai",debug:!1,progressMarkers:[],snapshotWatermark:{left:"500",top:"100",text:"",font:"16px \u5b8b\u4f53",fillColor:"#FFFFFF",strokeColor:"#FFFFFF"},liveStartTime:"",liveOverTime:"",enableStashBufferForFlv:!0,stashInitialSizeForFlv:32,flvOption:{},hlsOption:{stopLoadAsPaused:!1},hlsLoadingTimeOut:2e4,useHlsPlugOnMobile:!0,nudgeMaxRetry:5,tracks:[],recreatePlayer:function(){},diagnosisButtonVisible:!0,_native:!0,ai:{label:!1,meta:{url:"http://172.19.61.105:8085/meta/query",getMeta:""},boxes:"",host:"",app:"",streamName:"",startDateTime:0,waitMetaDataTime:2,displayAttrs:{header:"\u59d3\u540d","\u8bc1\u4ef6\u53f7\u7801":"text","\u6027\u522b":"text","\u5e74\u9f84":"text","\u53d1\u578b":"text","\u4eba\u8138\u5927\u56fe":function(e){},"\u4eba\u8138\u5c0f\u56fe":function(e){}},getClass:function(e,t){return""}},thumbnailUrl:"",skinRes:"//"+i.domain+"/de/prismplayer-flash/"+i.flashVersion+"/atlas/defaultSkin"};f.exports.defaultH5Layout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"H5Loading",align:"cc"},{name:"errorDisplay",align:"tlabs",x:0,y:0},{name:"infoDisplay"},{name:"tooltip",align:"blabs",x:0,y:50},{name:"thumbnail"},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"fullScreenButton",align:"tr",x:10,y:12},{name:"subtitle",align:"tr",x:15,y:12},{name:"setting",align:"tr",x:15,y:12},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultAudioLayout=[{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultFlashLayout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"tlabs",x:0,y:0},{name:"playButton",align:"tl",x:15,y:26},{name:"nextButton",align:"tl",x:10,y:26},{name:"timeDisplay",align:"tl",x:10,y:24},{name:"fullScreenButton",align:"tr",x:10,y:25},{name:"streamButton",align:"tr",x:10,y:23},{name:"volume",align:"tr",x:10,y:25}]},{name:"fullControlBar",align:"tlabs",x:0,y:0,children:[{name:"fullTitle",align:"tl",x:25,y:6},{name:"fullNormalScreenButton",align:"tr",x:24,y:13},{name:"fullTimeDisplay",align:"tr",x:10,y:12},{name:"fullZoom",align:"cc"}]}],f.exports.canPlayType=function(e){var t=document.createElement("video");return t.canPlayType?t.canPlayType(e):""},f.exports.canPlayHls=function(){return""!=f.exports.canPlayType("application/x-mpegURL")},f.exports.isUsedHlsPluginOnMobile=function(e){return!(!s.IS_MOBILE||!s.IS_CHROME&&!s.IS_FIREFOX)},f.exports.isSafariUsedHlsPlugin=function(e){return!!(s.os.pc&&s.browser.safari&&e)},f.exports.hasUIComponent=function(e,t){if(void 0===e||!e||0==e.length)return!1;for(var i=0,r=e.length;ix'}).firstChild.href),e},t.exports.parseUrl=function(e){var t,i,r,o,n;o=["protocol","hostname","port","pathname","search","hash","host"],(r=""===(i=s.createEl("a",{href:e})).host&&"file:"!==i.protocol)&&((t=s.createEl("div")).innerHTML='',i=t.firstChild,t.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(t)),n={};for(var a=0;a/g,">").replace(/\&/g,"&").replace(/"/g,""").replace(/'/g,"'")},r.exports.toBinary=function(e){if(!window.atob)return"";for(var t=atob(e),i=t.length,r=new Uint8Array(i),o=0;o>>0).toString()},r={parse:function(e,t,i){var r,o=e.trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),n=[],a=new s;a.oncue=function(e){e.id=l(e.startTime)+l(e.endTime)+l(e.text),e.text=decodeURIComponent(escape(e.text)),e.isBig=!1;var t=e.text.split("#xywh=");if(2==t.length){var i=t[1].split(",");e.x=i[0],e.y=i[1],e.w=i[2],e.h=i[3],e.isBig=!0}0/gi,"\n")}(e);tthis._uploadCount||"4001"==e.e||"2002"==e.e)&&this._report()},r.prototype.dispose=function(){this._report(),this._disposed=!0},r.prototype._start=function(){this._disposed=!1;this._retry=0,this._report()},r.prototype._report=function(t){if(this._tickHandler&&(clearTimeout(this._tickHandler),this._tickHandler=null),t||(t=this._logs.splice(0,this._uploadCount)),0this._uploadCount?e._report():this._tickHandler=setTimeout(function(){e._report()},1e3*this._uploadDuration)}},t.exports=r},{"../lib/io":24,"../lib/storage":30}],38:[function(e,t,i){var r=e("../lib/oo"),u=e("../lib/object"),v=e("../lib/data"),c=e("../lib/io"),m=e("../lib/ua"),S=e("../config"),o=e("../player/base/event/eventtype"),T=e("./util"),b=e("./log"),n=0,d={STARTFETCHDATA:1003,COMPLETEFETCHDATA:1004,PREPARE:1101,PREPAREEND:1102,STARTPLAY:2e3,PLAY:2001,STOP:2002,PAUSE:2003,SEEK:2004,FULLSREEM:2005,QUITFULLSCREEM:2006,RESOLUTION:2007,RESOLUTION_DONE:2008,RECOVER:2010,SEEK_END:2011,FETCHEDIP:2020,CDNDETECT:2021,DETECT:2022,UNDERLOAD:3002,LOADED:3001,HEARTBEAT:9001,ERROR:4001,ERRORRETRY:4002,SNAPSHOT:2027,ROTATE:2028,IMAGE:2029,THUMBNAILSTART:2031,THUMBNAILCOMPLETE:2032,CCSTART:2033,CCCOMPLETE:2034,AUDIOTRACKSTART:2033,AUDIOTRACKCOMPLETE:2034},a=r.extend({init:function(e,t,i){void 0===i&&(i=!0),this.trackLog=i,this.player=e,this.requestId="",this.sessionId=v.guid(),this.playId=0,this.firstPlay=!0,this.osName=m.os.name,this.osVersion=m.os.version||"",this.exName=m.browser.name,this.exVersion=m.browser.version||"",this._logService="",t.logBatched&&(this._logService=new b(S));var r=this.player.getOptions(),o=t.from?t.from:"",n=(r.isLive,r.isLive?"live":"vod"),a="pc";m.IS_IPAD?a="pad":m.os.phone&&(a="phone");var s=this.encodeURL(m.getReferer()),l=m.getHref(),u=this.encodeURL(l),c="";l&&(c=m.getHost(l));var d=S.h5Version,p=T.getUuid(),h=r.source?this.encodeURL(r.source):"",f=m.getHost(r.source),_=r.userId?r.userId+"":"0",g=this.sessionId,y=(new Date).getTime();this._userNetInfo={cdnIp:"",localIp:""};this.opt={APIVersion:"0.6.0",t:y,ll:"info",lv:"1.0",pd:"player",md:"saas_player",ui:"saas_player",sm:"play",os:this.osName,ov:this.osVersion,et:this.exName,ev:this.exVersion,uat:m.USER_AGENT,hn:"0.0.0.0",bi:o,ri:g,e:"0",args:"0",vt:n,tt:a,dm:"h5",av:d,uuid:p,vu:h,vd:f,ua:_,dn:"custom",cdn_ip:"0.0.0.0",app_n:c,r:s,pu:u},this.bindEvent()},updateVideoInfo:function(e){var t=e.from?e.from:"";this.opt.bi=t+"",this.updateSourceInfo()},updateSourceInfo:function(){var e=this.player.getOptions();if(e){var t=e.source?this.encodeURL(e.source):"",i=m.getHost(e.source);this.opt.vu=t,this.opt.vd=i}},replay:function(){this.reset(),this.player.trigger(o.Video.LoadStart),this.player.trigger(o.Video.LoadedMetadata),this.player.trigger(o.Video.LoadedData)},bindEvent:function(){var t=this;this.player.on(o.Player.Init,function(){t._onPlayerInit()}),this.player.on(o.Video.LoadStart,function(){t._onPlayerloadstart()}),this.player.on(o.Video.LoadedMetadata,function(){t._onPlayerLoadMetadata()}),this.player.on(o.Video.LoadedData,function(){t._onPlayerLoaddata()}),this.player.on(o.Video.Play,function(){t._onPlayerPlay()}),this.player.on(o.Video.Playing,function(){t._onPlayerReady()}),this.player.on(o.Video.Ended,function(){t._onPlayerFinish()}),this.player.on(o.Video.Pause,function(){t._onPlayerPause()}),this.player.on(o.Private.SeekStart,function(e){t._onPlayerSeekStart(e)}),this.player.on(o.Private.EndStart,function(e){t._seekEndData=e.paramData}),this.player.on(o.Player.Waiting,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._waitingDelayLoadingShowHandle=setTimeout(function(){t._onPlayerLoaded()},1e3*t.player._options.delayLoadingShow)}),this.player.on(o.Video.CanPlayThrough,function(){}),this.player.on(o.Video.CanPlay,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._onPlayerUnderload(),t._onPlayerCanplay()}),this.player.on(o.Video.TimeUpdate,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._seekEndData&&t.seeking&&t._onPlayerSeekEnd()}),this.player.on(o.Player.Error,function(){t._onPlayerError()}),this.player.on(o.Player.RequestFullScreen,function(){t._onFullscreenChange(1)}),this.player.on(o.Player.CancelFullScreen,function(){t._onFullscreenChange(0)}),this.player.on(o.Private.PREPARE,function(e){t._prepareTime=(new Date).getTime(),t._log("PREPARE",{dn:e.paramData})}),this.player.on(o.Player.Snapshoted,function(){t._log("SNAPSHOT")}),setInterval(function(){if(t.player.getCurrentTime()){var e=Math.floor(1e3*t.player.getCurrentTime());t.player.paused()||30<=++n&&(t._log("HEARTBEAT",{vt:e,interval:1e3*n}),n=0)}},1e3)},removeEvent:function(){this.player.off("init"),this.player.off("ready"),this.player.off("ended"),this.player.off("play"),this.player.off("pause"),this.player.off("seekStart"),this.player.off("seekEnd"),this.player.off("canplaythrough"),this.player.off("playing"),this.player.off("timeupdate"),this.player.off("error"),this.player.off("fullscreenchange"),this.player.off(o.Private.PREPARE),this._logService&&this._logService.dispose()},reset:function(){this.startTimePlay=0,this.buffer_flag=0,this.firstPlay=!1,this.playId=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},encodeURL:function(e){if(!e)return"";var t=this.player.getOptions();return t&&!t.logBatched?encodeURIComponent(e):e},_onFullscreenChange:function(e){e?this._log("FULLSREEM",{}):this._log("QUITFULLSCREEM",{})},_onPlayerloadstart:function(){this.loadstartTime=(new Date).getTime(),this.playId=v.guid(),!this.loadstarted&&this.player._isPreload()&&(this.loadstarted=1,this._log("STARTPLAY",{vt:(new Date).getTime()}))},_onPlayerLoadMetadata:function(){this.loadMetaDataCost=(new Date).getTime()-this.loadstartTime},_onPlayerLoaddata:function(){if(!this._LoadedData&&!this.buffer_flag){var e=0,t=0;this.player.tag&&(e=this.player.tag.videoWidth,t=this.player.tag.videoHeight),this._log("PREPAREEND",{tc:(new Date).getTime()-this._prepareTime,cc:(new Date).getTime()-this.loadstartTime,md:this.loadMetaDataCost,mi:JSON.stringify({type:"video",definition:e+"*"+t})})}this._LoadedData=1},_onPlayerCanplay:function(){this._canPlay=1,this._reportPlay()},_onPlayerInit:function(){this.buffer_flag=0,this.pause_flag=0,this.startTimePlay=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},_onPlayerReady:function(){this.startTimePlay||(this.startTimePlay=(new Date).getTime())},_onPlayerFinish:function(){this._log("STOP",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.reset()},_reportPlay:function(){return!(this.buffer_flag||!this._LoadedData||!this.playstartTime)&&(this.first_play_time=(new Date).getTime(),this._log("PLAY",{dsm:"fix",tc:this.first_play_time-this.loadstartTime,fc:this.first_play_time-this.playstartTime}),this.buffer_flag=1,!0)},_onPlayerPlay:function(){this.playstartTime=(new Date).getTime(),0==this.playId&&(this.playId=v.guid()),this.firstPlay||0!=this.pause_flag||this.seeking||(this.sessionId=v.guid()),this.player._isPreload()||(this._log("STARTPLAY",{vt:(new Date).getTime()}),this.loadstartTime=(new Date).getTime()),this._canPlay&&this._reportPlay()||this.buffer_flag&&this.pause_flag&&(this.pause_flag=0,this.pauseEndTime=(new Date).getTime(),this._log("RECOVER",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.pauseEndTime-this.pauseTime}))},_onPlayerPause:function(){this.buffer_flag&&this.startTimePlay&&(this.seeking||(this.pause_flag=1,this.pauseTime=(new Date).getTime(),this._log("PAUSE",{vt:Math.floor(1e3*this.player.getCurrentTime())})))},_onPlayerSeekStart:function(e){this.seekStartTime=e.paramData.fromTime,this.seeking=!0,this.startTimePlay=0,this.seekStartStamp=(new Date).getTime()},_onPlayerSeekEnd:function(){this.seekEndStamp=(new Date).getTime(),this._log("SEEK",{drag_from_timestamp:Math.floor(1e3*this.seekStartTime),drag_to_timestamp:Math.floor(1e3*this._seekEndData.toTime)}),this._log("SEEK_END",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.seekEndStamp-this.seekStartStamp}),this.seeking=!1,this._seekEndData=null},_onPlayerLoaded:function(){this.buffer_flag&&this.startTimePlay&&(this.stucking||this.seeking||(this.stuckStartTime=(new Date).getTime(),this.stuckStartTime-this.startTimePlay<=1e3||(this.stucking=!0,this._log("UNDERLOAD",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.stuckStartTime=(new Date).getTime())))},_onPlayerUnderload:function(){if((this.buffer_flag||!this.player._options||!this.player._options.autoplay)&&this.stucking&&!this.seeking){var e=Math.floor(1e3*this.player.getCurrentTime()),t=this.stuckStartTime||(new Date).getTime(),i=Math.floor((new Date).getTime()-t);0t._liveRetryCount?t._reloadAndPlayForM3u8():(t._liveRetryCount=0,t.trigger(c.Player.LiveStreamStop),t._liveErrorHandle=setTimeout(function(){var e={mediaId:"ISLIVE",error_code:r,error_msg:p.get("Error_Play_Text")+"\uff0c"+p.get("Error_Retry_Text")};t.logError(e),t.trigger("error",e)}));else if(t._reloadForVod());else{var a=p.get("Error_Play_Text"),s=!1;if(i<4){if(3==i&&t._firstDecodeError){var l=t.getCurrentTime()+1;return t._loadByUrlInner(t._options.source,l,!0),void(t._firstDecodeError=!1)}a=d.VideoErrorCodeText[i]}else t._eventState==d.SUSPEND?(a=p.get("Error_Load_Abort_Text"),r=d.ErrorCode.RequestDataError):t._eventState==d.LOAD_START?(a=p.get("Error_Network_Text"),0"+(100*e).toFixed()+"%";this._player.trigger(T.Private.Info_Show,{text:i,duration:1e3,align:"lb"})},P.prototype._setInnerVolume=function(e){this.tag.volume=e,this.trigger(T.Private.VolumnChanged,e)},P.prototype.hideProgress=function(){this.trigger(T.Private.HideProgress)},P.prototype.cancelHideProgress=function(){this.trigger(T.Private.CancelHideProgress)},P.prototype.setPlayerSize=function(e,t){this._el.style.width=e,this._el.style.height=t},P.prototype.getBuffered=function(){return this.tag.buffered},P.prototype.setRotate=function(e){this.tag&&(this._rotate=e,this._setTransform(),this.log("ROTATE",{rotation:e}))},P.prototype.getRotate=function(e){return void 0===this._rotate?0:this._rotate},P.prototype.setImage=function(e){this.tag&&(this._image=e,this._setTransform(),this.log("IMAGE",{mirror:"horizon"==e?2:1,text:e}))},P.prototype.getImage=function(){return this._image},P.prototype.cancelImage=function(){this.tag&&(this._image="",this._setTransform(),this.log("IMAGE",{mirror:0}))},P.prototype.setCover=function(e){var t=document.querySelector("#"+this.id()+" .prism-cover");t&&e&&(t.style.backgroundImage="url("+e+")",this._options.cover=e,this.trigger(T.Private.Cover_Show))},P.prototype._setTransform=function(){this._transformProp||(this._transformProp=o.getTransformName(this.tag));var e=" translate(-50%, -50%)";this._rotate&&(e+=" rotate("+this._rotate+"deg)"),this._image&&("vertical"==this._image?e+=" scaleY(-1)":"horizon"==this._image&&(e+=" scaleX(-1)")),this.tag.style[this._transformProp]=e},P.prototype._startPlay=function(){this.tag.paused&&this.tag.play()},P.prototype._initPlayBehavior=function(e,t){if(this._checkSupportVideoType())return!1;if(p.validateSource(t))return void 0===e&&(e=!1),this._created||(this._created=!0,this.trigger(T.Private.Created)),this.loaded||this.trigger(T.Player.Init),this._options.autoplay||this._options._autoplay||this._options.preload||e?(this._options._preload=!0,this._initLoad(t),(this._options.autoplay||this._options._autoplay)&&this._startPlay()):this.trigger(T.Private.Play_Btn_Show),!0;var i={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return i.display_msg=_.get("Error_Invalidate_Source"),this.trigger(T.Player.Error,i),!1},P.prototype._isPreload=function(){return this._options.autoplay||this._options.preload||this._options._preload},P.prototype._initLoad=function(e){this.getMetaData(),e&&(this._isPreload()&&!r.IS_MOBILE?this.trigger(T.Private.H5_Loading_Show):(this.trigger(T.Private.H5_Loading_Hide),this.trigger(T.Private.Play_Btn_Show)),this.tag.setAttribute("src",e),this.loaded=!0)},P.prototype._clearLiveErrorHandle=function(){this._liveErrorHandle&&(clearTimeout(this._liveErrorHandle),this._liveErrorHandle=null)},P.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(T.Player.OnM3u8Retry);var e=this._options,t=e.liveRetryInterval+e.liveRetryStep*this._liveRetryCount;d.sleep(1e3*t),this._liveRetryCount++,this.tag.load(this._options.source),this.tag.play()},P.prototype._checkSupportVideoType=function(){if(!this.tag.canPlayType||!this._options.source||!r.IS_MOBILE)return"";var e=this._options.source,t="";if(0=this._options.playConfig.PreviewTime},P.prototype.isPreview=function(){var e=this._options.playConfig.PreviewTime,t=this._vodDuration||this.tag.duration;return 0'},_getPlayer:function(e){return-1!=navigator.appName.indexOf("Microsoft")?document.getElementById(e):document[e]},_getLowerQualityLevel:function(){var e=this._getVideoUrls();if(!e)return"";var t=e.Urls,i=e.index;return t&&0==t.length||-1==i?"":0u._liveRetryCount){0==u._liveRetryCount&&u.trigger(_.Player.OnM3u8Retry);var l=s.liveRetryInterval+s.liveRetryStep*u._liveRetryCount;u._liveRetryCount++,h.sleep(1e3*l),u._loadByUrlInner(s.source)}else u._liveErrorHandle&&clearTimeout(u._liveErrorHandle),u.trigger(_.Player.LiveStreamStop),u._liveErrorHandle=setTimeout(a,500)}else{if(u._reloadForVod())return;a()}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],72:[function(e,t,i){var r=e("../base/player"),o=e("./flvinjector"),n=r.extend({init:function(e,t){o.inject(this,n,r,t,function(e){}),t._native=!1,r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./flvinjector":71}],73:[function(e,t,i){var c=e("../../lib/io"),d=e("../../config"),p=e("../../lib/constants"),h=e("../../lib/util"),f=e("../../lib/playerutil"),_=(e("../../lib/dom"),e("../../lib/ua")),g=e("../../lang/index"),y=e("../base/event/eventtype");e("../base/player");t.exports.inject=function(e,t,i,r,n,o){var a=r.source,s=r.useHlsPluginForSafari,l=r.useHlsPlugOnMobile;if(n||o||function(e,t,i,r){return!(e._hls||!f.isHls(t)||!(!f.canPlayHls()||f.isSafariUsedHlsPlugin(i)||r&&f.isUsedHlsPluginOnMobile()))}(e,a,s,l)){e._Type=t,e._superType=i,e._superPt=i.prototype,e._disposed=!1,t.prototype._checkHlsReady=function(){if(null==e._hls)throw new Error("please invoke this method after ready event")},e._isHls=!0,e._hls=null,e._isLoadedHls=!1,e._stopLoadAsPaused=!0,t.prototype.play=function(e){this._checkHlsReady(),this._isManualPlay=e||!1;if(this.trigger(y.Private.Cover_Hide),this._options.autoplay||this._options.preload||this._loadSourced||(this._loadSourced=!0,this._options._autoplay=!0,this._hls.loadSource(this._options.source)),this.tag.ended||this._ended)this.replay();else if(this.tag.paused&&(this.tag.play(),this._stopLoadAsPaused)){var t=this.getCurrentTime();this._hls.startLoad(t)}return this},t.prototype.replay=function(){return this._monitor&&this._monitor.replay(),this._hls.startLoad(0),this.tag.play(),this},t.prototype.pause=function(e){return this.tag&&(this._checkHlsReady(),this.tag.pause(),this._stopLoadAsPaused&&this._hls.stopLoad()),this._isManualPause=e||!1,this},t.prototype.stop=function(){return this._checkHlsReady(),this.tag.setAttribute("src",null),this._hls.stopLoad(),this},t.prototype.seek=function(e){this._checkHlsReady();try{this._superPt.seek.call(this,e),this.tag.paused&&this._stopLoadAsPaused&&this._hls.startLoad(e)}catch(e){console.log(e)}return this},t.prototype.getProgramDateTime=function(){if(this._checkHlsReady(),-1==this._hls.currentLevel)return"";var e=this._hls.currentLevel,t=this._hls.levels[e].details;if(t){var i=t.programDateTime;if(console.log("ProgramDateTime="+i),i)return new Date(i).valueOf()}return 0},t.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(y.Player.OnM3u8Retry),this._liveRetryCount++},t.prototype._switchLevel=function(e){this.trigger(y.Player.LevelSwitch);for(var t=this._hls.levels,i=0;il._liveRetryCount){0==l._liveRetryCount&&l.trigger(y.Player.OnM3u8Retry);var s=a.liveRetryInterval+a.liveRetryStep*l._liveRetryCount;l._liveRetryCount++,h.sleep(1e3*s),o&&l._loadByUrlInner(l._options.source,0,!0)}else l._liveErrorHandle&&clearTimeout(l._liveErrorHandle),l.trigger(y.Player.LiveStreamStop),l._liveErrorHandle=setTimeout(n,500)}else{if(l._reloadForVod())return;n()}}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],74:[function(e,t,i){var r=e("../base/player"),o=e("./hlsinjector"),n=r.extend({init:function(e,t){t._native=!1,o.inject(this,n,r,t),r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./hlsinjector":73}],75:[function(e,t,i){var r=e("../../lib/constants"),o=e("../../lib/oo").extend({init:function(e){this.player=e,this.tickhandle=null}});o.prototype.tick=function(e,t){var i=this;this.tickhandle=setTimeout(function(){i.player&&i.player.trigger(r.AuthKeyExpiredEvent),t&&t()},1e3*e)},o.prototype.clearTick=function(e){this.tickhandle&&clearTimeout(this.tickhandle)},t.exports=o},{"../../lib/constants":15,"../../lib/oo":27}],76:[function(e,t,i){var l=e("../../lib/io"),u=(e("../../lib/ua"),e("../../lib/bufferbase64")),c=e("../../lib/constants"),d=e("./signature"),p=e("./util"),h=e("../../lang/index"),f=function(e,r,o){var t=d.randomUUID(),i="https://mts."+e.domainRegion+".aliyuncs.com/?",n={AccessKeyId:e.accessId,Action:"GetLicense",MediaId:e.vid,LicenseUrl:i,data:e.data,SecurityToken:e.stsToken,Format:"JSON",Type:e.encryptionType,Version:"2014-06-18",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",SignatureNonce:t};e.header&&(n.Header=e.header);var a=i+("Signature="+d.AliyunEncodeURI(d.makeChangeSiga(n,e.accessSecret,"POST"))),s=d.makeUTF8sort(n,"=","&");l.post(a,s,function(e){if(e){var t=JSON.parse(e);if(r){var i=t.License;r(i)}}else o&&o(p.createError("MPS\u83b7\u53d6License\u5931\u8d25"))},function(e){if(o){var t={Code:"",Message:h.get("Error_MTS_Fetch_Urls_Text")};try{t=JSON.parse(e)}catch(e){}o({Code:c.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId||""})}})};t.exports.requestLicenseKey=function(e){var l=e;return l._options.vid&&(l.__vid=l._options.vid),function(e,i){var t=l._options,r=l._getDRMEncryptItem();if(r){var o={vid:l.__vid,accessId:t.accId,accessSecret:t.accSecret,stsToken:t.stsToken,domainRegion:t.domainRegion,authInfo:t.authInfo,encryptionType:r.encryptionType};if(r.encryptionType==c.EncryptionType.Widevine)o.data=u.encode(e.message);else if(r.encryptionType==c.EncryptionType.PlayReady){var n=u.unpackPlayReady(e.message);o.data=n.changange,n.header&&(o.header=JSON.stringify(n.header))}console.log(o.data);var a=l.__licenseKeys,s=l.__vid+r.Url;a&&a[s],f(o,function(e){l.__licenseKeys||(l.__licenseKeys={}),10e&&(this.loadByUrl(this._urls[e].Url,this.getCurrentTime()),this._currentPlayIndex=e,this.trigger(y.Private.QualityChange,t||_.get("Quality_Change_Fail_Switch_Text")))},v.prototype._getLowerQualityLevel=function(){if(0==this._urls.length||-1==this._currentPlayIndex)return"";if("asc"==this.options().qualitySort){if(0"+n,r.trigger("error",l),console.log("PrismPlayer Error: "+i+"! error_msg :"+n+";")},t.exports=v},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/cookie":16,"../../lib/event":19,"../../lib/io":24,"../../lib/playerutil":29,"../audio/audioplayer":41,"../base/event/eventtype":43,"../base/player":62,"../drm/drminjector":68,"../flv/flvinjector":71,"../hls/hlsinjector":73,"./authkeyexpiredhandle":75,"./signature":80}],80:[function(e,c,t){var r=e("crypto-js/hmac-sha1"),o=e("crypto-js/enc-base64"),i=e("crypto-js/enc-utf8");c.exports.randomUUID=function(){for(var e=[],t="0123456789abcdef",i=0;i<36;i++)e[i]=t.substr(Math.floor(16*Math.random()),1);return e[14]="4",e[19]=t.substr(3&e[19]|8,1),e[8]=e[13]=e[18]=e[23]="-",e.join("")},c.exports.returnUTCDate=function(){var e=new Date,t=e.getUTCFullYear(),i=e.getUTCMonth(),r=e.getUTCDate(),o=e.getUTCHours(),n=e.getUTCMinutes(),a=e.getUTCSeconds(),s=e.getUTCMilliseconds();return Date.UTC(t,i,r,o,n,a,s)},c.exports.AliyunEncodeURI=function(e){var t=encodeURIComponent(e);return t=(t=(t=t.replace("+","%2B")).replace("*","%2A")).replace("%7E","~")},c.exports.makesort=function(e,t,i){if(!e)throw new Error("PrismPlayer Error: vid should not be null!");var r=[];for(var o in e)r.push(o);var n=r.sort(),a="",s=n.length;for(o=0;o=this.liveTimeRange.end)},r.prototype.switchToLive=function(){var e=that._player._options.recreatePlayer;e&&this._isLiveShift&&(this._player.dispose(),setTimeout(function(){e()},1e3),this._isLiveShift=!1)},r.prototype.getBaseTime=function(){this.liveShiftStartDisplay;return-1==this.seekTime?n.parseTime(this.currentTimeDisplay):n.parseTime(this.liveShiftStartDisplay)+this.seekTime},r.prototype.getSourceUrl=function(e,t){var i=this._originalPlayUrl;return this.availableLiveShiftTime<=e?i:(this._isLiveShift=!0,(e=parseInt(e))<=5&&(e=5),(i=this._switchLiveShiftPlayer(t))&&(i=i.replace("lhs_offset_unix_s_0","z")),i=-1==i.indexOf("?")?i+"?lhs_offset_unix_s_0="+e:i+"&lhs_offset_unix_s_0="+e)},r.prototype._switchLiveShiftPlayer=function(e){var t=this._originalPlayUrl,i=this._player._options.liveShiftSource,r=this._player._options.source;if(a.isHls(r))t=r;else if(a.isFlv(t)&&i&&a.isHls(i)){this._player._flv&&this._player._destroyFlv();var o=this._player._superType,n=this._player._Type;return this._player._options._autoplay=!0,l.inject(this._player,n,o,this._player._options,"",!0),i}return t},r.prototype.getTimeline=function(i,r){if(this._player.trigger(c.Private.LiveShiftQueryCompleted),!this._liveShiftUrl)return p(this,(new Date).valueOf()/1e3),void(i&&i());var o=this;this.queryLiveShift(this._liveShiftUrl,function(e){if(e){var t=e;0==t.retCode?(p(o,t.content.current),i&&i()):r({Code:u.ErrorCode.ServerAPIError,Message:t.retCode+"|"+t.description+"|"+t.content})}else console.log("\u83b7\u53d6\u76f4\u64ad\u65f6\u79fb\u6570\u636e\u5931\u8d25")},function(e){if(r&&e){var t={};if(e){if(-1"+_.get("Retry")+""+_.get("Detection_Text")+"

      code\uff1a

      vid:

      uuid:

      requestId:

      "+_.get("Play_DateTime")+"\uff1a

      ",e},bindEvent:function(){var i=this;i._player.on(a.Private.Error_Show,function(e){var t=null;i._player.getMonitorInfo&&(t=i._player.getMonitorInfo()),i._show(e,t)}),i._player.on(a.Private.Error_Hide,function(){i._hide()});var e=document.querySelector("#"+i.id()+" .prism-button-refresh");if(o.on(e,"click",function(){location.reload(!0)}),n.IS_MOBILE){e=document.querySelector("#"+i.id()+" .prism-detect-info");f.addClass(e,"prism-width90")}var t=document.querySelector("#"+i.id()+" .prism-button-retry");o.on(t,"click",function(){var e=i._player.getCurrentTime(),t=i._player._options.source;i._player._setDefaultCC=!0,i._player._loadByUrlInner(t,e,!0)})},_show:function(e,t){var i=e.paramData,r="",o="";i.mediaId&&(r=i.mediaId);var n=document.querySelector("#"+this.id()+" .prism-button-orange");if(n){if(t&&this._player._options.diagnosisButtonVisible){t.vu?o=decodeURIComponent(t.vu):f.css(n,"display","none");var a="//player.alicdn.com/detection.html?from=h5&vid="+r+"&source="+(o?encodeURIComponent(o):"")+"&uuid="+t.uuid+"&lang="+_.getCurrentLanguage();n&&(n.href=a)}else f.css(n,"display","none");var s=i.display_msg||i.error_msg;document.querySelector("#"+this.id()+" .prism-error-content p").innerHTML=s,document.querySelector("#"+this.id()+" .errorCode .info-content").innerText=i.error_code;var l=document.querySelector("#"+this.id()+" .vid");if(i.mediaId?(f.css(l,"display","block"),document.querySelector("#"+this.id()+" .vid .info-content").innerText=i.mediaId):f.css(l,"display","none"),i.uuid)document.querySelector("#"+this.id()+" .uuid .info-content").innerText=i.uuid;else{var u=document.querySelector("#"+this.id()+" .uuid");f.css(u,"display","none")}if(i.requestId)document.querySelector("#"+this.id()+" .requestId .info-content").innerText=i.requestId;else{var c=document.querySelector("#"+this.id()+" .requestId");f.css(c,"display","none")}document.querySelector("#"+this.id()+" .dateTime .info-content").innerText=h.formatDate(new Date,"yyyy-MM-dd HH:mm:ss");var d=document.querySelector("#"+this.id());f.css(d,"display","block");var p=this;p.playHideHandler&&clearTimeout(p.playHideHandler),p.playHideHandler=setTimeout(function(){p._player.trigger("play_btn_hide")})}},_hide:function(){var e=document.querySelector("#"+this.id());f.css(e,"display","none")},disposeUI:function(){this.playHideHandler&&(clearTimeout(this.playHideHandler),this.playHideHandler=null)}});t.exports=s},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],100:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=(e("../../lib/event"),e("../../lib/ua")),a=e("../../lang/index"),s=e("./util"),l=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-fullscreen-btn")},bindEvent:function(){var e=this;this._player.on(o.Player.RequestFullScreen,function(){n.IS_IOS||e.addClass("fullscreen")}),this._player.on(o.Player.CancelFullScreen,function(){e.removeClass("fullscreen")}),s.registerTooltipEvent.call(this,this.el(),function(){return e._player.fullscreenService.getIsFullScreen()?a.get("ExistFullScreen"):a.get("Fullscreen")}),this.on("click",function(){e._player.fullscreenService.getIsFullScreen()?e._player.fullscreenService.cancelFullScreen():e._player.fullscreenService.requestFullScreen(),e._player.trigger(o.Private.MarkerTextHide)})}});t.exports=l},{"../../lang/index":11,"../../lib/event":19,"../../lib/ua":31,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],101:[function(e,t,i){"use strict";var r=e("../component"),o=e("../../lib/dom"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-hide")},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
      ',e},_loading_hide:function(e){var t=document.querySelector("#"+this.id()+" .prism-loading");t&&(o.removeClass(t,"prism-loading"),o.addClass(t,"prism-hide"))},_loading_show:function(e){var t=document.querySelector("#"+this.id()+" .prism-hide");t&&(o.removeClass(t,"prism-hide"),o.addClass(t,"prism-loading"))},bindEvent:function(){this._player.on(n.Private.H5_Loading_Show,this._loading_show),this._player.on(n.Private.H5_Loading_Hide,this._loading_hide)}});t.exports=a},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],102:[function(e,t,i){var r=e("../component"),o=(e("../../lib/util"),e("../../lib/dom")),n=(e("../../lib/event"),e("../../lib/ua"),e("../../lang/index"),e("../../player/base/event/eventtype")),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-info-display",this.addClass(this.className)},createEl:function(){return r.prototype.createEl.call(this,"p")},bindEvent:function(){var r=this;r._player.on(n.Private.Info_Show,function(e){var t=document.querySelector("#"+r.id()),i=e.paramData;i&&(void 0!==i.text&&i.text?(t.innerHTML=i.text,void 0!==i.duration&&i.duration&&(r.handler&&clearTimeout(r.handler),r.handler=setTimeout(function(){o.css(t,"display","none")},i.duration)),"lb"==i.align?(o.addClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")):"tc"==i.align?(o.addClass(t,"prism-info-top-center"),o.removeClass(t,"prism-info-left-bottom")):(o.removeClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")),i.isBlack?o.addClass(t,"prism-info-black"):o.removeClass(t,"prism-info-black")):t.innerHTML=i,o.css(t,"display","block"))}),r._player.on(n.Private.Info_Hide,function(e){var t=document.querySelector("#"+r.id());o.css(t,"display","none")})},disposeUI:function(){this.handler&&(clearTimeout(this.handler),this.handler=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],103:[function(e,t,i){var r=e("../component"),o=e("./util"),n=(e("../../lib/util"),e("../../lib/dom")),a=e("../../lib/event"),s=e("../../lib/playerUtil"),l=e("../../lang/index"),u=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-live-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="LIVE",s.isLiveShift(this._player._options)&&n.addClass(e,"live-shift-display"),e},bindEvent:function(){var e=document.querySelector("#"+this.id()),t=this;s.isLiveShift(this._player._options)&&(a.on(e,"click",function(){t._player._liveshiftService.switchToLive()}),o.registerTooltipEvent.call(this,this.el(),l.get("SwitchToLive")))}});t.exports=u},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/playerUtil":28,"../../lib/util":33,"../component":94,"./util":121}],104:[function(e,t,i){var r=e("../component"),o=(e("../../lib/dom"),e("../../lib/event"),e("../../player/base/event/eventtype")),n=e("../../player/base/plugin/status"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-animation")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t._player._isManualPlay&&(t.removeClass("prism-pause-animation"),t.addClass("prism-play-animation"),t.removeClass("play-apply-animation"),t.playHandler&&clearTimeout(t.playHandler),t.playHandler=setTimeout(function(){t.addClass("play-apply-animation")}))}),this._player.on(o.Player.Pause,function(){var e=t._player._status;e!=n.ended&&e!=n.error&&t._player._isManualPause&&(t.removeClass("prism-play-animation"),t.addClass("prism-pause-animation"),t.removeClass("play-apply-animation"),t.pauseHandler&&clearTimeout(t.pauseHandler),t.pauseHandler=setTimeout(function(){t.addClass("play-apply-animation")}))})},disposeUI:function(){this.playHandler&&(clearTimeout(this.playHandler),this.playHandler=null),this.pauseHandler&&(clearTimeout(this.pauseHandler),this.pauseHandler=null)}});t.exports=a},{"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../../player/base/plugin/status":66,"../component":94}],105:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=e("./util"),a=e("../../lang/index"),s=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-play-btn")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t.addClass("playing")}),this._player.on(o.Player.Pause,function(){t.removeClass("playing")}),this.on(o.Private.PlayClick,function(){if(t._player.paused()){var e=t._player.getCurrentTime();(t._player.getDuration()<=e||t._player._ended||t._player.exceedPreviewTime(e))&&t._player.seek(0),t._player.play(!0),t.addClass("playing")}else t._player.pause(!0),t.removeClass("playing");t._player.trigger(o.Private.MarkerTextHide)}),n.registerTooltipEvent.call(this,this.el(),function(){return t._player.paused()?a.get("Play"):a.get("Pause")})}});t.exports=s},{"../../lang/index":11,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],106:[function(e,t,i){var r=e("../component"),a=e("../../lib/dom"),n=(e("../../lib/constants"),e("../../lib/event")),s=e("../../lib/ua"),l=e("../../lib/function"),o=e("../../lang/index"),u=e("../../config"),c=e("../../lib/util"),d=e("../../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-progress",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='

      ',e},bindEvent:function(){var t=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.timeNode=document.querySelector("#"+this._player._options.id+" .prism-progress-time");var i=document.querySelector("#"+this.id()),e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),r="https://"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1this._player.getDuration()&&(r=this._player.getDuration()),r},_getDistance:function(e){for(var t=this.el().offsetLeft,i=this.el();i=i.offsetParent;){var r=a.getTranslateX(i);t+=i.offsetLeft+r}var o=e.touches?e.touches[0].pageX:e.pageX;return Math.abs(o-t)},_onMouseClick:function(e){var t=this,i=t._getSeconds(e);if(t._canSeekable(i)){t._player.exceedPreviewTime(i)&&(i=t._player.getPreviewTime()),t._updateCursorPosition(i);this._mouseClickTimeHandle&&clearTimeout(this._mouseClickTimeHandle),this._mouseClickTimeHandle=setTimeout(function(){t._player._seeking=!0,t._player.trigger(d.Private.SeekStart,{fromTime:t._player.getCurrentTime()}),t._player.seek(i),t._player.trigger(d.Private.EndStart,{toTime:i}),t._mouseClickTimeHandle=null,t._inWaitingSeek=!1},300),this._inWaitingSeek=!0}else t._player.trigger(d.Private.Info_Show,{text:o.get("Can_Not_Seekable"),duration:2e3})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._player.getCurrentTime()}),n.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),n.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),n.on(this._player.tag,"mouseup",function(e){t._onPlayerMouseUp(e)}),n.on(this._player.tag,"touchend",function(e){t._onPlayerMouseUp(e)}),n.on(this.controlNode,"mouseup",function(e){t._onControlBarMouseUp(e)}),n.on(this.controlNode,"touchend",function(e){t._onControlBarMouseUp(e)})},_onMouseUp:function(e){this._onMouseUpIntern(e)},_onControlBarMouseUp:function(e){this._onMouseUpIntern(e)},_onPlayerMouseUp:function(e){this._onMouseUpIntern(e)},_offMouseUp:function(){n.off(this.controlNode,"mousemove"),n.off(this.controlNode,"touchmove"),n.off(this._player.tag,"mouseup"),n.off(this._player.tag,"touchend"),n.off(this.controlNode,"mouseup"),n.off(this.controlNode,"touchend")},_onMouseUpIntern:function(e){e.preventDefault(),this._offMouseUp();var t=this.playedNode.offsetWidth/this.el().offsetWidth*this._player.getDuration();this._player.getDuration();isNaN(t)||this._player.seek(t),this._player.trigger(d.Private.EndStart,{toTime:t})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._player.exceedPreviewTime(t)&&(t=this._player.getPreviewTime()),this._player.seek(t),this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._inWaitingSeek||this._player._seeking||this._progressDown||(this._updateProgressBar(this.playedNode,this._player.getCurrentTime()),this._updateCursorPosition(this._player.getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._player.getCurrentTime()}))},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){var i=this._player.getDuration();if(1!=this._player._switchSourcing&&i){var r=t/i+.005;1e?(o.css(r.el(),"right","0px"),o.css(r.el(),"left","auto")):(left-=width/2,left=left<0?0:left,o.css(r.el(),"right","auto"),o.css(r.el(),"left",left+"px"))}},30)}}),r._player.on(a.Private.MarkerTextHide,function(e){r._player.trigger(a.Player.MarkerDotOut),r._player.trigger(a.Private.LifeCycleChanged,{type:a.Player.MarkerDotOut,data:""}),r._thumbnailShowHanlde&&clearTimeout(r._thumbnailShowHanlde),o.css(r.el(),"display","none")}),n.on(r._player.tag,"click",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)}),n.on(r._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)})},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=s},{"../../lib/dom":18,"../../lib/event":19,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],108:[function(e,t,i){var r=e("./selector"),s=e("../../../lib/object"),u=(e("../../../lib/util"),e("../../../lib/cookie")),l=e("../../../lib/dom"),c=(e("../../../lib/event"),e("../../../lib/constants")),d=e("../../../lang/index"),p=e("../../../player/base/event/eventtype"),o=r.extend({init:function(e,t){this.Name=d.get("Quality"),this.Type="quality",this.Tooltip=d.get("Quality_Switch_To"),r.call(this,e,t),this._isMasterLevel=!1},showTip:function(e,t){this._player.trigger(p.Private.Info_Show,{text:e,duration:t,align:"lb"})},bindEvent:function(){this.bindCommonEvent();var s=this;this._player.on(p.Private.QualityChange,function(e){var t=s._player._urls,i=e.paramData;if(i.levelSwitch){var r=i.desc;s._autoSWitchDesc=r,s._updateText(r)}else if(0
      {value}
      ",i=t.replace(/{type}/g,"speed").replace("{value}",c.get("Speed")),r=t.replace(/{type}/g,"cc").replace("{value}",c.get("Subtitle")),o=t.replace(/{type}/g,"audio").replace("{value}",c.get("AudioTrack")),n=t.replace(/{type}/g,"quality").replace("{value}",c.get("Quality"));return e.innerHTML=i+r+o+n,e},bindEvent:function(){document.querySelector("#"+this.id()+" .prism-setting-speed .current-setting").innerText=c.get("Speed_1X_Text");var o=this,t=function(){o._player.trigger(l.Private.SettingListHide),o.isOpened=!1},i=function(e){e&&e.text&&(document.querySelector("#"+o.id()+" .prism-setting-"+e.type+" .current-setting").innerText=e.text)};this._player.on(l.Private.SettingListShow,function(e){o.isOpened=!0;e=e.paramData;i(e),r.css(o.el(),"display","block")}),this._player.on(l.Private.UpdateToSettingList,function(e){e=e.paramData;i(e)}),this._player.on(l.Private.SelectorUpdateList,function(e){e=e.paramData;i(e),o._player.trigger(l.Private.SelectorValueChange,e)}),this._player.on(l.Private.SettingListHide,function(){o.isOpened=!1,r.css(o.el(),"display","none")}),s.on(this.el(),"click",function(e){o._player.trigger(l.Private.SettingListHide);var t=e.srcElement?e.srcElement:e.target;if(t=u.findItemElementForList(t)){var i=t.getAttribute("type");o._player.trigger(l.Private.SelectorShow,{type:i})}});var e=n.IS_MOBILE?"touchleave":"mouseleave";s.on(this.el(),e,function(){t()}),s.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&t()}),s.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&t()}),this._player.on(l.Private.QualityChange,function(e){var t=e.paramData;if(t.levelSwitch){var i=document.querySelector("#"+o.id()+" .prism-setting-quality .current-setting"),r=c.get("Auto");-1
        ',e},bindEvent:function(){this.bindCommonEvent()},bindCommonEvent:function(){var n=this,e=document.querySelector("#"+n.id()+" .selector-list"),t=document.querySelector("#"+n.id()+" .header");this._player.on(u.Private.ChangeURL,function(){n._hasGeneratedList=!1}),s.on(t,"click",function(){n._player.trigger(u.Private.SelectorHide),n._player.trigger(u.Private.SettingListShow,{type:n.Type,text:n._previousSelection?n._previousSelection.text:""})}),s.on(e,"click",function(e){var t=e.srcElement?e.srcElement:e.target,i=t.key,r=t.text;if(void 0!==r){n._previousSelection&&a.removeClass(n._previousSelection,"current"),n._previousSelection=l.findliElementForSelector(t),a.addClass(n._previousSelection,"current"),n.execute&&n.execute(i);var o=n.Tooltip+""+r+"";n._player.trigger(u.Private.Info_Show,{text:o,duration:1e3,align:"lb"})}}),n._player.on(u.Private.SelectorHide,function(){i()}),n._player.on(u.Private.SelectorValueChange,function(e){var t=e.paramData;if(t){if(t.type!=n.Type)return;var i=document.querySelectorAll("#"+n.id()+" .selector-list li");if(i){var r=i.length;0==r&&(n._backupSelector=t.text);for(var o=0;ot.progressWidth?t.left-s:(a=t.left-s/2)<0?0:a,c.css(u.el(),"left",a+"px")}},30)}),u._player.on(n.Private.ThumbnailHide,function(e){u._thumbnailShowHanlde&&clearTimeout(u._thumbnailShowHanlde),c.css(u.el(),"display","none")})},_createSamllThumbnail:function(){},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],119:[function(e,t,i){var r=e("../component"),o=e("../../lib/util"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-time-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='00:00 / 00:00',e},bindEvent:function(){var i=this;this._player.on(n.Video.DurationChange,function(){var e=o.formatTime(i._player.getDisplayDuration());e?(document.querySelector("#"+i.id()+" .time-bound").style.display="inline",document.querySelector("#"+i.id()+" .duration").style.display="inline",document.querySelector("#"+i.id()+" .duration").innerText=e):(document.querySelector("#"+i.id()+" .duration").style.display="none",document.querySelector("#"+i.id()+" .time-bound").style.display="none")}),this._player.on(n.Video.TimeUpdate,function(){var e=i._player.getCurrentTime(),t=o.formatTime(e);document.querySelector("#"+i.id()+" .current-time")&&(t?(document.querySelector("#"+i.id()+" .current-time").style.display="inline",document.querySelector("#"+i.id()+" .current-time").innerText=t):document.querySelector("#"+i.id()+" .current-time").style.display="none")})}});t.exports=a},{"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],120:[function(e,t,i){var r=e("../component"),s=e("../../lib/dom"),o=e("../../player/base/event/eventtype"),n=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-tooltip",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="\u63d0\u793a\u4fe1\u606f",e},bindEvent:function(){var a=this;a._player.on(o.Private.TooltipShow,function(e){var t=document.querySelector("#"+a.id()),i=e.paramData;t.innerText=i.text,s.css(t,"display","block");var r=t.offsetWidth,o=document.querySelector("#"+a._player.id()+" .prism-controlbar");if(o){var n=o.offsetWidth;i.left+r>n?s.css(t,"left",n-r+"px"):s.css(t,"left",i.left-(r-i.width)/2+"px")}}),a._player.on(o.Private.TooltipHide,function(e){var t=document.querySelector("#"+a.id());s.css(t,"display","none")})}});t.exports=n},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],121:[function(e,t,i){var r=e("../../lib/event"),s=e("../../player/base/event/eventtype");t.exports.registerTooltipEvent=function(e,o){var n=this,a=function(){n._controlbarTooltipHandler&&(clearTimeout(n._controlbarTooltipHandler),n._controlbarTooltipHandler=null)};r.on(this.el(),"mouseover",function(e){a(),n._controlbarTooltipHandler=setTimeout(function(){n._player.trigger(s.Private.TooltipHide)},4e3);var t=n.el().offsetLeft,i=n.el().offsetWidth,r=o;"function"==typeof r&&(r=o.call(this)),n._player.trigger(s.Private.TooltipShow,{left:t,width:i,text:r})}),r.on(this.el(),"mouseout",function(){a(),n._player.trigger(s.Private.TooltipHide)})},t.exports.throttle=function(i,r){var o=Date.now();return function(){var e=arguments,t=Date.now();r<=t-o&&(i(e),o=t)}}},{"../../lib/event":19,"../../player/base/event/eventtype":43}],122:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=e("./util"),l=e("../../lang/index"),u=e("./volumecontrol"),c=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume");var i=new u(e,t);e.addChild(i,t)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
        ',e},bindEvent:function(){var i=this;this.icon=document.querySelector("#"+i.id()+" .volume-icon"),s.registerTooltipEvent.call(this,this.el(),function(){return i._player.muted()||0==i._player.getVolume()?l.get("Muted"):l.get("Volume")}),n.on(this.icon,"click",function(e){var t=i.el().offsetLeft;i._player.trigger(a.Private.SettingListHide),i._player.trigger(a.Private.SelectorHide),i._player.trigger(a.Private.VolumeVisibilityChange,t),i._player.trigger(a.Private.MarkerTextHide)});var e=document.querySelector("#"+i.id()+" .long-horizontal"),t=document.querySelector("#"+i.id()+" .short-horizontal");n.on(this.el(),"mouseover",function(){o.removeClass(e,"volume-hover-animation"),setTimeout(function(){o.addClass(e,"volume-hover-animation")}),setTimeout(function(){o.removeClass(e,"volume-hover-animation"),o.addClass(t,"volume-hover-animation"),setTimeout(function(){o.removeClass(t,"volume-hover-animation"),o.addClass(e,"volume-hover-animation")},300)},300)})}});t.exports=c},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../component":94,"./util":121,"./volumecontrol":123}],123:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=(e("./util"),e("../../lang/index"),r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume-control"),this._shown=!1},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
        ',e},bindEvent:function(){var r=this;this.icon=document.querySelector("#"+r._player.id()+" .volume-icon"),this.control=document.querySelector("#"+r.id()),this.volumnValue=document.querySelector("#"+r.id()+" .volume-value"),this.volumnRange=document.querySelector("#"+r.id()+" .volume-range"),this.volumnCursor=document.querySelector("#"+r.id()+" .volume-cursor"),this._player.on(a.Private.VolumeVisibilityChange,function(e){var t=e.paramData;if(!r._shown&&t){var i=r._player.getVolume();r._setVolumnUI(i),o.css(r.control,"display","block"),t&&o.css(r.control,"left",t-5+"px"),r._shown=!0}else o.css(r.control,"display","none"),r._shown=!1}),n.on(this.volumnRange,"click",function(e){var t=o.getPointerPosition(r.volumnRange,e).y;t<0||1>>2]>>>24-n%4*8&255;t[r+n>>>2]|=a<<24-(r+n)%4*8}else for(n=0;n>>2]=i[n>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=c.ceil(t/4)},clone:function(){var e=r.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t,i=[],r=function(t){t=t;var i=987654321,r=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return e/=4294967296,(e+=.5)*(.5>>2]>>>24-o%4*8&255;r.push((n>>>4).toString(16)),r.push((15&n).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new d.init(i,t/2)}},a=o.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,r=[],o=0;o>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(n))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new d.init(i,t)}},s=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(a.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return a.parse(unescape(encodeURIComponent(e)))}},l=t.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new d.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=s.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,n=r/(4*o),a=(n=e?c.ceil(n):c.max((0|n)-this._minBufferSize,0))*o,s=c.min(4*a,r);if(a){for(var l=0;l>>2]>>>24-n%4*8&255)<<16|(t[n+1>>>2]>>>24-(n+1)%4*8&255)<<8|t[n+2>>>2]>>>24-(n+2)%4*8&255,s=0;s<4&&n+.75*s>>6*(3-s)&63));var l=r.charAt(64);if(l)for(;o.length%4;)o.push(l);return o.join("")},parse:function(e){var t=e.length,i=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-n%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return l.create(r,o)}(e,t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},e.enc.Base64},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],127:[function(e,t,i){var r,o;r=this,o=function(e){return e.enc.Utf8},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],128:[function(e,t,i){var r,o;r=this,o=function(e){return e.HmacSHA1},"object"==typeof i?t.exports=i=o(e("./core"),e("./sha1"),e("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)},{"./core":125,"./hmac":129,"./sha1":130}],129:[function(e,t,i){var r,o;r=this,o=function(e){var t,i,u;i=(t=e).lib.Base,u=t.enc.Utf8,t.algo.HMAC=i.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=u.parse(t));var i=e.blockSize,r=4*i;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),n=this._iKey=t.clone(),a=o.words,s=n.words,l=0;l>>31}var c=(r<<5|r>>>27)+s+d[l];c+=l<20?1518500249+(o&n|~o&a):l<40?1859775393+(o^n^a):l<60?(o&n|o&a|n&a)-1894007588:(o^n^a)-899497514,s=a,a=n,n=o<<30|o>>>2,o=r,r=c}i[0]=i[0]+r|0,i[1]=i[1]+o|0,i[2]=i[2]+n|0,i[3]=i[3]+a|0,i[4]=i[4]+s|0},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(64+r>>>9<<4)]=Math.floor(i/4294967296),t[15+(64+r>>>9<<4)]=i,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),e.SHA1},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}]},{},[6]); \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/analytics.js b/re/geekbang/routes/download/source/static/analytics.js new file mode 100644 index 0000000..c85ccc1 --- /dev/null +++ b/re/geekbang/routes/download/source/static/analytics.js @@ -0,0 +1,74 @@ +(function(){var k=this||self,l=function(a,b){a=a.split(".");var c=k;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b};var n=function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},p=function(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1};var q=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;var r=window,u=document,v=function(a,b){u.addEventListener?u.addEventListener(a,b,!1):u.attachEvent&&u.attachEvent("on"+a,b)};var w={},x=function(){w.TAGGING=w.TAGGING||[];w.TAGGING[1]=!0};var y=/:[0-9]+$/,A=function(a,b){b&&(b=String(b).toLowerCase());if("protocol"===b||"port"===b)a.protocol=z(a.protocol)||z(r.location.protocol);"port"===b?a.port=String(Number(a.hostname?a.port:r.location.port)||("http"==a.protocol?80:"https"==a.protocol?443:"")):"host"===b&&(a.hostname=(a.hostname||r.location.hostname).replace(y,"").toLowerCase());var c=z(a.protocol);b&&(b=String(b).toLowerCase());switch(b){case "url_no_fragment":b="";a&&a.href&&(b=a.href.indexOf("#"),b=0>b?a.href:a.href.substr(0, +b));a=b;break;case "protocol":a=c;break;case "host":a=a.hostname.replace(y,"").toLowerCase();break;case "port":a=String(Number(a.port)||("http"==c?80:"https"==c?443:""));break;case "path":a.pathname||a.hostname||x();a="/"==a.pathname.substr(0,1)?a.pathname:"/"+a.pathname;a=a.split("/");a:if(b=a[a.length-1],c=[],Array.prototype.indexOf)b=c.indexOf(b),b="number"==typeof b?b:-1;else{for(var d=0;d>2;g=(g&3)<<4|f>>4;f=(f&15)<<2|h>>6;h&=63;e||(h=64,d||(f=64));b.push(D[m],D[g],D[f],D[h])}return b.join("")},H=function(a){function b(m){for(;d>4);64!=f&&(c+=String.fromCharCode(g<<4&240|f>>2),64!=h&&(c+=String.fromCharCode(f<<6&192|h)))}};var I;function J(a,b){if(!a||b===u.location.hostname)return!1;for(var c=0;cc;c++){for(var d=c,e=0;8>e;e++)d=d&1?d>>>1^3988292384:d>>>1;b[c]=d}}I=b;b=4294967295;for(c=0;c>>8^I[(b^a.charCodeAt(c))&255];return((b^-1)>>>0).toString(36)},ba=function(a){return function(b){var c=B(r.location.href),d=c.search.replace("?","");a:{var e=d.split("&");for(var g=0;gc;++c){var d=P.exec(a);if(d){var e=d;break a}a=decodeURIComponent(a)}e=void 0}if(e&&"1"===e[1]){var g=e[2],f=e[3];a:{for(e=0;e>21:b}return b};var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, +d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} +function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} +function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; +a.set(Ia,ua,!0)}function Hc(a){qc().expId&&a.set(Nc,qc().expId);qc().expVar&&a.set(Oc,qc().expVar);var b=P(a,Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&a.set(m,d,!0)}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";}function yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set("&did",b.join(","),!0)} +function vb(a){if(!a.get(Na))throw"abort";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee};Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:Number(a)};Ya.prototype.Z=function(a){return(a=this.get(a))&&ea(a)?a:ua}; +Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)};var ue=new ee,ve=[],bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=ue.get(a);if(!b)for(var c=0;c=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c=aa(b),d=0a.length)J(12);else{for(var d=[],e=0;e=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;d=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||"").toLowerCase());a.data.set(ce,be("gclid",!0));a.data.set(ie,be("gclsrc",!0));a.data.set(fe, +Math.round((new Date).getTime()/1E3));if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;carguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(me[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={})}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener("visibilitychange",d,!1):e.detachEvent&&e.detachEvent("onvisibilitychange",d)}};L(M,"visibilitychange",c)}};var te=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=te.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||"t0",this.K=b[2]||"",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A="create"==this.C,this.i="require"==this.C,this.g="provide"==this.C,this.ba="remove"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort"; +if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.c)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.c)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47}; +var u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);a=N.j(a);if(p.test(b)){J(52);if(!a)return!0;c=d||{};d={id:b,B:c.dataLayer||"dataLayer",ia:!!a.get("anonymizeIp"),sync:e,G:!1};a.get(">m")==b&&(d.G=!0);var g=String(a.get("name"));"t0"!=g&&(d.target=g);G(String(a.get("trackingId")))||(d.clientId= +String(a.get(Q)),d.ka=Number(a.get(n)),c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,";").match(c))?c.sort().join("").substring(1):void 0,d.la=c,d.qa=E(a.b.get(kb)||"","gclid"));c=d.B;g=(new Date).getTime();O[c]=O[c]||[];g={"gtm.start":g};e||(g.event="gtm.js");O[c].push(g);c=t(d)}!c&&Zd.hasOwnProperty(b)?(J(39),c=b+".js"):J(43);if(c){if(a){var ca=a.get(oe);qa(ca)||(ca=void 0)}c&&0<=c.indexOf("/")||(c=(ca?ca+"/34":bd(!1)+"/plugins/ua/")+c);ca=ae(c);a=ca.protocol;d=M.location.protocol;if(("https:"== +a||a==d||("http:"!=a?0:"http:"==d))&&B(ca)){if(ca=ca.url)a=(a=M.querySelector&&M.querySelector("script[nonce]")||null)?a.nonce||a.getAttribute&&a.getAttribute("nonce")||"":"",e?(e="",a&&Nd.test(a)&&(e=' nonce="'+a+'"'),f.test(ca)&&M.write("\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| +[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; +d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf(bd(!0)+ +"/analytics")){b=!0;break a}}b=!1}b&&(Ba=!0)}(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);C("displayfeatures",fd);C("adfeatures",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b",components:{App:l.a}})},218:function(e,t,n){"use strict";t.a={defaultAvatar:n(226),timeServer:"//time.geekbang.org",androidDownloadUrl:"https://time.geekbang.org/download/android/latest",iosDownloadUrl:"https://itunes.apple.com/cn/app/id1280245865",appstoreUrl:"http://a.app.qq.com/o/simple.jsp?pkgname=org.geekbang.geekTime&utm_source=website&utm_medium=geektime&utm_campaign=download&utm_content=app",errorCode:{"-10086":"请求出错,请检查网络","-1002":"系统内部错误","-1003":"未知错误","-2021":"专栏已下架,不能订阅","-2022":"该专栏不存在","-2023":"您已订阅该专栏,不能重复订阅","-2001":"余额账户异常","-2102":"余额不足","-2120":"订单创建失败","-2121":"支付失败","-2901":"无效的反馈内容","-2902":"反馈内容请不要超过 500 字","-3007":"验证码错误","-3003":"请重新登录","-3004":"验证码为空","-3005":"请更新验证码","-3006":"验证码错误","-3101":"阅码格式错误","-3102":"阅码无效","-3103":"阅码信息获取失败","-3105":"阅码与专栏不匹配","-3351":"已获取过云栖优惠码","-3352":"优惠码已被领完","-3363":"金额大于1元才能提现","-3364":"金额超出提现范围,请联系客服","-3365":"现金余额不足,请联系客服","-3366":"提现失败,请重试","-3369":"单日提现次数仅限1次","-3370":"提现频率过高,请稍后重试"},questions:[{id:14,q:"如何联系在线客服?",a:"微信搜索“极客时间”,关注我们的微信服务号,在对话框输入您的问题即可召唤在线客服。",bold:!1},{id:6,q:"为什么收不到短信验证码?",a:"在手机信号稳定且无欠费的状态下,仍收不到短信验证码,常见的有两种情况:
        1.手机号被短信服务商过滤
        您可能曾将此类短信列为垃圾短信,因此短信服务商发送该类短信时会将您的手机号过滤保证您不再收到。
        解决方法:您可以在我的-设置-帮助反馈中向我们反馈,并留下您的手机号。
        2.您可能设置了短信拦截
        您可能在手机短信中设置了比较严苛的拦截规则,导致无法接受某些号码发出的短信。
        解决方法:可尝试暂时关闭拦截功能。"},{id:13,q:"为什么我的礼券无法使用?",a:"如果您获得的礼券为“不与其他优惠叠加使用”,则这张礼券不能在拼团优惠和限时优惠中使用,优惠期结束之后您可以使用这张礼券。
        一个订单只能使用一张礼券,不可以叠加使用多张礼券。",bold:!1},{id:1,q:"订阅的专栏和视频课程有效期是多久?",a:"专栏和视频课程订阅之后可以永久阅读。"},{id:3,q:"如何开具发票?",a:"微信关注“极客时间”微信服务号,在微信中点击服务号底部的「更多服务」,进入「发票开具」可以在线申请开票。
        发票为增值税普通电子发票,明细为:研发和技术服务+商品名称,不支持开具其他税收分类的发票。"},{id:5,q:"如何订阅专栏更新通知?",a:"进入App后,依次进入「我的」--「设置」--「推送设置」内进行设置。"},{id:7,q:"支付过程中遇到错误提示怎么办?",a:"当您多次支付不成功,可以通过以下方式解决:
        1. 切换网络之后重新尝试支付;
        2. 更换支付方式之后重新尝试支付;
        3. 在浏览器中打开商品购买页面,重新尝试支付;
        4. 如果以上方式无法解决您的问题,请通过右上角的「反馈问题」向我们反馈您的问题,或通过极客时间微信公众号联系人工客服。"},{id:10,q:"充值余额时支付成功但余额没有增加,如何处理?",a:"充值到账会有短暂延迟,如果您充值的余额长时间未到账,可以尝试清除应用后台并重新打开应用。如果您在充值后24小时内或收到苹果支付的账单后,充值金额仍未到账,请您及时联系微信公众号在线客服。"},{id:8,q:"订阅的专栏、视频课程、每日一课会员等能否退款或更换?",a:"专栏、视频课程以及每日一课会员等服务均属于虚拟产品,订阅之后均不支持退款和更换,请您理解。"},{id:16,q:"好友扫描我的分享海报购买,为什么没有获得返现?",a:"温馨提示:只有通过分享有赏的指定渠道并且规范方法购买,才可以得到返现。
        分享:
        1. 极客时间APP:
        分享者操作方法:极客时间APP-我的-课程-分享有赏-六种方法任选-成功分享
        被分享者操作方法:别人的分享-打开(扫描二维码、打开链接等)-订阅
        2. 极客时间公众号:
        分享者操作方法:微信-极客时间公众号-我的-获取专属海报-分享
        被分享者操作方法:海报-扫描二维码-订阅"},{id:21,q:"如何修改绑定手机号、登录密码以及其他账号问题?",a:"您可以在极客时间App内,凭原登录密码或验证码修改绑定手机号和新的登录密码,更换绑定手机号要求新账号为未注册极客时间的账号,为了保证您的账号安全,暂时不支持账号注销、合并等操作,请您理解。
        如果上述答案仍未解决您的问题,请您通过极客时间微信服务号联系在线客服,会有客服帮您解决问题。"},{id:29,q:"投诉侵权、盗版资源或其他上述未提到的问题",a:"您可以通过极客时间微信服务号联系在线客服,或通过邮件(service@geekbang.org)联系我们,我们在收到您的反馈之后会尽快进行处理,感谢您的理解。您可以通过极客时间微信服务号联系在线客服,或通过邮件(service@geekbang.org)联系我们,我们在收到您的反馈之后会尽快进行处理,感谢您的理解。"}]}},223:function(e,t,n){"use strict";var o=n(43),i=n.n(o),a=n(146),r=n(102),s=n.n(r);t.a={getLoginUser:function(){return new i.a(function(e,t){a.a.get("//account.geekbang.org/serv/v1/user/auth",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})},getImgVerify:function(){return new i.a(function(e,t){s.a.post("//time.geekbang.org/serv/v1/geekcode/verify").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},checkCode:function(e,t){return new i.a(function(n,o){a.a.post("//time.geekbang.org/serv/v1/geekcode",{geekcode:e,verifycode:t}).then(function(e){200===e.status&&0===e.data.code?n(e.data.data):o(e.data)}).catch(function(e){o(e)})})},subscribeByGeekcode:function(e,t){return new i.a(function(n,o){a.a.post("//time.geekbang.org/serv/v1/column/subscribe",{cid:e,channel:"geekcode",extra:{code:t}}).then(function(e){200===e.status&&0===e.data.code?n(e.data.data):o(e.data)}).catch(function(e){o(e)})})},subscribeDlVipByGeekcode:function(e){return new i.a(function(t,n){a.a.post("//cashier.geekbang.org/serv/v1/order/store",e).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):n(e.data)}).catch(function(e){n(e)})})},getYunqiTicketStatus:function(e,t){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/yunqi/code/show",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getYunqiTicketCode:function(e,t){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/yunqi/code/get",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUcode:function(){return new i.a(function(e,t){a.a.post("//account.geekbang.org/account/user/ucode").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUinfoByUcode:function(e){return new i.a(function(t,n){a.a.post("//account.geekbang.org/account/ucode",{ucode:e}).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):n(e.data)}).catch(function(e){n(e)})})},getInvitedList:function(){return new i.a(function(e,t){a.a.post("//account.geekbang.org/account/user/invited").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUserData:function(){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/my/data").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})},charge:function(e){var t={code:e.code,sku:e.sku,is_ios:e.is_ios,amount:e.amount};return new i.a(function(e,n){a.a.post("//time.geekbang.org/serv/v1/geekcode/charge",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):n(t)}).catch(function(e){n(e)})})},getLoginData:function(){return new i.a(function(e,t){s.a.post("//time.geekbang.org/serv/v2/login_member/data",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})}}},226:function(e,t){e.exports="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QN5aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MCA3OS4xNjA0NTEsIDIwMTcvMDUvMDYtMDE6MDg6MjEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YWE3YmZhMDItMzBhMC00MDg3LTg3MmYtOGMwMjMxNjNhZWRjIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI2MTlEODM3NTgzMTExRTk5NDY4Qjk3QUFCNDFBN0QzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI2MTlEODM2NTgzMTExRTk5NDY4Qjk3QUFCNDFBN0QzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTYyRTNCMDNBREI4MTFFOEFFNTJDODlGREQ1OTUzMDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTYyRTNCMDRBREI4MTFFOEFFNTJDODlGREQ1OTUzMDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCADuAO4DAREAAhEBAxEB/8QAfAABAAICAwEBAAAAAAAAAAAAAAYHBAgBAwUCCgEBAAAAAAAAAAAAAAAAAAAAABAAAgIBAgIECwQJBQAAAAAAAAECAwQRBSEGMWESF0FRgVITk+MUVJTUIkJiB5EyhBVFhbXFNnFygqJTEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwD9vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGHmbhg7fD0mbl4+LF69l32wrctPBCMmpTfUk2BG7ue+Wqm4rNsua6XTi5DWvVKyutPyaoDmnnrlq19l506W9NPTYuSk2/xQqnGPlaQElxM7Dzq/S4WVj5VfhlRbC1Rfil2G3GXU9GBlAAAAAAAAAAAAAAAAAAAAAAAAAAAA4bUU5SajGKblJtJJJattvgkkBVHMnP8AJSswtilHSLcLdxcVLV9DWHCWsdF/6ST1+6uiQFW35F+VbK/Jutvum9Z23WSssk/xTm3JgdIADvx8nIxLY34t9uPdD9W2myVc1412otPR6cV0MC1uWufvTTrwd8cITlpCrcYpQhKT4KOXBaQrbf346R8aXFgWmnrxXFPimvCAAAAAAAAAAAAAAAAAAAAAAAAAAFUfmBzHKLexYVjjrGMtxsg+LU12oYia6E4tSn400vOQFTAAAAAAAuDkDmSWRFbHm2OVtUHLb7ZvWU6oLWeK2+LdMV2ofgTX3UBaAAAAAAAAAAAAAAAAAAAAAAAABi52XDAwsvNs4wxce6+S10cvRQlNQX4ptaLrYGr+RfblX3ZN8nO7Itsutk/vWWSc5Pq4sDpAAAAAABlYWXbgZeNmUPS3Guruhx0TcJJ9mWnTGa4NeFMDaDGvrysejJqeteRTVfW/HC2EbI/9ZAdwAAAAAAAAAAAAAAAAAAAAAACJc8WurlncOzwdrxateqeVT2v0wTXlA18AAAAAAAAAbFcnXSu5a2mcnq402U/8cfJuoivJGtASYAAAAAAAAAAAAAAAAAAAAAABFOdqXdyzuSjxlWse7yVZVMp/or1YGvQAAAAAAAADY3lGiWPy3tNclo5Yzv8AF9nJusyYvyxtQEjAAAAAAAAAAAAAAAAAAAAAAAdGVj15eNkYty1qyaLaLF4exbCVctOvSXADWDNxLsDLycLIj2bsa6dM/E3B6KUfHCa0afhTAxQAAAAAAZ224Nu55+LgUp+kyboV6pa9iDetljXm1VpyfUgNnqaoUU1UVLs101wqrj4oVxUILyRQHYAAAAAAAAAAAAAAAAAAAAAAAAVrz5yzPNh++cGtzyaK1HNpgtZX0QX2bopcZW0R4NdLhp5ujCmQAAAAAAXbyLyzPbaXumdW4ZuVX2aKprSWNjS0bck+Mbr9FqumMeHS2gLDAAAAAAAAAAAAAAAAAAAAAAAAAACuOZOQ6c+dmbtDrxcubc7cWX2cbIm+LlW0n7vbLw8OxJ+bxbCpM7bM/bLXVn4l+NPVpekg1CenhrsWtdseuLaAwQAHo7ftO47raqsDEuyZapSlCOlVevhtul2aql/uaAt3lrkWjbJ15u5yry86Gk6qYrXFxpripfaSd90X0NpRi+hNpSAsIAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4sqrug67a4W1y/WhZCM4P/AFjJNMDw7eVuXrm5T2jCTfT6Kr0C49VLrQHNPK/L1ElKvaMJtcU7alfo/Gle7FqB7cK4VQVdcIVwitIwhFQhFeJRikkgPsAAAAAAAAAAAAAAAAAAAAAAAAAY2XmYuBRPKzL68aiv9ay2XZjq+iKXTKcvBFJt+BARGf5g8uRk4q3LsSeinDFkoy60pyhPR9aQHz3h8u+dm/K+0Ad4fLvnZvyvtAHeHy752b8r7QB3h8u+dm/K+0Ad4fLvnZvyvtAHeHy752b8r7QB3h8u+dm/K+0Ad4fLvnZvyvtAMjG575cybY1PKtxnJpRnk0Trq1fglZHtxrXXLRLxgTCMozjGUZKUZJSjKLTjKLWqlFrVNNPgwOQAAAAAAAAAAAAAAAAAAAAUZ+YW43ZG9ywHOSx9vqpUa9fsu7IphkTta8MnCyMepLrYECAAAAAAAAAAAF0/lxuN2Tt+Zg2zlOO320uhyerhTlK1qpPzYWUSa8Xa06NALHAAAAAAAAAAAAAAAAAAAABr3zx/lO6fsX9OxAImAAAAAAAAAAALY/K/+Ofyz+4AWwAAAAAAAAAAAAAAAAAAAADXvnj/ACndP2L+nYgETAAAAAAAAAAAFsflf/HP5Z/cALYAAAAAAAAAAAAAAAAAAAABVvMfJG7bxvOZuONkbdCjI937Eb7cmNq9DiUUS7Ua8S2C1nU2tJPgB4fdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAJvyby1ncvfvH323Et989z9F7rZdPs+7+9dvt+loo019OtNNfD0ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Z"},262:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98);t.default={name:"gkui-button",components:{},props:{color:o.a.string.def(""),size:o.a.string.def(""),disabled:o.a.bool.def(!1),useLock:o.a.bool.def(!1),label:o.a.string.def(""),lockLabel:o.a.string.def(""),stop:o.a.bool.def(!0)},data:function(){return{locked:!1}},computed:{_disabled:function(){return this.disabled||this.locked}},created:function(){},methods:{handleClick:function(e){var t=this;this.stop&&e.stopPropagation(),this._disabled||(this.useLock&&(this.locked=!0),this.$emit("click",{clear:function(){t.locked=!1}}))}}}},263:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98),i=n(106),a=n(545),r=n.n(a);t.default={name:"gkui-confirm",components:{Dialog:r.a},props:{title:o.a.string,message:o.a.string,type:o.a.string.def("message"),value:o.a.bool.def(!1),center:o.a.bool.def(!1),verticalCenter:o.a.bool.def(!1),name:o.a.string,width:o.a.number.def(412),top:o.a.oneOfType([Number,String]).def(100),okText:o.a.string.def("确定"),cancelText:o.a.string.def("取消"),okBtnColor:o.a.string.def("blue"),cancelBtnColor:o.a.string.def("transparent"),loading:o.a.bool.def(!1)},methods:{handleOk:function(e){var t=e.clear,n=e.close;return"message"===this.type?(n&&n(),!0):(i.a.event.$emit("closeMessage",{ok:!0,clear:t,close:n}),!0)},handleCancel:function(e){var t=e.close;return i.a.event.$emit("closeMessage",{ok:!1,close:t}),!0}}}},264:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(43),i=n.n(o),a=n(287),r=n.n(a),s=n(284),c=n.n(s),l=n(44),u=n.n(l),A=n(98),d=n(257),p=n(161);t.default={name:"gkui-dialog",components:{Button:d.a,Loading:p.a},props:{value:A.a.bool.def(!1),name:A.a.string,transitionName:A.a.string.def("modal-zoom-in"),title:A.a.string,dialogClass:A.a.string,mask:A.a.bool.def(!0),maskClickClose:A.a.bool.def(!0),center:A.a.bool.def(!1),hasClose:A.a.bool.def(!0),verticalCenter:A.a.bool.def(!1),width:A.a.number.def(520),top:A.a.oneOfType([Number,String]).def(100),hasCancel:A.a.bool.def(!0),handleOk:{type:Function},handleCancel:{type:Function},okText:A.a.string.def("确定"),cancelText:A.a.string.def("取消"),okBtnColor:A.a.string.def("blue"),cancelBtnColor:A.a.string.def("transparent"),loading:A.a.bool.def(!1)},data:function(){return{showHead:!0,visible:!1,contentVisible:!1}},computed:{mainStyle:function(){var e={},t=parseInt(this.width),n={width:t<=100?t+"%":t+"px",top:"string"==typeof this.top?this.top:this.top+"px"},o=this.styles?this.styles:{};return u()(e,n,o),e},wrapClass:function(){return["gkui-dialog",{"gkui-dialog-can-close":this.maskClickClose&&this.mask,"gkui-dialog-center":this.center,"gkui-dialog-vertical-center":this.verticalCenter},this.dialogClass]}},watch:{value:function(e){var t=this;this.mask&&(e?this.$modal.showLayer():this.$modal.hideLayer()),e?(this.visible=e,this.$nextTick(function(){t.contentVisible=e})):(this.contentVisible=e,setTimeout(function(){t.visible=e},300))}},created:function(){},mounted:function(){var e=this;this.visible=this.value,this.$nextTick(function(){e.contentVisible=e.value});var t=!0;void 0!==this.$slots.header||this.title||(t=!1),this.showHead=t},methods:{close:function(){this.$emit("input",!1),this.$emit("cancel")},ok:function(e){var t=this,n=e.clear;return c()(r.a.mark(function e(){return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.loading){e.next=6;break}if(!t.handleOk){e.next=4;break}return e.next=4,t.handleOk({clear:n,close:t.destroy});case 4:return t.$emit("ok",{clear:n}),e.abrupt("return");case 6:if(!t.handleOk){e.next=10;break}return e.next=9,t.handleOk({clear:n,close:t.destroy});case 9:return e.abrupt("return");case 10:t.$emit("input",!1),t.$emit("ok",{clear:n});case 12:case"end":return e.stop()}},e,t)}))()},cancel:function(){var e=this;return c()(r.a.mark(function t(){return r.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.handleCancel){t.next=5;break}return t.next=3,e.destroy();case 3:return e.handleCancel({close:e.close}),t.abrupt("return");case 5:e.close();case 6:case"end":return t.stop()}},t,e)}))()},handleMask:function(){this.mask&&this.maskClickClose&&this.close()},destroy:function(){var e=this;this.contentVisible=!1,setTimeout(function(){e.visible=!1,e.hideLayer().then(function(){return e.$modal.hide(e.name),!0})},100)},hideLayer:function(){var e=this;return new i.a(function(t,n){e.$modal.hideLayer(),t()})}}}},265:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(258);t.default={name:"gk-loading",components:{},props:{visible:{type:Boolean,default:!0},label:{type:String,default:""},size:{type:String,default:"40px"},color:{type:String,default:"white"}},data:function(){return{}},computed:{colorClass:function(){return o.a.getColor(this.color)||""},styles:function(){return{width:this.size,height:this.size}}},created:function(){},methods:{}}},266:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98),i=n(161),a=n(80);t.default={name:"gku-message",components:{Loading:i.a},props:{type:o.a.string.def("info"),name:o.a.string,message:o.a.string,duration:o.a.number.def(1.5),onClose:o.a.func,closable:o.a.bool.def(!1),prefix:o.a.string,customClose:o.a.string,loadingColor:o.a.string.def("blue"),loadingSize:o.a.string.def("14px"),transitionName:o.a.string.def("fade-up")},data:function(){return{timer:null}},computed:{customCloseBtn:function(){return this.customClose||""},typeCls:function(){return a.a.getType(this.type)||""}},mounted:function(){this.startTimer()},methods:{startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout(function(){e.close()},1e3*this.duration))},clearTimer:function(){clearTimeout(this.timer)},close:function(){this.$emit("close",this.name),this.onClose()}}}},267:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(99),i=n.n(o),a=n(547),r=n.n(a),s=n(80);t.default={name:"gku-message-box",components:{MessageItem:r.a},props:{},computed:{},data:function(){return{messageList:[],styles:{top:"24px"},transitionName:"fade-up"}},created:function(){s.a.register(this)},mounted:function(){},methods:{add:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.styles=i()({},this.styles,n.styles),this.transitionName=n.transitionName,this.$nextTick(function(){t.messageList.push(e)})},close:function(e){this.messageList=this.messageList.filter(function(t){return t.name!==e}),s.a.remove(e)},clear:function(){this.messageList=[]},handleEnter:function(e){e.style.height=e.scrollHeight+"px"},handleLeave:function(e){1!==document.getElementsByClassName("gkui-message-content-wrap").length&&(e.style.height=0)}}}},268:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(44),i=n.n(o),a=n(106),r=n(107);t.default={name:"gkui-modal-controller",components:{},props:{},data:function(){return{isShowLayer:!1,modals:[],zIndex:0}},created:function(){this.$modal._setModalContainer(this)},beforeMount:function(){var e=this;a.a.event.$on("toggle",function(t,n,o){n?e._eventToggleOpen(t,o):e._eventToggleClose(t)})},mounted:function(){},destroyed:function(){},methods:{showLayer:function(){this.isShowLayer=!0,document.body.classList.add("gkui--modal-block-scroll")},hideLayer:function(){this.isShowLayer=!1,document.body.classList.remove("gkui--modal-block-scroll")},add:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],a=r.a.guid();n.zIndex=++this.zIndex,o.auto=void 0===o.auto||o.auto,o.layer=void 0===o.layer||o.layer;var s=this.modals.find(function(e){return o.name===e.name});s?s.params=i()({},n):this.modals.push({id:a,name:o.name,component:e,params:n,layer:o.layer}),this.$nextTick(function(){o.auto&&t.$modal.show(o.name,n)})},_eventToggleOpen:function(e,t){var n=this.modals.find(function(t){return t.name===e});n.visible=!0,n.params=i()({},n.params,t),n.layer&&this.showLayer()},_eventToggleClose:function(e){var t=!1,n=void 0,o=void 0;for(var i in this.modals)this.modals[i].name===e?(n=i,o=this.modals[i]):this.modals[i].visible&&this.modals[i].layer&&(t=!0);void 0!==n&&this.modals.splice(n,1),!t&&o.layer&&this.hideLayer()}}}},269:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(65),i=n(102),a=n.n(i),r=n(551),s=n.n(r);t.default={name:"app",components:{GlobalLayer:s.a},created:function(){window.location.hash&&this.$router.push(window.location.hash.replace("#","")),this.hack(),this.addAppEventListener(),this.entryUrl=window.location.href,document.domain="geekbang.org",this.timer=null,this.initWxConfig(),this.initEventDispatcher(),document.addEventListener("keydown",function(e){(e.ctrlKey||e.metaKey)&&65===e.keyCode&&(e.returnValue=!1,e.preventDefault())})},methods:{getHtmlFirstNodeHTML:function(e){if(!e)return"";if(!e.match(/^<\w+.+<\/\w+>/))return"

        "+e+"

        ";var t=document.createElement("div");return t.innerHTML=e,t.children[0].outerHTML},initWxConfig:function(){if(o.a.isInWeixin()){var e=o.a.isIOS()?this.entryUrl:window.location.href;a.a.get("https://misc.geekbang.org/wxmisc/wxshare/sign?url="+encodeURIComponent(e)+"&mpid=geekbang").then(function(e){var t=e.data;if(0===t.code&&t.data)try{window.wx.config({debug:!1,appId:t.data.appId,timestamp:String(t.data.timestamp),nonceStr:t.data.nonceStr,signature:t.data.signature,jsApiList:["getLocation","onMenuShareTimeline","onMenuShareAppMessage","chooseWXPay","onMenuShareQQ","onMenuShareWeibo","onMenuShareQZone","hideAllNonBaseMenuItem","showAllNonBaseMenuItem","showMenuItems","hideMenuItems"]})}catch(e){console.log(e)}},function(e){})}},initEventDispatcher:function(){o.a.isInApp()&&o.a.isInAndroidApp()&&(window.geekTimeNotify=function(e){if("string"==typeof e)try{e=JSON.parse(e);var t=new CustomEvent("notify",{detail:e});document.dispatchEvent(t)}catch(e){}else{var n=new CustomEvent("notify",{detail:e});document.dispatchEvent(n)}})},addAppEventListener:function(){var e=this;document.addEventListener("notify",function(t){try{var n=t.detail.data;switch(t.detail.type){case"gtInfoUpdate":o.a.getTicket()!==n.ticket&&window.location.reload();break;case"sub:paybox:show":e.$ga.sendPv("/fake/column/paybox");break;case"sub:paybox:success":e.$ga.sendEvent("订阅成功","专栏或视频课订阅成功",n.column_title)}}catch(e){console.log(e)}})},hack:function(){if(o.a.isInApp()){var e=navigator.userAgent;(o.a.isInAndroidApp()&&e.match(/[\d.]+$/)&&o.a.version(e.match(/[\d.]+$/)[0])>=o.a.version("1.0.6")||!o.a.isInAndroidApp()&&e.match(/[\d.]+$/)&&o.a.version(e.match(/[\d.]+$/)[0])>=o.a.version("1.1.1"))&&localStorage.removeItem("gtInfo")}}},watch:{$route:{handler:function(e,t){var n=this;clearTimeout(this.timer),document.title="极客时间",this.timer=setTimeout(function(){n.initWxConfig()},300)}}}}},270:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={computed:{data:function(){return this.$store.state.globalLayers}}}},271:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={data:function(){return{title:"",content:"",btnCancel:"",btnOk:"",closed:!1,visible:!1,cancelCallback:null,okCallback:null}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},okHandler:function(){this.close(),this.okCallback()},cancelHandler:function(){this.close(),this.cancelCallback()},close:function(){this.closed=!0}},watch:{closed:function(e,t){e&&(console.log("closed: ",e),this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}}}},272:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={data:function(){return{size:"40px",visible:!1,message:"",showLoading:!1}},computed:{styles:function(){return{width:this.size,height:this.size}}},mounted:function(){}}},273:function(e,t,n){"use strict";var o=n(39),i=n(552),a=n.n(i),r=o.a.extend(a.a),s=void 0,c=[],l=1,u=function(e){e=e||{};var t="message_"+l++;return s=new r({data:e}),c.length>0&&(c[0].close(),c.splice(0,1)),s.id=t,s.vm=s.$mount(),document.body.appendChild(s.vm.$el),s.vm.visible=!0,s.dom=s.vm.$el,s.dom.style.zIndex=100,c.push(s),s.vm};t.a=u},274:function(e,t,n){"use strict";function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"加载中...";u.message=e,u.showLoading=!0,setTimeout(function(){u.visible=!0},0),document.body.appendChild(u.$el)}function i(){u.visible=!1,setTimeout(function(){u.showLoading=!1},200)}function a(){r.a.prototype.$loading={open:o,close:i}}var r=n(39),s=n(553),c=n.n(s),l=r.a.extend(c.a),u=new l({el:document.createElement("div")});t.a=a},275:function(e,t,n){"use strict";var o=n(65);t.a={formatDate:function(e,t){return t?o.a.formatDate(e).replace(/\-/g,t):o.a.formatDate(e)},formatTime:function(e){return o.a.formateTime(e)},formatContent:function(e){return o.a.formatContent(e)},formatCash:function(e){return o.a.formatCash(e)},columnPrice:function(e){return o.a.formatPrice(e)},formatSize:function(e){return o.a.formatSize(e)},formatDuration:function(e){return o.a.formatDuration(e)},filterTime:function(e){return e>86400?Math.floor(e/86400)+"天":e>3600?Math.floor(e/3600)+"小时":e>60?Math.floor(e/60)+"分":e+"秒"},filterColumnUnit:function(e){var t=String(e);return t=/\d/.test(t)?t.match(/\d+/)[0]:null},cutStr:function(e,t){var n=o.a.subString(e,t);return n!==e?n+"...":n},resizeImg:function(e,t,n){return isNaN(t)||isNaN(n)?e:e&&"string"==typeof e&&e.match(/^https*:\/\/static.*\.geekbang\.org\//i)?e+"?x-oss-process=image/resize,m_fill,h_"+n+",w_"+t:e},trim:function(e){return"string"==typeof e?e.trim():""},escapeHtml:function(e){var t={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"'};return e.replace(/&(lt|gt|nbsp|amp|quot);/gi,function(e,n){return t[n]})},formatDateReadable:function(e,t){return o.a.formatDateReadable(e,t)}}},276:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var o=function(e){return n.e(45).then(function(){var t=[n(574)];e.apply(null,t)}.bind(this)).catch(n.oe)},i=function(e){return n.e(46).then(function(){var t=[n(575)];e.apply(null,t)}.bind(this)).catch(n.oe)},a=[{path:"/columninfo/:id(\\d+)",name:"ColumnInfo",component:o},{path:"/agreement",name:"Agreement",component:o},{path:"/legal",name:"Legal",component:o},{path:"/permit",name:"Permit",component:o},{path:"/questions",name:"Questions",component:o},{path:"/question/:id",name:"Question",component:o},{path:"/rules/coupon",name:"CouponRules",component:o},{path:"/rules/share",name:"ShareRules",component:o},{path:"/rules/groupon",name:"GrouponRules",component:o},{path:"/rules/invite",name:"InviteRules",component:o},{path:"/special/:id",name:"Special",component:o},{path:"/list/special/:id",name:"ListSpecial",component:o},{path:"/list/videos/:id",name:"ListVideos",component:o},{path:"/list/videos/v2/:id",name:"ListVideosV2",component:o},{path:"/guide/recharge",name:"RechargeGuide",component:o},{path:"/agreement/partner",name:"PartnerAgreement",component:o},{path:"/activity/newusergift",name:"PullNew",component:o},{path:"/activity/get-newusergift",name:"PullNewSuccess",component:o},{path:"/activity/invite",name:"Invite",component:o},{path:"/activity/getinvite",name:"GetInvite",component:o},{path:"/activity/inviterecord",name:"InviteRecord",component:o},{path:"/activity/sale-poster",name:"SalePosterList",component:o},{path:"/activity/sale-poster/:cid",name:"SalePosterDetail",component:o},{path:"/activity/share-poster",name:"SharePosterList",component:o},{path:"/activity/share-withdraw",name:"ShareWithdraw",component:o},{path:"/activity/share-poster-new",name:"SharePosterListNew",component:o},{path:"/activity/share-ranking-list",name:"ShareWithdrawNew",component:o},{path:"/activity/column-ranking-list/:id",name:"ColumnRankingList",component:o},{path:"/readhub/share-poster",name:"ReadhubPoster",component:o},{path:"/readhub/hot/:id",name:"ReadhubHotDetail",component:o},{path:"/readhub/dev/:id",name:"ReadhubDevDetail",component:o},{path:"/poster/article",name:"ContentPoster",component:o},{path:"/bought/all",name:"BoughtAll",component:o},{path:"/app/course-module/:id(\\d+)",name:"AppCourseModule",component:o},{path:"/gift/card",name:"RechargeCard",component:i}]},277:function(e,t,n){"use strict";var o=n(99),i=n.n(o),a=n(220),r=n.n(a),s=n(39),c=n(565),l=n(163),u=n(65),A=n(276),d=function(e){return n.e(9).then(function(){var t=[n(577)];e.apply(null,t)}.bind(this)).catch(n.oe)},p=function(e){return n.e(12).then(function(){var t=[n(615)];e.apply(null,t)}.bind(this)).catch(n.oe)},h=function(e){return n.e(19).then(function(){var t=[n(616)];e.apply(null,t)}.bind(this)).catch(n.oe)},m=function(e){return n.e(10).then(function(){var t=[n(619)];e.apply(null,t)}.bind(this)).catch(n.oe)},f=function(e){return n.e(32).then(function(){var t=[n(597)];e.apply(null,t)}.bind(this)).catch(n.oe)},g=function(e){return n.e(2).then(function(){var t=[n(596)];e.apply(null,t)}.bind(this)).catch(n.oe)},v=function(e){return n.e(1).then(function(){var t=[n(598)];e.apply(null,t)}.bind(this)).catch(n.oe)},y=function(e){return n.e(8).then(function(){var t=[n(599)];e.apply(null,t)}.bind(this)).catch(n.oe)},b=function(e){return n.e(44).then(function(){var t=[n(580)];e.apply(null,t)}.bind(this)).catch(n.oe)},w=function(e){return n.e(18).then(function(){var t=[n(579)];e.apply(null,t)}.bind(this)).catch(n.oe)},k=function(e){return n.e(17).then(function(){var t=[n(587)];e.apply(null,t)}.bind(this)).catch(n.oe)},C=function(e){return n.e(14).then(function(){var t=[n(588)];e.apply(null,t)}.bind(this)).catch(n.oe)},x=function(e){return n.e(0).then(function(){var t=[n(608)];e.apply(null,t)}.bind(this)).catch(n.oe)},I=function(e){return n.e(4).then(function(){var t=[n(609)];e.apply(null,t)}.bind(this)).catch(n.oe)},_=function(e){return n.e(35).then(function(){var t=[n(590)];e.apply(null,t)}.bind(this)).catch(n.oe)},M=function(e){return n.e(39).then(function(){var t=[n(591)];e.apply(null,t)}.bind(this)).catch(n.oe)},L=function(e){return n.e(41).then(function(){var t=[n(583)];e.apply(null,t)}.bind(this)).catch(n.oe)},T=function(e){return n.e(40).then(function(){var t=[n(585)];e.apply(null,t)}.bind(this)).catch(n.oe)},S=function(e){return n.e(26).then(function(){var t=[n(584)];e.apply(null,t)}.bind(this)).catch(n.oe)},D=function(e){return n.e(29).then(function(){var t=[n(618)];e.apply(null,t)}.bind(this)).catch(n.oe)},E=function(e){return n.e(15).then(function(){var t=[n(601)];e.apply(null,t)}.bind(this)).catch(n.oe)},N=function(e){return n.e(23).then(function(){var t=[n(602)];e.apply(null,t)}.bind(this)).catch(n.oe)},P=function(e){return n.e(20).then(function(){var t=[n(605)];e.apply(null,t)}.bind(this)).catch(n.oe)},O=function(e){return n.e(24).then(function(){var t=[n(603)];e.apply(null,t)}.bind(this)).catch(n.oe)},B=function(e){return n.e(37).then(function(){var t=[n(589)];e.apply(null,t)}.bind(this)).catch(n.oe)},R=function(e){return n.e(31).then(function(){var t=[n(614)];e.apply(null,t)}.bind(this)).catch(n.oe)},j=function(e){return n.e(36).then(function(){var t=[n(600)];e.apply(null,t)}.bind(this)).catch(n.oe)},U=function(e){return n.e(28).then(function(){var t=[n(604)];e.apply(null,t)}.bind(this)).catch(n.oe)},V=function(e){return n.e(30).then(function(){var t=[n(586)];e.apply(null,t)}.bind(this)).catch(n.oe)},Q=function(e){return n.e(34).then(function(){var t=[n(613)];e.apply(null,t)}.bind(this)).catch(n.oe)},W=function(e){return n.e(11).then(function(){var t=[n(611)];e.apply(null,t)}.bind(this)).catch(n.oe)},J=function(e){return n.e(7).then(function(){var t=[n(612)];e.apply(null,t)}.bind(this)).catch(n.oe)},q=function(e){return n.e(21).then(function(){var t=[n(607)];e.apply(null,t)}.bind(this)).catch(n.oe)},z=function(e){return n.e(25).then(function(){var t=[n(617)];e.apply(null,t)}.bind(this)).catch(n.oe)},H=function(e){return n.e(43).then(function(){var t=[n(573)];e.apply(null,t)}.bind(this)).catch(n.oe)},$=function(e){return n.e(27).then(function(){var t=[n(578)];e.apply(null,t)}.bind(this)).catch(n.oe)},F=function(e){return n.e(33).then(function(){var t=[n(576)];e.apply(null,t)}.bind(this)).catch(n.oe)},G=function(e){return n.e(5).then(function(){var t=[n(581)];e.apply(null,t)}.bind(this)).catch(n.oe)},Y=function(e){return n.e(3).then(function(){var t=[n(582)];e.apply(null,t)}.bind(this)).catch(n.oe)},X=function(e){return n.e(38).then(function(){var t=[n(610)];e.apply(null,t)}.bind(this)).catch(n.oe)},Z=function(e){return n.e(13).then(function(){var t=[n(592)];e.apply(null,t)}.bind(this)).catch(n.oe)},K=function(e){return n.e(6).then(function(){var t=[n(593)];e.apply(null,t)}.bind(this)).catch(n.oe)},ee=function(e){return n.e(42).then(function(){var t=[n(594)];e.apply(null,t)}.bind(this)).catch(n.oe)},te=function(e){return n.e(16).then(function(){var t=[n(595)];e.apply(null,t)}.bind(this)).catch(n.oe)},ne=function(e){return n.e(22).then(function(){var t=[n(606)];e.apply(null,t)}.bind(this)).catch(n.oe)};s.a.use(c.a);var oe=new c.a({mode:"history",routes:[{path:"/",name:"Index",component:p,meta:{notScrollTop:!0}},{path:"/library",name:"Index",component:h},{path:"/download",name:"Download",component:d},{path:"/search",name:"Search",component:m},{path:"/column/intro",name:"ColumnIntroForPreview",component:v,meta:{appLink:"views/column/intro.js"}},{path:"/column/:id(\\d+)",name:"ColumnArticleList",component:f,meta:{appLink:"views/column/intro.js",urlscheme:"time://columnIntro?id={{id}}"}},{path:"/column/article",name:"ColumnArticle",component:g,meta:{appLink:"views/column/article.js"}},{path:"/column/article/:id(\\d+)",name:"ColumnArticleDetail",component:g,meta:{appLink:"views/column/article.js",notScrollTop:!0}},{path:"/column/article/comment",name:"Comment",component:j},{path:"/article",name:"ArticlePreview",component:g,meta:{appLink:"views/column/article.js"}},{path:"/article/:id(\\d+)",name:"Article",component:g,meta:{appLink:"views/column/article.js",urlscheme:"time://article?id={{id}}"}},{path:"/column/article/:id(\\w+)/share",name:"Share",component:y},{path:"/column/intro/:id(\\d+)",name:"ColumnIntroDetail",component:v,meta:{appLink:"views/column/intro.js",urlscheme:"time://columnIntro?id={{id}}"}},{path:"/recharge/login",name:"RechargeLogin",component:b},{path:"/recharge/confirm",name:"RechargeConfirm",component:w},{path:"/activity/recharge-2019",name:"RechargeFor2019",component:k},{path:"/activity/recharge/expand",name:"RechargeExpand",component:C},{path:"/list/groupon/:id",name:"ListGroupon",component:B},{path:"/activity/dl-generalize",name:"DailyLessonGeneralize",component:V},{path:"/course/intro/:id",name:"CourseIntro",component:x,meta:{appLink:"views/courses/course_intro.js",urlscheme:"time://courseIntro?id={{id}}"}},{path:"/course/detail/:id-:vid",name:"CourseDetail",component:I,meta:{appLink:"views/course/detail.js",urlscheme:"time://courseDetail?id={{id}}&aid={{vid}}"}},{path:"/dailylesson/readlist/:id",name:"DailyLessonReadList",component:Q,meta:{urlscheme:"time://dailyExplore"}},{path:"/dailylesson/collection/:id",name:"DailyLessonCollection",component:W,meta:{urlscheme:"time://dailyCollection?collectionId={{id}}"}},{path:"/dailylesson/detail/:sku",name:"DailyLessonDetail",component:J,meta:{urlscheme:"time://dailySingle?sku={{sku}}"}},{path:"/cash/account",name:"CashAccount",component:_},{path:"/cash/detail",name:"CashDetail",component:M},{path:"/wxlite/groupbuy/:id(\\d+)",name:"WxliteGroupBuy",component:L},{path:"/wxlite/paid/:code",name:"WxliteGroupBuyPaid",component:T},{path:"/wxlite/course/aliyunvideo/:cid-:aid",name:"WxliteCourseAliyunVideo",component:X},{path:"/note/all",name:"NoteAll",component:D},{path:"/comment/all",name:"CommentAll",component:E},{path:"/comment/detail/:id(\\d+)",name:"CommentDetail",component:N},{path:"/comment/nice/:id(\\d+)",name:"NiceComment",component:P},{path:"/comment/nice-module/:id(\\d+)",name:"NiceCommentModule",component:ne},{path:"/discuss/detail/:id(\\d+)",name:"DiscussDetail",component:O},{path:"/discuss/write",name:"DiscussWrite",component:U},{path:"/activity/wxlite/groupbuylist",name:"WxliteGroupBuyList",component:S},{path:"/reply",name:"Reply",component:q},{path:"/mygroupbuy",name:"mygroupbuy",component:$},{path:"/convert",name:"convert",component:F},{path:"/training/:id",name:"college",component:G},{path:"/college/algorithm/:id",name:"CollegeAlgorithm",component:Y},{path:"/groupon/:code",name:"Groupon",component:R},{path:"/learning/record",name:"LearningRecord",component:z},{path:"/channel/home",name:"Channel",component:Z},{path:"/channel/materialdetail/:id",name:"materialdetail",component:K},{path:"/channel/rule",name:"channelRule",component:ee},{path:"/channel/myearnings",name:"myearnings",component:te},{path:"/billfeedback",name:"billfeedback",component:H},{path:"*",redirect:"/"}].concat(r()(A.a)),scrollBehavior:function(e,t,n){if(!e.meta.notScrollTop)return n||{x:0,y:0}}}),ie=!1,ae=new RegExp(/^gk_|^utm_|code/),re=function(e,t,n){var o=!0;for(var i in t.query)ae.test(i)&&e.query[i]!==t.query[i]&&(o=!1);if(!ie&&document.referrer&&document.referrer.search(/\?/)>0&&u.a.checkGeekbangDomain(document.referrer)){document.referrer.split("?")[1].split("&").forEach(function(n,o){var i=n.split("=");ae.test(i[0])&&(t.query[i[0]]=e.query[i[0]]=decodeURIComponent(i[1]))}),n({path:e.path,query:e.query})}else if(o||!ie)n({});else{for(var a in t.query)ae.test(a)&&(e.query[a]=t.query[a]);n({path:e.path,query:e.query})}};oe.beforeEach(function(e,t,n){window._MEIQIA&&window._MEIQIA("hidePanel"),re(e,t,function(e){ie?n(i()({},e,{replace:!0})):(ie=!0,l.a.dispatch("getLoginUser").then(function(){n(i()({},e,{replace:!0}))}).catch(function(t){n(i()({},e,{replace:!0})),console.log(t)}))})}),t.a=oe},278:function(e,t,n){"use strict";var o=n(43),i=n.n(o),a=n(223),r=n(164),s={getLoginUser:function(e){var t=e.commit;return new i.a(function(e,n){a.a.getLoginUser().then(function(n){t(r.a,n),e()}).catch(function(e){n(),console.log("get login error: ",e)})})},logout:function(e){(0,e.commit)(r.a,null)},addGlobalLayer:function(e,t){var n=e.commit,o=e.state;n(r.b,[].concat(o.globalLayers,[t]))},removeGlobalLayer:function(e,t){var n=e.commit,o=e.state,i=o.globalLayers.filter(function(e){return e.name!==t});n(r.b,i)},clearGlobalLayers:function(e){(0,e.commit)(r.b,[])}};t.a=s},279:function(e,t,n){"use strict";var o,i=n(224),a=n.n(i),r=n(99),s=n.n(r),c=n(164),l=(o={},a()(o,c.a,function(e,t){e.loginUser=s()({},e.loginUser,t)}),a()(o,c.c,function(e){e.loginUser=null}),a()(o,c.b,function(e,t){e.globalLayers=t}),o);t.a=l},280:function(e,t,n){"use strict";var o={loginUser:null,globalLayers:[]};t.a=o},281:function(e,t,n){"use strict";t.a={sendPv:function(e){"time.geekbang.org"===window.location.host&&(window.ga&&window.ga("send","pageview",e),window._hmt&&window._hmt.push(["_trackPageview",e]))},sendEvent:function(e,t,n){console.log(e,t,n),"time.geekbang.org"===window.location.host&&(window.ga&&window.ga("send","event",e,t,n),window._hmt&&window._hmt.push(["_trackEvent",e,t,n]))}}},523:function(e,t){},524:function(e,t){e.exports={button:"_3onsJjul_0"}},525:function(e,t){e.exports={main:"_2sRsF5RP_0"}},526:function(e,t){},527:function(e,t){},528:function(e,t){},529:function(e,t){},530:function(e,t){},543:function(e,t,n){function o(e){this.$style=n(524)}var i=n(22)(n(262),n(560),o,null,null);e.exports=i.exports},544:function(e,t,n){var o=n(22)(n(263),n(556),null,null,null);e.exports=o.exports},545:function(e,t,n){var o=n(22)(n(264),n(558),null,null,null);e.exports=o.exports},546:function(e,t,n){var o=n(22)(n(265),n(554),null,null,null);e.exports=o.exports},547:function(e,t,n){var o=n(22)(n(266),n(555),null,null,null);e.exports=o.exports},548:function(e,t,n){function o(e){n(529)}var i=n(22)(n(267),n(562),o,"data-v-99cd8b4a",null);e.exports=i.exports},549:function(e,t,n){function o(e){n(527)}var i=n(22)(n(268),n(559),o,null,null);e.exports=i.exports},550:function(e,t,n){function o(e){n(528)}var i=n(22)(n(269),n(561),o,null,null);e.exports=i.exports},551:function(e,t,n){function o(e){this.$style=n(525)}var i=n(22)(n(270),n(563),o,null,null);e.exports=i.exports},552:function(e,t,n){function o(e){n(526)}var i=n(22)(n(271),n(557),o,null,null);e.exports=i.exports},553:function(e,t,n){function o(e){n(530)}var i=n(22)(n(272),n(564),o,null,null);e.exports=i.exports},554:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"fade"}},[e.visible?n("div",{staticClass:"gk-loading"},[n("svg",{staticClass:"gk-loading-spinner",style:e.styles,attrs:{viewBox:"0 0 66 66",xmlns:"http://www.w3.org/2000/svg"}},[n("circle",{staticClass:"gk-loading-path",class:[e.colorClass],attrs:{fill:"none","stroke-width":"6","stroke-linecap":"round",cx:"33",cy:"33",r:"30"}})]),e._v(" "),e.label?n("p",{staticClass:"label"},[e._v(e._s(e.label))]):e._e()]):e._e()])},staticRenderFns:[]}},555:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"gkui-message-content-wrap"},[n("div",{class:["gkui-message-content",e.typeCls]},[e.prefix?n("span",{staticClass:"gkui-message-prefix",domProps:{innerHTML:e._s(e.prefix)}}):e._e(),e._v(" "),"loading"===e.type?n("Loading",{staticClass:"gkui-message-loading-prefix",attrs:{color:e.loadingColor,size:e.loadingSize}}):e._e(),e._v(" "),n("span",{staticClass:"gkui-message-text"},[e._v(e._s(e.message))]),e._v(" "),e.closable?n("span",{staticClass:"gkui-message-close",on:{click:e.close}},[n("i",{class:{defaultClose:!e.customClose},domProps:{innerHTML:e._s(e.customCloseBtn)}})]):e._e()],1)])},staticRenderFns:[]}},556:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{name:e.name,dialogClass:"gkui-dialog-confirm",value:e.value,hasClose:!1,maskClickClose:!1,hasCancel:"confirm"===e.type,handleOk:e.handleOk,handleCancel:e.handleCancel,center:e.center,verticalCenter:e.verticalCenter,okText:e.okText,cancelText:e.cancelText,okBtnColor:e.okBtnColor,cancelBtnColor:e.cancelBtnColor,width:e.width,top:e.top,loading:e.loading}},[n("div",{attrs:{slot:"header"},domProps:{innerHTML:e._s(e.title)},slot:"header"}),e._v(" "),n("div",{staticClass:"gkui-confirm-content"},[e._v("\n "+e._s(e.message)+"\n ")])])},staticRenderFns:[]}},557:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"confirm-box-wrapper"},[n("div",{staticClass:"mask"}),e._v(" "),n("div",{staticClass:"confirm-box"},[n("h2",{staticClass:"head"},[e._v(e._s(e.title))]),e._v(" "),n("div",{staticClass:"body",domProps:{innerHTML:e._s(e.content)}}),e._v(" "),n("div",{staticClass:"foot"},[e.btnCancel?n("a",{staticClass:"button button-cancel",on:{click:e.cancelHandler}},[e._v(e._s(e.btnCancel))]):e._e(),e._v(" "),e.btnOk?n("a",{staticClass:"button button-primary",on:{click:e.okHandler}},[e._v(e._s(e.btnOk))]):e._e()])])])])},staticRenderFns:[]}},558:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.visible?n("div",{class:e.wrapClass},[n("div",{staticClass:"gkui-dialog-mask",on:{click:e.handleMask}}),e._v(" "),n("transition",{attrs:{name:e.transitionName}},[e.contentVisible?n("div",{staticClass:"gkui-dialog-container",style:e.mainStyle},[e.hasClose?n("span",{staticClass:"gkui-dialog-close",on:{click:e.close}}):e._e(),e._v(" "),e.showHead?n("div",{staticClass:"gkui-dialog-header"},[e._t("header",[e._v("\n "+e._s(e.title)+"\n ")])],2):e._e(),e._v(" "),n("div",{staticClass:"gkui-dialog-body"},[e._t("default")],2),e._v(" "),n("div",{staticClass:"gkui-dialog-footer"},[e._t("footer",[e.hasCancel?n("Button",{attrs:{size:"normal",color:e.cancelBtnColor},on:{click:e.cancel}},[e._v(e._s(e.cancelText))]):e._e(),e._v(" "),n("Button",{attrs:{size:"normal",color:e.okBtnColor,useLock:!0},on:{click:e.ok},scopedSlots:e._u([{key:"status",fn:function(t){var o=t.locked;return[e.loading&&o?n("Loading",{staticClass:"gkui-dialog-loading",attrs:{color:"white",size:"14px"}}):e._e()]}}],null,!1,1531177023)},[e._v("\n "+e._s(e.okText)+"\n ")])])],2)]):e._e()])],1):e._e()},staticRenderFns:[]}},559:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"gkui-modal-controller"}},[n("transition",{attrs:{name:"fade"}},[e.isShowLayer?n("div",{staticClass:"gkui-modal-layer"}):e._e()]),e._v(" "),e._l(e.modals,function(t){return[n(t.component,e._b({key:t.params.id,tag:"component",style:{zIndex:9e4+t.params.zIndex}},"component",t.params,!1))]})],2)},staticRenderFns:[]}},560:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:[e.$style.button],attrs:{"gk-button":"","gkbtn-color":e.color,"gkbtn-size":e.size,disabled:e._disabled},on:{click:e.handleClick}},[e._t("status",null,{disabled:e.disabled,locked:e.locked}),e._v(" "),e._t("default",[e._v("\n "+e._s(e.locked?e.lockLabel||e.label:e.label)+"\n ")]),e._v(" "),e._t("end",null,{disabled:e.disabled,locked:e.locked})],2)},staticRenderFns:[]}},561:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("router-view")],1),e._v(" "),n("GlobalLayer")],1)},staticRenderFns:[]}},562:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{style:e.styles,attrs:{id:"gkui-message-list"}},[n("transition-group",{attrs:{name:e.transitionName},on:{enter:e.handleEnter,leave:e.handleLeave}},[e._l(e.messageList,function(t){return[n("MessageItem",{key:t.name,attrs:{type:t.type,duration:t.duration,closable:t.closable,name:t.name,message:t.message,onClose:t.onClose,prefix:t.prefix,customClose:t.customClose,loadingColor:t.loadingColor,loadingSize:t.loadingSize,transitionName:e.transitionName},on:{close:e.close}})]})],2)],1)},staticRenderFns:[]}},563:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.$style.main},e._l(e.data,function(e,t){return n(e,{key:t,tag:"component"})}),1)},staticRenderFns:[]}},564:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.showLoading?n("div",{staticClass:"_loading_wrap_"},[n("transition",{attrs:{name:"fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"_loading_div_class_"},[n("svg",{staticClass:"spinner spinner--circle",style:e.styles,attrs:{viewBox:"0 0 66 66",xmlns:"http://www.w3.org/2000/svg"}},[n("circle",{staticClass:"path",attrs:{fill:"none","stroke-width":"6","stroke-linecap":"round",cx:"33",cy:"33",r:"30"}})]),e._v(" "),n("p",{staticClass:"message"},[e._v(e._s(e.message))])])])],1):e._e()},staticRenderFns:[]}},570:function(e,t,n){n(217),e.exports=n(216)},65:function(e,t,n){"use strict";var o=n(147),i=n.n(o),a=n(221),r=n.n(a),s=n(282),c=n.n(s),l=n(218),u=n(39),A=n(106),d=n(259),p=n(227);u.a.use(A.a),u.a.use(d.a),t.a={formatDate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-",n=new Date(10===String(e).length?1e3*e:e),o=n.getMonth()+1,i=n.getDate();return[n.getFullYear(),(o>9?"":"0")+o,(i>9?"":"0")+i].join(t)},formateTime:function(e){var t=new Date(10===String(e).length?1e3*e:e);return[(t.getHours()>9?"":"0")+t.getHours(),(t.getMinutes()>9?"":"0")+t.getMinutes(),(t.getSeconds()>9?"":"0")+t.getSeconds()].join(":")},formatPrice:function(e){return e||(e=0),e/100},formatCash:function(e){return e||(e=0),(e/100).toFixed(2)},formatSize:function(e){var t=Number(e);return t<1024?t:t<1048576?(t/1024).toFixed(2)+"K":t<1073741824?(t/1024/1024).toFixed(2)+"M":(t/1024/1024/1024).toFixed(2)+"G"},version:function(e){if(!e)return 0;e=e.toString();for(var t=e.split("."),n=0;n=812&&screen.width>=375},eqAndroidVersion:function(e){var t=navigator.userAgent;return this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])===this.version(e)},ltAndroidVersion:function(e){var t=navigator.userAgent;return this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])=this.version(e)},ltIOSVersion:function(e){var t=navigator.userAgent;return this.isInApp()&&!this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])=this.version(e)},formatDuration:function(e){var t=Number(e);return t<60?t+"秒":t<3600?Math.floor(t/60)+"分"+(t%60==0?"":t%60+"秒"):Math.floor(t/60/60)+"小时"+this.formatDuration(t%3600)},getQueryString:function(e,t){var n=new RegExp("(^|&)"+t+"=([^&]*)(&|$)","i"),o=e.split("?").length>1?e.split("?")[1]:"",i=o.match(n);return null!==i?decodeURIComponent(i[2]):""},queryPack:function(e){var t="";for(var n in e)t+=n+"="+encodeURIComponent(e[n])+"&";return t.substr(0,t.length-1)},parseAudio:function(e){return e?'\n \n ':""},imgToBase64:function(e,t){var n=document.createElement("img");n.src=e,n.crossOrigin="Anonymous",document.body.appendChild(n),n.onload=function(){var e=window.getComputedStyle(n,null),o=document.createElement("canvas");o.width=e.getPropertyValue("width").split("px")[0],o.height=e.getPropertyValue("height").split("px")[0],o.getContext("2d").drawImage(n,0,0);var i=o.toDataURL("image/png",1);document.body.removeChild(n),t(i)},n.src=e,(n.complete||void 0===n.complete)&&(n.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",n.src=e)},b64toBlob:function(e,t,n){t=t||"",n=n||512;for(var o=atob(e),i=[],a=0;a(.+?)<\/code>/g,function(e,n){return t.push(n),"$"+(t.length-1)+""}),e=e.replace(/([\u4E00-\u9FA5])([a-z0-9@#&;=_\[\$\%\^\*\-\+\(\/])/gi,"$1 $2"),e=e.replace(/([a-z0-9#!~&;=_\]\,\.\:\?\$\%\^\*\-\+\)\/])([\u4E00-\u9FA5])/gi,"$1 $2"),e=e.replace(/\$(\d+)<\/code>/g,function(e,n){var o=parseInt(n,10);return c()(o)?""+t[o]+"":e})},utcToLocal:function(e){var t=new Date;return(10===String(e).length?1e3*e:1*e)-6e4*t.getTimezoneOffset()},formatDateReadable:function(e,t){var n=10===String(e).length?1e3*e:1*e;t&&(n=this.utcToLocal(n));var o=(new Date).valueOf(),i=o-n;if(i<6e4)return Math.floor(i/1e3)+" 秒前";if(i<36e5)return Math.floor(i/6e4)+" 分钟前";if(i<864e5)return Math.floor(i/36e5)+" 小时前";var a=new Date(n),r=a.getMonth()+1,s=a.getDate(),c=(r>9?"":"0")+r+"月"+(s>9?"":"0")+s+"日";return a.getFullYear()!==(new Date).getFullYear()&&(c=a.getFullYear()+"年"+c),c},canTimeUniversalJump:function(){return this.gteqAndroidVersion("1.1.3")||this.gteqIOSVersion("1.1.12")},jumpColumnIntro:function(e){var t="time://columnIntro?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column/intro.js",data:{id:e}}):location.href="/column/intro/"+e},jumpColumnDetail:function(e){var t="time://columnDetail?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column_detail.js",data:{id:e}}):location.href="/column/"+e},jumpCourseIntro:function(e){var t="time://courseIntro?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/courses/course_intro.js",data:{id:e}}):location.href="/course/intro/"+e},jumpCourseDetail:function(e,t){var n="time://courseDetail?id="+e+"&aid="+t;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",n,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:n}):this.isInApp()?this.notifyApp({type:"jump",path:"views/courses/course_detail.js",data:{id:e,aid:t}}):location.href="/course/detail/"+e+"-"+t},jumpArticle:function(e){var t="time://article?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column/article.js",data:{id:e}}):location.href="/column/article/"+e},parseTimeLink:function(e){if(e.match(/^time:\/\//)){var t=e.match(/([\w]+)\?(.+)/);if(t.length<3)return;var n={};if(t[2].split("&").forEach(function(e){var t=e.match(/([\w]+)=(.+)/);3===t.length&&(n[t[1]]=decodeURIComponent(t[2]))}),p.hasNativeMethod("common.routeJump"))p.call("common.routeJump",e,function(){return console.log("调起成功")});else if(this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0"))this.notifyApp({type:"urlscheme",url:e});else if(this.canTimeUniversalJump())this.notifyApp({type:"route",name:t[1],data:n});else if(this.isInApp())switch(t[1]){case"mall":this.toast("请升级到极客时间最新版后,点击该链接购买");break;default:this.toast("需要升级到极客时间最新版")}else switch(t[1]){case"mall":var o=e.match(/url=(.+)/i);o.length>1?setTimeout(function(){window.location.href=decodeURIComponent(o[1])},200):this.error("链接出现错误");break;default:this.toast("需要升级到极客时间最新版")}}else window.location.href=e},isPC:function(){for(var e=navigator.userAgent,t=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"],n=!0,o=0;o0){n=!1;break}return n},isIOS:function(){return!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)},isIPad:function(){return!!navigator.userAgent.match(/ipad/i)},isAndroid:function(){return!!navigator.userAgent.match(/android/i)},isInWeixin:function(){return!!window.navigator.userAgent.match(/MicroMessenger/i)},isInWXMiniProgram:function(){return window.__wxjs_environment&&"miniprogram"===window.__wxjs_environment||window.navigator.userAgent.toLowerCase().indexOf("miniprogram")>-1},isInAliApp:function(){return!!window.navigator.userAgent.match(/AliApp/i)},isInQQ:function(){return!!navigator.userAgent.match(/QQBrowser/i)},isInWeibo:function(){return!!navigator.userAgent.match(/WeiBo/i)},isInApp:function(){return!!navigator.userAgent.match(/org\.geekbang\.GeekTime/i)},isInAndroidApp:function(){return!!navigator.userAgent.match(/android\.org\.geekbang\.GeekTime/i)},isMac:function(){return navigator.platform.indexOf("Mac")>-1},isWin:function(){return navigator.platform.indexOf("Win")>-1},isIpad:function(){return navigator.userAgent.toLowerCase().indexOf("ipad")>-1},addUrlParam:function(e,t,n){var o=t+"="+encodeURIComponent(n),i="?"+o;return e&&(i=e.replace(new RegExp("([?&])"+t+"[^&]*"),"$1"+o))===e&&e.indexOf(o)<0&&(i+=(e.indexOf("?")>0?"&":"?")+o),i},shareInWeixin:function(e){if(this.isInWeixin()){var t="https://static001.geekbang.org/static/icon/time/logo-180.png";window.wx&&window.wx.ready(function(){window.wx.onMenuShareTimeline({title:e.timelineTitle||"极客时间",link:e.url||window.location.href,imgUrl:e.img||t}),window.wx.onMenuShareAppMessage({title:e.messageTitle||"极客时间",link:e.url||window.location.href,imgUrl:e.img||t,desc:e.desc||""})})}},subString:function(e,t){var n=e.slice(0,t),o=n.replace(/[x00-xff]/g,"").length;switch(o){case 0:return n;case t:return e.slice(0,t>>1);default:var i=t-o,a=e.slice(i,t),r=a.replace(/[x00-xff]/g,"").length;return r?e.slice(0,i)+this.subString(a,r):e.slice(0,i)}},getTicket:function(){var e=window.localStorage.getItem("gtInfo");return e&&JSON.parse(e)?JSON.parse(e).ticket:this.getQueryString(window.location.href,"ticket")},getDeviceId:function(){var e=window.localStorage.getItem("gtInfo");return e&&JSON.parse(e)?JSON.parse(e).deviceId:this.getQueryString(window.location.href,"deviceId")},toast:function(e){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()?this.notifyApp({type:"toast",data:{message:e}}):u.a.prototype.$Message.info({message:e,top:"100px"})},success:function(e){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"toast",data:{message:e}}):u.a.prototype.$Message.success({message:e})},error:function(e,t,n){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"error",data:{message:e}}):u.a.prototype.$Message.error({message:e,top:t,prefix:n})},parseError:function(e){if(e.data&&e.data.error)if("-2000"===String(e.data.error.code))this.login();else try{this.error(l.a.errorCode[e.data.error.code]||e.data.error.msg)}catch(e){this.error(e)}},canNotifyApp:function(){return window.webkit&&window.webkit.messageHandlers||window.webviewJSInterface&&window.webviewJSInterface},notifyApp:function(e){if(this.canNotifyApp()){var t=this.getQueryString(window.location.href,"utm_term");if("jump"===e.type&&e.data&&t&&(e.data.utm_term=t),this.isInAndroidApp())try{window.webviewJSInterface&&window.webviewJSInterface.notifyWeex(r()(e))}catch(e){console.log(e)}else try{window.webkit.messageHandlers.notifyWeex.postMessage({data:e})}catch(e){console.log(e)}}},login:function(){p.hasNativeMethod("common.routeJump")?p.call("common.routeJump","time://login",function(e){}):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"login",data:{}}):this.isInWXMiniProgram()?window.wx&&window.wx.miniProgram.navigateTo({url:"/pages/login/login?redirect="+encodeURIComponent("/pages/gkwebview/gkwebview?url="+window.location.href+"&auth=true")}):window.location.href="//account.geekbang.org/singin?redirect="+encodeURIComponent(window.location.href)},previewImgInApp:function(e,t){if(p.hasNativeMethod("common.viewLargeImage")){var n={images:e,pos:t};p.call("common.viewLargeImage",n,function(){return console.log("调起成功")})}else this.gteqAndroidVersion("1.0.8")?this.notifyApp({type:"img",data:{url:e[t]}}):this.notifyApp({type:"img",data:{imgs:e,index:t}})},html2Text:function(e){var t=document.createElement("div");return t.innerHTML=e,t.innerText},checkGeekbangDomain:function(e){return!!e&&!!e.match(/^https*\:\/\/([\w]+?)\.geekbang\.org/i)},handleMathJax:function(e){if(document.querySelector("script#MathJax"))window.MathJax&&window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,e]);else{var t=document.createElement("script");t.id="MathJax",t.src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML",document.getElementsByTagName("head")[0].appendChild(t),t.onload=function(t){window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,e])}}},getSelectionText:function(){var e="";if(void 0!==window.getSelection){var t=window.getSelection();if(t.rangeCount){for(var n=document.createElement("div"),o=0,i=t.rangeCount;o=a){var r=o[n+1];return r?{length:o.length,index:n+1,rest:(e-a)/(r-a)}:{length:o.length,index:n+1,rest:0}}var s=o[n-1];return s?{length:o.length,index:n-1,rest:(e-s)/(a-s)}:{length:o.length,index:n,rest:0}}var c=Math.floor(i/2-1);return e>t[c]?this.getPositionInSortNumberList(e,t.slice(c+1),n+c+1,o):this.getPositionInSortNumberList(e,t.slice(0,c+1),n,o)},html2escape:function(e){return e.replace(/[<>&"\/]/g,function(e){return{"<":"<",">":">","&":"&",'"':""","/":"/"}[e]})},shareToWeibo:function(e){event.preventDefault();var t="https://service.weibo.com/share/share.php?&appkey=3532615846";t=this.addUrlParam(t,"url",e.link||document.location.href),t=this.addUrlParam(t,"title",e.title||document.title),t=this.addUrlParam(t,"content",e.description||""),t=this.addUrlParam(t,"sharesource","weibo"),t=this.addUrlParam(t,"pic",e.img||""),window.open(t,"_blank")},copy:function(e){var t=e;if(void 0!==window.clipboardData){window.clipboardData.setData("Text",t),this.success("复制成功")}else try{var n=document.createElement("input");document.body.appendChild(n),n.setAttribute("value",t),n.select(),document.execCommand("copy")&&(document.execCommand("copy"),this.success("复制成功")),document.body.removeChild(n)}catch(e){this.error("你的浏览器不支持该操作,请手动复制")}},isRealHeightMoreThanVisibleHeight:function(e,t){var n=window.getComputedStyle(e,null),o=n.getPropertyValue("width"),i=n.getPropertyValue("height"),a=n.getPropertyValue("font-size"),r=n.getPropertyValue("line-height"),s=n.getPropertyValue("font-weight"),c=document.createElement("div");c.style.width=o,c.style.fontSize=a,c.style.whiteSpace="normal",c.style.fontWeight=s,c.style.lineHeight=r,c.style.wordBreak="break-all",c.style.position="absolute",c.innerHTML=t,document.body.appendChild(c);var l=c.offsetHeight;return document.body.removeChild(c),l>parseFloat(i)},fixedBody:function(e){var t=0,n=0;return{open:function(){t=document.scrollingElement.scrollTop||document.body.scrollTop,document.body.style.top=-t+"px",document.body.classList.add("fixed"),n=document.body.style.top},close:function(){document.body.classList.remove("fixed"),document.scrollingElement.scrollTop=t,document.body.scrollTop=t,document.body.style.top=n}}}()}}},[570]); \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/code.f041ed7.png b/re/geekbang/routes/download/source/static/code.f041ed7.png new file mode 100644 index 0000000..5f67cee Binary files /dev/null and b/re/geekbang/routes/download/source/static/code.f041ed7.png differ diff --git a/re/geekbang/routes/download/source/static/code2.484bdd7.png b/re/geekbang/routes/download/source/static/code2.484bdd7.png new file mode 100644 index 0000000..088f5b9 Binary files /dev/null and b/re/geekbang/routes/download/source/static/code2.484bdd7.png differ diff --git a/re/geekbang/routes/download/source/static/font_372689_nw1guejwd2q.js b/re/geekbang/routes/download/source/static/font_372689_nw1guejwd2q.js new file mode 100644 index 0000000..e17944a --- /dev/null +++ b/re/geekbang/routes/download/source/static/font_372689_nw1guejwd2q.js @@ -0,0 +1 @@ +(function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/hm.js b/re/geekbang/routes/download/source/static/hm.js new file mode 100644 index 0000000..fa4a882 --- /dev/null +++ b/re/geekbang/routes/download/source/static/hm.js @@ -0,0 +1,78 @@ +(function(){var h={},mt={},c={id:"022f847c4e3acd44d4a2481d9187f1e6",dm:["time.geekbang.org","horde.geekbang.org","promo.geekbang.org","cashier.geekbang.org","market.geekbang.org"],js:"tongji.baidu.com/hm-web/js/",etrk:[],cetrk:[],icon:'',ctrk:false,align:-1,nv:0,vdur:1800000,age:31536000000,rec:0,rp:[],trust:0,vcard:0,qiao:0,lxb:0,kbtrk:0,pt:0,spa:0,aet:'',hca:'313F9B61E979BF37',conv:0,med:0,cvcc:'',cvcf:[],apps:''};var r=void 0,s=!0,v=null,w=!1;mt.cookie={};mt.cookie.set=function(b,a,e){var d;e.L&&(d=new Date,d.setTime(d.getTime()+e.L));document.cookie=b+"="+a+(e.domain?"; domain="+e.domain:"")+(e.path?"; path="+e.path:"")+(d?"; expires="+d.toGMTString():"")+(e.jc?"; secure":"")};mt.cookie.get=function(b){return(b=RegExp("(^| )"+b+"=([^;]*)(;|$)").exec(document.cookie))?b[2]:v}; +mt.cookie.Gb=function(b,a){try{var e="Hm_ck_"+ +new Date;mt.cookie.set(e,"is-cookie-enabled",{domain:b,path:a,L:r});var d="is-cookie-enabled"===mt.cookie.get(e)?"1":"0";mt.cookie.set(e,"",{domain:b,path:a,L:-1});return d}catch(f){return"0"}};mt.lang={};mt.lang.d=function(b,a){return"[object "+a+"]"==={}.toString.call(b)};mt.lang.ra=function(b){return mt.lang.d(b,"Number")&&isFinite(b)};mt.lang.aa=function(b){return mt.lang.d(b,"String")}; +mt.lang.g=function(b){return b.replace?b.replace(/'/g,"'0").replace(/\*/g,"'1").replace(/!/g,"'2"):b};mt.lang.trim=function(b){return b.replace(/^\s+|\s+$/g,"")};mt.lang.J=function(b,a){var e=w;if(b==v||!mt.lang.d(b,"Array")||a===r)return e;if(Array.prototype.indexOf)e=-1!==b.indexOf(a);else for(var d=0;d"),d=document.body,f=b.length-1;0<=f;f--)if(-1"+d.join(">"):l,f.push(l)),d.unshift(encodeURIComponent(String(a.nodeName).toLowerCase())+(1"));return f};mt.f.tb=function(a){return(a= +mt.f.oa(a,s))&&a.length?String(a[0]):""};mt.f.rb=function(a){return mt.f.oa(a,w)};mt.f.dc=function(a,b){for(b=b.toUpperCase();(a=a.parentNode)&&1==a.nodeType;)if(a.tagName==b)return a;return v};mt.f.lb=function(a){return 9===a.nodeType?a:a.ownerDocument||a.document};mt.f.ec=function(a){var b={top:0,left:0};if(!a)return b;var d=mt.f.lb(a).documentElement;"undefined"!==typeof a.getBoundingClientRect&&(b=a.getBoundingClientRect());return{top:b.top+(window.pageYOffset||d.scrollTop)-(d.clientTop||0),left:b.left+ +(window.pageXOffset||d.scrollLeft)-(d.clientLeft||0)}};mt.f.getAttribute=function(a,b){var d=a.getAttribute&&a.getAttribute(b)||v;if(!d&&a.attributes&&a.attributes.length)for(var f=a.attributes,g=f.length,m=0;ma?"0"+a:a}var e={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return function(d){switch(typeof d){case "undefined":return"undefined";case "number":return isFinite(d)?String(d):"null";case "string":return b(d);case "boolean":return String(d); +default:if(d===v)return"null";if(d instanceof Array){var f=["["],g=d.length,e,l,p;for(l=0;l(new Date).getTime())return b.substring(a+1)}}else if(mt.localStorage.ea())try{return mt.localStorage.l.load(document.location.hostname),mt.localStorage.l.getAttribute(b)}catch(d){}return v}; +mt.localStorage.remove=function(b){if(window.localStorage)window.localStorage.removeItem(b);else if(mt.localStorage.ea())try{mt.localStorage.l.load(document.location.hostname),mt.localStorage.l.removeAttribute(b),mt.localStorage.l.save(document.location.hostname)}catch(a){}};mt.sessionStorage={};mt.sessionStorage.set=function(b,a){try{window.sessionStorage&&window.sessionStorage.setItem(b,a)}catch(e){}}; +mt.sessionStorage.get=function(b){try{return window.sessionStorage?window.sessionStorage.getItem(b):v}catch(a){return v}};mt.sessionStorage.remove=function(b){try{window.sessionStorage&&window.sessionStorage.removeItem(b)}catch(a){}};mt.Sa={};mt.Sa.log=function(b,a){var e=new Image,d="mini_tangram_log_"+Math.floor(2147483648*Math.random()).toString(36);window[d]=e;e.onload=function(){e.onload=v;e=window[d]=v;a&&a(b)};e.src=b};mt.xa={}; +mt.xa.wb=function(){var b="";if(navigator.plugins&&navigator.mimeTypes.length){var a=navigator.plugins["Shockwave Flash"];a&&a.description&&(b=a.description.replace(/^.*\s+(\S+)\s+\S+$/,"$1"))}else if(window.ActiveXObject)try{if(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))(b=a.GetVariable("$version"))&&(b=b.replace(/^.*\s+(\d+),(\d+).*$/,"$1.$2"))}catch(e){}return b}; +mt.xa.bc=function(b,a,e,d,f){return''};mt.url={}; +mt.url.m=function(b,a){var e=b.match(RegExp("(^|&|\\?|#)("+a+")=([^&#]*)(&|$|#)",""));return e?e[3]:v};mt.url.fc=function(b){return(b=b.match(/^(https?:)\/\//))?b[1]:v};mt.url.ob=function(b){return(b=b.match(/^(https?:\/\/)?([^\/\?#]*)/))?b[2].replace(/.*@/,""):v};mt.url.N=function(b){return(b=mt.url.ob(b))?b.replace(/:\d+$/,""):b};mt.url.oa=function(b){return(b=b.match(/^(https?:\/\/)?[^\/]*(.*)/))?b[2].replace(/[\?#].*/,"").replace(/^$/,"/"):v}; +(function(){function b(){for(var a=w,b=document.getElementsByTagName("script"),d=b.length,d=100l*g.split(">").length)for(g=0;g").length,l=0;l"));a&&(b.d(a,"Object")&&a.Ea)&&a.Ea(e)},Kb:function(a, +b){return function(e){(e.target||e.srcElement).setAttribute(a.da,e.clientX+":"+e.clientY);a&&a.r&&(b?a.r(b):a.r("#"+encodeURIComponent(this.id),e.type))}}};return h.ma=e})(); +(function(){var b=mt.f,a=mt.o,e=mt.event,d=mt.lang,f=h.ma,g=h.V,m=g.T,l={da:"HM_ce",Va:function(){if(c.cetrk&&c.cetrk.length){e.e(document,"click",f.U(l,c.cetrk));for(var d=0,g=c.cetrk.length;d")&&(0===u.indexOf("#")&&(u=u.substring(1)),(u=b.Ga(u))&&e.e(u,"click",f.Kb(l,m)))}}},Ea:function(b){if(c.cetrk&&c.cetrk.length)for(var d=0,f=c.cetrk.length;df.ia||(encodeURIComponent(x.join("!")+a).length>f.ia&&(t.r(x.join("!")),x=[]), +x.push(a))},r:function(a){h.c.b.et=5;h.c.b.ep=a;h.c.b.p=l(m.C("autoEventTracking"));h.c.i();h.c.b.p=""},S:function(){return function(){x&&x.length&&(t.r(x.join("!")),x=[])}}};b.aa(c.aet)&&""!==c.aet&&g.e("pv-b",function(){e.e(document,"click",t.U());"ontouchend"in document&&e.e(window,"touchend",t.U());e.e(window,"unload",t.S())});return t})(); +(function(){var b=mt.event,a=mt.h,e=h.A,d=h.I,f=+new Date,g=[],m=v,l={gb:function(){return function(){h.c&&(h.c.P&&c.aet&&c.aet.length)&&(window.clearTimeout(m),m=window.setTimeout(function(){l.Xa(a.Y()+a.O())},150))}},Xa:function(a){l.ga([+new Date-(h.c.D!==r?h.c.D:f),a].join("*"))},ga:function(a){if(encodeURIComponent(g.join("!")+a).length>e.ia||3a.length)){var b=a[1],e=a[4]||3;if(0b&&0e){k.ca++;for(var f=(h.c.b.cv||"*").split("!"),g=f.length;ga.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!==r&&a!==r){var y=decodeURIComponent(t.getData("Hm_ct_"+c.id)||""),y=b(y,e,1,a);t.setData("Hm_ct_"+c.id,encodeURIComponent(y),c.age)}}},_setVisitTag:function(a){if(!(3>a.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!== +r&&a!==r){var y=k.z.za,y=b(y,e,2,a);k.z.za=y}}},_setPageTag:function(a){if(!(3>a.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!==r&&a!==r){var y=k.z.page,y=b(y,e,3,a);k.z.page=y}}},_setReferrerOverride:function(a){1c.vdur?1:4;var b=w;this.Z(document.referrer)&&this.Z(document.location.href)?b=s:(b=a.N(document.referrer),b=this.Q(b||"",document.location.hostname));return b?k.G-k.K>c.vdur?1:4:3},Qb:function(){var a,b,d,e,f;k.K=t.getData("Hm_lpvt_"+c.id)||0;13===k.K.length&&(k.K=Math.round(k.K/1E3));b=this.ub();a=4!==b?1:0;if(d=t.getData("Hm_lvt_"+c.id)){e=d.split(",");for(f=e.length-1;0<=f;f--)13===e[f].length&&(e[f]=""+Math.round(e[f]/1E3)); +for(;2592E3e.length?2:3;for(1===a&&e.push(k.G);4=+new Date-g;);};if(c.med)g="/zoosnet",f="swt",m=/swt|zixun|call|chat|zoos|business|talk|kefu|openkf|online|\/LR\/Chatpre\.aspx/i,l={click:function(){for(var a=[],b=p(document.getElementsByTagName("a")),b=[].concat.apply(b,p(document.getElementsByTagName("area"))),b=[].concat.apply(b,p(document.getElementsByTagName("img"))),d,e,f=0,g=b.length;f0){var n=e.split("?")[0],i=e.split("?")[1];return n+=".html",void 0!==i?n+"?"+i:n}}if(!e.jWeixin){var h={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},v=function(){var e={};for(var n in h)e[h[n]]=n;return e}(),I=e.document,S=I.title,y=navigator.userAgent.toLowerCase(),_=navigator.platform.toLowerCase(),w=!(!_.match("mac")&&!_.match("win")),T=-1!=y.indexOf("wxdebugger"),k=-1!=y.indexOf("micromessenger"),M=-1!=y.indexOf("android"),P=-1!=y.indexOf("iphone")||-1!=y.indexOf("ipad"),x=function(){var e=y.match(/micromessenger\/(\d+\.\d+\.\d+)/)||y.match(/micromessenger\/(\d+\.\d+)/);return e?e[1]:""}(),A={initStartTime:p(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},V={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:P?1:M?2:-1,clientVersion:x,url:encodeURIComponent(location.href)},C={},L={_completes:[]},B={state:0,data:{}};f(function(){A.initEndTime=p()});var O=!1,E=[],N={config:function(e){C=e,u("config",e);var n=!1!==C.check;f(function(){if(n)i(h.config,{verifyJsApiList:d(C.jsApiList)},function(){L._complete=function(e){A.preVerifyEndTime=p(),B.state=1,B.data=e},L.success=function(e){V.isPreVerifyOk=0},L.fail=function(e){L._fail?L._fail(e):B.state=-1};var e=L._completes;return e.push(function(){l()}),L.complete=function(n){for(var i=0,t=e.length;i0){var n=E.shift();wx.getLocalImgData(n)}},e))):E.push(e)},getNetworkType:function(e){var n=function(e){var n=e.errMsg;e.errMsg="getNetworkType:ok";var i=e.subtype;if(delete e.subtype,i)e.networkType=i;else{var t=n.indexOf(":"),o=n.substring(t+1);switch(o){case"wifi":case"edge":case"wwan":e.networkType=o;break;default:e.errMsg="getNetworkType:fail"}}return e};i("getNetworkType",{},(e._complete=function(e){e=n(e)},e))},openLocation:function(e){i("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},getLocation:function(e){e=e||{},i(h.getLocation,{type:e.type||"wgs84"},(e._complete=function(e){delete e.type},e))},hideOptionMenu:function(e){i("hideOptionMenu",{},e)},showOptionMenu:function(e){i("showOptionMenu",{},e)},closeWindow:function(e){i("closeWindow",{},e=e||{})},hideMenuItems:function(e){i("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){i("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){i("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){i("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){i("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){if(P){var n=e.resultStr;if(n){var i=JSON.parse(n);e.resultStr=i&&i.scan_code&&i.scan_code.scan_result}}},e))},openAddress:function(e){i(h.openAddress,{},(e._complete=function(e){e=a(e)},e))},openProductSpecificView:function(e){i(h.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,t=[],o=0,r=n.length;o0&&r.indexOf(a)!==-1&&(i=!0),2===o.length){var c=+h(o[0])||0,u=+h(o[1])||0;s[1]>=c&&s[1]<=u&&(i=!0)}0===r.length&&0===o.length&&(i=!0)}p(i)}},error:function(){p(!1)}})},function(e,t){"use strict";e.exports={env:"production",chat:"https://new-api.meiqia.com",upload:"https://eco-api-upload.meiqia.com",socket:"https://eco-push-api-client.meiqia.com/pusher",socket2:"https://camorope-client-a.meiqia.com/pusher",widget:"https://new-api.meiqia.com/dist",cdn:"https://resource.meiqia.com/dist",tail:"19oztl8cnr8"}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};n(3);var i=n(6),a=r(i);n(7),n(8);var c=function(e,t){var n=[];e&&e.ent_id||n.push("ent_id="+a["default"].entId);var r=t&&t.timestamp||1*new Date;for(var o in e)e.hasOwnProperty(o)&&n.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));return t&&t.sign&&n.push("sign="+t.sign),n.push("v="+r),n.join("&")},s=function(e){e=e||{},e.type=(e.type||"GET").toUpperCase(),e.dataType=e.dataType||"json",e.contentType=e.contentType||"application/x-www-form-urlencoded; charset=UTF-8";var t=c(e.data),n=null;if("undefined"!=typeof XMLHttpRequest)n=new XMLHttpRequest;else for(var r=["Microsoft.XmlHttp","MSXML2.XmlHttp","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.6.0"],i=0,s=r.length;i=200&&t<300){var r=n.responseText;"json"===e.dataType&&r&&(r=JSON.parse(n.responseText)),e.success&&e.success(r,n.responseXML)}else e.error&&e.error(n,t,n.responseText)}},"GET"===e.type)n.open("GET",e.url+"?"+t,!0),n.send(null);else if("POST"===e.type){var l=new URL(e.url),f=new URLSearchParams(l.search);f.has("ent_id")||f.append("ent_id",a["default"].entId),l.search=f.toString(),n.open("POST",""+l.toString(),!0),n.setRequestHeader("Content-Type",e.contentType);var h=e.header;if(h)for(var p in h)n.setRequestHeader(p,h[p]);var d=e.data;"object"===("undefined"==typeof d?"undefined":o(d))&&(d=JSON.stringify(d)),n.send(d)}return e.beforeSend&&e.beforeSend(n),n},u=function(e){if(e=e||{},e.data=e.data||{},!e.url||!e.callback)return!1;e.beforeSend&&e.beforeSend();var t=e.callbackName||"jsonp"+1*new Date;e.data[e.callback]=t;var n=c(e.data,e.signature),r=document.createElement("script");r.type="text/javascript",r.charset="UTF-8",document.body.appendChild(r),window[t]=function(n){try{document.body.removeChild(r),clearTimeout(r.timer),window[t]=null,e.success&&e.success(n)}catch(o){return null}},r.src=e.url+"?"+n,e.time&&(r.timer=setTimeout(function(){try{window[t]=null,document.body.removeChild(r),e.error&&e.error({message:"超时"})}catch(n){return null}},e.time))},l=function(e){e=e||{};var t=e.data,n=new XMLHttpRequest;n.upload&&(n.upload.onprogress=function(t){e.progress&&e.progress(t)}),n.onload=function(){if([200,204].indexOf(n.status)!==-1){var t=n.responseText;"json"===e.dataType&&(t=JSON.parse(n.responseText)),e.success&&e.success(t,n.responseXML)}else e.error&&e.error(n,status,n.responseText)};var r=new FormData;for(var o in t)t.hasOwnProperty(o)&&r.append(o,t[o]);n.open("POST",e.url),n.send(r),e.beforeSend&&e.beforeSend(n)};t["default"]={ajax:s,jsonp:u,upload:l}},function(e,t,n){var r;(function(e,o){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};(function(){function a(e,t){function n(e){if(n[e]!==g)return n[e];var i;if("bug-string-char-index"==e)i="a"!="a"[0];else if("json"==e)i=n("json-stringify")&&n("json-parse");else{var a,c='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var s=t.stringify,l="function"==typeof s&&S;if(l){(a=function(){return 1}).toJSON=a;try{l="0"===s(0)&&"0"===s(new r)&&'""'==s(new o)&&s(b)===g&&s(g)===g&&s()===g&&"1"===s(a)&&"[1]"==s([a])&&"[null]"==s([g])&&"null"==s(null)&&"[null,null,null]"==s([g,b,null])&&s({a:[a,!0,!1,null,"\0\b\n\f\r\t"]})==c&&"1"===s(null,a)&&"[\n 1,\n 2\n]"==s([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==s(new u((-864e13)))&&'"+275760-09-13T00:00:00.000Z"'==s(new u(864e13))&&'"-000001-01-01T00:00:00.000Z"'==s(new u((-621987552e5)))&&'"1969-12-31T23:59:59.999Z"'==s(new u((-1)))}catch(f){l=!1}}i=l}if("json-parse"==e){var h=t.parse;if("function"==typeof h)try{if(0===h("0")&&!h(!1)){a=h(c);var p=5==a.a.length&&1===a.a[0];if(p){try{p=!h('"\t"')}catch(f){}if(p)try{p=1!==h("01")}catch(f){}if(p)try{p=1!==h("1.")}catch(f){}}}}catch(f){p=!1}i=p}}return n[e]=!!i}e||(e=l.Object()),t||(t=l.Object());var r=e.Number||l.Number,o=e.String||l.String,c=e.Object||l.Object,u=e.Date||l.Date,f=e.SyntaxError||l.SyntaxError,h=e.TypeError||l.TypeError,p=e.Math||l.Math,d=e.JSON||l.JSON;"object"==("undefined"==typeof d?"undefined":i(d))&&d&&(t.stringify=d.stringify,t.parse=d.parse);var y,m,g,v=c.prototype,b=v.toString,S=new u((-0xc782b5b800cec));try{S=S.getUTCFullYear()==-109252&&0===S.getUTCMonth()&&1===S.getUTCDate()&&10==S.getUTCHours()&&37==S.getUTCMinutes()&&6==S.getUTCSeconds()&&708==S.getUTCMilliseconds()}catch(w){}if(!n("json")){var _="[object Function]",j="[object Date]",O="[object Number]",C="[object String]",T="[object Array]",E="[object Boolean]",P=n("bug-string-char-index");if(!S)var U=p.floor,L=[0,31,59,90,120,151,181,212,243,273,304,334],R=function(e,t){return L[t]+365*(e-1970)+U((e-1969+(t=+(t>1)))/4)-U((e-1901+t)/100)+U((e-1601+t)/400)};if((y=v.hasOwnProperty)||(y=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=b?y=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,y=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,y.call(this,e)}),m=function(e,t){var n,r,o,a=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)y.call(r,o)&&a++;return n=r=null,a?m=2==a?function(e,t){var n,r={},o=b.call(e)==_;for(n in e)o&&"prototype"==n||y.call(r,n)||!(r[n]=1)||!y.call(e,n)||t(n)}:function(e,t){var n,r,o=b.call(e)==_;for(n in e)o&&"prototype"==n||!y.call(e,n)||(r="constructor"===n)||t(n);(r||y.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var n,o,a=b.call(e)==_,c=!a&&"function"!=typeof e.constructor&&s[i(e.hasOwnProperty)]&&e.hasOwnProperty||y;for(n in e)a&&"prototype"==n||!c.call(e,n)||t(n);for(o=r.length;n=r[--o];c.call(e,n)&&t(n));}),m(e,t)},!n("json-stringify")){var k={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",A=function(e,t){return(x+(t||0)).slice(-e)},M="\\u00",N=function(e){for(var t='"',n=0,r=e.length,o=!P||r>10,i=o&&(P?e.split(""):e);n-1/0&&s<1/0){if(R){for(p=U(s/864e5),l=U(p/365.2425)+1970-1;R(l+1,0)<=p;l++);for(f=U((p-R(l,0))/30.42);R(l,f+1)<=p;f++);p=1+p-R(l,f),d=(s%864e5+864e5)%864e5,v=U(d/36e5)%24,S=U(d/6e4)%60,w=U(d/1e3)%60,_=d%1e3}else l=s.getUTCFullYear(),f=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),S=s.getUTCMinutes(),w=s.getUTCSeconds(),_=s.getUTCMilliseconds();s=(l<=0||l>=1e4?(l<0?"-":"+")+A(6,l<0?-l:l):A(4,l))+"-"+A(2,f+1)+"-"+A(2,p)+"T"+A(2,v)+":"+A(2,S)+":"+A(2,w)+"."+A(3,_)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=b.call(s),u==E)return""+s;if(u==O)return s>-1/0&&s<1/0?""+s:"null";if(u==C)return N(""+s);if("object"==("undefined"==typeof s?"undefined":i(s))){for(x=c.length;x--;)if(c[x]===s)throw h();if(c.push(s),P=[],M=a,a+=o,u==T){for(k=0,x=s.length;k0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||D();e+=X("0x"+i.slice(t,J));break;default:D()}else{if(34==o)break;for(o=i.charCodeAt(J),t=J;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++J);e+=i.slice(t,J)}if(34==i.charCodeAt(J))return J++,e;D();default:if(t=J,45==o&&(r=!0,o=i.charCodeAt(++J)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(J+1),o>=48&&o<=57)&&D(),r=!1;J=48&&o<=57);J++);if(46==i.charCodeAt(J)){for(n=++J;n=48&&o<=57);n++);n==J&&D(),J=n}if(o=i.charCodeAt(J),101==o||69==o){for(o=i.charCodeAt(++J),43!=o&&45!=o||J++,n=J;n=48&&o<=57);n++);n==J&&D(),J=n}return+i.slice(t,J)}if(r&&D(),"true"==i.slice(J,J+4))return J+=4,!0;if("false"==i.slice(J,J+5))return J+=5,!1;if("null"==i.slice(J,J+4))return J+=4,null;D()}return"$"},B=function z(e){var t,n;if("$"==e&&D(),"string"==typeof e){if("@"==(P?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=F(),"]"!=e;n||(n=!0))n&&(","==e?(e=F(),"]"==e&&D()):D()),","==e&&D(),t.push(z(e));return t}if("{"==e){for(t={};e=F(),"}"!=e;n||(n=!0))n&&(","==e?(e=F(),"}"==e&&D()):D()),","!=e&&"string"==typeof e&&"@"==(P?e.charAt(0):e[0])&&":"==F()||D(),t[e.slice(1)]=z(F());return t}D()}return e},Z=function(e,t,n){var r=G(e,t,n);r===g?delete e[t]:e[t]=r},G=function(e,t,n){var r,o=e[t];if("object"==("undefined"==typeof o?"undefined":i(o))&&o)if(b.call(o)==T)for(r=o.length;r--;)Z(o,r,n);else m(o,function(e){Z(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return J=0,H=""+e,n=B(F()),"$"!=F()&&D(),J=H=null,t&&b.call(t)==_?G((r={},r[""]=n,r),"",t):n}}}return t.runInContext=a,t}var c=n(5),s={"function":!0,object:!0},u=s[i(t)]&&t&&!t.nodeType&&t,l=s["undefined"==typeof window?"undefined":i(window)]&&window||this,f=u&&s[i(e)]&&e&&!e.nodeType&&"object"==("undefined"==typeof o?"undefined":i(o))&&o;if(!f||f.global!==f&&f.window!==f&&f.self!==f||(l=f),u&&!c)a(l,u);else{var h=l.JSON,p=l.JSON3,d=!1,y=a(l,l.JSON3={noConflict:function(){return d||(d=!0,l.JSON=h,l.JSON3=p,h=p=null),y}});l.JSON={parse:y.parse,stringify:y.stringify,encode:y.stringify,decode:y.parse}}c&&(r=function(){return y}.call(t,n,t,e),!(void 0!==r&&(e.exports=r)))}).call(void 0)}).call(t,n(4)(e),function(){return this}())},function(e,t){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t){(function(t){e.exports=t}).call(t,{})},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]={agentToken:null,browserId:null,clientMsgNum:0,convId:null,convNewCreate:!1,device:null,emojiGroup:["smile","laughing","blush","heart_eyes","smirk","flushed","grin","kissing_smiling_eyes","wink","kissing_closed_eyes","stuck_out_tongue_winking_eye","sleeping","worried","sweat_smile","cold_sweat","joy","sob","angry","mask","scream","sunglasses","thumbsup","clap","ok_hand"],entId:null,fakeSentMsg:[],agentSchedulingMsg:null,features:{emoji:!0,evaluation:!0,photo:!1,upload:!1},groupToken:null,historyArray:[],historyTimes:0,isBasie:null,isEnd:!1,inputting:!1,isReconnect:!1,lastMsgDate:null,limit:5,loserClub:[],language:"zh",messenger:null,msgId:[],msgLimit:10,page:0,ring:!1,ringing:!1,scheduler:!1,scheduling:!1,servability:!1,socket:!0,style:null,tpl:null,trackId:null,type:null,visitId:null,blacklist:!1,fallback:null,surveyRendered:!1,surveyDone:!1,initializeBodyHeight:1,msgHolderFlag:!1,isStandalone:!1,schedulerMsg:!1,chatHasEnd:!1,shenmaActionData:{},isTrackTrusted:!1}},function(e,t){(function(e){"use strict";var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(e){function n(e){e=e||"",(e instanceof URLSearchParams||e instanceof n)&&(e=e.toString()),this[f]=a(e)}function r(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,function(e){return t[e]})}function o(e){return e.replace(/[ +]/g,"%20").replace(/(%[a-f0-9]{2})+/gi,function(e){return decodeURIComponent(e)})}function i(t){var n={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return d&&(n[e.Symbol.iterator]=function(){return n}),n}function a(e){var n={};if("object"===("undefined"==typeof e?"undefined":t(e)))for(var r in e)e.hasOwnProperty(r)&&c(n,r,e[r]);else{0===e.indexOf("?")&&(e=e.slice(1));for(var i=e.split("&"),a=0;at[0]?1:0}),e._entries&&(e._entries={});for(var n=0;n1?a(r[1]):"")}})}("undefined"!=typeof e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0),function(e){var t=function(){try{var t=new e.URL("b","http://a");return t.pathname="c%20d","http://a/c%20d"===t.href&&t.searchParams}catch(n){return!1}},n=function(){var t=e.URL,n=function(t,n){"string"!=typeof t&&(t=String(t));var r,o=document;if(n&&(void 0===e.location||n!==e.location.href)){o=document.implementation.createHTMLDocument(""),r=o.createElement("base"),r.href=n,o.head.appendChild(r);try{if(0!==r.href.indexOf(n))throw new Error(r.href)}catch(i){throw new Error("URL unable to set base "+n+" due to "+i)}}var a=o.createElement("a");if(a.href=t,r&&(o.body.appendChild(a),a.href=a.href),":"===a.protocol||!/:/.test(a.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:a});var c=new e.URLSearchParams(this.search),s=!0,u=!0,l=this;["append","delete","set"].forEach(function(e){var t=c[e];c[e]=function(){t.apply(c,arguments),s&&(u=!1,l.search=c.toString(),u=!0)}}),Object.defineProperty(this,"searchParams",{value:c,enumerable:!0});var f=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==f&&(f=this.search,u&&(s=!1,this.searchParams._fromString(this.search),s=!0))}})},r=n.prototype,o=function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(e){o(e)}),Object.defineProperty(r,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n};if(t()||n(),void 0!==e.location&&!("origin"in e.location)){var r=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:r,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=r()},100)}}}("undefined"!=typeof e?e:"undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0)}).call(t,function(){return this}())}]); \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/page1-img1.a023db4.png b/re/geekbang/routes/download/source/static/page1-img1.a023db4.png new file mode 100644 index 0000000..91a5747 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page1-img1.a023db4.png differ diff --git a/re/geekbang/routes/download/source/static/page1-img2.b42f242.png b/re/geekbang/routes/download/source/static/page1-img2.b42f242.png new file mode 100644 index 0000000..4bb4ec2 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page1-img2.b42f242.png differ diff --git a/re/geekbang/routes/download/source/static/page1-img3.41e010c.png b/re/geekbang/routes/download/source/static/page1-img3.41e010c.png new file mode 100644 index 0000000..299fd3a Binary files /dev/null and b/re/geekbang/routes/download/source/static/page1-img3.41e010c.png differ diff --git a/re/geekbang/routes/download/source/static/page2-bg.af9a743.png b/re/geekbang/routes/download/source/static/page2-bg.af9a743.png new file mode 100644 index 0000000..cd3c9a2 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page2-bg.af9a743.png differ diff --git a/re/geekbang/routes/download/source/static/page2-word5.1645448.png b/re/geekbang/routes/download/source/static/page2-word5.1645448.png new file mode 100644 index 0000000..e721c20 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page2-word5.1645448.png differ diff --git a/re/geekbang/routes/download/source/static/page3-img1.65fa93c.png b/re/geekbang/routes/download/source/static/page3-img1.65fa93c.png new file mode 100644 index 0000000..891c327 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page3-img1.65fa93c.png differ diff --git a/re/geekbang/routes/download/source/static/page3-img2.cbced1f.png b/re/geekbang/routes/download/source/static/page3-img2.cbced1f.png new file mode 100644 index 0000000..955cde2 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page3-img2.cbced1f.png differ diff --git a/re/geekbang/routes/download/source/static/page3-img3.59afeb0.png b/re/geekbang/routes/download/source/static/page3-img3.59afeb0.png new file mode 100644 index 0000000..695b6ea Binary files /dev/null and b/re/geekbang/routes/download/source/static/page3-img3.59afeb0.png differ diff --git a/re/geekbang/routes/download/source/static/page4-big.3e14a6f.png b/re/geekbang/routes/download/source/static/page4-big.3e14a6f.png new file mode 100644 index 0000000..07dd7c2 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page4-big.3e14a6f.png differ diff --git a/re/geekbang/routes/download/source/static/page4-small.5da02ba.png b/re/geekbang/routes/download/source/static/page4-small.5da02ba.png new file mode 100644 index 0000000..baf1cbc Binary files /dev/null and b/re/geekbang/routes/download/source/static/page4-small.5da02ba.png differ diff --git a/re/geekbang/routes/download/source/static/page5-img1.bbbbe4a.png b/re/geekbang/routes/download/source/static/page5-img1.bbbbe4a.png new file mode 100644 index 0000000..249e3d4 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page5-img1.bbbbe4a.png differ diff --git a/re/geekbang/routes/download/source/static/page5-img2.73774ee.png b/re/geekbang/routes/download/source/static/page5-img2.73774ee.png new file mode 100644 index 0000000..ee94211 Binary files /dev/null and b/re/geekbang/routes/download/source/static/page5-img2.73774ee.png differ diff --git a/re/geekbang/routes/download/source/static/saved_resource(1).html b/re/geekbang/routes/download/source/static/saved_resource(1).html new file mode 100644 index 0000000..11a4e59 --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource(1).html @@ -0,0 +1,3 @@ + + +
        \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/saved_resource(2).html b/re/geekbang/routes/download/source/static/saved_resource(2).html new file mode 100644 index 0000000..1a07027 --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource(2).html @@ -0,0 +1,3 @@ + + +
        我们在线,来聊聊吧
        \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/saved_resource(3).html b/re/geekbang/routes/download/source/static/saved_resource(3).html new file mode 100644 index 0000000..ddcf738 --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource(3).html @@ -0,0 +1,3 @@ + + +
        \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/saved_resource(4).html b/re/geekbang/routes/download/source/static/saved_resource(4).html new file mode 100644 index 0000000..3fdbda2 --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource(4).html @@ -0,0 +1,3 @@ + + +
        您好,当前有专业客服人员在线,让我们来帮助您吧。
        \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/saved_resource(5).html b/re/geekbang/routes/download/source/static/saved_resource(5).html new file mode 100644 index 0000000..bef874e --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource(5).html @@ -0,0 +1,3 @@ + + +
        \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/saved_resource(6).html b/re/geekbang/routes/download/source/static/saved_resource(6).html new file mode 100644 index 0000000..8284871 --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource(6).html @@ -0,0 +1,3 @@ + + +
        avatar
        \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/saved_resource.html b/re/geekbang/routes/download/source/static/saved_resource.html new file mode 100644 index 0000000..2d81560 --- /dev/null +++ b/re/geekbang/routes/download/source/static/saved_resource.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/shadow.4c5d43f.png b/re/geekbang/routes/download/source/static/shadow.4c5d43f.png new file mode 100644 index 0000000..b4eda6a Binary files /dev/null and b/re/geekbang/routes/download/source/static/shadow.4c5d43f.png differ diff --git a/re/geekbang/routes/download/source/static/sync-cookie.html b/re/geekbang/routes/download/source/static/sync-cookie.html new file mode 100644 index 0000000..e04eb62 --- /dev/null +++ b/re/geekbang/routes/download/source/static/sync-cookie.html @@ -0,0 +1,235 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/re/geekbang/routes/download/source/static/vendor.aa0daa078f9134c361c2.js b/re/geekbang/routes/download/source/static/vendor.aa0daa078f9134c361c2.js new file mode 100644 index 0000000..aba7c5c --- /dev/null +++ b/re/geekbang/routes/download/source/static/vendor.aa0daa078f9134c361c2.js @@ -0,0 +1,17 @@ +webpackJsonp([47],[function(t,e,n){var r=n(2),o=n(24),i=n(14),a=n(15),u=n(25),c=function(t,e,n){var s,f,l,p,h=t&c.F,d=t&c.G,v=t&c.S,y=t&c.P,m=t&c.B,g=d?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,b=d?o:o[e]||(o[e]={}),_=b.prototype||(b.prototype={});d&&(n=e);for(s in n)f=!h&&g&&void 0!==g[s],l=(f?g:n)[s],p=m&&f?u(l,r):y&&"function"==typeof l?u(Function.call,l):l,g&&a(g,s,l,t&c.U),b[s]!=l&&i(b,s,p),y&&_[s]!=l&&(_[s]=l)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e,n){var r=n(4);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(76)("wks"),o=n(56),i=n(2).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},function(t,e,n){var r=n(27),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){t.exports=!n(3)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(1),o=n(187),i=n(32),a=Object.defineProperty;e.f=n(7)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(30);t.exports=function(t){return Object(r(t))}},function(t,e){var n=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=n)},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e,n){var r=n(114)("wks"),o=n(83),i=n(12).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},function(t,e,n){var r=n(8),o=n(52);t.exports=n(7)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(2),o=n(14),i=n(18),a=n(56)("src"),u=n(328),c=(""+u).split("toString");n(24).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(s&&(i(n,a)||o(n,a,t[e]?""+t[e]:c.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||u.call(this)})},function(t,e,n){var r=n(0),o=n(3),i=n(30),a=/"/g,u=function(t,e,n,r){var o=String(i(t)),u="<"+e;return""!==n&&(u+=" "+n+'="'+String(r).replace(a,""")+'"'),u+">"+o+""};t.exports=function(t,e){var n={};n[t]=e(u),r(r.P+r.F*o(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},function(t,e,n){"use strict";function r(t){return"[object Array]"===O.call(t)}function o(t){return"[object ArrayBuffer]"===O.call(t)}function i(t){return"undefined"!=typeof FormData&&t instanceof FormData}function a(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function c(t){return"number"==typeof t}function s(t){return void 0===t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===O.call(t)}function p(t){return"[object File]"===O.call(t)}function h(t){return"[object Blob]"===O.call(t)}function d(t){return"[object Function]"===O.call(t)}function v(t){return f(t)&&d(t.pipe)}function y(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(t,e){if(null!==t&&void 0!==t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;n0?r:n)(t)}},function(t,e,n){var r=n(12),o=n(10),i=n(66),a=n(45),u=n(46),c=function(t,e,n){var s,f,l,p=t&c.F,h=t&c.G,d=t&c.S,v=t&c.P,y=t&c.B,m=t&c.W,g=h?o:o[e]||(o[e]={}),b=g.prototype,_=h?r:d?r[e]:(r[e]||{}).prototype;h&&(n=e);for(s in n)(f=!p&&_&&void 0!==_[s])&&u(g,s)||(l=f?_[s]:n[s],g[s]=h&&"function"!=typeof _[s]?n[s]:y&&f?i(l,r):m&&_[s]==l?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):v&&"function"==typeof l?i(Function.call,l):l,v&&((g.virtual||(g.virtual={}))[s]=l,t&c.R&&b&&!b[s]&&a(b,s,l)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e,n){var r=n(25),o=n(74),i=n(9),a=n(6),u=n(121);t.exports=function(t,e){var n=1==t,c=2==t,s=3==t,f=4==t,l=6==t,p=5==t||l,h=e||u;return function(e,u,d){for(var v,y,m=i(e),g=o(m),b=r(u,d,3),_=a(g.length),w=0,x=n?h(e,_):c?h(e,0):void 0;_>w;w++)if((p||w in g)&&(v=g[w],y=b(v,w,m),t))if(n)x[w]=y;else if(y)switch(t){case 3:return!0;case 5:return v;case 6:return w;case 2:x.push(v)}else if(f)return!1;return l?-1:s||f?f:x}}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(0),o=n(24),i=n(3);t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},function(t,e,n){var r=n(4);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){t.exports=!n(58)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(38),o=n(167),i=n(116),a=Object.defineProperty;e.f=n(33)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(209),o=n(0),i=n(76)("metadata"),a=i.store||(i.store=new(n(213))),u=function(t,e,n){var o=a.get(t);if(!o){if(!n)return;a.set(t,o=new r)}var i=o.get(e);if(!i){if(!n)return;o.set(e,i=new r)}return i},c=function(t,e,n){var r=u(e,n,!1);return void 0!==r&&r.has(t)},s=function(t,e,n){var r=u(e,n,!1);return void 0===r?void 0:r.get(t)},f=function(t,e,n,r){u(n,r,!0).set(t,e)},l=function(t,e){var n=u(t,e,!1),r=[];return n&&n.forEach(function(t,e){r.push(e)}),r},p=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},h=function(t){o(o.S,"Reflect",t)};t.exports={store:a,map:u,has:c,get:s,set:f,keys:l,key:p,exp:h}},function(t,e,n){"use strict";if(n(7)){var r=n(41),o=n(2),i=n(3),a=n(0),u=n(96),c=n(142),s=n(25),f=n(47),l=n(52),p=n(14),h=n(53),d=n(27),v=n(6),y=n(207),m=n(55),g=n(32),b=n(18),_=n(61),w=n(4),x=n(9),S=n(128),O=n(49),E=n(20),k=n(50).f,A=n(144),j=n(56),C=n(5),T=n(29),$=n(84),M=n(77),P=n(145),L=n(62),N=n(89),F=n(54),I=n(120),R=n(179),D=n(8),U=n(19),B=D.f,V=U.f,H=o.RangeError,G=o.TypeError,W=o.Uint8Array,q=Array.prototype,z=c.ArrayBuffer,J=c.DataView,K=T(0),Y=T(2),X=T(3),Z=T(4),Q=T(5),tt=T(6),et=$(!0),nt=$(!1),rt=P.values,ot=P.keys,it=P.entries,at=q.lastIndexOf,ut=q.reduce,ct=q.reduceRight,st=q.join,ft=q.sort,lt=q.slice,pt=q.toString,ht=q.toLocaleString,dt=C("iterator"),vt=C("toStringTag"),yt=j("typed_constructor"),mt=j("def_constructor"),gt=u.CONSTR,bt=u.TYPED,_t=u.VIEW,wt=T(1,function(t,e){return kt(M(t,t[mt]),e)}),xt=i(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),St=!!W&&!!W.prototype.set&&i(function(){new W(1).set({})}),Ot=function(t,e){var n=d(t);if(n<0||n%e)throw H("Wrong offset!");return n},Et=function(t){if(w(t)&&bt in t)return t;throw G(t+" is not a typed array!")},kt=function(t,e){if(!(w(t)&&yt in t))throw G("It is not a typed array constructor!");return new t(e)},At=function(t,e){return jt(M(t,t[mt]),e)},jt=function(t,e){for(var n=0,r=e.length,o=kt(t,r);r>n;)o[n]=e[n++];return o},Ct=function(t,e,n){B(t,e,{get:function(){return this._d[n]}})},Tt=function(t){var e,n,r,o,i,a,u=x(t),c=arguments.length,f=c>1?arguments[1]:void 0,l=void 0!==f,p=A(u);if(void 0!=p&&!S(p)){for(a=p.call(u),r=[],e=0;!(i=a.next()).done;e++)r.push(i.value);u=r}for(l&&c>2&&(f=s(f,arguments[2],2)),e=0,n=v(u.length),o=kt(this,n);n>e;e++)o[e]=l?f(u[e],e):u[e];return o},$t=function(){for(var t=0,e=arguments.length,n=kt(this,e);e>t;)n[t]=arguments[t++];return n},Mt=!!W&&i(function(){ht.call(new W(1))}),Pt=function(){return ht.apply(Mt?lt.call(Et(this)):Et(this),arguments)},Lt={copyWithin:function(t,e){return R.call(Et(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return Z(Et(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return I.apply(Et(this),arguments)},filter:function(t){return At(this,Y(Et(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return Q(Et(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return tt(Et(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){K(Et(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return nt(Et(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return et(Et(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return st.apply(Et(this),arguments)},lastIndexOf:function(t){return at.apply(Et(this),arguments)},map:function(t){return wt(Et(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ut.apply(Et(this),arguments)},reduceRight:function(t){return ct.apply(Et(this),arguments)},reverse:function(){for(var t,e=this,n=Et(e).length,r=Math.floor(n/2),o=0;o1?arguments[1]:void 0)},sort:function(t){return ft.call(Et(this),t)},subarray:function(t,e){var n=Et(this),r=n.length,o=m(t,r);return new(M(n,n[mt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,v((void 0===e?r:m(e,r))-o))}},Nt=function(t,e){return At(this,lt.call(Et(this),t,e))},Ft=function(t){Et(this);var e=Ot(arguments[1],1),n=this.length,r=x(t),o=v(r.length),i=0;if(o+e>n)throw H("Wrong length!");for(;i255?255:255&r),o.v[h](n*e+o.o,r,xt)},C=function(t,e){B(t,e,{get:function(){return A(this,e)},set:function(t){return j(this,e,t)},enumerable:!0})};b?(d=n(function(t,n,r,o){f(t,d,s,"_d");var i,a,u,c,l=0,h=0;if(w(n)){if(!(n instanceof z||"ArrayBuffer"==(c=_(n))||"SharedArrayBuffer"==c))return bt in n?jt(d,n):Tt.call(d,n);i=n,h=Ot(r,e);var m=n.byteLength;if(void 0===o){if(m%e)throw H("Wrong length!");if((a=m-h)<0)throw H("Wrong length!")}else if((a=v(o)*e)+h>m)throw H("Wrong length!");u=a/e}else u=y(n),a=u*e,i=new z(a);for(p(t,"_d",{b:i,o:h,l:a,e:u,v:new J(i)});l=0&&Math.floor(e)===e&&isFinite(t)}function p(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||s(t)&&t.toString===Ei?JSON.stringify(t,null,2):String(t)}function d(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}function m(t,e){return ji.call(t,e)}function g(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function b(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function _(t,e){return t.bind(e)}function w(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function x(t,e){for(var n in e)t[n]=e[n];return t}function S(t){for(var e={},n=0;n-1)if(i&&!m(o,"default"))a=!1;else if(""===a||a===Pi(t)){var c=ot(String,o.type);(c<0||u0&&(a=wt(a,(e||"")+"_"+n),_t(a[0])&&_t(s)&&(f[c]=L(s.text+a[0].text),a.shift()),f.push.apply(f,a)):u(a)?_t(s)?f[c]=L(s.text+a):""!==a&&f.push(L(a)):_t(a)&&_t(s)?f[c]=L(s.text+a.text):(i(t._isVList)&&o(a.tag)&&r(a.key)&&o(e)&&(a.key="__vlist"+e+"_"+n+"__"),f.push(a)));return f}function xt(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}function St(t){var e=Ot(t.$options.inject,t);e&&(F(!1),Object.keys(e).forEach(function(n){U(t,n,e[n])}),F(!0))}function Ot(t,e){if(t){for(var n=Object.create(null),r=aa?Reflect.ownKeys(t):Object.keys(t),o=0;o0,i=t?!!t.$stable:!o,a=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(i&&n&&n!==Oi&&a===n.$key&&!o&&!n.$hasNormal)return n;r={};for(var u in t)t[u]&&"$"!==u[0]&&(r[u]=jt(e,u,t[u]))}else r={};for(var c in e)c in r||(r[c]=Ct(e,c));return t&&Object.isExtensible(t)&&(t._normalized=r),C(r,"$stable",i),C(r,"$key",a),C(r,"$hasNormal",o),r}function jt(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});return t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:bt(t),t&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function Ct(t,e){return function(){return t[e]}}function Tt(t,e){var n,r,i,a,u;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,i=t.length;rHa&&Ra[n].id>t.id;)n--;Ra.splice(n+1,0,t)}else Ra.push(t);Ba||(Ba=!0,ft(Oe))}}function Ce(t,e,n){Ka.get=function(){return this[e][n]},Ka.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Ka)}function Te(t){t._watchers=[];var e=t.$options;e.props&&$e(t,e.props),e.methods&&Re(t,e.methods),e.data?Me(t):D(t._data={},!0),e.computed&&Le(t,e.computed),e.watch&&e.watch!==Qi&&De(t,e.watch)}function $e(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[],i=!t.$parent;i||F(!1);for(var a in e)!function(i){o.push(i);var a=tt(i,e,n,t);U(r,i,a),i in t||Ce(t,"_props",i)}(a);F(!0)}function Me(t){var e=t.$options.data;e=t._data="function"==typeof e?Pe(e,t):e||{},s(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);o--;){var i=n[o];r&&m(r,i)||j(i)||Ce(t,"_data",i)}D(e,!0)}function Pe(t,e){M();try{return t.call(e,e)}catch(t){return it(t,e,"data()"),{}}finally{P()}}function Le(t,e){var n=t._computedWatchers=Object.create(null),r=oa();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;r||(n[o]=new Ja(t,a||O,O,Ya)),o in t||Ne(t,o,i)}}function Ne(t,e,n){var r=!oa();"function"==typeof n?(Ka.get=r?Fe(e):Ie(n),Ka.set=O):(Ka.get=n.get?r&&!1!==n.cache?Fe(e):Ie(n.get):O,Ka.set=n.set||O),Object.defineProperty(t,e,Ka)}function Fe(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),sa.target&&e.depend(),e.value}}function Ie(t){return function(){return t.call(this,this)}}function Re(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?O:Li(e[n],t)}function De(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o-1)return this;var n=w(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}function qe(t){t.mixin=function(t){return this.options=Z(this.options,t),this}}function ze(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Z(n.options,t),a.super=n,a.options.props&&Je(a),a.options.computed&&Ke(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Ri.forEach(function(t){a[t]=n[t]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=x({},a.options),o[r]=a,a}}function Je(t){var e=t.options.props;for(var n in e)Ce(t.prototype,"_props",n)}function Ke(t){var e=t.options.computed;for(var n in e)Ne(t.prototype,n,e[n])}function Ye(t){Ri.forEach(function(e){t[e]=function(t,n){return n?("component"===e&&s(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}})}function Xe(t){return t&&(t.Ctor.options.name||t.tag)}function Ze(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Qe(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var u=Xe(a.componentOptions);u&&!e(u)&&tn(n,i,r,o)}}}function tn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,y(n,e)}function en(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=nn(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=nn(e,n.data));return rn(e.staticClass,e.class)}function nn(t,e){return{staticClass:on(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function rn(t,e){return o(t)||o(e)?on(t,an(e)):""}function on(t,e){return t?e?t+" "+e:t:e||""}function an(t){return Array.isArray(t)?un(t):c(t)?cn(t):"string"==typeof t?t:""}function un(t){for(var e,n="",r=0,i=t.length;r-1?Au[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Au[t]=/HTMLUnknownElement/.test(e.toString())}function ln(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function pn(t,e){var n=document.createElement(t);return"select"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function hn(t,e){return document.createElementNS(xu[t],e)}function dn(t){return document.createTextNode(t)}function vn(t){return document.createComment(t)}function yn(t,e,n){t.insertBefore(e,n)}function mn(t,e){t.removeChild(e)}function gn(t,e){t.appendChild(e)}function bn(t){return t.parentNode}function _n(t){return t.nextSibling}function wn(t){return t.tagName}function xn(t,e){t.textContent=e}function Sn(t,e){t.setAttribute(e,"")}function On(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?y(a[n],i):a[n]===i&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(i)<0&&a[n].push(i):a[n]=[i]:a[n]=i}}function En(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&kn(t,e)||i(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function kn(t,e){if("input"!==t.tag)return!0;var n,r=o(n=t.data)&&o(n=n.attrs)&&n.type,i=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===i||ju(r)&&ju(i)}function An(t,e,n){var r,i,a={};for(r=e;r<=n;++r)i=t[r].key,o(i)&&(a[i]=r);return a}function jn(t,e){(t.data.directives||e.data.directives)&&Cn(t,e)}function Cn(t,e){var n,r,o,i=t===$u,a=e===$u,u=Tn(t.data.directives,t.context),c=Tn(e.data.directives,e.context),s=[],f=[];for(n in c)r=u[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,Mn(o,"update",e,t),o.def&&o.def.componentUpdated&&f.push(o)):(Mn(o,"bind",e,t),o.def&&o.def.inserted&&s.push(o));if(s.length){var l=function(){for(var n=0;n-1?Nn(t,e,n):mu(e)?wu(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):du(e)?t.setAttribute(e,yu(e,n)):bu(e)?wu(n)?t.removeAttributeNS(gu,_u(e)):t.setAttributeNS(gu,e,n):Nn(t,e,n)}function Nn(t,e,n){if(wu(n))t.removeAttribute(e);else{if(Ji&&!Ki&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}function Fn(t,e){var n=e.elm,i=e.data,a=t.data;if(!(r(i.staticClass)&&r(i.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var u=en(e),c=n._transitionClasses;o(c)&&(u=on(u,an(c))),u!==n._prevClass&&(n.setAttribute("class",u),n._prevClass=u)}}function In(t){function e(){(a||(a=[])).push(t.slice(d,o).trim()),d=o+1}var n,r,o,i,a,u=!1,c=!1,s=!1,f=!1,l=0,p=0,h=0,d=0;for(o=0;o=0&&" "===(y=t.charAt(v));v--);y&&Ru.test(y)||(f=!0)}}else void 0===i?(d=o+1,i=t.slice(0,o).trim()):e();if(void 0===i?i=t.slice(0,o).trim():0!==d&&e(),a)for(o=0;o-1?{exp:t.slice(0,ou),key:'"'+t.slice(ou+1)+'"'}:{exp:t,key:null};for(nu=t,ou=iu=au=0;!nr();)ru=er(),rr(ru)?ir(ru):91===ru&&or(ru);return{exp:t.slice(0,iu),key:t.slice(iu+1,au)}}function er(){return nu.charCodeAt(++ou)}function nr(){return ou>=eu}function rr(t){return 34===t||39===t}function or(t){var e=1;for(iu=ou;!nr();)if(t=er(),rr(t))ir(t);else if(91===t&&e++,93===t&&e--,0===e){au=ou;break}}function ir(t){for(var e=t;!nr()&&(t=er())!==e;);}function ar(t,e,n){uu=n;var r=e.value,o=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return Zn(t,r,o),!1;if("select"===i)sr(t,r,o);else if("input"===i&&"checkbox"===a)ur(t,r,o);else if("input"===i&&"radio"===a)cr(t,r,o);else if("input"===i||"textarea"===i)fr(t,r,o);else if(!Ui.isReservedTag(i))return Zn(t,r,o),!1;return!0}function ur(t,e,n){var r=n&&n.number,o=Jn(t,"value")||"null",i=Jn(t,"true-value")||"true",a=Jn(t,"false-value")||"false";Bn(t,"checked","Array.isArray("+e+")?_i("+e+","+o+")>-1"+("true"===i?":("+e+")":":_q("+e+","+i+")")),qn(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+o+")":o)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Qn(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Qn(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Qn(e,"$$c")+"}",null,!0)}function cr(t,e,n){var r=n&&n.number,o=Jn(t,"value")||"null";o=r?"_n("+o+")":o,Bn(t,"checked","_q("+e+","+o+")"),qn(t,"change",Qn(e,o),null,!0)}function sr(t,e,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",i="var $$selectedVal = "+o+";";i=i+" "+Qn(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),qn(t,"change",i,null,!0)}function fr(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,u=o.trim,c=!i&&"range"!==r,s=i?"change":"range"===r?Du:"input",f="$event.target.value";u&&(f="$event.target.value.trim()"),a&&(f="_n("+f+")");var l=Qn(e,f);c&&(l="if($event.target.composing)return;"+l),Bn(t,"value","("+e+")"),qn(t,s,l,null,!0),(u||a)&&qn(t,"blur","$forceUpdate()")}function lr(t){if(o(t[Du])){var e=Ji?"change":"input";t[e]=[].concat(t[Du],t[e]||[]),delete t[Du]}o(t[Uu])&&(t.change=[].concat(t[Uu],t.change||[]),delete t[Uu])}function pr(t,e,n){var r=cu;return function o(){null!==e.apply(null,arguments)&&dr(t,o,n,r)}}function hr(t,e,n,r){if(Bu){var o=Ga,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}cu.addEventListener(t,e,ta?{capture:n,passive:r}:n)}function dr(t,e,n,r){(r||cu).removeEventListener(t,e._wrapper||e,n)}function vr(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},o=t.data.on||{};cu=e.elm,lr(n),dt(n,o,hr,dr,pr,e.context),cu=void 0}}function yr(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,i,a=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};o(c.__ob__)&&(c=e.data.domProps=x({},c));for(n in u)n in c||(a[n]="");for(n in c){if(i=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),i===u[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=i;var s=r(i)?"":String(i);mr(a,s)&&(a.value=s)}else if("innerHTML"===n&&Ou(a.tagName)&&r(a.innerHTML)){su=su||document.createElement("div"),su.innerHTML=""+i+"";for(var f=su.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;f.firstChild;)a.appendChild(f.firstChild)}else if(i!==u[n])try{a[n]=i}catch(t){}}}}function mr(t,e){return!t.composing&&("OPTION"===t.tagName||gr(t,e)||br(t,e))}function gr(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}function br(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return d(n)!==d(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}function _r(t){var e=wr(t.style);return t.staticStyle?x(t.staticStyle,e):e}function wr(t){return Array.isArray(t)?S(t):"string"==typeof t?Gu(t):t}function xr(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=_r(o.data))&&x(r,n);(n=_r(t.data))&&x(r,n);for(var i=t;i=i.parent;)i.data&&(n=_r(i.data))&&x(r,n);return r}function Sr(t,e){var n=e.data,i=t.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var a,u,c=e.elm,s=i.staticStyle,f=i.normalizedStyle||i.style||{},l=s||f,p=wr(e.data.style)||{};e.data.normalizedStyle=o(p.__ob__)?x({},p):p;var h=xr(e,!0);for(u in l)r(h[u])&&zu(c,u,"");for(u in h)(a=h[u])!==l[u]&&zu(c,u,null==a?"":a)}}function Or(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Xu).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Er(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Xu).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function kr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&x(e,Zu(t.name||"v")),x(e,t),e}return"string"==typeof t?Zu(t):void 0}}function Ar(t){ac(function(){ac(t)})}function jr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Or(t,e))}function Cr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Er(t,e)}function Tr(t,e,n){var r=$r(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var u=o===tc?rc:ic,c=0,s=function(){t.removeEventListener(u,f),n()},f=function(e){e.target===t&&++c>=a&&s()};setTimeout(function(){c0&&(n=tc,f=a,l=i.length):e===ec?s>0&&(n=ec,f=s,l=c.length):(f=Math.max(a,s),n=f>0?a>s?tc:ec:null,l=n?n===tc?i.length:c.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===tc&&uc.test(r[nc+"Property"])}}function Mr(t,e){for(;t.length1}function Rr(t,e){!0!==e.data.show&&Lr(e)}function Dr(t,e,n){Ur(t,e,n),(Ji||Yi)&&setTimeout(function(){Ur(t,e,n)},0)}function Ur(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,u=0,c=t.options.length;u-1,a.selected!==i&&(a.selected=i);else if(E(Vr(a),r))return void(t.selectedIndex!==u&&(t.selectedIndex=u));o||(t.selectedIndex=-1)}}function Br(t,e){return e.every(function(e){return!E(e,t)})}function Vr(t){return"_value"in t?t._value:t.value}function Hr(t){t.target.composing=!0}function Gr(t){t.target.composing&&(t.target.composing=!1,Wr(t.target,"input"))}function Wr(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function qr(t){return!t.componentInstance||t.data&&t.data.transition?t:qr(t.componentInstance._vnode)}function zr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?zr(se(e.children)):t}function Jr(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[Ti(i)]=o[i];return e}function Kr(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function Yr(t){for(;t=t.parent;)if(t.data.transition)return!0}function Xr(t,e){return e.key===t.key&&e.tag===t.tag}function Zr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qr(t){t.data.newPos=t.elm.getBoundingClientRect()}function to(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate("+r+"px,"+o+"px)",i.transitionDuration="0s"}}function eo(t,e){var n=e?Ic(e):Nc;if(n.test(t)){for(var r,o,i,a=[],u=[],c=n.lastIndex=0;r=n.exec(t);){o=r.index,o>c&&(u.push(i=t.slice(c,o)),a.push(JSON.stringify(i)));var s=In(r[1].trim());a.push("_s("+s+")"),u.push({"@binding":s}),c=o+r[0].length}return c=0&&a[o].lowerCasedTag!==u;o--);else o=0;if(o>=0){for(var c=a.length-1;c>=o;c--)e.end&&e.end(a[c].tag,n,r);a.length=o,i=o&&a[o-1].tag}else"br"===u?e.start&&e.start(t,[],!0,n,r):"p"===u&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}for(var o,i,a=[],u=e.expectHTML,c=e.isUnaryTag||Ni,s=e.canBeLeftOpenTag||Ni,f=0;t;){if(o=t,i&&ts(i)){var l=0,p=i.toLowerCase(),h=es[p]||(es[p]=new RegExp("([\\s\\S]*?)(]*>)","i")),d=t.replace(h,function(t,n,r){return l=r.length,ts(p)||"noscript"===p||(n=n.replace(//g,"$1").replace(//g,"$1")),as(p,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""});f+=t.length-d.length,t=d,r(p,f-l,f)}else{var v=t.indexOf("<");if(0===v){if(Zc.test(t)){var y=t.indexOf("--\x3e");if(y>=0){e.shouldKeepComment&&e.comment(t.substring(4,y),f,f+y+3),n(y+3);continue}}if(Qc.test(t)){var m=t.indexOf("]>");if(m>=0){n(m+2);continue}}var g=t.match(Xc);if(g){n(g[0].length);continue}var b=t.match(Yc);if(b){var _=f;n(b[0].length),r(b[1],_,f);continue}var w=function(){var e=t.match(Jc);if(e){var r={tagName:e[1],attrs:[],start:f};n(e[0].length);for(var o,i;!(o=t.match(Kc))&&(i=t.match(Wc)||t.match(Gc));)i.start=f,n(i[0].length),i.end=f,r.attrs.push(i);if(o)return r.unarySlash=o[1],n(o[0].length),r.end=f,r}}();if(w){!function(t){var n=t.tagName,o=t.unarySlash;u&&("p"===i&&Hc(n)&&r(i),s(n)&&i===n&&r(n));for(var f=c(n)||!!o,l=t.attrs.length,p=new Array(l),h=0;h=0){for(S=t.slice(v);!(Yc.test(S)||Jc.test(S)||Zc.test(S)||Qc.test(S)||(O=S.indexOf("<",1))<0);)v+=O,S=t.slice(v);x=t.substring(0,v)}v<0&&(x=t),x&&n(x.length),e.chars&&x&&e.chars(x,f-x.length,f)}if(t===o){e.chars&&e.chars(t);break}}r()}function co(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:To(e),rawAttrsMap:{},parent:n,children:[]}}function so(t,e){function n(t){if(r(t),f||t.processed||(t=po(t,e)),u.length||t===i||i.if&&(t.elseif||t.else)&&wo(i,{exp:t.elseif,block:t}),a&&!t.forbidden)if(t.elseif||t.else)bo(t,a);else{if(t.slotScope){var n=t.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[n]=t}a.children.push(t),t.parent=a}t.children=t.children.filter(function(t){return!t.slotScope}),r(t),t.pre&&(f=!1),jc(t.tag)&&(l=!1);for(var o=0;o>>0}function ci(t){return 1===t.type&&("slot"===t.tag||t.children.some(ci))}function si(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return ti(t,e,si,"null");if(t.for&&!t.forProcessed)return ni(t,e,si);var r=t.slotScope===_s?"":String(t.slotScope),o="function("+r+"){return "+("template"===t.tag?t.if&&n?"("+t.if+")?"+(fi(t,e)||"undefined")+":undefined":fi(t,e)||"undefined":Xo(t,e))+"}",i=r?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+o+i+"}"}function fi(t,e,n,r,o){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var u=n?e.maybeComponent(a)?",1":",0":"";return""+(r||Xo)(a,e)+u}var c=n?li(i,e.maybeComponent):0,s=o||hi;return"["+i.map(function(t){return s(t,e)}).join(",")+"]"+(c?","+c:"")}}function li(t,e){for(var n=0,r=0;r':'
        ',Lc.innerHTML.indexOf(" ")>0}function Si(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}/*! + * Vue.js v2.6.10 + * (c) 2014-2019 Evan You + * Released under the MIT License. + */ +var Oi=Object.freeze({}),Ei=Object.prototype.toString,ki=v("slot,component",!0),Ai=v("key,ref,slot,slot-scope,is"),ji=Object.prototype.hasOwnProperty,Ci=/-(\w)/g,Ti=g(function(t){return t.replace(Ci,function(t,e){return e?e.toUpperCase():""})}),$i=g(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Mi=/\B([A-Z])/g,Pi=g(function(t){return t.replace(Mi,"-$1").toLowerCase()}),Li=Function.prototype.bind?_:b,Ni=function(t,e,n){return!1},Fi=function(t){return t},Ii="data-server-rendered",Ri=["component","directive","filter"],Di=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],Ui={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Ni,isReservedAttr:Ni,isUnknownElement:Ni,getTagNamespace:O,parsePlatformTagName:Fi,mustUseProp:Ni,async:!0,_lifecycleHooks:Di},Bi=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/,Vi=new RegExp("[^"+Bi.source+".$_\\d]"),Hi="__proto__"in{},Gi="undefined"!=typeof window,Wi="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,qi=Wi&&WXEnvironment.platform.toLowerCase(),zi=Gi&&window.navigator.userAgent.toLowerCase(),Ji=zi&&/msie|trident/.test(zi),Ki=zi&&zi.indexOf("msie 9.0")>0,Yi=zi&&zi.indexOf("edge/")>0,Xi=(zi&&zi.indexOf("android"),zi&&/iphone|ipad|ipod|ios/.test(zi)||"ios"===qi),Zi=(zi&&/chrome\/\d+/.test(zi),zi&&/phantomjs/.test(zi),zi&&zi.match(/firefox\/(\d+)/)),Qi={}.watch,ta=!1;if(Gi)try{var ea={};Object.defineProperty(ea,"passive",{get:function(){ta=!0}}),window.addEventListener("test-passive",null,ea)}catch(t){}var na,ra,oa=function(){return void 0===na&&(na=!Gi&&!Wi&&void 0!==t&&(t.process&&"server"===t.process.env.VUE_ENV)),na},ia=Gi&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,aa="undefined"!=typeof Symbol&&$(Symbol)&&"undefined"!=typeof Reflect&&$(Reflect.ownKeys);ra="undefined"!=typeof Set&&$(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ua=O,ca=0,sa=function(){this.id=ca++,this.subs=[]};sa.prototype.addSub=function(t){this.subs.push(t)},sa.prototype.removeSub=function(t){y(this.subs,t)},sa.prototype.depend=function(){sa.target&&sa.target.addDep(this)},sa.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;edocument.createEvent("Event").timeStamp&&(Wa=function(){return qa.now()})}var za=0,Ja=function(t,e,n,r,o){this.vm=t,o&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++za,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ra,this.newDepIds=new ra,this.expression="","function"==typeof e?this.getter=e:(this.getter=T(e),this.getter||(this.getter=O)),this.value=this.lazy?void 0:this.get()};Ja.prototype.get=function(){M(this);var t,e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;it(t,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&<(t),P(),this.cleanupDeps()}return t},Ja.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Ja.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Ja.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():je(this)},Ja.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||c(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){it(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},Ja.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Ja.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},Ja.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var Ka={enumerable:!0,configurable:!0,get:O,set:O},Ya={lazy:!0},Xa=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Xa++,e._isVue=!0,t&&t._isComponent?Be(e,t):e.$options=Z(Ve(e.constructor),t||{},e),e._renderProxy=e,e._self=e,ye(e),fe(e),oe(e),xe(e,"beforeCreate"),St(e),Te(e),xt(e),xe(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(Ge),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=B,t.prototype.$delete=V,t.prototype.$watch=function(t,e,n){var r=this;if(s(e))return Ue(r,t,e,n);n=n||{},n.user=!0;var o=new Ja(r,t,e,n);if(n.immediate)try{e.call(r,o.value)}catch(t){it(t,r,'callback for immediate watcher "'+o.expression+'"')}return function(){o.teardown()}}}(Ge),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var o=0,i=t.length;o1?w(n):n;for(var r=w(arguments,1),o='event handler for "'+t+'"',i=0,a=n.length;iparseInt(this.max)&&tn(c,s[0],s,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},tu={KeepAlive:Qa};!function(t){var e={};e.get=function(){return Ui},Object.defineProperty(t,"config",e),t.util={warn:ua,extend:x,mergeOptions:Z,defineReactive:U},t.set=B,t.delete=V,t.nextTick=ft,t.observable=function(t){return D(t),t},t.options=Object.create(null),Ri.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,x(t.options.components,tu),We(t),qe(t),ze(t),Ye(t)}(Ge),Object.defineProperty(Ge.prototype,"$isServer",{get:oa}),Object.defineProperty(Ge.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ge,"FunctionalRenderContext",{value:Wt}),Ge.version="2.6.10";var eu,nu,ru,ou,iu,au,uu,cu,su,fu,lu=v("style,class"),pu=v("input,textarea,option,select,progress"),hu=function(t,e,n){return"value"===n&&pu(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},du=v("contenteditable,draggable,spellcheck"),vu=v("events,caret,typing,plaintext-only"),yu=function(t,e){return wu(e)||"false"===e?"false":"contenteditable"===t&&vu(e)?e:"true"},mu=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),gu="http://www.w3.org/1999/xlink",bu=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},_u=function(t){return bu(t)?t.slice(6,t.length):""},wu=function(t){return null==t||!1===t},xu={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Su=v("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Ou=v("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Eu=function(t){return"pre"===t},ku=function(t){return Su(t)||Ou(t)},Au=Object.create(null),ju=v("text,number,password,search,email,tel,url"),Cu=Object.freeze({createElement:pn,createElementNS:hn,createTextNode:dn,createComment:vn,insertBefore:yn,removeChild:mn,appendChild:gn,parentNode:bn,nextSibling:_n,tagName:wn,setTextContent:xn,setStyleScope:Sn}),Tu={create:function(t,e){On(e)},update:function(t,e){t.data.ref!==e.data.ref&&(On(t,!0),On(e))},destroy:function(t){On(t,!0)}},$u=new la("",{},[]),Mu=["create","activate","update","remove","destroy"],Pu={create:jn,update:jn,destroy:function(t){jn(t,$u)}},Lu=Object.create(null),Nu=[Tu,Pu],Fu={create:Pn,update:Pn},Iu={create:Fn,update:Fn},Ru=/[\w).+\-_$\]]/,Du="__r",Uu="__c",Bu=xa&&!(Zi&&Number(Zi[1])<=53),Vu={create:vr,update:vr},Hu={create:yr,update:yr},Gu=g(function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach(function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Wu=/^--/,qu=/\s*!important$/,zu=function(t,e,n){if(Wu.test(e))t.style.setProperty(e,n);else if(qu.test(n))t.style.setProperty(Pi(e),n.replace(qu,""),"important");else{var r=Ku(e);if(Array.isArray(n))for(var o=0,i=n.length;od?(l=r(n[m+1])?null:n[m+1].elm,g(t,l,n,h,m,i)):h>m&&_(t,e,p,d)}function S(t,e,n,r){for(var i=n;i\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Wc=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,qc="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+Bi.source+"]*",zc="((?:"+qc+"\\:)?"+qc+")",Jc=new RegExp("^<"+zc),Kc=/^\s*(\/?)>/,Yc=new RegExp("^<\\/"+zc+"[^>]*>"),Xc=/^]+>/i,Zc=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},rs=/&(?:lt|gt|quot|amp|#39);/g,os=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,is=v("pre,textarea",!0),as=function(t,e){return t&&is(t)&&"\n"===e[0]},us=/^@|^v-on:/,cs=/^v-|^@|^:/,ss=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,fs=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ls=/^\(|\)$/g,ps=/^\[.*\]$/,hs=/:(.*)$/,ds=/^:|^\.|^v-bind:/,vs=/\.[^.\]]+(?=[^\]]*$)/g,ys=/^v-slot(:|$)|^#/,ms=/[\r\n]/,gs=/\s+/g,bs=g(Uc.decode),_s="_empty_",ws=/^xmlns:NS\d+/,xs=/^NS\d+:/,Ss={preTransformNode:Lo},Os=[Rc,Dc,Ss],Es={model:ar,text:Fo,html:Io},ks={expectHTML:!0,modules:Os,directives:Es,isPreTag:Eu,isUnaryTag:Bc,mustUseProp:hu,canBeLeftOpenTag:Vc,isReservedTag:ku,getTagNamespace:sn,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")}(Os)},As=g(Do),js=/^([\w$_]+|\([^)]*?\))\s*=>|^function\s*(?:[\w$]+)?\s*\(/,Cs=/\([^)]*?\);*$/,Ts=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,$s={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ms={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Ps=function(t){return"if("+t+")return null;"},Ls={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Ps("$event.target !== $event.currentTarget"),ctrl:Ps("!$event.ctrlKey"),shift:Ps("!$event.shiftKey"),alt:Ps("!$event.altKey"),meta:Ps("!$event.metaKey"),left:Ps("'button' in $event && $event.button !== 0"),middle:Ps("'button' in $event && $event.button !== 1"),right:Ps("'button' in $event && $event.button !== 2")},Ns={on:Jo,bind:Ko,cloak:O},Fs=function(t){this.options=t,this.warn=t.warn||Dn,this.transforms=Un(t.modules,"transformCode"),this.dataGenFns=Un(t.modules,"genData"),this.directives=x(x({},Ns),t.directives);var e=t.isReservedTag||Ni;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1},Is=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),function(t){return function(e){function n(n,r){var o=Object.create(e),i=[],a=[],u=function(t,e,n){(n?a:i).push(t)};if(r){r.modules&&(o.modules=(e.modules||[]).concat(r.modules)),r.directives&&(o.directives=x(Object.create(e.directives||null),r.directives));for(var c in r)"modules"!==c&&"directives"!==c&&(o[c]=r[c])}o.warn=u;var s=t(n.trim(),o);return s.errors=i,s.tips=a,s}return{compile:n,compileToFunctions:wi(n)}}}(function(t,e){var n=so(t.trim(),e);!1!==e.optimize&&Ro(n,e);var r=Yo(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}})),Rs=Is(ks),Ds=(Rs.compile,Rs.compileToFunctions),Us=!!Gi&&xi(!1),Bs=!!Gi&&xi(!0),Vs=g(function(t){var e=ln(t);return e&&e.innerHTML}),Hs=Ge.prototype.$mount;Ge.prototype.$mount=function(t,e){if((t=t&&ln(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=Vs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=Si(t));if(r){var o=Ds(r,{outputSourceRange:!1,shouldDecodeNewlines:Us,shouldDecodeNewlinesForHref:Bs,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return Hs.call(this,t,e)},Ge.compile=Ds,e.a=Ge}).call(e,n(59),n(237).setImmediate)},function(t,e,n){var r=n(5)("unscopables"),o=Array.prototype;void 0==o[r]&&n(14)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,e){t.exports=!1},function(t,e,n){var r=n(56)("meta"),o=n(4),i=n(18),a=n(8).f,u=0,c=Object.isExtensible||function(){return!0},s=!n(3)(function(){return c(Object.preventExtensions({}))}),f=function(t){a(t,r,{value:{i:"O"+ ++u,w:{}}})},l=function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,r)){if(!c(t))return"F";if(!e)return"E";f(t)}return t[r].i},p=function(t,e){if(!i(t,r)){if(!c(t))return!0;if(!e)return!1;f(t)}return t[r].w},h=function(t){return s&&d.NEED&&c(t)&&!i(t,r)&&f(t),t},d=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:p,onFreeze:h}},function(t,e,n){t.exports={default:n(295),__esModule:!0}},function(t,e,n){t.exports={default:n(292),__esModule:!0}},function(t,e,n){var r=n(34),o=n(72);t.exports=n(33)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){var r=n(25),o=n(190),i=n(128),a=n(1),u=n(6),c=n(144),s={},f={},e=t.exports=function(t,e,n,l,p){var h,d,v,y,m=p?function(){return t}:c(t),g=r(n,l,e?2:1),b=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(i(m)){for(h=u(t.length);h>b;b++)if((y=e?g(a(d=t[b])[0],d[1]):g(t[b]))===s||y===f)return y}else for(v=m.call(t);!(d=v.next()).done;)if((y=o(v,g,d.value,e))===s||y===f)return y};e.BREAK=s,e.RETURN=f},function(t,e,n){var r=n(1),o=n(196),i=n(124),a=n(137)("IE_PROTO"),u=function(){},c=function(){var t,e=n(123)("iframe"),r=i.length;for(e.style.display="none",n(126).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + + + + + + + + + + + + + + + + +
        +
        + +
        ${reactString}
        + +
        +
        +
        +
        +
        +
        +

        Copyright © 2019, The Holding of GeekBang (Beijing) Co., Ltd. All rights reserved. + 极客邦控股(北京)有限公司 | 京 ICP 备 16027448号-3. 京公网安备 11010502037384号增值电信业务经营许可证

        +
        联系我们 +
        +
        +

        +
        + 010 - 53934972 +
        +
        +
        +

        +
        service@geekbang.org
        +
        +
        +

        +
        北京市朝阳区容和路1号院1号楼5层
        +
        +
        +
        +
        +
        + +
        +
        +
        + + +
        + +
        + + + + + + + \ No newline at end of file diff --git a/re/geekbang/routes/list/index.ts b/re/geekbang/routes/list/index.ts new file mode 100644 index 0000000..b6d312b --- /dev/null +++ b/re/geekbang/routes/list/index.ts @@ -0,0 +1,42 @@ +import koa, { Context } from 'koa' +import mount from 'koa-mount' +import statics from 'koa-static' +import ReactDOMServer from 'react-dom/server' +import babelRegister from '@babel/register' + +import App from './app' +import template from './template' +import getData from './getData' + +babelRegister({ presets: ['react'] }) + +const tpl = template(`${__dirname}/index.htm`) +const app = new koa() + +app.use(mount('/static', statics(`${__dirname}/source`))) +app.use( + mount('/data', async (ctx) => { + const { sort = 0, filt = 0 } = ctx.query + ctx.body = await getData(+sort, +filt) + }) +) + +app.use( + mount('/', async (ctx) => { + ctx.status = 200 + const { filt = 0, sort = 0 } = ctx.query + const data = await getData(+sort, +filt) + const columns = (data as any).columns as any[] + + // console.log(`Array.isArray(data.columns)`, Array.isArray((data as any).columns)) + + ctx.body = tpl({ + reactString: ReactDOMServer.renderToString(App(columns)), + reactData: columns, + filtType: +filt, + sortType: +sort, + }) + }) +) + +export default app diff --git a/re/geekbang/routes/list/proto/list.proto b/re/geekbang/routes/list/proto/list.proto new file mode 100644 index 0000000..2e83cbb --- /dev/null +++ b/re/geekbang/routes/list/proto/list.proto @@ -0,0 +1,29 @@ +message Column { + required int32 id = 1; + required string column_cover = 2; + required string column_title = 3; + required string column_subtitle = 4; + required string author_name = 5; + required string author_intro = 6; + required string column_intro = 7; + required string column_unit = 8; + required uint32 sub_count = 9; + required string update_frequency = 10; + required uint32 column_price = 11; + required uint32 type = 12; + optional uint32 column_price_market = 13; + repeated Article articles = 14; +} +message Article { + required uint32 id = 1; + required bool is_video_preview = 2; + required string article_title = 3; +} + +message ListResponse { + repeated Column columns = 1; +} +message ListRequest { + required int32 sortType = 1; + required int32 filtType = 2; +} \ No newline at end of file diff --git a/re/geekbang/routes/list/source/12.781e08a04adc7000f826.js b/re/geekbang/routes/list/source/12.781e08a04adc7000f826.js new file mode 100644 index 0000000..54077bd --- /dev/null +++ b/re/geekbang/routes/list/source/12.781e08a04adc7000f826.js @@ -0,0 +1,6 @@ +webpackJsonp([12],{1006:function(e,t,i){var a=i(979);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("251232eb",a,!0,{})},1017:function(e,t,i){var a=i(990);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("7b778f06",a,!0,{})},1039:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAABcCAYAAADj79JYAAAKQElEQVR4Xu2de0xU2R3Hv4DiyiqUGqEUVlqWElt07Jbig/oorApr0jamEhL/UXwk/EFMfMVHRCVmJD6iYDQaDYkPNP6lo1uNqIsrK6gYRFTULixW8YF0ByjPIiDNdzp39jIyzJ3xztx78f4SQiJz7znnM8ff+Z3f73d+xwfqE18AgQBGAxgFIADASAD+AIYD4N+HWbvdA+AdgG4AbwF0AugA0AagFUCL9e+qGaWPCnpCgD8HMBbAGABBVqhydI1fxn8AmAH8G0Cj0l+AUsAJOQTALwGEimasHJAHewf/R7wB8ApAgxLwvQ2c6uFXACIAjPA0XSfv7wLwAsC/rGrIK93xFnDq5N8ACAPgrTalAuwD8BpAtVXnS33Orc95evCfAvitFbRbHfTiQwL4JwDaPdWup4DTiogB8GsZF0BPMbB/LxfapwC+B0CdL6t4AjgXw4lWc07Wznr5ZTQvH1gXV9malhM4LQ+qjyjZeqeOF9UCeCyXRSMXcFofcQB+pg5GsveiGUC5HNaMHMBpR39h3QXKPlIVvZC72QqrHe92tz4UOG3qCSo09dwG4uRBWjJV1kXVrTY+BPh4q23tVsMaf4g2O81Hl8Vd4L8D8LnLrQ2tB34A8MjVIbkD/GOe2fZ8XZ7prgKnzqaNrctPBGir0x8jSVwBTmsk/iNaICUBBMCF9I5U60UqcPpEZnwEpp9UyPafo8n4nRQfjBTgflbYjMDo4pgAI0yE3jsYJCnAqbOpu3VxToC6nDrdoTgDTkfUFOft6J8QEbg9mMNrMOB0sf7ZGsDViUonwED2t45cu4MB1zc30iHbf9LhpsgRcFolnN10ueriOgEGMTjL34scOQJOVysj6rq4T4CZAXTp9pOBgDPgO8v9dvQnRQSu2wemBwKu6OwuKir6u8FgSAgMDAyrr69/YjKZLu7cufP+ixcvmFmlNXlvltsDZ+QmScnte2Nj457g4OBoku3t7e2qr6+vOn/+/MWtW7dWNDQ0cEenJeG2v0gcKbIHrrhl0tXVVeDv70+1ZpP6+voH165du5Kbm1teVlbGHZ2WpJ/FIgZOi2SONWlSsQE9fvx4RVRUVLy/vz9zDG3S3Nxce+PGjcs5OTklpaWlzBfUilAVXhGC0GLgv7B6AxUdyPLlyz/LyMiYExsbmzhixAgx9L729vY3lZWV14xG45WLFy/+qGhHXWuc3sR6PiIG/gcA4a69xzOfXrBgQWhmZubMuLi42aNGjWJ6nE06OzvNT548KT18+PDlQ4cOPfNMD2R/60sAd8XAqU6SvZjF6nREiYmJwWvXrp0+derUpODg4H7hvO7u7raampqbBQUFhdu3b2eGlNqFGVyFVCvCDGdu9lS19To6OvoTo9GYkJiYmDJmzJjPfX19mZBvkXfv3nU/e/as7NixY+fz8vK+b25uHtQtqoKx3WKOugBccevEEZCQkJDhmzZtmjR//vx54eHhX/j4+NA/L0DvbWhoqDp9+vSZ7OzsSpVDt1grAvDpAIJVMAsG7AKhr1ixIiY1NXVOdHT0TF9fX+HICfr6+t6ZzebqwsLCf2RlZd1++vTpf1U6jiYANwic+vsrLTiqVq5cGbV06dLkmJiY6cOHD+8XgTKbzTW3bt36ZteuXSXXr19naprahA6tSwRO02um2nrnqD8LFy4MW7Nmzbzx48fPGDlyJM8G2aStre3lnTt3ru7fv/+7M2fO8EiJ2qSYwD8D8Hu19Wyw/syYMSPIaDSmxMXFzQkICGBUyiZdXV1NDx8+vJ6Xl1d46tSpV729vdxeq0UqCZwpxhbfhZYkISEhaN26dQmzZs2aFxQUFCnu+9u3b1tra2tv02w0Go3/VNG4aghcUe/gh8AwGAyfbty4cUpiYuLckJAQThzbRq6np6ezrq7urslkurxq1SpmvapBXrGDqrZQnFEaPXq03969eycnJyfPDQsLi/Xz8/tEeIYWzOvXrx+YTKbzO3bsuP/8+XOeXFNSmgic7liG1DQrfn5+Ptu2bZuQlpaWEhkZGS+Gzswos9n8w4ULF85mZWWVKQy9ncC5peexak0LZ3p6enrkkiVLZsfGxiYNGzaMvn2btLa2viguLr6wZcuW4vLycqVcvG8JnDa4bSOhaeoAFi9eHJ6RkfGlwWBIsjcbW1tbX969e7coPz+/9MSJE3QoeVt6CPwv3m7V0+2lpKSMWb9+/ZeTJk36U2BgYITYB9PR0fHjo0ePiuPj4496uh8DvX9IAudAIyIi/AsKCv46bdq0v9kHMzo7OxsDAgIWKwV8SKkUAeK4ceNGHD9+XADeL2SnIHCLShkSi6Z4tlKlbNiwYbbBYKBKCbdXKVVVVcWTJ09WQqVYFk3Nm4Vi2Onp6REZGRlJEydOdLRofpOfn39ToUXTYhZqeuMjwKZZuGzZsshFixZZ4qF2ZmFfS0uLxSzcvHlzcUVFBSsGKSGWjY9mt/YCMW58jEbjhNTU1K8iIyP/qOKNj2Vrr0nnlXhm5+bmTklJSZkbGhrKrb2t8I11a3/fZDJ9rZKtvcV5pTn3rABbcF4lJSUljx07lhPHJj09PR11dXUVZ8+eLVy9evU9JfTHAG1a3LOaCkAIg3Dinm2pra0tU6F71hKA0EyITYAtIQDxbV5e3mWVBSBsITaOQzOWirMQW1lZ2ZUDBw7cUGGIzRZEJnDVpkmI9aCzIPLNmzev7t69u1SlQeR+aRKqTAQSYDNNIjMzMyYtLc1hmsSlS5e+zs7OLqupqVFrmkS/RCDVpbqJYQ+BRKD3Ut04PtUkcwqw7VLdosUJQEKq29GjR8/t27evWuVZV+8lc3KMqkhXFmA7SeZsra6uLj158uQVjSRzDpiurIqEfAKXkK5ccvDgwcIjR47UqWRDM1g3HCbkq8JaGSwhv62t7c29e/eu5eTkaCkh3+GREwJX/FCVoyMnTU1NtSUlJYU5OTmlGjpy4vRQFaEr6j10cKjqflFR0dU9e/aUKxhxd0d7OT02yJcqejB2oGOD586dox+7wmw2y14L1h2KLjwj6WCsorN8CB2MlXz0m8D14gYuTOMBPupycQNVWCwfNmZFn3a5fAd7qxeoce87c7tADZvTSzC5Dt3tEkxCUwYA/RLeXe/DR/PEcwCVg43WUYEa8TN6GT1p80W2MnqC1aIXinQMXtZCkUIzeinUgYF7pBSq0JRe7Pd96B4r9is0pZez/gm6x8tZC01pIugsba1z+1NeK9iuz/T/XyPm1SsJBOi8iSpWyaJkbs9P9x5U9NINsfWiXysj8QuUsvGR8ir94iQplGRWBfrVYBKgyzXDxU3R4UX/C+8x1rLQ63dfzZffieHq1zs6mGqemOHiprR0gSn7zZtjebOg5i4wtf9+mfTPmiz6Fb1eVrL6JdReBi40p1+zrhB4Nkv4LBZG64a/qX7kugqB0XMWBm60Whv8zX9TTDy9aLozMMJmMhJ/uOhSDdHEZE0X/vDvQrFIVuMkQCZM8oemHO8y5qLXYv1RFLA9gP8BVKqsWEwUVIgAAAAASUVORK5CYII="},1053:function(e,t,i){e.exports=i.p+"static/time/img/mactalk.8a01bbc.png"},1054:function(e,t,i){e.exports=i.p+"static/time/img/qrcode.bc44c82.png"},1055:function(e,t,i){e.exports=i.p+"static/time/img/student-certificate.2a355a2.png"},1056:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAdPElEQVR4Xu1dCZiNZf++nzOr2WeYse/LJNqIqC9FKluKItoUknwpla+FNqUo7YXQIqEkJLKVZCmVEiL7kt0Ms5sZM3Pm+V/364z/mTnLu55zZjT3dZ2rZZ79ud9n+W2PwHkGKWV1ABcBSAbQGEBdADUAVHX8qgGweeh2OoBUAKcApAA4AGAfgL0Atgkh+N/nFURF7o2UMhrAFQCucvwuAZDkwz5lAdgC4FcA6wD8JIQgYSosKhwBpJSXAugKoAuAKwEEB3D0JYBNAJY5fiSEPYDt0V11hSCAlJJLej8AfQE00d1L/2U4AWA+gC8BrBZCkCDlGuWWAFLKWMek3w+gdbkeRfeN47nhYwDThRBHy2v7yx0BpJT1AYwAMAgA9/iKjkIAcwG8KYT4o7x1ptwQQErJU/vzjmU+qLwNlEXt+YF9FELwAFkuEHACSCnrAXgJwJ0AzteJLzvZ3wF4VgjB20RAETACSCmjADwF4DEAVQI6CoGpnAfEmQCeFEIcC0wTgIAQQErJ0/zbAGoGquPlqN4cAGM4HkKIIn+3y68EkFLWATAJwE3+7mgFqG8jgPuFEPyn3+A3AkgpeY+fDCDOb72reBXxxvACgFf9JVDyOQEcez0n/q6KNx8Ba/FajpcQ4qCvW+BTAkgpLwCwAAD/WQl9I0Adwx1CiO/1ZdOX2mcEkFLeAmDGeSLM0Teq1qWmXmG0EOJV64osXZJPCCClHMl9zIva1Vf9OV/LpUh5qBCCZwRLYSkBpJQU5LwLYJilrawsjCOwEkAvIUS2lcNhGQGklCEAPgXQ38oGVpZVagR+oypcCJFm1bhYQgApZSiAryrv91ZNi9dy/gJwnVWGKKYJIKWkQQa1XTz0VcI/I0ASdBRC0HTNFEwRwLHnf1a57JuaA6OZNwC4XgiRabQA5jNLAIp1HzTTgMq8pkaA6mWeCQqMlmKYAFLKRxwKHaN1V+azZgRmAbjbqPmZIQJIKbsDWPgv0t9bM1W+K4XColeMFK+bAFJKGmX+DoA2e5UAUHBkPQqP/oKiU9tgzzqI4tMnUFyQBUgJiCCI4HDYqlRFUGxDBMc3RUj1yxBSqz1sVRKsGj9KDLsLIZbrLVAXAaSUEQ6b+JZ6Kzof0xefyUDm0vtRcOhHA90TCEm6GGFNeqJKch/YokybRvBGcLle5xW9BJgCYIiB3p6HWSTS5/dCwZGfzPdNBCGsUVdEtn5YWR1M4GcAHfSokjUTwKHcoWavEgDO7FuKjG/vsXwswhreiOirX1K2C4MYI4SgTYEmaCKAlDIRwN8A6FdXCQBZPz6BvL8+8clYiKBQRLYZicjWwwGbbscnngfaCyEoJ1CFVgLMrhT2lB7L7HXPIfdP2rn4DiE12yCuy0dGzgf0X+R5QFV7qEoAKWUPAIt8182KWbIsyEH6gl4oTKFroO9gq1INcT0/R0gSXSJ1gWbnY9VyeCWAlDLMsfQ3Uivo3/h3WZSH07+/jfztc2DPOQIu3UGxjRAU1whB0bXOmkNIO+w5R5XrYVHaLqBY9aN0GUpeI+Numo3QOlfrGeZcAM3VzMrUCEC7/XF6av23ppX2AoUA3kDCUF5wZv9y5O2YC0lZgUYoJOj5JUJrt9eYQ0k2VwhBE3yP8EgAR6CFPQDowFEJi0eAZMjfMQc5v76G4lxtIQZEWCwS+ixVhEkaQeeTq4UQHu+q3gjwHoCHNFZUmczgCPAscXrDGzj95yRAFquWEpyQjIS+KyBCKJPTBLqpX+sppVsCOBw4+PXzDFDhIO12FB0/Dnt2NvjvwXFxCK5RAyKo/LoeUqCUuXQQivPUVfxVWtyNmE5v6pkXqo3dWhd7IgDt+obrqSGQaeWZfOSsW4fTv/yC3D/+wJl9+yCLSntZ2SIiENn+SiTcdRci27QJZHM91m3P3I/0hX1hz1QPRRTfeyFCazNAiiYwcsl/3KV0IYCUksGU2IJyv/ef/u03pM+di5wfV6E4L0/TSDBR3K23odYLLwBC9RasucyShFQEFZ36G8W5KZBSQgSFISi2PoITLtC0bNuzDyHtq+4ozvHuLxpc7UJU7bcKEJ7iXbk0nSJiOpyUgjsCPONw19bdeX9k4JKeuWgRTk3/BGf2cJcyhtqvvILYnjcby+wul7Qja9X/kLeNBlJuYAtBSI1WqNLsVoQn3woRGuOx7qLUv5D2VTfIonyv7Yu9cQrCm/XW2oeFQggXs71SBHDY9/0DgJfY8gUpkbl4EVInTULBoUOm2xZSuw6aLltm2SrAg1zOL+M1tYuTH9lmBCIvHQrYaEztChIp6wd6zntGcNXmqHrHGk11AqCIuKEQotTglSUAP4mvtZbor3R5mzfj+LhXkLd1q6VVNpg+HRGXW3MeODWzPYrS9a1IwdVaILbLNA/XOom0eTeh8Kj3GBIJty5GSC1GytOEF4QQdEU/h7IEWEzDAk1F+SFRcU4OTrz1FtLnfOGT2hKHDUPisP9aUvbJGZfDnsnFUx94t4/vMcvtJBalbsWpLzoB8BxsTOeNgF9/AyHEufvmOQJIKRlgkdGsysVd6fT69Tj67DMoPH5c34jqSB1zww2o8+ZbOnJ4Tqrs/1unGyrLFhaHhNu/Vw6LZZHx7QCc2bfEY7m0NEoc9Leew2BnIQS9jBQ4E4DWvbTyDSh4fUt9712c/PjjsyZVPkTkFVeg/kd0uzOP4vx0pH/dG/xqjYCav4TbvnUx1C44vE5ROnlDQr+VCEm8WGu104QQ54x6nAmwmtYkWkvxRbqilBQcenQEuOf7A1EdrkG9SRZyvrhIkfPzHm+LrqPs7dKer+zjuVumwZ7l/fAa2/VjhDdxDZ5ycvplsGcf9jgk0R3GIeKSwVqHjJKmmiWqYoUAUkpaJzI4csCWf076oUceRtHJk1o7YjpdfN/bUfO550yXo6UAXumyvhuG/D2eNesU7FDAUxZZqx5H3lZ62rtHleb9EdOZsjvNoGsZfQrObgFSyjsA0L48IMhcsgRHR4+CLNSvKjXT4Fovv4K4my2UBag0hhrD9Pm3oPC4Z2OdxME7XayF8/d8o4iJPSGkZlvH9qF5NBiQ6lFnApBed2vObmHCUzNm4MRrPot/4LGlIjQUzX5cjaAYzwKZksxFp04pQifKH+ynTp7VMRTZERQdheDERIQ1boLwFi1gCw9XHZmi9N04NZPBzd2fb+J6zATtAp1RlLYDp2Z5tgUIiqmLagN0xZZi6HvFsrtkBeAGU1u19RYnSHn7LZz88EOLS9VWXPxtt6HmC6WuxOcyFqWl4fS6tcj5+WfkbtyIwqPqoX5FWBiiO3ZCtUGDEN68uddGUN5fcHCV2zQx176GKhfdV+pvXDlSJtf1qC2kYCnpAYYm1oUkehgLKWUDAPt1ZbUgccpbb+LkRx9ZUJL+IkRwMJqu/AHBVan2OIvi/Hxkr1iOjIULcXrDBqBYXTXrtmYhUG3gQCQ98ghgc3+k8iY1jL7qBUS0cpVNpExp7NGAhIYoScOO6B2I3kKIBSQAo3d5EGDrLVNb+kBOPltoi4xE8pq14FdbeOQw0mbPRvq8eaDgySrE9+2Lms8x9LErvIl5Yzq+gSotXc3NvRLA2ArwhhBiJAngV9VvoCe/ZDr49fMcUHjMd1FaecXkVbMscjdORPZP7k3343stQGgdV81typSGoPGIO9BwNHHwdr3cXSuE6EAC0K/JtZV6i9OQPvX995D6wQcaUp4fSSJat0aDT12vb5krhiF/J2NqlIEtBElDdkOERJb6A6+QyhnAA6hTqNpft3taphAijgSgYMAyL0VPjUybNRPHx/3L7EttNjTf8Luy1TgjY8l9OLOXapfSCGvcA3HdXJ1Nzt4cPBt/0K0srrtnOYGXz6k+CeBbeSu9aJYvx+GRj/tctFse142my1cgpHbpCxZ1BtQdlIWn5Z+rBVcNT4hs8yii2o0y0v1uPidA3pYtOHDfvZBnzhhpYIXP0/T7lQipwVfrnEDjkZUjkLfdoeUUNkS1HYnItq6kYC7aBXg0NKGF002zENbgBiNjNcynBChKOYF9ffqAgpR/JbgF/P6Hcth0B3vGXhRl7EVwtZYIivJsg0OVMK2E3MIWjKT7d3q1MPIy9hN8RgBZUIADA+5B3l8eGv4vYERY48ZovPAb0z1N++I6FKbS3c8V9BaK78WHygxhrs8IcPzlsUj7/HNDrTpfMiX0748ao2liaQ45P43B6Y3vuy2ESiAqgwziB58QIHvlSkWzFyjQ/j8oPh62qGjYws4uv1yR7Dk5sGdlg2bk/kC9yR8g6mpd/nxum0UXsrS53UGdgDNC616D+JvnKGFoDGKL5QSgOnfvLTfDnpFhsE3asgVXq4bwZs0QdkFzhNarpxy0+KNyJijWe/ii4pxsFBw6jILDh5G/fTvyt/6lbFVU8lgFERaOC37+2eUKaLR8WZCN3E1TUHD0F0XEHFb/ekRcNMCjUanGeo5ZToBDwx9C9ir3ig6NjXKbLCg+AdEdrkZEm7aIbNfO9WRtpnDmLbYrJMhevQZZK1ag4IA59UiViy9Gw9nlfgvMtJQAyn3/ce+mzHrmiTL72G7dEHNjF0S2beNRuaKnTK1pczdtQsa8echc9I2Ll5GWMrgC1B4/HjGdO1tmeq6lXp1psi0jQPHp09jTvZslFj1hDRsqLlyxPW5SFDeBROGJEzj1ySeKZbIRg5XQBg0RfU0HRLRqjcgrr4StSvl6Ic8yAlih2w+tWxeJDw1HbNeugE2zy5Nf+FHwzz+KbwJ9EI2C/omx3buj6qDBCK3DB9QCD0sIQI0av36etI2AljS00U+4ZwCoqy/PyJj3laLToP2AUbCPVe+7D4kPDvMoJDJats58OZYQ4NiLY5D+JV9M1w965tQeNw4hNU0HStRfucEcZ/buxcFhD6LwiG4jjFI1hl/YAnXfew8h1asbbInpbOYPgRT37r7hBv0HJZsNiUMfROLQB0wd7ux2O7b//Te2bNmCfw4cQEZGBgoLCxEREYE6deqgWXIyLmvVCvHx8aZHy7mAotRUHHxgCPJ37TJVLq+uDT79FPRVDACOm14BTrz+uuKpqwdUj9Ye/ypirr9eT7ZzaTnpS5cswRezZ2PZ0qXIzPQeMl8IgYsuvhh9+vbFvQMHokZZ5YyhVgD29DTsv/NOFBw097xfaP36aPj5F5oMVA021VO2raYIwD1/V6eOuoQ+vB7VnzoVNJbQi+LiYsycMQMvjx2LfXt1G0Eq1YWHh2PkE0/gqVGjEFZGT6+3PUxPS2EqvChcMoPo665D3Xd02fabqa4k7ypTBKA9/5En3Ksw3bWOh5+6kyYj6krNkS3OFfPXli0YPHAgNv7xhxUdR4uWLbFw0SLUb0CbWHPI/PZbHHnyCXOFAKjz1tuGV0WDlc8zRYBD/x2G7NX0KNOGWmPGKNE59OKjadPwyPDhOGOxTUH16tWxet06NG7CCPjmwENhzhrNvvpuK+NW0GTRYn9egd8wTABeg3Ze2V7z1Y/339qvvqZ7lJ8dPRrjXzH0FoKmurgCbNi40fQhkTqFfX30k7tsI+u+9z6iO3bU1HYLEj1kmAB0mjg45H5NbaD3TZMlSxEUp+/h8DHPP4+xL76oqQ4ziW7v1w8zLVBd/zN4kBKoygxiunRFnddfN1OEnrw9SACq7XS//pHy7rs4OZXPB6ijxtOjkHDnneoJnVJ8Pns27tGZR1cFZRL/sHo1ru5gzjk6Y8F8HH32WTPNUG4Cyet+8tc20IgEYOQotyHEvPXk4LBhyFmjvv+zQ01/WKXJb66kvv379qHVJZcgx0JHDbVZ6da9OxYudrXUVcvn/Heqwndda97CvsnSZaBY3MfgtSWWBJho5K1fin4pH1dDwt33oMaTT6olK/X37l26YMVy3c/f6KqjbGKbzYZDx44hKYmBUoyDBDDr4l7vgymI+o/ub1Jvo9cLIa4kAe4FoE+SA2B761aaLH3rT5umBGjUinVr16KjyaWYdd3SqxeGDB2KD6dOxfx58zRVP2PWLPS/g57yxrHv1t7I37nTeAG8Dk6YgJiu3UyVoSHzO0KIESQA70C7NWQoleTvli3Uswhx1ipWh8Dl3rvvxqyZM9XL9pLihRdfxGjHXrxzxw60VPHWLSnqsZEj8eqECabqtoQAb79z1o7At+gjhPiqxD2ckZh0aSS0ECA4KQnNftBuHURJX83ERKSleX4cm0t01+7dkZycjPz8fGz6808sX7aslIzgyIkT55byxYsWoVfPnpqGsl///vhsNh9HMY7dna8zHdiqwYzPENGqlfFGaMtZSwhxrIQAup+E2X7pJaoKoPDkZDSap91kee+ePbigqftQ6CEhIXhx7Fg8PGIEQsvY2Z88eRIPDhmCrxecfdPq9TffxH+HD8f3332H+wcOxHGNkcZ63nwz5n1tPEwivYt3tNMcs8/jNCWvXQuawPkQu4QQySy/hAADAOiKcbanaxfViJ20hmmi42T93YoV6HZj6egYbCQPaHPnzwcnyBOoILq+UyesNSGNG3DfffiQ0ckMgraQtIk0g9AGDdBkMaOF+RQThRBKQ0sIwKMv/aQ1m+FoEX3SOjf5Jz5lpw0Lv/4at/VyDYk24rHHMOGNN1QL4eR3usb4NeyZ557D82PcRw1RrRzAkVGjkPmNa5AnLXlL0lS95x5Uf0LfrUlP+Y60XUpeGXUOE7ceQDuthaVOnozUie6dFZzLYCQOrQYPnvbrfQcPoq6GezFXgXATFkWLlixBF5qjGYA9PR27Ol+n6WbkrfhGX85F+IUXGmiB5izUnVcXQijOms4E0PUaOJ0+99+h7pFCsSbFm1qwZfNmtL609OtYMTExOKWi7y8pm8qiKA2Bmty1JSoqCoePH0ekQSPUlHfexslp07R002OaiMsuQ4PPzN2ANDRguhDiXBAiZwLQO5GRDLVtA1Jid5cbVc2ioq/rjLrvvKOhXVBO9dXi4kqd6IODg5GVmwseAtXg6Qyhlo9/Hzh4MKYYnMCCAwewt3cvzYoxT+2pN3WaIVW5lv45pekmhFha8t9lg0V/B0DzBZS6AOoEvEGEhKDpiu8Ujx0t4CGQE+mMBd98gx43uUbQdE5DM7AOV12F3xngSSdoJLJt507Uq1dPZ86zDiUHBg5E7u98UN04oq66CvWmTDVegLacvO7XFUKce06lLAH4xNgcbWUB9qws7L6+M+gT4A3xt/dDTY1KktmzZmHAXYxb9f9o2qwZ1v/2G2I9uHxx7x8yaBBmfPqp1qaXSsfr5dOjRxvKa8QkrmxFtJJqvGCB4uLmY4wTQpSKJFGWAPSkZMxAbZ8rgJPTpiJFZYmnJVDDOV+CcgE1FBUVocUFF7iYfNGmb/KUKbiiXelz6vqff8bIxx7Db796j6vvqd527dtj1Zo14FajF3QWOfbSS3qzuaTnx8GPxMdg3LumQoh9zvW4ezKGPdLs00y7wL29e6v60oU1bYpGc77UZAe/5NtvcXMPvljrivr166O545S8betWHDLxegithtdv2GDISDRz8WIcGfW08XiCjq5R5k/Zvx+wXAjRxWX1Kfs/pJSMZ0KWaPZh4kseB+66U1UyqBg7sLMaHmt6+KGHMHkiFZW+Qe3atbHyxx8NmYMxwCXD3ZlFlYsuQv1PputSlZuo8wYhBM94peDp2TieRrSZ+ziKYzAIBoVQQ8Kdd6HGU0+pkoBbQb8+fUDhkNXgdvL1okW6D318mYx9zLCgTWFNmqDBJ5/4WuRbMnR/CCEudzeOngjAx6Kp09S1MdJliuHg1MAI3TXHvKjqBsbDHff391VuGmr1lfyd/gFDhw1TNH5VdDpp0ubv8P/+p7rVaWkLt0Pq/LUKyLSUqZKmpxDCbZx6b0/HUqqh+RUCpQFSQnETm+smCGKZFtIvoPZrEzQNAo1DRjz8MHab8MLpcM01GP/aa2jTtq2u8eQNJ3XyJJya8Zly5TMLxg2oN3Giv758NvdXIYRHCa83AtAmiX5P6jHQnUdFShx/9VWkzVQPP2yLiUHN0c8oMQDUzgVUFVPbR28gqn9zc/k6undUrVoVt/TujUGDB+ueeLqC08Yv9YMpoPubFWCcg1ovv+yvPb+kyR6fjWUCtefjaZJryMqRAZiPjx+v6auJbN0a1Z96WjXMekmPCgoKlGvf5k2bsHfvXqSmpCj+gJFRUUhMTETTpk0Vf8BLL7tM0STqAfd5BoVgTAAr3idUBjkoCEmPPoqqA+5VJbqetmpIu1gI4VWCpkYAPlHNs4Ahz0XG2j88cqTmL4gBlardP8QfxhAuY5e/Y4eiyctYsMDSWEEMdlHrlXHgid/PoLLnIiGEV2sv1cdzpZS3AzD8cB+NJI5PmAD61WsF7QjievdG7I03uoRZ1VqGarriYuUhSgZ8yFq+DHT5thIUgVcbPFghtKdAkVbW56as8UKIp9XqUCUAC5BSUsmtza7KQ4186JkHRCpO9IDBFqP+czWqXHopeIAyenKm82b+zl3I27xJCQbFRyF8FcmMRrC86rLtAQLPbpcIIVSjWGglAKMdbzPiQOI8AHz4OWP+fKROmgj61xsBvYtoMx9Stx5CkpKUd3ts0TFg+JViHgztRSjOP6O4bjNELR+eLNi/H3wGxtcgQZMefSzQz9Mz+Pe1QghNjoqaCOBYBSx7WYSBGtO+mKPIDLS8x+PriTNbPh+gZHibaBPWSGbb4JRfeQlEa3maCeAgAZ+WM2c479yyYjuyvl+pECHXIrdvrR03m44avLieN4GSTUr1ygn+pFWXEEJzsCa9BKAPIRXflveYb/dQwZKxaJHuc4K/Bp8HO3rsUG4Rdc21yrZTjpAF4AohROl4sioN1EUAxyrA+wxdYH3W+zP79iFn7VrkrF2jrAxG4vNZNTEhtWohsl17JTopI5Uy/nA5BPd9Onpoc4Fy6oBuAjhIwKsh46Aayq9nABmHIH/rVuRt2YzczVuQv22raccLT/XboqKU+MO0W+DbfxFtryg38fxUxkzTlc9dGYYnUEpJCaHvnffdtJrSOl4nz+zfrzz7xhsFT/z8J2X3/Mni4rOWSkIoS7UIDVMih/PfGX2UYemCk6ojpHoSgqvXQFiDBr6TOehhvP60fJCAbwAaUlSYIQDzUuCvz/Fffwcrc3geAZpBdRJCqCtGPJRhmACOrYAmZNx33JvvVE6dL0eAcpmOfP7VTCWmCOAgAbWF1DVrtiY20+DKvMoI7AHQgc6dZsfDNAEcJOCNgCToZLZBlflVR4CTz2WfPhymYQkBHCSgDSEtQbqbblVlAZ5GgMs+9fumv/ySCiwjgNOZgNFGrJMWVpKhZAR+A0CvHkvf4LOUAA4SsExahxp6yrJyvt2OAA/adwsh8qweH8sJUNJAKSVjDvClaH0mZVb3sGKXRwkfo2uOEkLQscNy+IwAjtWApshkr899niwfmcAXSNn+QCPiXT1N9ykBHCSo6og+Uikr0D4zmwD016vY0V78/6f0OQGczgVDGb7Hl0okIwNQzvJwmafL0TMlARx83T6/EMDpXEDvUPobmH9O09cj4//yacb1gBDiR39W7VcCOK0GQwCM58vn/uxsOa2LxhtcGcf64pSv1me/E8BpNagGgBGZSAZdLmhqnapAf2ekjoeFEJTuBQQBI4ATES4G8PK/TKFEqyru8/4NiOyGYgEngBMR2jjsC1x82APyafimUtrsPQ+AHju84wcc5YYATkSgydnjvAYBOPv2e8UGJ3oZT/dCiO/LW1fKHQGciMCXJClNpIdywDwsTExYisNgZpoQwlz4cBONUMtabgngRAS2keE/aYd4q574RWqd98Hfc7i8O7SiXOY1m2f7oC2aiiz3BHDuhZQyiIYQABh5kmcFv3tcuhlV+rpxiedvRSCucppm2kOiCkWAsn2QUjK4JZ/W4K89gJY+Vj4xvh6Xc9ri/cRfeV7etRCjQhPADSEoT6DTCq+WzRxnBwa6YOAr6iT48xZylAe2kwCoc+cezq97PwC6DtMYY5u/RLRaJs+KNP8Hwqsule8Rkl4AAAAASUVORK5CYII="},1057:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAVI0lEQVR4Xu1dB5QVRdb+LkGGJDlIjkNOgoAMoKTFFRBXERVZfuVXV3EVXBRMoBxR0V09ZkBkMYL6o8cVQRAkRyW55CCg5CggSRio/3xtz/Dm8d687n5d3f1m3j1nDnqmuurWrW8q3Lr3K0FSkhYAIEkrAEqpwgAuA3BaRM7kRpvkWCAopdi3agAaAKgJoLr5/+UAlAJQGkCJKIN+AcDhkJ+9AHYC+AnAZgBrRGRfTgJMjgGCUooD3AZAGoDWABoBuFzjYB0CsArAEgCL+SMiv2lsT2vVCQsEpVRec9CvA8Cfpj4vdekmIKYD+EZEVmsdOZcrTyggKKXyAGgPoDeAmwBwFgiqcBn5DMCnIvJjUJXM0CshgKCUqgDgLvOH632iyQoA4wB8IiLHgqh8oIGglGoO4B8AbgGQP4gGtKkT9xDjAbwqIj/b/FZr8UACQSnVFsAzADpp7b1/lZ83l40RIrLJPzUuthwoICilWgF4FkCXIBjHAx0IiI8BDBORXzxoL2oTgQCCUuoKAC8A6Ofzzt+vsTgN4BUAo0TkhB9K+AoEpVQ+AIMAPA2giB8GCFibdFwNEhGeNjwV34CglLrS3Enz36RktcAUAANEZJdXhvEcCKYjaKi5GcwJJwFdY3UUwP0i8omuBkLr9RQISqkqAD4C0M6LzuWQNmgvAkLr3sEzICileBScBKBMDhkgL7uxEcBfRIT/ahFPgKCU4lLwHADeDyTFmQXojOonIl86+zz7r7QCQSnFPcBoAP+rQ/lcWCevx4eKyL/c7rs2ICiligL4AkBnt5VO1oe3ATwkInRIuSJagKCUKsmrWAAtXdEyWUkkC3C/9T8ics4N87gOBKUUN4PfmYEhbuiYrCO6Behv6CUiZ+M1kqtAMGeCuUkQxDsstr7n5vEWEWFgjGNxDQhKqWIAvk0uB47HIp4P6XTqG8+ewRUgKKUYAcw9Qcd4epP8Ni4LjBaRAU5riBsIZrTwhwDucKpE8jvXLDBQRF53UpsbQHgSwEgnjSe/cd0CPE7eICLT7NYcFxCUUl0BTE16DO2aXWt5xkS2EJGtdlpxDASlFJNHGJRJn0FSgmWBtQBaicgpq2o5AoJ5lbwAwNVWG0qW89wCY0XkPqutOgUCA0sZVZSUYFuAN5aWLqlsA0Ep1QLA0uS+INgIMLVjWl4DETkQS1tbQDBvE5cDaByr4uTvA2OBSSLSJ5Y2doHwhBlXEKve5O+DZYEeIvJ1dipZBoIZZrYBQKFg9TGpjQULbAdQPzvuBztAoD/7VguNJosE0wKPi8ioaKpZAoJSipwDPC5aKh9MO+R6rRj8WktE9keyhKWBVUoRBMxHDKSkq3T8ePxHLDmyxPh326ltxs+v537F8XPHoaAMvQvnLYxi+YuhasGqqFaoGhpf3hjNizVHqxKtcHk+nZwagTHbmyLyoCMgKKX+BGBGYLpiKnLy/ElM2TcFX+z7At8c+AYn0p1He+eTfLi6xNXoXq47+lTqg0oplYLWXbf0YQBL7Uh5ljFnBKXUPJOcwi1l4qpn88nNeGv7W3hv53s4nn48rroi/2UIOpXphEHVB+H6ctdDct5q+IaIPBTe92yBoJQiFxE5gnyXX07/gmc2PYMPdn2A88q1mM1s+1W/aH08X/d59Czf0/f+u6jASZKKiQidTZkSCwhMxiRJhW/C9f+fW/+JEZtH4PcLv/uiR/tS7TG28VjULVLXl/Y1NMo0/CyhA1GBoJSqDIDnT9+SUrgM9FnRByuO8ZLTXymQpwCerfssBtcYjDxCKqeElj0AqobGOWYHBF4q8XLJF/l6/9fou6ovjp0LFuVQt3Ld8GGzD1EifzSKRl/M5aTRG0XkPxkfRgSCyV62AwBnBc9lzM9j8MCaB3BBMbEneFK7cG3MbjM70U8XU0WkeywgMGF1lh9DMHrHaAxY4zgG0zOVK6ZUxNw2c1GrcC3P2nS5Ie64K2Y4mKLNCO8AuMflhmNWN3nvZNyy3Ne9aUwdQwvQKbU4bTGuSCHzT0LKAyLC9LlLD8nmVTM3E+Qq9ky4IWy3qB1OnyedUOJIs2LNsLjtYqTkSUkcpS9qOl9ErokGhA4AZnvZq1PnT6HZvGbgKSER5W9V/4YxjcckourchJURkSOXLA1KKd5Qkc/AM3lw7YN4c/ubttrj/UD/yv2RWiQV+3/fj7E/j8WcQ3Ns1ZFRuGyBsri/6v1oU7KN4ayadmAa3t7xtq3N6pSWUwwXdQLKHSIyMRIQ/utl7uKGExvQaG4jW97CR2o+gpfqv5TF/csTRu8VvfH53s9tjQUvnWa0noFSl5G5/6JM3D0Rd6y0nrPDi6z1HdajUN6EC9f4SET+mgUIZiZzzPg2W5aOUbjnDz3x1b6vLFfZ6PJGWN1+dUSnzqYTm1B3jj3v37pr14Gu5EjScG5DrPttnWXdXqj3Ah6r9Zjl8gEpuFtEKoUD4S8muYUnOnJPUGd2HVttPVzjYbzSgNyUkSVlaoplV3SFlArY3WV31Lr6ruyLj3eTGNWacFbZ0WkHiuRLOMrIGuFAICXLYGvdjr/UoHWD8Nq212xV1LdSX8OzF0l44ig0zfrUzAE70vUI8ueJzPJ3w/c3YMp+UhBYl/FNxqN/lf7WPwhGyUuWBs+unLmmXzHzChz43d5KxOCStdeuNQJLwmXS7knoszJmwG6Wz0Y3Ho37ql6aB8KglqqzquK3dHuPsrQr2Q7z0+YHY3ita/Fm+IxAkkfyHGiXH47+gJYLnDHrVC9UHe83ex80eoYs+3UZuN/gCcKOcDZ4pf4ruLfqvbgsD7P7YUQ23bbiNnx7kHQP9oTxC/u77keZyxKKRXBeJhDMKGXP3hB4bstzeGrjU/asHFY6tXAq6hSpg32/78Pyo8szQ9KcVMr1vUWxFjiP80bIGyOgnMpnzT/DLRUSx0MK4KIfQSn1ZwC206mdGot/cZ/u+dTp5759R+C1LdkWLYu3BC+fqhSsYhw9ud/gHuXouaNIyZuSaDPCRRezUup+wKBt80TsHs08USpKI5x5+lXuh9sr3o4ahWpkluL+gSefbSe3Yc+ZPThx/gTOXThnbD6L5C2CSgUrGeUJnqD7F0KXhpcAPOqVwUtNL4Uj54541ZyjdloUb4Enaj+BnuV6Gn4LDvK8w/Pw5b4vseDIAqz9ba0l7yODY5sXb44OpTqgV4VeRuR00CQUCJ6GpeX7Op8tb6KXhqPLeVS9Ubiz8p2G93LHqR2Gy/nfO/+Nw2f5Lmh8wqvrAdUGGC5yhtcHQUKBQG5Ez8iwZErMAGpf7HN92evxXrP3jDV+75m9eHrT0wYAdATMEgRDag4BnWQF8xb0pb8ZjYYCgW8TepblHEQgjKgzAsNShxm24QwwdP3QuE4PVke2csHKeLfJu/hTGaaQ+COhQGAMgmcRFmVnlMXBswf96XVYq1z/6RHkUsB9y60rbsWsg94HaD1Y/UG8XP/lqJ5OncYKBYJnziR2iPEHq48H49XccU3G4e4qdxsXTD2+74Htpxi87Y8wdH5yi8meHz9DgcBwYc8SAPut6ocPd0W+M/ByCLgcDE8djjXH16Djko44dDZL3oeXqmS21bBoQyM41kvvZCgQ/sgU9UiCEKTatUxXTGs1DbvO7DLc3Xbd0zpNxQTdBWkLPEvO9Q0IW09uRe3ZtXXaMtu6i+cvjo0dNqJovqJIW5gWmGUqVGkCdWqrqcgr+nOMQoHAjFI+tuGZNJnXBP89zoAo7yXj1tHJVbiX2noV7OLbZpHGfGP7G3ho7SWJudrtTIfOpg6bsPTXpWi7qG1cl1W6laW7elX7VWhQtIHWpkKBwFdIy2ttLaxychpUmVXFuPb1UiY0nWAcFQmCRUcWWW6acQtPpj6J/JIfMw/OxKPrHzVuPq0IfQSvNnwV5QuUN9p8fMPjhovainCJmN56upWijsuEAmENgIaOa3L44YtbX8RjG7yL8+NN4Z4ue7DwyEJ0WmL9MfreFXrj0+ZZb0sZI9l0XlOcuXAm294zJnJl+5VgIm2GMKeTS+PPp63d/HPjyFtPXRIKBOYyMKfBU+HVbaN5jfDTyZ88aZdOm9cbvo6bl9+ML/by7TFr8m3rb9GlzKWP2NPvwITd7IQcC4/XfvySIsM2DsPILdaI7RnfwDgHXRIKhMkAbtbVUHb1Mh+Bf50ZXEc6dZh19SxcVfwq8PaT3AtWhbMBZ4VwsbK8MLKZm75w+fuav+OtHW9ZUoE3mAe6HtCWhR0KBE8DV8N7zzVz1Nao7G+WjBWrEKfmo38+imn7pxkzgh1penlTLGq7KEtcAXMoei3vFbOakvlLYtU1q4wglgwh6VebhW3ALC+r8vGVH6NPRXsxmVbrDgXCAwDspRtZbcVCOd7udVvWDTMO6uPtImEW8xSdHhnp5BlYfaAR2zj9wHQwCcbqLMZE2aE1hxoJs9wsjvtlnO08z3uq3IN3mjA/2X0JBUI3ANkvdu63n6VGRvx0XtIZ3x/9XktLPCnwxNBlaRdfLpXi7RTD45a1WxZvNRG/DwVCdQDbtLRio1Lupjsv7WwEo7otI+uOxJO1n0SN72r4erHktF9cYg5fF39gTIT2j4UCgf/NiydPvYuRjEIw3PjDjZh7mE9IuievNXwND1V/CKVnlHYl0sg9zazVRFdzenfrG1xrtRqlFobnNdC70sZGBdqKnr1wFoPXD7adJZ2dQhmOpOLTiweOm8mqIVUPLXeDo8OB8CqAgVaV8qLchJ0T0H+1OylkGXEHFWdWNKKOE014hDzX3ZWnoMO7flc4EHgW+r8gGYgeQDKpuCEv1nsRQ2oNQSKF0of2m2l+2ztpCZpJDQcCQ9UC9acyeN1gvLItevazHYBwf8B9AnmayNeUaKLJu7hfRMpHIsrg4xz2SAY0WrT6d9WNcHI3pHOZzpjZeqbh1qV7N9EkY7Prst6fiMjtkYDwMoB/uNyYo+pWHluJ5vMjJ4NwB80U+WoFq4EJtSTjihVhRJLMQ10PGeVbLyTNdOII8yu2dtqaJdPKJe3vFJH3IwEhMLT80S5lOEUy1rBekXpZbLH7zG7DGcVbwS0nt/yRhpZ+wkhtZz4imc8mXTkJ5QqUc5SS75LhHVXTsXRHfHc1U09cFR5ByvMVuEhA4F0pL9mLu9qkg8rqz6kPcixlCJNP6BQipV284sXdRrw6hn7/5VVf6mCJXyoixiOuEdONlFITANzpZkfs1rXxxEbUm/PHX/w1pa4x6PLJeuaWcN+ROifVyGcMurDfi9KsB9DY6M/DIkKXQVQgeJoiH0nxF7a8YCSbcgaIFAdgo7NRizqh9XOjXTt1MPmG7K6kE3RZyLFYRUQMEqloM0I+ADu9Dl0L7SiTTRjZo/MFFWZacfkJQi5DtEFmNvZzdZ9zGQNGdbNEJDPSJmomqlLqeQCXhtXoUMnHOoPM/9y6RGvMbzNfVwrcrSKSGfKUHRDICLEFQMK/UhELZ07jE2LVG8/v6UVc1nYZmKKvQZh0WklE+NiXIdnmpiulyITZQ4MigaqSQTE3Lb/JFvGnzg6Uvqy0wcwWfjx2sc2RIpLFoxYLCNcCcEZw7KLWXlTF206GndnlVXRbN74DwdB15j9qEoZc1xARpi9kSrZAYCmlFENinPHgaeqJrmoJhoFrB4IvyPgh5Fqa2nIqahauqbP5cSJyb3gDVoBwA4DMt390ahiUunn1TUDYJduMR3/6Sug0Yk6mRmFUSz0R2eoECAQLgwhbaFQwcFXznUk+KTR1/1RPdBtYYyBebWD4dnTKeBG5O1IDMWcEc3noDGCmTg2DWjdZ1IZvGo75h/XS6pKzcXNHrQ+XcG+QKiL0D10iloBggoHLA5eJXCnMQxizY4zh7bSa7xhuKHoJeRIgN2Mk1/aWjlt0Phb2rIgMjzZ4doBAMgPmR15M4MuFkCCZ+LKjy7Dg8AIs+XWJcSlGqh1uNMOFt5wceLqHSYmTViLNoNMjEIasH4L/7Mu69eLSwCVCg9CNXEdEovIKWwaCOSvQ1/mEBkUTukqC41j6MSMgls8WF85X2EhNI5N8djL70Gwj2Ya0PRRmTPM1GQ1ym4hky3dsFwh8yow0fKkalM2VVRJE43eONwjKCSTmLcQCkE1DfSUiMV85twUEc1ZgJCnfdbD9rc0O5Krix9OPg4z1nUp3cpNvkXkqDUVkVyxjOhpMpZSvCbOxOpX8faYF/ioiH1mxh1Mg8IULehybWmkkWcYXC0wUEcvP1DkCgrlEMNKZjibfU+R8MXOwG6XnsLmIkCDNkjgGggkGkgwwISaueixpmixk1QIkXGgtIn8cRSxK3APox8uxFvuWG4sxKplHRdscO24AgWyQJCPKtV7HACFumIhYI2UKUzpuIJhLBB9bJBmX6xGWATJy0FXhS6U8JThKl3YFCCYY+L4dwaAtoiLoI+GjfmS6uTk09MyuLq4BwQQDk2h5TVfLriLJ8o4twIcleohI9mSPMap3FQgmGCqZM4N/jNuObZpwH5JSppuIWKdmi9JF14EQMjMwfkEvgXDCjZurCjNi5hYROe1GrVqAYIKhFAAqm9xAujFSWeuYCOCuePYE4SppA4IJBj5d9gGA2KyU7hsrp9bIxKOnnJ4OohlFKxBMMDBBhsoPSXog48ImN4P3kcsgrlq83CNEakspdRMAZll79m6UDoP5VOcv5vHQffJJs0PaZ4RQwymleFE1KXlraQtO9BGQ1UQL02aGJp4CwVwqGPNINyjpeXJ8XqWtIc9amEfCRwCMcXs/EEknz4GQoYRSiul0Y5NhbxGhsgDAPSKyKQ4g2frUNyCEnCqeMpHPYJfcLnyElc/ZvOPFLBBqbF+BEDI70CXNNB8yxOdGYSoa+fefFhFfXiANBBBCANHV3D/kpvQ6bgaHi8gqP/8CAgUEc7mgTt0BjOAT0n4aR3PbfLaNM4CexylsKh84IIQdN5lzydPFdTnEGcV0KB6fX7YbSmZzXG0XDzQQQpaMOtxFM/ACgBYuGduWs/cBn7B7F8D74QQV9qrRVzohgBACCJ4suKHkc2tcPoroM03cNZOn6HMATDWb5/UpwK72CQWEsGWDF1qkC+aywZ9qdjuvoTwjh7n2f8MAHRE5r6ENLVUmLBDCraGU4vKRZv7w6pv/T75IXcJLIL7puwQAaVEXiEignjiw0/EcA4QIwKArm4Ex/CEpER8v46zBPQZjJUrH2ICSm5f+ff6Qm5oEE1zryWbBv/wtIqLlgSU7A+hW2f8HGyXv+m3D1boAAAAASUVORK5CYII="},1058:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACCCAYAAACO9sDAAAAUQklEQVR4Xu1dCZgU1bX+z8DMsMywDrwgoEIERU2UEPZoBIwSQBAVQgQMiqggCLhFn3kajUpc8jSKAiLKKggqKAFEISoiccENEFFZXZ86w8ywDDMMcN/3j9XQ01XVVdW1dE9Pne+bz6Xveu5fVfeee85/BKFUaw1IdZ29UqoGgHoAlIgUVVc9pB0AlFK5AE4HcDKAEwG0AtASQB6AxtpftsmC7wdQoP39H4BvAewEsBXAZgCfikh5OoGlSgNAKVUTQAcAXQF0A/BrbdH9mhcXfwuA9wC8BWCdiPC/q6z4pSjfFKKUag7g9wB6AzgXQH3fOrPX8NcAXtb+XhWRPfaqpUapKgEApdRxAAZpf3zSU3XcpRoQFgJYKiL7UmOZzUeRqoqEtknrA2AkgH4AuGmrSlIM4FkAT4jI+6k68JQDgLaJ46JPAHBCqirO4bj+A+AhAC+IyGGHdX0tnjIAUEo1BHA9gHEp8F33S+nbAdwLYJaIHPKrEyftJh0ASqkcADdoT3wDJ4OvwmUJhDsBzBWRI8mcR9IAoJTKADACwN0AmiVTCUns+0MA40XkzWSNISkAUEqdAWA6gI7JmngK9asAzONbUER+CHpcgQJAKVUbwO0AbgRAI04oxzRACyRBMCtIpQQGAKUULXZzALQLcoJVsK+XAFwpIj8GMXbfAaCUYh/c3U8CkBnEpNKgD95D/ElEXvF7Lr4CQCnF27aZAAb6PZE0bJ+ng79ykywi3Cf4Ir4BQCl1CoAl2q2cL4OvJo3+C8ClIrLXj/n6AgCl1Dm0egGgcScU9xrYSHO4iHzpvqnKLXgOAKXUMAAzAGR5Pdhq3h59E/qKyEde6sFTACilxgCYnMK3dV7qLhlt0XOJIFjnVeeeAUApdYu20/dqbGE7xhqg11J/Efm3FwryBABKqZsA3O/FgMI2bGmgBMD5IrLWVuk4hVwDQCk1GsDjbgcS1nesAfobnCci7zquGVXBFQCUUv213X5Vc9Zwo7NUqktrYTcRodNqQpIwAJRSnQHwO1QnoZ7DSl5pgItPECRkOk4IAEopulnTzamJV7MI23GlAe4FeonIQaetOAaAUoo+9eyQLtihpI4GHhWR65wOJxEAPKk5ajrtKyzvvwaGi8hcJ904AoBSagiA+U46CMsGqgG6obd3sim0DQClFD10aYasLn57ga6ch50xaqm73RA2WwDQ7vRXA+jh4UBtNfXVnsOY/VEpVm4rw+cFh7BlbBM0qGVr2LbaT9NCd4oIr5ItxZYmlVKjGOBg2ZqHBQ4eVrjrjf2Y/n4JDmu34V1aZOJfl4YXjDbUzNNABxHZZFXWEgBaWBYjYwOLwePiD15UjLVfVj7VTDo3F6N+RbfCUGxo4B3NPhDX7dwOALirHGqjQ8+K/PX1fZj8Ls3dlWXTmDz8LIfe5KHY1MAoEeGpzVTiAkAp1YUh0EFe7+4qPozO0wtwKAa37Ztl4tXh4evf5sJHitHNvE28iGVTAGgbv7cBdHLYqavit67ai+kfHNC1cdvZdTGxS11XbVfTyveLyJ/N5h4PAAM0n77A9MZv/6mP5aOoVO8DufaKRjglLwwlSGAx+DT9XES+M6prCAAtbIthS79MoMOEq7y8tQzDXuAtZ2Vp1bAG3htFdpdQEtTAZBFh0K1OzABwEYDnE+ws4WqjXtqDxVvIsVBZru5QB/f0YgxpagrfXAe0WN/ScoWywwo1MoCcLOMNK/937UzL/beXky0jV5LRW8AMAIxn5wYwMNl/UKHt5HyUHdK//u/4bQ56tLLvY1qrpiArjodCZg1B3UxBvWzzRZiz4QCe3VSKvQcV9h1UOKJtSovLfvoX2iY4Zi+lZb0a+PAa3950fxeRW2PHq9OAUqq7dtvn5dws21r4SSnGLAuWXue43Aw8O6gB2hnsLcYu34MFm/RvI8uJuCjgMwDoUNoylrbGCACkNRnsYh4JVR3yXBFWbXd8nZ1QX9GVLmpXC09cwACmykIwEpRBis8A4FTGiMiU6DlVAoBSig4eZL2y/771QEOFpUfQbnK+7uzvQdOWTRxfvwY+uFr/2h2+uBgrvuCnMzjhJ2n7eF99bD4SkfbxAMCw7QeCm/JPPc386ABufMWXyCfLqWRmAN/d2FRXLk0BwHl2EhHeGFZI7Bvg46CPfhzE+XMK8f53ySPg3DGhCXKzKn8N0xgAlTyHjs5aKcW4fV76BCq84u02Y7dhn1k1BE3rZhiSApYeVvhxv/6eIydL0LCWs/uCFcMa6u4YzADw+zbZmNQrB7nZ9vo4UK7AY2JESg/xv4G+zxTqThEBfAI4DIaeN49wE0UDgKRFZO8IVO54fR8eM7j4qZsl+GRMHrigRvLWlwcxYIGe49krm4EZAIacXguT++g3jU6V1vqfP2JPWeVjZEAA4FDpQFoRWRQNAHr7kLsnMOGT8YspBSgo0T/JVooOAeBqmR4RkfFHAaDd+XP3H6h5asmWMlz5kt70y4GtHN4QHZqZE4qYAeDm7nXBP7eS5m+Az0WEbOo/LbhS6kqNtcut3hzV7z+/EOu+0m/+erbKwsJB8V0PkwWAqzrUxr29yEjvTpL8CeDgTxKRbREABO70sfnHQzj7af3mjzbyNSMagRdA8YRGIxqPYsXvN4BXe4wUAMBVIjI9AgAmRQiUl/e6FXvwzMbKlraaGcCcgQ3wu59b26GWf1GGyxbrPx9/65mD0b92H61m9glIIwCQrnaEKKVaAPjK3QvNWW0e386YWlDpeFQnU/D0hfXRy+alz+JPSzFqqf7u4O6eObgmBICdBdkmIicRAGTwIp9PYHL/W/vBv4j8qlkmJvfJRdvG9h0+5m8qxbjlIQBcLlpjAuAOjY7MZVv2q/ectRs1MwRnn5CJPm2yQQA4lTkfH8DElXrz8X3n5mKkB57DyfgE8Br76+t9vQuIVXNPAoBPf5Xj8Zu6vgR/+bc+Icejferhj6fXcoonXflkAICDyL9Zfy/hejLmDUwgAGj+rXL0rY+/V4LbXwsB4BIc0wgAbsXN0qi5bN+/6rH7iEhP4RvAkc5XEgDe+jU56j/xwret3odp7+uDR2ZeWB/92rrHczX5BGytsgCY8PJezN2gjx9YNLgBepxobUewgp4ZAMZ0rIO7erh3UDUyBCVhD3CwygKAdwi8S4iVZUMbonNz56eK2HbMAOCVpTFFAIAqC4BLFhbh9Z16H8I3RjTCaU3t2xPM3gQhAKzekUn+/aynduPTfH3iLfr30c/PrYQAcKtBn+u3fTQfuw/o/Qi+uC7PsUeQ0VBDAPi8gGz+nW/KK4w50S5Tdrv95AfjtHv07RMTr4bMDAHvHCgZAuRogSGMOZzWr7KXTwgAuyuRYDleCHV/arfhU5xgkwlXIyQ2X5uHJnWP+fmFAEhYnfYq3vTqXjz9of4YZ6+296WeGlAf/U8+Zj8IAeC9jo+2aHQd7GN3tpqOPd6FALCltsQK0YJHS14qSawTaggAH1fn2mV7sGKredhV+RGA/vROhVE+iYZd03o4Y8AxHqwQAE6172P5iuCKqBPf4IVFhpFEZBAjk5gXEgLACy361EbXGQX4ouCwrnWSSNBnzwsJAeCFFn1qw8yO/tzgBjjHg4sgDruaAKC8yt0FMLauxf8a50bYOCYPzTziEawmANhOAHA35v7+1KenPbbZjd8fQo9Z+ngCxhDunOCdP101AcAqAuAzAG0DWj/X3Zg5g3ZqnonlQ70jkqwmAJhOALzIPHSuVyagBugJTBDEipcnALb9p8XFWGbAEJJm/gA3EAB3AfifgNbPdTftpxaAFPKxMrVfPVxyaq0KniHuE9y6hZmRRKUZAH5HAFwCYJHrlQmggS35h/Cbp4zJJDaMzsPzm0vxtzU/WRif7F/Ztu90eNUEAE0JgBMB7HCqoGSUf/jtEtytLXB0/2QR6doiEy9+dsy6SKsgI4zPOiGx/W01AMAuETkxEhxKboDmyVhUJ32SSoaUMnaFvgHLhzU05AG0aiMZAAg4MmieiAyLAGABgD9YKSWZv5NEimRSRlI/W1AcQ7cSKUcyyJXDGzm2DyQDAAFSxFA9FZyBEQCkfP5fMzdwhpSvvaIxhr5QhG279ZtDzpROokw1E8sEFg/Q1QAA7URkSwQAxwPYlcwnPF7f9B84c1qBIY9whE2Ei3/+3N2GVPNsm7d98y6uDzKP2ZE0B8AOEWlNPUSTRDHB0Gl2lBN0mXvW7MdDbx8LJ4/uPzoUbPWOgxiyqAhmF8nDflkbD/e2d1uY5gCYIiJjYgEwCcAtQS+uVX/8trefmq+jVGM9Ps1bxuZVYv0mUAgYM7HLIJLmAOgtIitjAUCKOFLFpZSYJZDiIC9om13BKhItfPqvWFKMpZ8bO5zQG5gM4VbhY9ev3IvZBhZHPw1BAW0C8wE0E5GK41QsVeynAE5JFQR8s/cwOk3fbfjt5xgXXNIA57bWn/NLyhV6zy0EiaiMhIkn11zeGDwhmIlZ8Ol1netgfJe64FbCjMTSrE16Ou0uOYKCA0cqxsdxRktAAJgmItdE+o0FwH8DuCdVAGAW/8fxMfpn/VWNK/z7jWRX0WH0mm2+KSQzyeyB5qkQzQAQ6YtHz8/GNQFPIUay/tty3PHaPny79whIa0uvJiaeiCcBAeAsEWH29wqJBcBx2mnAfXCdSxSt3FqGoQb5gyLNkquPnH3xZM2ug2AM4RETvTM7Bzn6jcQKAKyz9I8N0bVl5UBUZjy5d+1+THmvxLRfszE3z62Bj0f7ljGE3W4WkUobfaOEEUsAMGNY0oRpWrrPKKh4eoykUe0MfHh1Y5BP2ErMmERYb+5F9dH7JGMuATsAuKFrXdx61jFWUia9ImvJ9kJje4TVWANIGDFRRB6OHocRAHoBWGU1WD9/N0seFenz9t/mgN9iuzJ62R4sMsj+EY9NZNKb+/GP/5ifJth3JJnlZwWHcMuqfXhzl7uMJz4DgLdkTBlTiV3TLGnUB5yfXQV7Wc4qeQRTx/LbT7u5XeH1cJ95hdjwfeVNYTwAPLBuP+5bGx8A3H+M7lgH09aXeJLt5NQmNbHm8kZ2p+W03MMiMjG2khkALgUwz2kPbsu/+005LlxQFDdYdErfehh0mnMWMJ4oes0qRH4UMzlp3xkQYiRkImXgKjODlWubCPL8E0xOJLumoEW9DB1ga0dlNssQQW62oNNxmRjn4M3mYBxEPpNHfmkXANwE0jJYwSgdhDBn8HlzCg2p4yP9dz8+C0uGNEiY0pzE1AMXFB5NRz//Ynu0tJH++QYhx6GVNK6TgZHta+OCk7MTuom0aj+B358UkVFG9Uzfo0qpIQDmJ9CZ4yrc7JE5fGeR+ebJLom0VedMTsEkFZTVlzXCGT+zf+Dhs8/UtkaZStgeLZPXdqyDiV3rHA1DtxpPAL9zY9JWRAzveuIBgCdc39PHMlkEX/tGbB/RyvGK/o2LSH8/vuK3jW8CnuediNmtJI+D/+xdD60tWM6d9OVR2Uo5gmx9AiKFlFI9AFSkFvFD7C7+iDNr48Hz7F3i2Bkn7xeYpfzxvs5Tv7yyrQyXPn+MpZzWwDvPycFlZ9ZO+NNkZ8wJlqEDBdPHF5jVt4S/X1Sydhef5/RZA+tXmF5TQWjoafNofoUZl2N74Lxcx84mAc5jvIg8Eq8/S7VqPoPcELrPw6KNhIaSPzxXhB0WBhNy/v7j/Fzbd/hBKZbGntOb1sTgBE4jQY0RwAYAHSKXPgm/AVhRKTUBwENeDJ478cuXFFdciBgJjSG9WmeBd/dnOtigeTG2NGqDu+kuIrLeak6WbwANADSYvwWgs1WDVr+PfLEY674ur7jEYQbv/8rJqDgq0QjSrWWmo5wBVn1V498fFJGb7MzfFgA0EDB8jBZCzz4FdgYYlnGsAX6uO4qIrczXtgGggSAp2cUcq6D6VuCic/EJAlviCAAaCJKSXt7WbMJCuvTwVipJBAD8BLyTqg6kVhNO499nisjlTufnGADaW6ANAKYgN3epcTqSsLwbDXBvRk8ffQIFi1YTAoAGgp4AVlQlcgk3Gk7hugzr6yoi/KdjSRgAGgiGApgTdM5hx7NM3wq0SfPJ35joFF0BQAMBYwkYUxBKsBrg676fiLzmplvXANBAcC+AW90MJKzrSAO84h0gIi87qmVQ2BMAaCD4O4A/ux1QWN9SA4x4GSQiSy1L2ijgGQA0ENwG4G4b/YZFEtMAX/sDReSVxKrra3kKAA0EYwHQ9dh93havZpke7dAXrb+I8E7GM/EcABoIyDr2THhv4Nk6bQPQV0RI6eep+AIADQQdACymL7qnI65+ja0BcLGIMKjTc/ENABoISN1J+hkajUJxrgH6YNxs5dThvNljNXwFgAYC7gXu1I6J5uG4bmaRfnUZvXOViPhO3+c7ACJrozmYzmRgb/qtl6czegPAZUZBHJ72ojUWGAC0twEvj+4jukPzsW45GaxAxtZHRMTYX84HBAQKgKi3wVkAnkglMgofdOukyWUAxorITieVvCibFABobwNSe4wD8BcADbyYTBVsYyuAG0WEhN1JkaQBIOptkKeB4GoAzqM+k6I2151+D4Cm88dFxF1MucuhJB0AUUAgVS0vlOh3aMza4HKyKVD9BwAPAngsEecNP8afMgCIAkJTANeSyhQA3w7pICTfonl8tl1v3aAmnXIAiAICCYAGARgJ4OygFOJhP7y1e0nb7K4WEWfEAh4OJF5TKQuA6EErpUhdx3B1AuLUgHSTSDc8vr0JYCFzMIiIcXarRFr2qU6VAEAMGMhy1QdAbwC/SQGfRLplkVOJzhnLROQ7n9bKl2arHABiwJCjgaArgG4MhgTgXeYoY5V/BYAxd7yWXUfvaD9t9b6selSjVRoARspRSvH28RcavQ2zobQC0ELbUHJTGZ9cENgDgDdv3LF/C4DGGZ7XNzPiVkSMkxb4vVI+tf//c5uDflhiUokAAAAASUVORK5CYII="},1059:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAFOklEQVRYR9WZa2wUVRTH/2dmp12QQA2tsaX9omDTdjYS0ogmPmp8VEP4YGL5oAkFlJnOthjFRElMpCUxPhJBhc50RgXB+EUS1CA+icVojBjQyE7LS7/ISwPGSlppu5055m47uLtu291t0e182ezeO+f87jnnnnPuXcIMeChfxqZ3WS7ti91KLN8J+PVMdAMBFQCuGpM5wMBZYj4BSIeYvO4LJZGvd68gL1edOUNqdux6GdRGxA8DVJaskIBhBl0UvxF4LgNFqUB8npne8cDbHD3yc7awWUNqdm+5DO85EFYSSAbAAH3H4E8B6Sv25KNdRvWZZMUt1vEFJHs1gH8bgRoBvknwM9gDY5cH+RlHrz03GWxWkK1ObI0PbCbQPADCjbavSF326tqTkylIHtd39C6S4n4LAboICwb/KQHrO7XI9onkTAi57rWTxV54yAGwUliOGbtoBBvMVvXXXODS50Y73Ws5hBeIEnIFwy55sFjb+tiioUxyx4WMdrpzWOG9BGoA43eG1GzptfumApf+rmH3LiP4O0GYz+ADFKflZqvanz4vI6Sw4Eh48BMByMBJj/n+XAI9l4UkNiLRxwQsEqChwfB96RbNCBl13J3CxQJQHhpu2LZuydlcFOc6t23r9xVecdEBASpcb2pqc1rWSBUpNgmD3hQuHgEvvVIWTF+IsGgIdFC4nsCPJG+mFEsm0gx5Rwk0l1laPt0xOJmFEzFK/l4GX/RYrgnSUwqkYce2E9FqZuy0dHXVZEKvxLhhu28RoZmZd1h6ZM1oYRh7RgMYxwk0iDgWTjXN5LsAkZ6g4CcGhz1GtQi3y5CG7W4hwuMMbLY09cl8lUzHe4bjvkzAema8YunqEwlI0SyU9bnnACr1FKk6m0qyakd3eLZ3TeWI54UCsNCIdDrIc5p9qBQoKg3GZCU87MUvnnL0+vhkCxGVSY77xwG+cL5ELU9AGs6ROwjSAYAOmlrdzRMJabV7lzD8diY00r8aCBwzNbXGMI9cTSHpFwBz0mQNAPS+51OH3TJxSY06Pd8CvJThNyQgo3ZPO4g3MrDJ0tSN40G2OLE1EqgLgAKGD8IpAJeC+UzUba2tiza1u0VlFfQewNclyRLAleI7g/+SSHqoc23dB+PpMhy3g4BnwSQ+BWTsQxAtY0j3WFrt/kwvtlmxBl+W9gMsQ4Aq3GGuzq2GR9/oWQifnwfwIBhDvk+3dBl1P2TSZzi9dxP8z8G8b8zd7gmR7X1PqUxvtwIBUSd2GKAlYLxk6urTk8XVRONBmiHgi05NvSvTXNHmSXL8tKh6o5Z03H4ClE5NLc64KvPHagrJxwDuKy4pqdiyouqyi/OBTcSsLJ8Bcdj3Rqq6jMUpfWggs9VxhxiIB5Cigb1ganUpnXYwucWJPSCB9gD8kalFluUDlv5O1I59CaLbwdxo6pHPMsmMOj3nAS6dUZBZuht/FPfPW7Bl/f/gbsPJZuO4YhcuZuBFS1M3TMXl+W2cbFLQ67EGn4MUBFMh3vTq2shvucBOKQVlm8wN232UwBaIQoA4P7OoKmPnEgaztNfS655qaO8O1ZaX7QElmtjgmVoyz6Us6l2xelmS2gH/XoCUVEvyYVOL1IvzEUI4A8LcaSuL+TQYTZu/mVVSNLuKFEkKQC7N4lNvr7xxQHxv3XZwflyZdTmlyR6GPXk4/wZDCC34Vk1Azoimd9SaBX58GLXmDDiIJQK+0I+0/7RlBX45IEBnxDVLoscs9AurwO0Ff/WXXM4K+hI1GbTgr6NTYQv4Yj+9b/wv/yL5G4YSbO2glmsEAAAAAElFTkSuQmCC"},1060:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAABqCAYAAABUIcSXAAAQv0lEQVR4Xu2df5RcZXnHv8+9s4sJ2bSYlqCHoByVeFICf6gVgVJjxeKBBgM6zp2EBCwS8IBxd1aEFmQpCBJ2dhPJ4ZdUSEjmjiMQtHKaCk0oYqXHek4lxcMaAQWKbNsI2d1kk5m59/E8s3c2d+7cmbl35t6Z2d15/0v2ve/7vO9n7nuf932fH4QZUgb27IlMjI5+kE1zOROdQsDJYD4JwGIQLQLwxwCOcQznCIC3wbwfwCiIXmXgFWL+FSnK3gWLF784sGJFfiZMAbWrkP3bth2Lrq6PM/NfguhsAB8C0B2wvFkAPwfzs0T0b8jlnh5cu/ZgwH0E0lxbgerftu147uq6CMwXg+icEMDUmrQsmJ8B0aOUyz02uHbt/9Z6oFl/bzmoK+67r2tBT89KhehyBj4FQGnW4Gv0YxLwI5P5gYnx8R/cv359rpVytQzU9Vu3Lsp2d18F4OrCd8Z/GQXwGwCvEdF+Zt5PQM4EJqQpBVjAQBcRLWJm+YYtAfDeBvra0p3N3nP7unXyvWt6aTqoRCr1JwBuANEVAOZ5HPE+AD9h5ucU4PlDkcjeu6PRAhC/5UuZzIL5+bwoJKcD+CiAswB8wGM7k2C+H8CtyXj8/z0+E0i1poEqKAeRyPVM9BUAx9aQ/jCIdsE0n1BNc9fGNWteD2S0FRq5dvv2Ew1FOQ+Kcj6YzwPwjhr9HSTmTcjnb2+W8tEUUH2p1BoiugPAu6tOAPMeVpSHIvPm7dx44YXjYcKp1Pa13/9+T35ychUxXwbg4zVkeIOZvzYUj28PW9ZQQfVnMiebhnEvTSkJlcpBBh5kVd08HI3+OuwB+2m/N5N5PxnGBgIEWsVVgIEfKap65WA0+oqf9v3UDQ1Uv67/LQObqwxwjIBhQ1W/NRyN/t6P0M2u25vJvFM1jC8z0AtgYYX+DxKwYVDT/jEM+QIHdc327QuPiUS+w7IXci+i5m4B823N/iA3OoEFRYjo7yxNtcutPSJ69Eg+/4W71qwZa7Q/+/OBgupNpf5MIdpZUYtifkqNRK7eGI2OBDmIZrd1bSaz1Mjnt4DokxX63mcyrxqOx18ISrbAQCXS6U+DOQNggYtwb4G5NxmPbw1K8HZoJ5FKrQPRMIDjXOSZAFE0GYv9cxCyBgKqL5VaT0R3VzhV2K0axrqwVewgJqOeNgqqvarKD/ATLs+bILoqGYvJ3quh0jCoRDp9HZhvd5GCGbh54cjILQMDA2ZDUrb5wwMDA8rY0qU3EnATgPI5Jbo+GYt9s5FhNASqX9f/gYEbXQQQjS4+qGlPNCLcTHu2X9fPZyDlphkScMugpn293jHVDarKm/SaaRjnD69Zs7deoWbyc73bty9XVFV+oHK2WFoaeLPqAmV9k+4tE4R5RDXNT87W75HXH5B1JPUUiJa6wFpfzzfLNyhLu/uhi+Lw31lV/cRd0ej/eR3QbK53TSbzp92GsRvAqY5xioJxgV9t0Bcoa5/0XJkKzjySjUT+ogOpFEkBVj7/Y5c3a8JkPsPPPsszKDlx6FbV/3TZzL6mGsaZc325q7Q6WOr7v7t8s/ZlDePDXk8wPIPqT6cfcTkWGjMN4+y5qjh4XbotBeNZpzYox02DsdhnvbTjCZR1wPqAo0Em4G/mmgruZVLd6liq+z8591kEXO7lILcmKLmqYMMQVbvkmJ+BgSFNu7lewefic326fhMBA46xHyRVXV7riqQmqD5d/xeX+6TdPSMj5872E4egf0xygjG+dOmTzuMmuc8a0rS/rtZfVVDWzezDjgbeUg3jtI7yUB9GS7l43nmQy8yXVLsprghKbBy4q+tXZdfnzJfOtlPw+qa8/qesU/eHHC28QbncKZVsMCqDSqVuZaK/L2mM+alkPH5u/SJ2nizOQCKVetJ5n0XM3xiMx29wmyVXUNZNptjM2RWInKqqy2f6pV+7/FQKl49TSpr9pvggmN/rdvNdCdQmEG1wDGo4qWl97TLQhuVgpv50WgPQy1OGmVkCdudN86ZNq1e/3HD7HhpI6PqQ9O9YtTYn43ExqSspZaAsC9bXHMaRY2B+30yzcag0VwOZTPe4YfyQgbMImG+rxwDkV31JMh5/3MNcN1TFWrlecmyEJ7uz2SVOi9wyUAldlzXyFrsEBNw8qGlO/b8hIVv1sAXpXwH8eSUnBAYOEdElyVjssbDl7Nf1AZ66cLSXG5OadquDwdF/isF+z8KF8jbZbcEPdpnmkm+uXv1W2EKH3b4XSEUZmgVLTNEUw3jVoQ+Mjo+NLbE7JpS8UX2p1MVE9Ih9whjYMqRp14Q9iWG3XwWSmK+NM/AOxzKIZsHq0/W7aMpZYrow82eH4vFHi/9RAiqRTu8Cc8kO2VTVD7SbBatfqDUgvRRR1TPypvlXzPxwK2CJRa5iGOIIMV0I2DWoaZ8uA2U5kf2u5EKQeU8yHnezrvE7Vy2rXwWSuIT+WiDdEY0eEAET6fRFrYKV0PU9Dlt3k3K5dxWd6abfqISuXwngnpLXj2jdUCy2rWWz3GDHVSAZAF6OqOpHipCKXbUKVl86vZaYnXaPVyU1rWDycBRU+U75sDp//vGt8qpokBHqgdRKWOJFYhw6JK6oR11+bCdBBVDWuZ4Y6h91ZiZ6PBmLrWp0wlrxfCOQasGSfZZimmffuXr1fwU9tkQ6vRPMn7G1m6Vc7p1y/lcA1ZdOX0DMcqllVzu+mIzHnZeFQcsWeHs1VPAsiDSv+6NKyyCAnyU1TfZhgZZEKnU5iL7tUCoukMvZAqhEKrURRF+1V1ANY8lMu8rwuE+aYOAzQ5omm96axQ2WqO0LDx9eNHDZZYdrNuCjgnUFIvtY+wtzZzIev3YKlK6L8cXHbH/el9S0U3z00fKqHiEV5fQHS9dltbnANsgDKrBso6a9EfTAE7ouV0t2n+KfJjXtTJKIKONvvilBMOzBNh5Kapp42c2IUmOfJF7sPS4OdZ5gJdLpDZZt/bRjeOGNUtXjBqJRCSgSaEno+oMALrU1mu054YRj5QT5VGYuMT9m5iuH4vH7ApUgpMY8bmYvBfM3/MJyg2QN4+mkpq0IY0hu2yQiWk6JVEoDkRi2TxdiPnMwHv9pGIIE2aYXSLbNrLwZnmFVhMQ8rkYiHwnrXq4/lfoYE8mnyP6dipPb6e2kqvbUG8chSBDV2vIDqdiONfk1YVV5kzwtl43MgcTBmGcYJREBxOKLEroud/frbI2PJjXthEY6C/vZeiDVgiXfHQAriehU5zfJejZ0SNMy6vqbjhuMrbL07QaRfb19Lqlpdg0w7Hn31X4jkGrBAjBp1XFGlGkaJOk/oeti3y9RZaYK8x4B9QKIltlm65Gkpn3O1+w1qXIQkDzAco6mqZAsUN8DcNTUmfmXsvSVvGZEdN9gLCYHtG1VgoTkA1bTIYls/en0vcy83v45ElCyu7ZHjrwtqWmlZmItRhYGJBssOV+TzWzEMcyWQLLeKFF4JJ5FsRwRUGLQMV3azT4iZEi+VPZm/V7dNPEyUAx8dUjTBpslVLV+5iIkmY8+Xe8n4M6SF8j5RrULqLkKyTOodlj65jKkgjLhYkLWdsrEXIdUTZloG/W8A2nqq+SunrfJhrcD6ajqkNB1lw1vGxwhdSCV6r7uR0gtPpTtQCrfoDhPiwBsbek1RwdSOaSK1xz9uh5nYEfJ5qpJF4d9uv4AAZc4zADEFrxgZuw0jvS6Cfd67+S1vWbWq3xx2MKr+ISuvw3gj2wTMachFTa7U0EqSwKCFa7iW2Xc0pvJzFMMQwJc2d1PfxtR1dPn4ps0fUhcybjF2mA13VysYFQD/BjMkvepWOp2P53Jy519aa1oLlYA1QIDzD5dX0lT0SKLb1SOgSuGNM3p1l/zEzFbINU0wGyFSbN1QrzR5qhwAIqyMvn5zz9Tk4ytwmyBZL0w1U2aW+Ek0K/rDzOwxjbnY6aqLhuORv/HK6jZBKkAqpaTgEXTGaAiVLebfl3/GQMftkGZTMZix4Ko5CKzErTZBsmT242lUDTVkS2h65Ko63gbiN8lNa16Nhyr8myDVFDLvTqyNdM11IqyJYm67GZZ/5HUtDNqLXuzEZK1ojnN9txdQ601sinO1okdO94DRfmFY7Pr6pggUCeXLTsxx/w+mOa5BHzZrw15Lfit/rsvZ2trV9yU8AV93/3uCjJNiYxSTPEjmQY2M/A0gFMU4HQGJBT1eyxPDPGaEBchibLSNtZCQQH2Hb6gWQFBrNCnckxSnHQDRONglgBOAqNmwEdrklpm0hUUpLoCglhKReghdhLp9LfA3GiQkRkPSea7rhA78mCFoFUHwPz+oIJW9en64wRc6PNXORVQiigPZsmRe/GgpslSOWNLQ0GrLA0k1DBwCV2X0Ge3uWTnlNNzMdQXKOIBKVnNfkvML5qK8gvFNPdxJPLSq8DI96JRiRUxo0tDYeAsUJIiLrTAip/LZNSTTHMYzGIIfxjMEgrtBSZ6nplfIqKXh2Kx171ufmcirUACKxbWzk6o0lD5BxKqtACqE/w3NFCBBv+19lWS6LgTTjtAZIGH0y7K1glQHxyl0ALUF5bATsqHwEiFmvLB2pRJlupOEpUGkIWeRKUoWyctUf2UmpaWSETsJPqqD1TTE32JmJ3Uef5gtSR1XlHETjJKb7BamoxyWmV3seYs/K2T3rUwDdXSu9YbEMzrvU/Zz6iTMNn9zWqrhMnTmmAnBXkJrbZMQW77Zl1nBXly/sSYgZsXjozcMttT7MmJw9jSpTfSVI6N8lWqgdTjxUmte+mzU7E8EO52yXYt1XarhrFupsWn9aYyWN8jVZV45W6B/E1m/lIQQSoDASWDsrTBTFnW66kRvwXm3tmWcs86BR925iu0IE+AKOo31XilH0hgoGz7rJ0u2a+n+md+So1Erg4reqTXt6DReoVLv3x+izP1na3dfSbzKj8pxmvJFCgo6UxOMI6JRL7jkgW7KItct28B821B2WDUGmRQf7dsHCSYlGSmsae8m+5CslUfyee/4DW1uFfZAgdl0wjlIHezi7FkscoBAjZFTHNzu+emum7HjuPyirKBp9LcFW0RnXMs0f43eMlS7RWOvV5ooKQTuSIxDeNel4TLdhkOMvAgq+rmdkt/JBasZBgbCJDQ4iWZve0DkITHiqpeWSs7dT2Ais+ECqrYiZV4+Y6ynL5OyZn3sKI8FJk3b2erkreIV0V+cnIVmealjhCubvP8BjN/rVqi40bgNO2NsnckNhiIRK5nIsmIWfHXaT1zGES7YJpPqKa5K2zV3jryOQ+Kcj6Yz3MxYytf5pg3IZ+/vVKC46AANfWNsgtd+CADN4DoCoc3R7WxSbaynzDzcwrw/KFIZG+94b4ljsP8fH65CZxGROI9clZFLbVcokkw3w/g1mYrQk1Z+twIWBa5V1kalD35pdcfo/hXvQLgdSLaz8z7CciZgLjzQAEWMNBFRIuYeRGAEwGc7AhT7aevLd3Z7D3OtKteG2i0XstAFQUXx4QFPT0rSVG+CGZJb640OqiAnjdB9CSb5rcnxsd/YM/gGVD7vpppOSjHd+x47uq6CMwXg+icSnlyfY3QX+UsmJ8B0aOUyz1WzC/or4lwarcVKKfyYXZ3ix/VOSA6G8CHQgAnflc/B/OzrCjPKNnsnmYpB35xti0o50AkwszE6OgHwXyaOLsV8rszn1T45hDJN0gCi9jDgksTRwC8DWZJTTQKolcJ+A0zj5Ci7F2wePGLAytWSPbQti9/AAAY+iwK5QXjAAAAAElFTkSuQmCC"},1082:function(e,t,i){function a(e){this.$style=i(1006)}var n=i(22)(i(959),i(1100),a,null,null);e.exports=n.exports},1083:function(e,t,i){function a(e){this.$style=i(998)}var n=i(22)(i(960),i(1092),a,null,null);e.exports=n.exports},1086:function(e,t,i){function a(e){i(1017)}var n=i(22)(i(962),i(1101),a,"data-v-635d7976",null);e.exports=n.exports},1092:function(e,t,i){e.exports={render:function(){var e,t,a=this,n=a.$createElement,r=a._self._c||n;return r("div",[a.banners.length>0?r("div",{class:a.$style.swiperContainer,on:{mouseenter:function(e){a.showNavigation=!0},mouseleave:function(e){a.showNavigation=!1}}},[r("swiper",{ref:"swiper",class:a.$style.swiperWrapper,attrs:{options:a.options}},a._l(a.banners,function(e){return r("swiperSlide",{key:e.id},[r("a",{class:a.$style.swiperItem,attrs:{href:e.url,target:"_blank"}},[r("img",{attrs:{src:e.image,alt:""}})])])}),1),a._v(" "),r("div",{class:[a.$style.navigationButton,a.$style.navigationButtonPrev,(e={},e[a.$style.show]=a.showNavigation,e)]}),a._v(" "),r("div",{class:[a.$style.navigationButton,a.$style.navigationButtonNext,(t={},t[a.$style.show]=a.showNavigation,t)]}),a._v(" "),r("div",{class:a.$style.pagination})],1):r("div",{class:a.$style.swiperContainer},[r("div",{class:a.$style.swiperItem},[r("img",{attrs:{src:i(900),alt:""}})])])])},staticRenderFns:[]}},1100:function(e,t,i){e.exports={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{class:e.$style.wrap},[a("div",{class:e.$style.rectRight},[a("div",{class:e.$style.rightTitle},[e._v("热门推荐")]),e._v(" "),e.homeBanner.length>0?[e.homeBanner.length>0?a("HomeBannerPc",{attrs:{banners:e.homeBanner}}):e._e()]:[a("div",{class:e.$style.swiperItem},[a("img",{attrs:{src:i(900),alt:""}})])]],2),e._v(" "),a("div",{class:[e.$style.rectRight,e.$style.mgt45]},[a("div",{class:e.$style.rightTitle},[e._v("活动推荐")]),e._v(" "),a("a",{class:e.$style.pull_new,attrs:{href:e.activityInfo.url,target:"_blank"}},[a("img",{attrs:{src:e.activityInfo.image,alt:""}})])]),e._v(" "),"visible"===e.liveInfo.visibility?a("div",{class:[e.$style.rectRight,e.$style.mgt45],on:{click:e.goLive}},[a("div",{class:e.$style.rightTitle},[e._v("极客LIVE")]),e._v(" "),a("div",{class:e.$style.livePreview},[a("div",{class:e.$style.liveCover},[a("img",{attrs:{src:e.liveInfo.image}}),e._v(" "),a("div",{class:e.$style.liveStatus},[e._v(e._s(e.liveInfo.status))]),e._v(" "),a("div",{class:[e.$style.livePlayer,"iconfont"]},[e._v("")])]),e._v(" "),a("div",{class:e.$style.liveTit},[e._v(e._s(e.liveInfo.title))]),e._v(" "),a("div",{class:e.$style.liveTime},[e._v(e._s(e.liveInfo.time))])])]):e._e(),e._v(" "),a("div",{class:[e.$style.rectRight,e.$style.mgt45]},[a("div",{class:e.$style.rightTitle},[e._v("学生认证")]),e._v(" "),a("a",{class:e.$style.pull_new,attrs:{href:e.studentCertUrl,target:"_blank"}},[a("img",{attrs:{src:i(1055),alt:""}})])]),e._v(" "),a("div",{class:[e.$style.rectRight,e.$style.attention,e.$style.mgt45]},[a("div",{class:e.$style.rightTitle},[e._v("关注我们")]),e._v(" "),a("div",{class:e.$style.attentionWrapper},[a("div",{class:e.$style.attentionHeader},[a("div",{class:e.$style.attentionQrcode},[a("img",{attrs:{src:i(1054),alt:""}})]),e._v(" "),a("div",{class:e.$style.attentionTexts},[a("div",{class:e.$style.attentionTitle},[e._v("扫码关注极客时间服务号")]),e._v(" "),a("div",{class:e.$style.tips},[a("span",[e._v("「技术干货」")]),e._v(" "),a("span",[e._v("「免费资料」")]),e._v(" "),a("span",[e._v("「专栏优惠」")]),e._v(" "),a("span",[e._v("「学生优惠」")])])])]),e._v(" "),a("div",{class:e.$style.attentionFooter},[a("div",{class:e.$style.attentionMsg},[e._v("更多干货和福利,可从以下平台获取!")]),e._v(" "),a("div",{class:e.$style.attentionIcons},e._l(e.linkList,function(t){return a("a",{key:t.link,attrs:{href:t.link,target:"_blank"}},[a("img",{attrs:{src:t.img,alt:""}}),e._v(" "),a("span",[e._v(e._s(t.text))])])}),0)])])]),e._v(" "),a("div",{class:[e.$style.rectRight,e.$style.attention,e.$style.mgt45]},[a("div",{class:e.$style.rightTitle},[e._v("商务合作")]),e._v(" "),a("div",e._l(e.businessList,function(t,i){var n,r;return a("a",{key:i,class:[e.$style.otherLink,(n={},n[e.$style.blue]=0===i,n),(r={},r[e.$style.green]=1===i,r)],attrs:{target:"_blank",href:t.href},on:{click:function(i){return i.preventDefault(),e.jumpToBusiness(t)}}},[a("span",[a("img",{attrs:{src:t.img,alt:""}})]),e._v(" "),a("p",[e._v(e._s(t.text))]),e._v(" "),a("i",{class:"iconfont"},[e._v("")])])}),0)])])},staticRenderFns:[]}},1101:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"column-card-wrap",on:{click:function(t){return e.jump(e.data.id,e.data.column_type,e.data.had_sub)}}},[i("a",{staticClass:"column-card-cover",attrs:{"data-seo":"",href:e.columnLink(e.data.id,e.data.column_type)},on:{click:function(e){e.preventDefault()}}},[i("img",{staticClass:"column-cover",attrs:{src:e._f("resizeImg")(e.data.column_cover_small,82*e.radio,108*e.radio)}}),3===e.data.column_type?i("span",{staticClass:"icon-video"}):e._e()]),e._v(" "),i("div",{staticClass:"column-detail"},[i("div",{staticClass:"column-detail-hd-wrap"},[i("div",{staticClass:"column-detail-hd"},[i("h3",[e._v(e._s(e.data.column_title))]),e._v(" "),"home"!==e.type?i("i",{staticClass:"iconfont"},[e._v("")]):e._e()]),e._v(" "),i("p",{staticClass:"column-detail-author"},[i("span",[e._v(e._s(e.data.author_name))]),e._v(" "),i("span",[e._v(e._s(e.data.author_intro))])]),e._v(" "),i("p",{staticClass:"column-detail-info",class:{order:"home"!==e.type}},[e.data.column_unit?[e._v("\n "+e._s(e.data.column_unit+" | ")+"\n ")]:e._e(),e._v("\n "+e._s("home"===e.type?(e.data.sub_count||1)+" 人已学习":e.data.column_subtitle)+"\n ")],2)]),e._v(" "),i("div",{staticClass:"column-detail-buy"},[e.data.had_sub?i("div",{staticClass:"column-detail-had"},[e._v("已订阅")]):i("div",{staticClass:"column-detail-buy-hd",attrs:{"data-type":e.iOSAppSwitch?1:e.data.price_type}},[1!==e.data.price_type?[i("span",{staticClass:"column-detail-nprice"},[i("i",{staticClass:"iconfont"},[e._v("")]),e._v("\n "+e._s(e._f("columnPrice")(e.data.column_price))+"\n ")])]:e._e(),e._v(" "),i("span",{staticClass:"column-detail-nprice",class:{disable:1!==e.data.price_type}},[i("i",{staticClass:"iconfont"},[e._v("")]),e._v("\n "+e._s(e._f("columnPrice")(e.data.column_price_market))+"\n ")])],2),e._v(" "),"home"===e.type?i("button",{staticClass:"column-detail-read"},[e._v(e._s(e.data.had_sub?"立即学习":"试读"))]):i("span",{staticClass:"column-detail-subcount"},[e._v(e._s((e.data.sub_count||1)+" 人已学习"))])])])])},staticRenderFns:[]}},1236:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(65);t.default={name:"columnPcItem",props:{data:{type:Object,default:function(){}},noBorder:{type:Boolean,default:!1}},data:function(){return{ratio:window.devicePixelRatio>1?2:1}},methods:{jump:function(e){this.$emit("jump",this.data,e)},prevRoute:function(e){this.$emit("prevRoute",this.data,e)},columnLink:function(e){var t=e.id;return 3===e.column_type?a.a.pathToAbsoluteURL("/course/intro/"+t):a.a.pathToAbsoluteURL("/column/intro/"+t)}}}},1351:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(65),n=i(1954),r=i.n(n),o=i(1953),s=i.n(o);t.default={name:"homeColumn",components:{HomePC:r.a,HomeMobile:s.a},data:function(){return{mobile:!1,isInApp:a.a.isInApp()}},destroyed:function(){window.removeEventListener("resize",this.checkMobile)},created:function(){this.checkMobile(),window.addEventListener("resize",this.checkMobile,!1)},mounted:function(){},methods:{checkMobile:function(){var e=document.documentElement.clientWidth||document.body.clientWidth;this.mobile=e<860,this.$forceUpdate()}}}},1352:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(99),n=i.n(a),r=i(219),o=i(654),s=i.n(o),l=i(1086),d=i.n(l),c=i(65),p=i(784);t.default={name:"home",components:{TopNav:s.a,ColumnCard:d.a},data:function(){return{nav:[],list:[],isInApp:c.a.isInApp(),isShowCoupon:!0}},computed:n()({},i.i(r.a)({loginUser:"loginUser"})),created:function(){this.getHomeMobileData()},methods:{jumpList:function(e){this.isInApp?c.a.notifyApp({type:"jump",path:"views/webview.js",data:{url:"https://time.geekbang.org/library?category="+e.id,backOnce:!0,title:e.name}}):this.$router.push("/library?category="+e.id)},listLink:function(e){return c.a.pathToAbsoluteURL("/library?category="+e.id)},goRegister:function(){this.$ga.sendEvent("pc_nave_register_btn_click","click","pull_new"),window.location.href="//account.geekbang.org/signup?redirect="+encodeURIComponent(window.location.href)},hideCoupon:function(){this.isShowCoupon=!1},getHomeMobileData:function(){var e=this;p.a.getTopList().then(function(t){e.nav=t.nav,e.list=t.list}).catch(function(e){console.log(e),alert("请求数据失败")})}}}},1353:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(220),n=i.n(a),r=i(43),o=i.n(r),s=i(99),l=i.n(s),d=i(219),c=i(634),p=i.n(c),u=i(784),f=i(674),h=i.n(f),m=i(673),g=i.n(m),v=i(766),b=i.n(v),w=i(1900),x=i.n(w),y=i(1082),A=i.n(y),k=i(65);t.default={name:"columnPC",components:{CommonHeader:h.a,CommonFooter:g.a,ReturnTop:b.a,ColumnPcItem:x.a,Ads:A.a},head:{title:function(){return{inner:"极客时间-提升技术认知",separator:" ",complement:" "}},meta:function(){var e="极客时间是一款由极客邦科技倾力打造的面向IT领域的知识服务产品,旨在帮助用户提升技术认知.板块包含专栏文章、视频课程、新闻、资讯、直播、图书、商城等。内容覆盖IT从业者的全生命周期知识技能图谱,邀请左耳朵耗子、王争、杨晓峰、winter,丁奇等顶级技术和行业专家为你讲述技术本质,解读科技动态.";return[{name:"keywords",content:"极客时间,IT,职业教育,知识付费,二叉树,极客Live,极客搜索,互联网,前端开发,后端开发,编程语言,人工智能,区块链,技术大会,技术管理,产品,研发,测试,运维,数据库,架构,微服务,实战,技术专家,Java,iOS,Android,Linux,Go",id:"metakeywords"},{name:"description",content:e,id:"metadesc"},{property:"og:url",content:"https://time.geekbang.org/"},{property:"og:type",content:"nave"},{property:"og:title",content:"极客时间-提升技术认知"},{property:"og:description",content:e}]}},data:function(){return{loading:!1,scrollY:0,curBannerIndex:0,pauseLoop:!1,loopBanner:null,location:window.location.href,scrollTimes:1,maxScrollTimes:3,curCategory:0|this.$route.query.category||0,curSort:0|this.$route.query.sort||1,curSortOrder:this.$route.query.order||"sort",curPage:1,pageCount:1,pageTotal:1,currentItemCount:0,categoryList:[],columnList:[],columnMap:{},hasActivity:!0,isShowCoupon:!0,benefitsImg:i(1862)}},computed:l()({},i.i(d.a)({loginUser:"loginUser"}),{sortOptions:function(){return[{id:1,alias:"def",label:"上新",order:["sort"]},{id:2,alias:"sub",label:"订阅数",order:["desc"]},{id:3,alias:"price",label:"价格",order:["asc","desc"]},{id:4,alias:"activity",label:"活动",order:["desc"]}]},pageSize:function(){return 10},isLastPage:function(){return this.curPage>=this.pageCount}}),watch:{list:function(e){this.loading=!1},"$route.query":function(e,t){var i=0|e.category||0,a=0|e.sort||1,n=e.order||"sort";this.curPage=1,e.category===t.category&&e.sort===t.sort&&e.order===t.order||this.getList(i,a,n)}},created:function(){this.getList(this.curCategory,this.curSort,this.curSortOrder)},mounted:function(){this.listenerScroll(),window.addEventListener("scroll",this.listenerScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.listenerScroll)},methods:{scrollToTitle:function(){var e=k.a.offset(this.$refs.mainTitle);window.scrollTo(0,e.top-this.$refs.header.clientHeight)},listenerScroll:function(e){var t=this.$refs.footer.$el;this.scrollY=window.pageYOffset,t&&t.getBoundingClientRect().top1&&(t=e.order[1]),this.$router.push("/?category="+this.curCategory+"&sort="+e.id+"&order="+t)},bannerRoute:function(e){window.open(e.url)},bannerLink:function(e){return e.url},categoryLink:function(e){return k.a.pathToAbsoluteURL("/library?category="+e)},showCoupon:function(){this.isShowCoupon=!0},hideCoupon:function(){this.isShowCoupon=!1},goRegister:function(){this.$ga.sendEvent("pc_nave_register_btn_click","click","pull_new"),window.location.href="//account.geekbang.org/signup?redirect="+encodeURIComponent(window.location.href)},prevRoute:function(e,t){var i=3==(0|e.column_type)?"/course/detail/"+e.id+"-"+t.id:"/column/article/"+t.id;window.open(""+i)},columnRoute:function(e,t){var i=e.id,a=e.column_type,n=e.had_sub,r="";3===a?(this.$ga.sendEvent("pc_nave_course_btn_click","click","course_title="+e.column_title),r="/course/intro/"+i):(this.$ga.sendEvent("pc_nave_column_btn_click","click","column_title="+e.column_title),r=n?"/column/article/0?cid="+i:"/column/intro/"+i),window.open(""+r)},jumpToIntro:function(e){var t=e.id,i=e.column_type,a=3===i?"/course/intro/"+t:"/column/intro/"+e.id;window.open(a)},columnLink:function(e){var t=e.id;return 3===e.column_type?k.a.pathToAbsoluteURL("/course/intro/"+t):k.a.pathToAbsoluteURL("/column/intro/"+t)},subscribe:function(e){if(this.loginUser){var t=this.generatePayData(e);p.a.set("orderInfo",t,{domain:".geekbang.org"}),window.open("https://cashier.geekbang.org/payment")}else k.a.login()},generatePayData:function(e){return{list:[{count:1,image:e.column_cover,name:e.column_title,sku:e.column_sku,price:{sale:3===e.price_type?e.column_price_sale:e.customPrice}}],invoice:!1,app_id:3,cid:e.id,isFromTime:!0,detail_url:3==(0|e.column_type)?"https://time.geekbang.org/course/intro/"+e.id:"https://time.geekbang.org/column/intro/"+e.id}},getList:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"sort",n=arguments[3];n||(this.curPage=1),this.curCategory=e,this.curSort=t,this.curSortOrder=a,this.getBaseData(e).then(function(){i.hasActivityFn();var r=i.parseColumnList(n,e,t,a);i.getColumnList(r,n)})},hasActivityFn:function(){var e=this,t=this.columnMap[this.curCategory];t?(this.hasActivity=!1,t.find(function(t){t.had_sub||2!==t.price_type&&3!==t.price_type||(e.hasActivity=!0)})):this.hasActivity=!1},getBaseData:function(e){var t=this;return new o.a(function(i){return t.hasActivityFn(),Array.isArray(t.columnMap[e])?void i(t.columnMap[e]):Array.isArray(t.columnMap[0])?(t.columnMap[e]=t.columnMap[0].reduce(function(t,i){return i.column_type===e&&t.push(i),t},[]),void i(t.columnMap[e])):(t.loading=!0,void u.a.getBaseData(e).then(function(a){t.loading=!1,t.categoryList.length||(t.categoryList=[{id:0,name:"全部课程"}].concat(n()(a.nav))),t.columnMap[e]=a.list,t.currentItemCount=a.page.count,i(t.columnMap[e])}).catch(function(){i([]),t.loading=!1}))})},getColumnList:function(e,t){var i=this;this.loading=!0,u.a.getColumns(e,!this.mobile).then(function(e){i.loading=!1,i.columnList=t?i.columnList.concat(e):e}).catch(function(){i.loading=!1})},nextPage:function(){this.loading||this.isLastPage||(this.curPage++,this.getList(this.curCategory,this.curSort,this.curSortOrder,!0))},parseColumnList:function(e,t,i,a){var n=this.curPage,r=this.columnMap[t],o={from:e?(n-1)*this.pageSize:0,to:n*this.pageSize},s=[],l="";switch(this.pageTotal=r.length,this.pageCount=Math.max(Math.ceil(r.length/this.pageSize),1),0|i){case 1:l="column_ctime",a="desc";break;case 2:l="sub_count";break;case 3:l="column_price"}return s=4===i?this.parseActivitySortData(r):this.parseSortData(r,a,l),s.slice(o.from,o.to).map(function(e){return e.id})},parseSortData:function(e,t,i){var a=[].concat(n()(e)),r={had:[],preview:[]};switch(a.forEach(function(e){e.had_sub?r.had.push(e):r.preview.push(e)}),t){case"sort":return[].concat(n()(r.preview),n()(r.had));case"asc":return[].concat(n()(r.preview.sort(function(e,t){return e[i]-t[i]||t.column_ctime-e.column_ctime})),n()(r.had.sort(function(e,t){return e[i]-t[i]||t.column_ctime-e.column_ctime})));case"desc":return[].concat(n()(r.preview.sort(function(e,t){return t[i]-e[i]||t.column_ctime-e.column_ctime})),n()(r.had.sort(function(e,t){return t[i]-e[i]||t.column_ctime-e.column_ctime})));default:return[].concat(n()(r.preview),n()(r.had))}},parseActivitySortData:function(e){var t=[].concat(n()(e)),i={had:[],preview:[],normal:[],timeLimited:[],groupBuy:[]};return t.forEach(function(e){e.had_sub?i.had.push(e):i.preview.push(e)}),i.preview.forEach(function(e){2===e.price_type?i.timeLimited.push(e):3===e.price_type?i.groupBuy.push(e):i.normal.push(e)}),[].concat(n()(this.sortByCtime(i.timeLimited)),n()(this.sortByCtime(i.groupBuy)),n()(this.sortByCtime(i.normal)),n()(this.sortByCtime(i.had)))},sortByCtime:function(e){return e.sort(function(e,t){return t.column_ctime-e.column_ctime})}}}},1395:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,"._2lx4a-CP_0{width:1080px;margin:0 auto 60px}._3KjZQbwk_0{margin-top:50px;height:50px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._3KjZQbwk_0,._3KjZQbwk_0 .kcMABq6U_0{display:-webkit-box;display:-ms-flexbox;display:flex}._3KjZQbwk_0 .kcMABq6U_0{-webkit-box-flex:1;-ms-flex:1;flex:1}._3KjZQbwk_0 .kcMABq6U_0 span{font-size:15px;font-weight:400;margin-right:18px}._3KjZQbwk_0 .kcMABq6U_0 ._2TWCBjxa_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 20px;height:28px;font-size:17px;font-weight:400;border-radius:14px;color:#404040;line-height:1em;margin-right:20px}._3KjZQbwk_0 .kcMABq6U_0 ._2TWCBjxa_0:hover{background:#f6f7fb}._3KjZQbwk_0 .kcMABq6U_0 ._2TWCBjxa_0._2CeglKlV_0{color:#fa8919;background:#fbf5ee}._3KjZQbwk_0 .kkd89V2i_0{-webkit-box-flex:0;-ms-flex:0 0 110px;flex:0 0 110px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}._3KjZQbwk_0 ._2_KiDaj7_0{outline:none;background:#fff;cursor:pointer;display:block;line-height:31px;width:105px;height:31px;border:1px solid #fa8919;color:#fa8919;font-size:14px;font-weight:400;text-align:center;border-radius:5px}._3KjZQbwk_0 ._2_KiDaj7_0:hover{border-color:#ff6000;color:#ff6000}._3hVBef3W_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}._3hVBef3W_0 ._3S9KmBtG_0{width:711px}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:50px;border-bottom:1px solid hsla(0,0%,91%,.6)}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 .JfgzzksA_0{font-size:12px;color:#888;font-weight:400}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0{display:-webkit-box;display:-ms-flexbox;display:flex}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0{color:#888;padding-right:20px;font-size:13px;font-weight:400;margin-right:20px;position:relative}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0 ._1Yk9PA11_0{position:absolute;top:-1px;right:10px;width:10px;height:16px;color:#b2b2b2;-webkit-transform:scale(.8);transform:scale(.8)}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0 ._1Yk9PA11_0 i{position:absolute;left:0;top:0;-webkit-transform:scale(.8);transform:scale(.8);font-size:12px;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0 ._1Yk9PA11_0 i._2jewjGCJ_0{-webkit-transform:scale(.8) rotate(-90deg);transform:scale(.8) rotate(-90deg)}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0 ._1Yk9PA11_0 i._38FM8KCt_0{top:7px;-webkit-transform:scale(.8) rotate(90deg);transform:scale(.8) rotate(90deg)}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0._2CeglKlV_0,._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0:hover{font-weight:500;color:#666565}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0._2CeglKlV_0 ._1Yk9PA11_0{display:block}._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0._2CeglKlV_0 ._1Yk9PA11_0 ._2CeglKlV_0._2jewjGCJ_0,._3hVBef3W_0 ._3S9KmBtG_0 ._1o6EOwiF_0 ._3HUryTHs_0 ._1kRLIDSR_0._2CeglKlV_0 ._1Yk9PA11_0 ._2CeglKlV_0._38FM8KCt_0{color:#fa8919}._3hVBef3W_0 .AaWD07ZH_0{width:305px;padding-bottom:50px}.OjL5wNoM_0{margin:35px 0}.OjL5wNoM_0 .vUoikev7_0{cursor:pointer;background:#fff;outline:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:32px;border-radius:5px;border:1px solid #b2b2b2}.OjL5wNoM_0 .vUoikev7_0,.OjL5wNoM_0 span{margin:0 auto;width:172px;color:#b2b2b2;font-size:14px}.OjL5wNoM_0 span{display:block;height:34px;line-height:34px;text-align:center}._2JajPmV9_0{position:fixed;z-index:10;left:0;bottom:77px;width:146px;height:60px;cursor:pointer;opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:all .3s ease;transition:all .3s ease}._2JajPmV9_0._3pcP2VEJ_0{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}._251HGJzT_0{position:fixed;z-index:10;bottom:0;width:100%;height:85px;cursor:pointer;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:all .3s ease;transition:all .3s ease}._251HGJzT_0._3pcP2VEJ_0{-webkit-transform:translateZ(0);transform:translateZ(0)}._251HGJzT_0 ._2bE2YgkU_0{position:absolute;z-index:10;top:0;left:50%;width:1440px;height:100%;margin-left:-720px;background-image:url("+a(i(1863))+");background-size:cover;background-position:50%;background-repeat:no-repeat}._251HGJzT_0 ._8oicOq_I_0{position:absolute;top:22px;left:0;width:100%;height:100%;background:hsla(37,66%,84%,.95)}._251HGJzT_0 ._3ajZYO2R_0{position:absolute;z-index:20;top:50%;right:25px;margin-top:-12px;width:32px;height:32px;line-height:32px;text-align:center;font-size:12px;color:#c7803e}@media only screen and (min-width:860px) and (max-width:1160px){._2lx4a-CP_0{width:100%;padding:0 40px;-webkit-box-sizing:border-box;box-sizing:border-box}._2lx4a-CP_0 ._3hVBef3W_0 ._3S9KmBtG_0{width:100%}.AaWD07ZH_0{display:none}}",""]),t.locals={contentBlock:"_2lx4a-CP_0",contentHeader:"_3KjZQbwk_0",contentHeaderLeft:"kcMABq6U_0",tabLink:"_2TWCBjxa_0",selected:"_2CeglKlV_0",contentHeaderRight:"kkd89V2i_0",subBtn:"_2_KiDaj7_0",contentWrapper:"_3hVBef3W_0",columnList:"_3S9KmBtG_0",sortWrapper:"_1o6EOwiF_0",count:"JfgzzksA_0",sorts:"_3HUryTHs_0",sortLink:"_1kRLIDSR_0",sortIcon:"_1Yk9PA11_0",sortUpIcon:"_2jewjGCJ_0",sortDownIcon:"_38FM8KCt_0",others:"AaWD07ZH_0",loadingRect:"OjL5wNoM_0",nextPageBtn:"vUoikev7_0",benefits:"_2JajPmV9_0",on:"_3pcP2VEJ_0",couponWrap:"_251HGJzT_0",couponImg:"_2bE2YgkU_0",fill:"_8oicOq_I_0",close:"_3ajZYO2R_0"}},1478:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,"._20Cq3Rn7_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._20Cq3Rn7_0 ._2sej44xY_0{-webkit-box-flex:0;-ms-flex:0 0 127px;flex:0 0 127px;width:127px;height:168px}._20Cq3Rn7_0 ._2sej44xY_0 a{position:relative;display:block;background:#eee}._20Cq3Rn7_0 ._2sej44xY_0 a,._20Cq3Rn7_0 ._2sej44xY_0 a ._1miPDP4s_0{width:100%;height:100%;border-radius:5px}._20Cq3Rn7_0 ._2sej44xY_0 a ._1wLiyUbR_0{position:absolute;right:0;bottom:0;width:27px;height:19px;background:url("+a(i(710))+") 50% no-repeat;background-size:100%}._20Cq3Rn7_0 ._3M3E-ESU_0{width:calc(100% - 147px);padding:40px 0;margin-left:20px;border-bottom:1px solid hsla(0,0%,91%,.6)}._20Cq3Rn7_0 ._3M3E-ESU_0._17ezjs3L_0{border-bottom:none}._20Cq3Rn7_0 ._3M3E-ESU_0 ._3gQBs_6X_0{cursor:pointer}._20Cq3Rn7_0 ._3M3E-ESU_0 ._3gQBs_6X_0 ._3G50nw0p_0{padding-top:3px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._20Cq3Rn7_0 ._3M3E-ESU_0 ._3gQBs_6X_0 ._3G50nw0p_0 em{font-weight:300}._20Cq3Rn7_0 ._3M3E-ESU_0 ._3gQBs_6X_0 ._3G50nw0p_0 h2{font-size:20px;color:#404040;font-weight:500;line-height:24px;margin-right:10px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._3gQBs_6X_0 ._3G50nw0p_0 p{font-weight:400;font-size:14px;color:#888;font-weight:300;line-height:24px;white-space:nowrap;letter-spacing:1px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._3gQBs_6X_0 ._33lENDr7_0{margin-top:5px;max-width:100%;color:#404040;font-size:14px;font-weight:400;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0{height:80px;-webkit-box-sizing:border-box;box-sizing:border-box;padding:5px 0 16px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul li{width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:10px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul li:nth-child(2n-1){padding-right:20px;overflow:hidden}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul li a{-webkit-box-flex:1;-ms-flex:1;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:20px;line-height:20px;color:#404040;font-size:13px;font-weight:400}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul li a:hover{text-decoration:underline}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul li a._10vvBdC9_0{position:relative;padding-left:30px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._14n6BJoa_0 ul li a ._ffA7FdL_0{display:block;position:absolute;top:3px;left:0;width:48px;height:26px;text-align:center;line-height:26px;font-size:18px;font-weight:400;color:#fa8919;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:top left;transform-origin:top left;border:1px solid #fa8919;border-radius:6px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0{height:35px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0,._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._14cxbu2p_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._14cxbu2p_0 ._2CZKTcPl_0{color:#888;font-size:13px;font-weight:400;letter-spacing:1px}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._14cxbu2p_0 ._1BSc9YvC_0{color:#fa8919;font-size:18px;font-weight:400}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._14cxbu2p_0 ._1EwQIhcU_0{font-weight:400;margin-left:10px;font-size:13px;letter-spacing:1px;color:#888}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._1NLR_mQs_0 ._272_Yrle_0{border:none;outline:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:92px;height:33px;color:#fff;background:#fa8919;border-radius:5px;font-size:14px;cursor:pointer;font-weight:400}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._1NLR_mQs_0 ._272_Yrle_0:hover{background:#ff7800}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._1NLR_mQs_0 ._272_Yrle_0._2Ea07iHw_0{color:#fa8919;background:#fbf5ee}._20Cq3Rn7_0 ._3M3E-ESU_0 ._2zRFFX7P_0 ._1NLR_mQs_0 ._272_Yrle_0._2Ea07iHw_0:hover{background:#fff1e0}",""]),t.locals={columnItemContainer:"_20Cq3Rn7_0",columnItemCover:"_2sej44xY_0",columnItemImage:"_1miPDP4s_0",iconVideo:"_1wLiyUbR_0",columnItemInner:"_3M3E-ESU_0",noBorder:"_17ezjs3L_0",columnItemHead:"_3gQBs_6X_0",columnItemTitle:"_3G50nw0p_0",author:"_33lENDr7_0",columnItemContent:"_14n6BJoa_0",couldPreview:"_10vvBdC9_0",experience:"_ffA7FdL_0",columnItemFooter:"_2zRFFX7P_0",columnItemTip:"_14cxbu2p_0",hadSub:"_2CZKTcPl_0",price:"_1BSc9YvC_0",markrtPrice:"_1EwQIhcU_0",buttonGroup:"_1NLR_mQs_0",button:"_272_Yrle_0",start:"_2Ea07iHw_0"}},1520:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,".fixed-header[data-v-642f342b]{position:-webkit-sticky;position:sticky;top:0;z-index:1000}.fixed-header .common-header[data-v-642f342b]{-webkit-box-shadow:0 0 1px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1)}.home-mobile-wrap[data-v-642f342b]{max-width:768px;margin:0 auto}.home-mobile-wrap .home-mobile-title[data-v-642f342b]{padding:25px 0 0 22px;background-color:#fff;font-size:30px;font-weight:500;color:#353535}.home-mobile-wrap .home-nav-list[data-v-642f342b]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;padding-top:25px;padding-bottom:25px}.home-mobile-wrap .home-nav-list .home-nav-item[data-v-642f342b]{text-align:center}.home-mobile-wrap .home-nav-list .home-nav-item img[data-v-642f342b]{width:30px;height:30px}.home-mobile-wrap .home-nav-list .home-nav-item h3[data-v-642f342b]{font-size:14px;font-weight:400}.home-mobile-wrap .home-placeholder[data-v-642f342b]{width:100%;height:7px;background-color:#f8f8f8}.home-mobile-wrap .category-item[data-v-642f342b]{margin-left:22px;border-bottom:.5px solid #e8e8e8}.home-mobile-wrap .category-item .category-hd[data-v-642f342b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:31px 22px 27px 0}.home-mobile-wrap .category-item .category-hd .category-title[data-v-642f342b]{font-size:22px;font-weight:500;color:#404040}.home-mobile-wrap .category-item .category-hd .category-more[data-v-642f342b]{font-size:14px;color:#9e9e9e}.home-mobile-wrap .category-item .category-hd .category-more a[data-v-642f342b]{color:#9e9e9e}.home-mobile-wrap .category-item .column-item[data-v-642f342b]{padding:0 22px 28px 0}.home-mobile-wrap .category-item .column-item[data-v-642f342b]:last-child{padding-bottom:32px}.newcomer-banner[data-v-642f342b]{position:fixed;z-index:10;bottom:0;width:100%;height:60px;background:hsla(37,67%,80%,.97)}.newcomer-banner .coupon-img[data-v-642f342b]{position:absolute;z-index:10;top:0;left:50%;width:375px;height:100%;margin-left:-187.5px;background-image:url("+a(i(1861))+");background-size:cover;background-position:50%;background-repeat:no-repeat}.newcomer-banner .close[data-v-642f342b]{position:absolute;z-index:20;top:0;right:0;width:32px;height:32px;line-height:32px;text-align:center;font-size:12px;color:#c7803e}",""])},1550:function(e,t,i){var a=i(1395);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("18bcbbd9",a,!0,{})},1633:function(e,t,i){var a=i(1478);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("164eee1f",a,!0,{})},1675:function(e,t,i){var a=i(1520);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("52f1e888",a,!0,{})},1861:function(e,t,i){e.exports=i.p+"static/time/img/mobile-newcomer-coupon.991c6e8.png"},1862:function(e,t,i){e.exports=i.p+"static/time/img/newcomer-benefits.d8ec0db.png"},1863:function(e,t,i){e.exports=i.p+"static/time/img/newcomer-coupon.ac1885c.png"},1900:function(e,t,i){function a(e){this.$style=i(1633)}var n=i(22)(i(1236),i(2122),a,null,null);e.exports=n.exports},1953:function(e,t,i){function a(e){i(1675)}var n=i(22)(i(1352),i(2071),a,"data-v-642f342b",null);e.exports=n.exports},1954:function(e,t,i){function a(e){this.$style=i(1550)}var n=i(22)(i(1353),i(1993),a,null,null);e.exports=n.exports},1993:function(e,t){e.exports={render:function(){var e,t,i=this,a=i.$createElement,n=i._self._c||a;return n("div",{class:i.$style.pageHome},[n("div",{ref:"header"},[n("CommonHeader",{attrs:{loginUser:i.loginUser,isFixed:""}})],1),i._v(" "),n("div",{class:i.$style.content},[n("div",{class:i.$style.contentBlock},[n("div",{class:i.$style.contentHeader},[n("div",{class:i.$style.contentHeaderLeft},[n("span",[i._v("课程:")]),i._v(" "),i._l(i.categoryList,function(e,t){var a;return n("a",{key:t,class:[i.$style.tabLink,(a={},a[i.$style.selected]=i.curCategory===e.id,a)],attrs:{href:"javascript:void(0);"},on:{click:function(t){return i.changeCategory(e.id)}}},[i._v(i._s(0===e.id?"全部":e.name))])})],2),i._v(" "),n("div",{ref:"mainTitle",class:i.$style.contentHeaderRight},[n("button",{class:i.$style.subBtn,on:{click:i.routeBuy}},[i._v("我的订阅")])])]),i._v(" "),n("div",{class:i.$style.contentWrapper},[n("div",{class:i.$style.columnList},[n("div",{class:i.$style.sortWrapper},[n("div",{class:i.$style.sorts},i._l(i.sortOptions,function(e){var t,a,r;return n("a",{key:e.alias,class:[i.$style.sortLink,(t={},t[i.$style.selected]=i.curSort===e.id,t)],attrs:{href:"javascript:void(0);"},on:{click:function(t){return i.changeSort(e)}}},[i._v(i._s(e.label)+"\n "),e.order.length>1?[n("span",{class:i.$style.sortIcon},[n("i",{class:["iconfont",i.$style.sortUpIcon,(a={},a[i.$style.selected]="asc"===i.curSortOrder,a)]},[i._v("")]),i._v(" "),n("i",{class:["iconfont",i.$style.sortDownIcon,(r={},r[i.$style.selected]="desc"===i.curSortOrder,r)]},[i._v("")])])]:i._e()],2)}),0),i._v(" "),n("span",{class:i.$style.count},[i._v(i._s(i.pageTotal)+"个课程")])]),i._v(" "),n("div",{class:i.$style.columnListWrapper},i._l(i.columnList,function(e,t){return n("ColumnPcItem",{key:e.id,attrs:{data:e,noBorder:t===i.columnList.length-1},on:{jump:i.columnRoute,prevRoute:i.prevRoute}})}),1),i._v(" "),i.loading?i._e():n("div",{class:i.$style.loadingRect},[!i.isLastPage&&i.scrollTimes>=i.maxScrollTimes?n("button",{class:i.$style.nextPageBtn,on:{click:i.nextPage}},[i._v("\n "+i._s(i.loading?"加载中...":"加载更多")+"\n ")]):n("span",[i._v("— 没有更多了 —")])])]),i._v(" "),n("div",{class:i.$style.others},[n("Ads")],1)])])]),i._v(" "),i.loginUser?i._e():[n("img",{class:[i.$style.benefits,(e={},e[i.$style.on]=!i.isShowCoupon,e)],attrs:{src:i.benefitsImg,alt:""},on:{click:i.showCoupon}}),i._v(" "),n("div",{class:[i.$style.couponWrap,(t={},t[i.$style.on]=i.isShowCoupon,t)],on:{click:i.goRegister}},[n("span",{class:["iconfont",i.$style.close],on:{click:function(e){return e.stopPropagation(),i.hideCoupon(e)}}},[i._v("")]),i._v(" "),n("div",{class:i.$style.couponImg}),i._v(" "),n("div",{class:i.$style.fill})])],i._v(" "),n("common-footer",{ref:"footer"}),i._v(" "),n("return-top")],2)},staticRenderFns:[]}},2029:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e.mobile?"HomeMobile":"HomePC")},staticRenderFns:[]}},2071:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"home-mobile-wrap"},[e.isInApp?e._e():i("div",{ref:"header",staticClass:"fixed-header"},[i("TopNav")],1),e._v(" "),e.isInApp?e._e():i("h1",{staticClass:"home-mobile-title"},[e._v("讲堂")]),e._v(" "),i("div",{staticClass:"home-nav-list"},e._l(e.nav,function(t){return i("div",{key:t.id,staticClass:"home-nav-item",on:{click:function(i){return e.jumpList(t)}}},[i("a",{attrs:{"data-seo":"",href:e.listLink(t)},on:{click:function(e){e.preventDefault()}}},[i("img",{attrs:{src:t.icon,alt:"img"}})]),e._v(" "),i("h3",[e._v(e._s(t.name))])])}),0),e._v(" "),i("div",{staticClass:"home-placeholder"}),e._v(" "),e._l(e.list,function(t,a){return i("div",{key:a,staticClass:"category-item"},[i("div",{staticClass:"category-hd"},[i("h2",{staticClass:"category-title"},[e._v(e._s(e.nav[a]?e.nav[a].name:""))]),e._v(" "),i("p",{staticClass:"category-more",on:{click:function(t){return e.jumpList(e.nav[a])}}},[i("a",{attrs:{"data-seo":"",href:e.listLink(e.nav[a])},on:{click:function(e){e.preventDefault()}}},[e._v("查看全部")])])]),e._v(" "),e._l(t,function(e){return i("div",{key:e.id,staticClass:"column-item"},[i("column-card",{attrs:{data:e,type:"home"}})],1)})],2)}),e._v(" "),!e.loginUser&&e.isShowCoupon?i("div",{staticClass:"newcomer-banner",on:{click:e.goRegister}},[i("span",{class:["iconfont","close"],on:{click:function(t){return t.stopPropagation(),e.hideCoupon(t)}}},[e._v("")]),e._v(" "),i("div",{staticClass:"coupon-img"})]):e._e()],2)},staticRenderFns:[]}},2122:function(e,t){e.exports={render:function(){var e,t,i=this,a=i.$createElement,n=i._self._c||a;return n("div",{class:i.$style.columnItemContainer},[n("div",{class:i.$style.columnItemCover},[n("a",{attrs:{"data-seo":"",href:i.columnLink(i.data)},on:{click:function(e){e.preventDefault()}}},[n("img",{class:i.$style.columnItemImage,attrs:{src:i._f("resizeImg")(i.data.column_cover_small,127*i.ratio,168*i.ratio),alt:""},on:{click:function(e){return i.jump("title")}}}),i._v(" "),3===i.data.column_type?n("span",{class:i.$style.iconVideo}):i._e()])]),i._v(" "),n("div",{class:[i.$style.columnItemInner,(e={},e[i.$style.noBorder]=i.noBorder,e)]},[n("div",{class:i.$style.columnItemHead,on:{click:function(e){return i.jump("title")}}},[n("div",{class:i.$style.columnItemTitle},[n("h2",[i._v(i._s(i.data.column_title))]),i._v(" "),n("p",[i._v(i._s(i.data.column_unit)+" "),i.data.column_unit?n("em",[i._v("|")]):i._e(),i._v(" "+i._s(i.data.sub_count||1)+"人已学习")])]),i._v(" "),n("div",{class:i.$style.author},[i._v("\n "+i._s(i.data.author_name)+" "+i._s(i.data.author_intro)+"\n ")])]),i._v(" "),n("div",{class:i.$style.columnItemContent},[n("ul",i._l(i.data.articles,function(e,t){var a;return t<4?n("li",[n("a",{class:(a={},a[i.$style.couldPreview]=!i.data.had_sub&&e.article_could_preview,a),attrs:{href:"javascript:;"},on:{click:function(t){return t.preventDefault(),i.prevRoute(e)}}},[!i.data.had_sub&&e.article_could_preview?n("span",{class:i.$style.experience},[i._v("免费")]):i._e(),i._v(i._s(e.article_title))])]):i._e()}),0)]),i._v(" "),n("div",{class:i.$style.columnItemFooter},[n("p",{class:i.$style.columnItemTip},[i.data.had_sub?n("span",{class:i.$style.hadSub},[i._v("已订阅")]):1!=i.data.price_type?[n("span",{class:i.$style.price},[i._v(i._s(2===i.data.price_type?"限时":"拼团")+" ¥"+i._s(i._f("columnPrice")(i.data.column_price)))]),i._v(" "),n("s",{class:i.$style.markrtPrice},[i._v("原价 ¥"+i._s(i._f("columnPrice")(i.data.column_price_market)))])]:n("span",{class:i.$style.price},[i._v("¥"+i._s(i._f("columnPrice")(i.data.column_price)))])],2),i._v(" "),n("div",{class:i.$style.buttonGroup},[n("button",{class:[i.$style.button,(t={},t[i.$style.start]=i.data.had_sub,t)],on:{click:function(e){return i.jump("button")}}},[i._v(i._s(i.data.had_sub?"开始学习":"立即订阅"))])])])])])},staticRenderFns:[]}},615:function(e,t,i){var a=i(22)(i(1351),i(2029),null,null,null);e.exports=a.exports},620:function(e,t){e.exports=function(e){return"string"!=typeof e?e:(/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),/["'() \t\n]/.test(e)?'"'+e.replace(/"/g,'\\"').replace(/\n/g,"\\n")+'"':e)}},625:function(e,t,i){"use strict";var a=i(43),n=i.n(a),r=i(146),o=i(218);t.a={getCategory:function(){return new n.a(function(e,t){r.a.post(o.a.timeServer+"/serv/v3/search/category").then(function(i){200===i.status&&0===i.data.code?e(i.data.data):t(i)}).catch(function(e){t(e)})})},getHotWords:function(){return new n.a(function(e,t){r.a.post(o.a.timeServer+"/serv/v3/search/hot_words").then(function(i){200===i.status&&0===i.data.code?e(i.data.data):t(i)}).catch(function(e){t(e)})})},getSearchResult:function(e){var t={keyword:e.keyword,category:e.category,size:e.size,prev:e.prev};return e.filters&&(t.filters=e.filters),new n.a(function(e,i){r.a.post(o.a.timeServer+"/serv/v3/search",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):i(t)}).catch(function(e){i(e)})})}}},634:function(e,t,i){var a,n;!function(r){var o=!1;if(a=r,void 0!==(n="function"==typeof a?a.call(t,i,t,e):a)&&(e.exports=n),o=!0,e.exports=r(),o=!0,!o){var s=window.Cookies,l=window.Cookies=r();l.noConflict=function(){return window.Cookies=s,l}}}(function(){function e(){for(var e=0,t={};e1){if(r=e({path:"/"},a.defaults,r),"number"==typeof r.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*r.expires),r.expires=s}r.expires=r.expires?r.expires.toUTCString():"";try{o=JSON.stringify(n),/^[\{\[]/.test(o)&&(n=o)}catch(e){}n=i.write?i.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)),t=t.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),t=t.replace(/[\(\)]/g,escape);var l="";for(var d in r)r[d]&&(l+="; "+d,!0!==r[d]&&(l+="="+r[d]));return document.cookie=t+"="+n+l}t||(o={});for(var c=document.cookie?document.cookie.split("; "):[],p=/(%[0-9A-Z]{2})+/g,u=0;u-1)},jump:function(e){this.$ga.sendEvent("导航栏跳转","导航栏跳转成功","url:"+e.link),window.open(e.link)},login:function(){window.location.href="//account.geekbang.org/signin?redirect="+encodeURIComponent(window.location.href)},logout:function(){window.location.href="//account.geekbang.org/logout?redirect="+encodeURIComponent(window.location.href)},signup:function(){window.location.href="//account.geekbang.org/signup?redirect="+encodeURIComponent(window.location.href)},search:function(){this.isShowSearch?this.doSearch():(this.openSearch(),this.$refs.searchInput.focus())},openSearch:function(){this.isShowSearch=!0},closeSearch:function(){this.isShowSearch=!1,this.query="",this.$refs.searchInput&&this.$refs.searchInput.blur()},doSearch:function(e){this.query||this.hotWords===this.placeholder||(this.query=this.hotWords),this.query.trim()&&window.open("/search?q="+this.query)},blur:function(){var e=this;setTimeout(function(){e.isShowSearch&&e.closeSearch()},200)},scrollHandler:function(){this.closeSearch()},requestHotWords:function(){var e=this;return new n.a(function(t,i){s.a.getHotWords().then(function(i){e.hotWords=i.search_bar||e.placeholder,t(i)})})}}}},664:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(43),n=i.n(a),r=i(221),o=i.n(r),s=i(99),l=i.n(s),d=i(65),c=i(218),p=i(219),u=i(625);t.default={props:{customStyle:{type:Object,default:function(){return{}}},allshow:{type:Boolean,default:!1},routeParams:{type:Object,default:function(){return{}}}},data:function(){return{isShowDropPage:!1,params:null,defaultPlaceholder:"搜索课程、课程内容、每日一课等",placeholder:"",hotWords:""}},watch:{isShowDropPage:function(e){e?d.a.fixedBody.open():d.a.fixedBody.close()}},computed:l()({},i.i(p.a)({loginUser:"loginUser"}),{isShow:function(){return!d.a.isInApp()&&!this.$route.query.code},isPC:function(){return d.a.isPC()},routeRelatedData:function(){var e=this.params;return this.$route.query.utm_term&&(e.utm_term=this.$route.query.utm_term),{jump:this.$route.meta.appLink,data:e}},urlScheme:function(){var e=this,t="";if(this.$route.meta.urlscheme){var i=this.$route.meta.urlscheme.match(/{{\s*[\w]+\s*}}/gi);t=this.$route.meta.urlscheme,i&&i.forEach(function(i){t=t.replace(i,e.$route.params[i.match(/[\w]+/)[0]])}),this.$route.query.utm_term&&(t=d.a.addUrlParam(t,"utm_term",this.$route.query.utm_term)),this.routeParams.aid&&(t=d.a.addUrlParam(t,"aid",this.routeParams.aid),t=d.a.addUrlParam(t,"title",this.routeParams.title))}return t},appLink:function(){if(d.a.isPC())return"https://time.geekbang.org/download";if(d.a.isIOS()){var e=l()({},this.routeRelatedData);return this.urlScheme&&(e.urlscheme=this.urlScheme),"https://static001.geekbang.org/misc/download/zeus.html?params="+encodeURIComponent(o()(e))}var t=this.$route.meta.urlscheme?"views?urlscheme="+encodeURIComponent(this.urlScheme):"tab=1",i="geektime://time.geekbang.org:80/main?"+encodeURIComponent(t);return d.a.isInWeixin()?c.a.appstoreUrl+"&android_schema="+i:i}}),created:function(){this.params=this.$route.params||this.$route.query,this.requestHotWords()},methods:{goApp:function(){window.location.href=this.appLink},goArithmeticTraining:function(){window.location.href="https://time.geekbang.org/college/algorithm/100034301?utm_source=time_web&utm_medium=menu&utm_term=timewebmenu_h5"},goFrontEndTraining:function(){window.location.href="https://time.geekbang.org/training/100028201?utm_source=time_web&utm_medium=menu"},goLogin:function(){window.location.href="//account.geekbang.org/signin?redirect="+encodeURIComponent(window.location.href)},goAccount:function(){window.location.href="//account.geekbang.org/dashboard?redirect="+encodeURIComponent(window.location.href)},goGift:function(){window.location.href="//time.geekbang.org/service/exchange"},goIndex:function(){window.location.href="//time.geekbang.org"},goDownload:function(){window.location.href="//time.geekbang.org/download"},goService:function(){window.open("https://service.geekbang.org/")},goMall:function(){window.open("https://h5.youzan.com/v2/feature/TJe4bYhxyP?dc_ps=2293231415741009926.200001")},goInfoQ:function(){window.open("https://www.infoq.cn/?utm_source=geektime&utm_medium=menu")},goChannel:function(){window.open("https://jinshuju.net/f/7y04KD")},goRecomandAuthor:function(){window.open("https://jinshuju.net/f/MANYIf")},goHome:function(){window.location.href="//time.geekbang.org"},focus:function(){this.$router.push("/search?hotwords="+this.hotWords)},requestHotWords:function(){var e=this;return new n.a(function(t,i){u.a.getHotWords().then(function(t){e.hotWords=t.search_bar,e.placeholder=e.hotWords||e.defaultPlaceholder})})}}}},665:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,"._352wsGxH_0{height:63px}.Wz6esVdU_0{width:100%;height:63px;background:#fff;position:fixed;top:0;left:0;z-index:20;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 13px;-webkit-box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38);box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38)}._28dOln0j_0{height:40px;width:110px;background:url("+a(i(662))+") no-repeat 0;background-size:110px;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;cursor:pointer}._1k9ecCKw_0{width:50px;height:30px;padding-top:2px;padding-left:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:14px;color:#888;margin-left:-10px;cursor:pointer;background:transparent}._1U_jCCZU_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}._3oCJiu8W_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 13px;background:#fbf5ee;border-radius:15px;height:30px}._7Xrmrbox_0,.gBs4U5qC_0,.JjI7sqpW_0{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;color:#fa8919;font-size:13px;font-weight:500;cursor:pointer}.JjI7sqpW_0{font-size:14px}._3lsV2-l9_0{height:13px;width:1px;background:#fa8919;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:10px;margin-right:10px}._1UaW_Eq1_0{position:fixed;top:0;left:0;right:0;bottom:0;z-index:21;background:#fff;overflow:hidden;-webkit-transform:translateY(-20px);transform:translateY(-20px);opacity:0;visibility:hidden;-webkit-transition:all .3s ease;transition:all .3s ease}._1UaW_Eq1_0._2mIjHHvm_0{-webkit-transform:translateY(0);transform:translateY(0);opacity:1;visibility:visible}._33xATrPo_0{width:100%;height:calc(100% - 63px);overflow-x:hidden;--webkit-overflow-scrolling:touch}._1qHJ5OLn_0{height:63px;-ms-flex-align:center;padding-left:15px;padding-right:15px;-webkit-box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38);box-shadow:0 2px 3px 0 hsla(0,0%,89%,.38)}._1qHJ5OLn_0,._2FYmyQEJ_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center}._2FYmyQEJ_0{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:35px;-ms-flex-align:center;background:#f6f7fb;border-radius:20px;padding-left:16px;padding-right:20px}._1CLulytQ_0{font-size:14px;color:#b2b2b2}._1reF0JJk_0{height:20px;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin-left:10px}._1reF0JJk_0 input{background:transparent;border:0;color:#353535;height:20px;line-height:20px;font-size:14px;font-weight:400;width:100%;vertical-align:top;outline:none;outline-offset:0}._33xQ4nNG_0{font-size:16px;font-weight:400;color:#b2b2b2;height:30px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:20px;margin-right:10px}._1y_WRr3L_0{font-size:18px}._1y_WRr3L_0 ._2HnUZhdg_0{color:#888;font-weight:400;padding-left:28px;height:63px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:.5px solid #e8e8e8}._1y_WRr3L_0 ._2HnUZhdg_0._1r7t-t9P_0{color:#fa8919;font-weight:500}._3IeMxVb7_0{margin-top:60px;padding-bottom:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-sizing:border-box;box-sizing:border-box}._3IeMxVb7_0 ._2HnUZhdg_0{position:relative;padding-top:46px;font-size:13px;color:#888}._3IeMxVb7_0 ._339_Pvt6_0{position:absolute;color:#c3c3c3;height:46px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:36px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;top:0;left:0}",""]),t.locals={shim:"_352wsGxH_0",main:"Wz6esVdU_0",logo:"_28dOln0j_0",dropMenu:"_1k9ecCKw_0",space:"_1U_jCCZU_0",btns:"_3oCJiu8W_0",openApp:"_7Xrmrbox_0",login:"gBs4U5qC_0",user:"JjI7sqpW_0",split:"_3lsV2-l9_0",dropPage:"_1UaW_Eq1_0",on:"_2mIjHHvm_0",dropPageWrapper:"_33xATrPo_0",top:"_1qHJ5OLn_0",search:"_2FYmyQEJ_0",searchIcon:"_1CLulytQ_0",inputWrap:"_1reF0JJk_0",close:"_33xQ4nNG_0",menus:"_1y_WRr3L_0",item:"_2HnUZhdg_0",activedMenu:"_1r7t-t9P_0",bottomMenus:"_3IeMxVb7_0",icon:"_339_Pvt6_0"}},666:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,'@font-face{font-family:gc-iconfont;src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot");src:url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.eot?#iefix") format("embedded-opentype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.woff") format("woff"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.ttf") format("truetype"),url("//at.alicdn.com/t/font_402555_t0a3z8ip4pj8m2t9.svg#gc-iconfont") format("svg")}.gc-icon[data-v-702109a0]{font-family:gc-iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.common-header[data-v-702109a0]{height:65px;background:#fff;font-family:Avenir,Helvetica,Arial,sans-serif!important;border-bottom:1px solid #eaeaea}.common-header.fixed[data-v-702109a0]{position:fixed;top:0;left:0;right:0;z-index:10000}.common-header .common-header-wrapper[data-v-702109a0]{max-width:1080px;width:94vw;height:100%;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative}.common-header .common-header-wrapper .common-logo[data-v-702109a0]{width:151px;height:65px;background-image:url('+a(i(661))+');background-repeat:no-repeat;background-position:50%;background-size:contain}.common-header .common-header-wrapper .info[data-v-702109a0]{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .info .menu[data-v-702109a0]{opacity:1;-webkit-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.common-header .common-header-wrapper .info .menu.hide[data-v-702109a0]{opacity:0}.common-header .common-header-wrapper .info .menu a[data-v-702109a0]{position:relative;padding:8px 12px;font-weight:400;-webkit-transition:color .2s ease;transition:color .2s ease;white-space:nowrap}.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:link,.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:visited{color:#353535}.common-header .common-header-wrapper .info .menu a.on[data-v-702109a0],.common-header .common-header-wrapper .info .menu a[data-v-702109a0]:hover{color:#fa8919}.common-header .common-header-wrapper .info .menu a img[data-v-702109a0]{position:absolute;width:20px;height:12px;left:calc(100% - 18px);top:0}.common-header .common-header-wrapper .info .search[data-v-702109a0]{position:absolute;right:15px;bottom:-1px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:4px}.common-header .common-header-wrapper .info .search .close[data-v-702109a0]{margin-right:10px;font-size:12px;font-weight:500;color:#e2e2e2;cursor:pointer}.common-header .common-header-wrapper .info .search .inputWrap[data-v-702109a0]{width:0;border-bottom:1px solid #d8d8d8;overflow:hidden;-webkit-transition:width .3s;transition:width .3s}.common-header .common-header-wrapper .info .search .inputWrap.open[data-v-702109a0]{width:300px}.common-header .common-header-wrapper .info .search .input[data-v-702109a0]{width:100%;font-size:12px;font-weight:400;color:#353535;outline:none;border:none;background:transparent}.common-header .common-header-wrapper .info .search .input[data-v-702109a0]::-webkit-input-placeholder{color:#b2b2b2}.common-header .common-header-wrapper .info .search .search-btn[data-v-702109a0]{position:relative;width:32px;height:32px;line-height:32px;color:#404040;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.common-header .common-header-wrapper .info .search .search-btn img[data-v-702109a0]{position:absolute;top:0;right:-10px;width:20px;height:12px}.common-header .common-header-wrapper .userinfo[data-v-702109a0]{height:65px;line-height:100%}.common-header .common-header-wrapper .userinfo .control[data-v-702109a0],.common-header .common-header-wrapper .userinfo[data-v-702109a0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.common-header .common-header-wrapper .userinfo .control[data-v-702109a0]{margin-top:2px}.common-header .common-header-wrapper .userinfo .control a[data-v-702109a0]{font-size:16px;color:#888;display:block;height:65px;line-height:65px;font-weight:400;cursor:pointer}.common-header .common-header-wrapper .userinfo .control a.mobile[data-v-702109a0]{display:none}.common-header .common-header-wrapper .userinfo .control a[data-v-702109a0]:first-child:after{content:"|";margin-left:8px;margin-right:8px}.common-header .common-header-wrapper .userinfo .profile[data-v-702109a0]{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown[data-v-702109a0]{visibility:hidden;position:absolute;width:152px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 3px 10px 4px rgba(139,162,192,.13);box-shadow:0 3px 10px 4px rgba(139,162,192,.13);top:70px;right:-16px;border-radius:6px;z-index:200000;-webkit-transition:all .2s ease;transition:all .2s ease}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .arrow[data-v-702109a0]{-webkit-box-shadow:0 0 8px 3px rgba(139,162,192,.13);box-shadow:0 0 8px 3px rgba(139,162,192,.13);cursor:pointer;width:10px;height:10px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;right:32px;top:-5px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]{background:#fff;height:0;font-size:14px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:20px;padding-right:37px;color:#888;cursor:pointer;position:relative;z-index:1;-webkit-box-sizing:border-box;box-sizing:border-box;font-weight:300;overflow:hidden;-webkit-transition:height .2s ease;transition:height .2s ease}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.exit[data-v-702109a0]{border-top:1px solid #e9e9e9;border-radius:0 0 6px 6px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info[data-v-702109a0]{height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e9e9e9;border-radius:6px 6px 0 0}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info .username[data-v-702109a0]{width:110%;font-size:14px;color:#404040;font-weight:400;line-height:1em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.user-info .cellphone[data-v-702109a0]{margin-top:7px;line-height:1em;font-size:12px;color:#b2b2b2;font-weight:400}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]:hover{background:#f6f7fb}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item .gc-icon[data-v-702109a0]{color:#888;font-size:16px;margin-right:13px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item .iconfont[data-v-702109a0]{display:inline-block;width:14px;text-align:center;margin-left:1px;font-size:13px;color:#999;margin-right:13px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item.router-link-active[data-v-702109a0]{color:#ff5a05}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown .navbar-item[data-v-702109a0]:last-child{border-bottom:none}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show[data-v-702109a0]{visibility:visible}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show .navbar-item[data-v-702109a0]{height:48px}.common-header .common-header-wrapper .userinfo .profile .profile-dropdown.show .navbar-item.user-info[data-v-702109a0]{height:64px}.common-header .common-header-wrapper .userinfo i.icon-profile[data-v-702109a0]{color:#404040;font-size:17px;display:block;margin-top:-2px;margin-right:8px}.common-header.opacity[data-v-702109a0]{background:transparent;border-bottom:none}.common-header.black[data-v-702109a0]{background:#1e1e1e;border-bottom:none}.common-header.black .common-header-wrapper .common-logo[data-v-702109a0]{background-image:url(https://static001.geekbang.org/static/live/img/logo.bb6fd3f.png)}.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:link,.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:visited{color:#fff}.common-header.black .common-header-wrapper .info .menu a[data-v-702109a0]:hover{color:#ff5a05}.common-header.black .common-header-wrapper .info .profile .profile-dropdown[data-v-702109a0]{background:#1e1e1e}.common-header.black .common-header-wrapper .info .profile .profile-dropdown .arrow[data-v-702109a0]{background-color:#1e1e1e}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]{border-bottom:1px solid #353535}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:link,.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:visited{color:#fff}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a[data-v-702109a0]:hover{color:#ff5a05;background:#353535}.common-header.black .common-header-wrapper .info .profile .profile-dropdown a .gc-icon[data-v-702109a0]{color:#888;font-size:20px}.fixed-rect[data-v-702109a0]{width:100%;height:66px}',""])},667:function(e,t,i){var a=i(665);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("1f3b662a",a,!0,{})},668:function(e,t,i){var a=i(666);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("493205de",a,!0,{})},671:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAYCAYAAACIhL/AAAADYGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB0aWZmOk9yaWVudGF0aW9uPSI4IgogICB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI3QjM4OTU3MkMzMTExRTlCNzY0REIyQzU3QTQxRURCIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI3QjM4OTU2MkMzMTExRTlCNzY0REIyQzU3QTQxRURCIgogICB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSI+CiAgIDx4bXBNTTpEZXJpdmVkRnJvbQogICAgc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyN0IzODk1NDJDMzExMUU5Qjc2NERCMkM1N0E0MUVEQiIKICAgIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjdCMzg5NTUyQzMxMTFFOUI3NjREQjJDNTdBNDFFREIiLz4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz5yai+2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsFJREFUeNrMV01IVFEU/hzGQOzXIKEMMqKNOBEuzCHImqggc1FKUa0ialr0SxTRolZFRVFBMQ7UKpPo17EiibHaWFIgEoVUoKQJGVlmJdjCvsO9j5k3770pLjIzH3xzmXffu/d7551z7jl545vz4YE8MkSuJ6vIeeR0TAy+k73kc/IOGSfHXUV4CFxOniUXIzPoJA+SbakTvpT/ojaib8yUOOi94nrvfC+Bk8jb5E5kD7L3Xa3FIfA8uQ7Zx1ryQqrAVeQu5A7C5GpLoETrGeQeTos2P3+qyYBtatpCvkMUeNVK1z3pfHRPC/Cm3T5XewqoWAkUFAKjv4Dul8DDc8Dwu8QzBVO85YyOABdtHiaalonADY6bSxZxOgh87HZfLLAU+D2SeJmjMWDOfODDa6D/PTBzNlCzDQjW0A5bgb6n6pqIFxRMBopmAUODFPZTC3QVX+fXSdgcB5q4WTFwYgutejNxfS4/zKFrirtLgGMVdmtv3A88bgRih9OtXuXTJ4QZyuqBBeX81Dfs4gRitXuXlKVCR0x3KBWBRcYCAyE1iq+5wfLRsqDpDjP8aafFj4ReKJyqRisQ3CB+li44/gEROORpxQ5Gce9b53Xxn/+FFRhm+ObXVYW7wC+f3J24docaB/vUWMm82hFx3icRLgK/DpgK7PHpQ9oMz66onFe9yX2+/rgaW6OmO8RFYLOxQPG9WFTlTEnEEtVWitl+nUVbHfDklopoMzTLJ+aRAGZYlBstYbmAfPZKOT4bE3P3rwJNYVNxoqndKlhl5UeOHNff5R6hYqEfA8458cXiUuBzD4+6tvTRLeun5k471ohzJFfUl3OooolYWpLrwX1kSw6Ie0DudStYx3Th0JBFcQ26SRvz6kn+6GJxhW5kMoVO3UGGk8Wl6+qS206x6hI5uCX1TpCgYUnC5AvdB3m2nX8FGADx9bC5TrF3fAAAAABJRU5ErkJggg=="},672:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAYCAYAAACMcW/9AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAy9JREFUSInFl11IVEEUx38uWxBBpg8FWZBiYsi65QebPphmZZD1kEpoPonk9hAVFYEEEURh0NdTW9RDkFmohX1AQmaFaEK6qSzVGhlYQT5YBhHYQz2cnfbevXfWJWT3B8vMnHN25n/vmbkzk/SnbgEakoByYBdQBKwGluqC/5PvwEdgALgL9AB/bMVohJYB54D18yxsLvzAEeBppMMR0V4A+EKB8RZJaMyekAbTGzQKXQh0Ak3x06WlCbiHaALMQi8CO+KtKArbgUuqoYRuBfYlRE50vEAFyGJKAl4DuZawnBr4NAIzQWsXOTUQaA/XdQTaYVUp/Phi7cfYhyI5C5asgMlnyjIKrHMCpVqRza3wfgxO5Jt9O1tg9yE4HWo3t+qF3imAnXthfARaSsP2Wh9UNsDDcmjzhu3eq7DGDY0pypILbHQCVfpRgEyXdGrszI7eDhi4Z7UH2mGtRwY3kl1oLhVr3PJQZqqdyMdcz+cP8uR9t43psDI1aU2j4s0g5BabU53pgukpKRU5NbBoscSbKXIgO46evi5J/35f1LCoPL8uZW65lJ5Qdm6eMreVX8WHSXcAqXMOdO0wpC6Hxlv6mC174Oxb8+/kkPhmgpIZlWZXibzNQZ+UrhKxZxdKnHXxpjjnFAmS8vtXZQHZzUOA6a8w+c5s+/kjXA8OQ1m11LPyYNwv9XG/tEGmQW+HbfdOYJpY3ur9Y5C/GbwXoP+h1T/0RGJ0jL0QoR4vpGVA9w2xB/rBUxFOv/2L+OZATi+xcb5WJntxZcx/+cdgaI7XH5fyVae5rD8Ov37qFuSEEzkE5MU02EwQ2s5Cw0mrb9kq+w+/ccMY7ZfVb5yHav6mZYjfnh4n0AUcjUkoQM8ZKKiQAY2UVYfnoJHeDrhWJ3X1mQoOm2OCwyLU+llSdKktdARwWdx2W5ydL9oWGrkF223LyVmw0q0bawxwq4NzBfBYP1pC2QZ0q9NTN3A5gWJ0+BBtpvPoQeBBQuTY8wg4oBpGobPIAeVKvBXZcAW5VM4qQ+Sd6TdyWN2EXLTijR+5+XoxiAT9LRTC1+UqYAOQDiTPs7AZYAJ4idzXtNflv9ZX9cVjIeNoAAAAAElFTkSuQmCC"},673:function(e,t,i){function a(e){this.$style=i(679)}var n=i(22)(i(677),i(687),a,null,null);e.exports=n.exports},674:function(e,t,i){function a(e){i(668)}var n=i(22)(i(663),i(676),a,"data-v-702109a0",null);e.exports=n.exports},675:function(e,t){e.exports={render:function(){var e,t=this,i=t.$createElement,a=t._self._c||i;return t.isShow?a("div",[a("div",{class:t.$style.shim}),t._v(" "),a("div",{class:[t.$style.main],style:t.customStyle},[a("div",{class:t.$style.logo,on:{click:t.goHome}}),t._v(" "),a("div",{class:[t.$style.dropMenu,"iconfont"],on:{click:function(e){t.isShowDropPage=!0}}},[t._v("")]),t._v(" "),a("div",{class:t.$style.space}),t._v(" "),a("div",{class:t.$style.btns},[a("div",{class:t.$style.openApp,on:{click:t.goApp}},[t._v(t._s(t.isPC?"下载":"打开")+"APP")]),t._v(" "),a("div",{class:t.$style.split}),t._v(" "),t.loginUser?a("div",{class:[t.$style.user,"iconfont"],on:{click:t.goAccount}},[t._v("")]):a("div",{class:t.$style.login,on:{click:t.goLogin}},[t._v("登录")])])]),t._v(" "),a("div",{class:[t.$style.dropPage,(e={},e[t.$style.on]=t.isShowDropPage,e)]},[a("div",{class:t.$style.top},[a("div",{class:t.$style.search},[a("div",{class:[t.$style.searchIcon,"iconfont"]},[t._v("")]),t._v(" "),a("div",{class:t.$style.inputWrap},[a("input",{attrs:{type:"text",placeholder:t.placeholder},on:{focus:t.focus}})])]),t._v(" "),a("div",{class:t.$style.close,on:{click:function(e){t.isShowDropPage=!1}}},[t._v("关闭")])]),t._v(" "),a("div",{class:t.$style.dropPageWrapper},[a("div",{class:t.$style.menus},[a("div",{class:[t.$style.item,t.$style.activedMenu],on:{click:t.goIndex}},[t._v("讲堂")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goArithmeticTraining}},[t._v("算法训练营")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goService}},[t._v("企业服务")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goInfoQ}},[t._v("热点资讯")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goMall}},[t._v("极客商城")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goDownload}},[t._v("客户端下载")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goGift}},[t._v("兑换中心")])]),t._v(" "),a("div",{class:t.$style.bottomMenus},[a("div",{class:t.$style.item,on:{click:t.goChannel}},[a("span",{class:[t.$style.icon,"iconfont"]},[t._v("")]),t._v("渠道合作")]),t._v(" "),a("div",{class:t.$style.item,on:{click:t.goRecomandAuthor}},[a("span",{class:[t.$style.icon,"iconfont"]},[t._v("")]),t._v("推荐作者")])])])])]):t._e()},staticRenderFns:[]}},676:function(e,t,i){e.exports={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"common-header-container"},[a("div",{class:["common-header",e.theme,{fixed:e.isFixed}]},[a("div",{class:[e.wrapperClass,"common-header-wrapper"]},[e._t("left"),e._v(" "),a("a",{staticClass:"common-logo",attrs:{href:"https://time.geekbang.org/"}}),e._v(" "),a("div",{staticClass:"info"},[e.showMenu?a("div",{class:["menu",{hide:e.isShowSearch}]},e._l(e.menu,function(t,n){return a("a",{key:n,class:["menu-item",{on:e.routerName==t.alias}],attrs:{target:"_blank",href:t.link},on:{click:function(i){return i.preventDefault(),e.jump(t)}}},[e._v(e._s(t.name)+"\n "),"算法训练营"===t.name?a("img",{attrs:{src:i(671),alt:"hot"}}):e._e()])}),0):e._e(),e._v(" "),e.showSearch?a("div",{staticClass:"search"},[e.isShowSearch?a("div",{class:["iconfont","close"],on:{click:e.closeSearch}},[e._v("")]):e._e(),e._v(" "),a("div",{class:["inputWrap",{open:e.isShowSearch}]},[a("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"searchInput",staticClass:"input",attrs:{type:"text",autocomplete:"off",maxlength:"100",placeholder:e.hotWords},domProps:{value:e.query},on:{blur:e.blur,keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.search(t)},input:function(t){t.target.composing||(e.query=t.target.value)}}})]),e._v(" "),a("div",{class:["search-btn"],on:{click:e.search}},[a("span",{class:["iconfont"]},[e._v("")]),e._v(" "),a("img",{attrs:{src:i(672),alt:"new"}})])]):e._e()]),e._v(" "),a("div",{staticClass:"userinfo"},[e.loginUser?a("div",{staticClass:"profile"},[a("a",{attrs:{href:"javascript:void(0);"},on:{click:function(t){return t.preventDefault(),e.dropdownHandler(t)}}},[a("i",{staticClass:"iconfont icon-profile"},[e._v("")])]),e._v(" "),a("div",{staticClass:"profile-dropdown",class:{show:e.showDropdown}},[a("i",{staticClass:"arrow"}),e._v(" "),a("a",{staticClass:"navbar-item user-info",attrs:{href:"//account.geekbang.org/dashboard/info"}},[a("span",{staticClass:"username"},[e._v(e._s(e.loginUser.nick))]),e._v(" "),a("span",{staticClass:"cellphone"},[e._v(e._s(e.loginUser.cellphone))])]),e._v(" "),e._m(0),e._v(" "),e.couldReply?a("a",{staticClass:"navbar-item",attrs:{href:"/reply"}},[a("i",{staticClass:"iconfont",staticStyle:{"font-size":".75rem"}},[e._v("")]),e._v("\n 留言回复\n ")]):e._e(),e._v(" "),e._m(1),e._v(" "),a("a",{staticClass:"navbar-item exit",on:{click:e.logout}},[a("i",{staticClass:"iconfont"},[e._v("")]),e._v("\n 退出登录\n ")])])]):a("span",{staticClass:"control"},[a("a",{staticClass:"pc",on:{click:e.login}},[e._v("登录")]),e._v(" "),a("a",{staticClass:"pc",on:{click:e.signup}},[e._v("注册")])])]),e._v(" "),e._t("right")],2)]),e._v(" "),e.isFixed?a("div",{staticClass:"fixed-rect"}):e._e()])},staticRenderFns:[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{staticClass:"navbar-item",attrs:{href:"//account.geekbang.org/dashboard/setting"}},[i("i",{staticClass:"iconfont"},[e._v("")]),e._v("\n 账号设置\n ")])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{staticClass:"navbar-item",attrs:{href:"//account.geekbang.org/dashboard/buy"}},[i("i",{staticClass:"iconfont"},[e._v("")]),e._v("\n 我的订阅\n ")])}]}},677:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"Footer"}},678:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,".WtP5PP79_0{background:#fafafa}.l6aXLfrU_0{width:100%;max-width:1400px;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;height:45px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}._12M2EHoc_0{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:11px;color:#888;white-space:normal;text-align:center}._12M2EHoc_0 a{color:#888;text-decoration:none;margin-left:5px;line-height:45px}._12M2EHoc_0 a img{position:relative;top:4px;margin-right:5px}.F5HBRb7i_0{margin-left:20px;-webkit-box-flex:0;-ms-flex:0 0 17%;flex:0 0 17%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:12px;color:#888}.F5HBRb7i_0 span{white-space:nowrap}._1Mrq_d2y_0{margin-left:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}._1Mrq_d2y_0,._1Mrq_d2y_0 .lV4by6QP_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:45px}._1Mrq_d2y_0 .lV4by6QP_0{position:relative;cursor:default;margin-right:16px}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0{width:25px;height:25px;border-radius:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0{display:block;width:25px;height:25px;color:#d6b88a;line-height:1em;background-size:100%}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0._2RNene5h_0{background-image:url("+a(i(681))+")}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0._3GMyWGDp_0{background-image:url("+a(i(683))+")}._1Mrq_d2y_0 .lV4by6QP_0 ._3bzMOyip_0 .A6EymYX5_0._3arAtDLc_0{background-image:url("+a(i(685))+")}._1Mrq_d2y_0 .lV4by6QP_0:hover ._6JLLJHV0_0{display:block}._1Mrq_d2y_0 .lV4by6QP_0:hover ._3bzMOyip_0 .A6EymYX5_0._2RNene5h_0{background-image:url("+a(i(682))+")}._1Mrq_d2y_0 .lV4by6QP_0:hover ._3bzMOyip_0 .A6EymYX5_0._3GMyWGDp_0{background-image:url("+a(i(684))+")}._1Mrq_d2y_0 .lV4by6QP_0:hover ._3bzMOyip_0 .A6EymYX5_0._3arAtDLc_0{background-image:url("+a(i(686))+')}._1Mrq_d2y_0 ._6JLLJHV0_0{display:none;position:absolute;white-space:nowrap;bottom:110%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:5px 10px;text-align:center;-webkit-box-shadow:0 2px 7px 0 rgba(46,61,72,.12);box-shadow:0 2px 7px 0 rgba(46,61,72,.12);border-radius:5px;background:#fff;color:#888;font-weight:400;font-size:12px;z-index:50}._1Mrq_d2y_0 ._6JLLJHV0_0.HazgCUjH_0{white-space:normal;width:110px}._1Mrq_d2y_0 ._6JLLJHV0_0 img{width:72px;opacity:.6}._1Mrq_d2y_0 ._6JLLJHV0_0:after{content:"";position:absolute;bottom:-4px;left:50%;-webkit-transform:translateX(-50%) rotate(45deg);transform:translateX(-50%) rotate(45deg);width:5px;height:5px;z-index:51;border-left:0;border-top:0;background:#fff}@media screen and (min-width:860px) and (max-width:1192px){.WtP5PP79_0{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}._12M2EHoc_0 em{display:none}._12M2EHoc_0 ._4D6VOtS7_0{white-space:nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}._12M2EHoc_0 ._4D6VOtS7_0,._12M2EHoc_0 ._4D6VOtS7_0 a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._12M2EHoc_0 ._4D6VOtS7_0 a{line-height:1}._12M2EHoc_0 ._4D6VOtS7_0 a img{top:0}.F5HBRb7i_0{margin-left:5px}.F5HBRb7i_0 ._1Mrq_d2y_0{margin-left:0}}@media screen and (max-width:859px){.WtP5PP79_0{display:none}}',""]),t.locals={footer:"WtP5PP79_0",contentBlock:"l6aXLfrU_0",footerCopyright:"_12M2EHoc_0",footerItemList:"F5HBRb7i_0",footerItems:"_1Mrq_d2y_0",footerItem:"lV4by6QP_0",iconLink:"_3bzMOyip_0",icons:"A6EymYX5_0",cellphone:"_2RNene5h_0",email:"_3GMyWGDp_0",location:"_3arAtDLc_0",itemBox:"_6JLLJHV0_0",locationItem:"HazgCUjH_0",beian:"_4D6VOtS7_0"}},679:function(e,t,i){var a=i(678);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("817fad60",a,!0,{})},680:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAFGUlEQVQ4ER3BbWwbZwHA8f89dz6fz++JY8ckpWsarU1Z24y2wEZItw7tBbVhy6SyIoQYKmMCjQnEPoDGh2l8GF8qMU0DVIZEp34AhjTRVmVdFsS2VnQvaqGt+pKlaRo7TRM7jn32ne3z3cO5v58ipQS7QZePQEgfRy8QCfUD9X77+rmJf538+Actp6M/8PD2wz3btr0NQ4VWSxJ2HBAKILgjEUeRUuLaVVAkwpOoehp4/8GZk6eePf3PaxPSmTEWWiZqOsX6jIFTMjtjDw0dG9k3+Sfp3XVctupIRQEkanIAQaCmWNTlGtJMg940pn/3xvR3n5naX2/OG3fHVA4at3nWWOD++3L03JfTDj7z7hOnXn3lmBJRw7au0OQTXO1TugRdqkCoCTRRHmyde/md3x6tcuDgEN8brJH8wyXKVz3Ksx7Vvb/nm94Fnj/yFIf/7iKv/vFvMbNpCCOGEQ3TJQjEWhbRcHXk5vEXZ8f3XhhPDef4ceYCc0driHUpPKsNLR+lL8WZ506z3zxH7qv38vW9J/atfPjGdXv+/KbL7/2DLkEg3HLQmu/Ejl2N6x8t7uSxnRb18zXEzSpKKkx41aN5+jahDb0YdYfSn88y+Uib6c+28OYHXj6mNCKIUboEgepKadD/z3uHfCUCmk3CWqS2BCHPhdUmykYTfUcKcauBjk9pzmGgpwWKQqUuCPdphzaPTW4gIAjMX3n3yXaxOJaO6dAJI/N5MmP91JFY9/fiHRgk9tIo5vPbEH0m2R0ZGnYbpCSfNaFw/sHVhTPfJyAImLH0SM1yGeprgtHLqbMm2p4E5X3r8YoWyv8a2Cdu486tob8wRs9Pt/PWkQoQZXSrRmN2mWZhdpCAIOCvLu6rVTTuGbQY/JLO629G+fcrBUZ35UmacexLFfzlFs0LFeLFNS6+fI1Xj4TJjabYOlClVGzhrl4ZIyAICK2RsmqCxMo19j/i0XFjuMeX6P3Lp4iBEO0+FT+rkdmTJz99ndLhizTaKpMTIeLlGayahhYXIQIagYj5+Smx6caElxvg6S9bHBro4/XiCO7CJXrLM4hkBOdSBWs4SzGd568iAokUT39lmU58kNQXFMz0uhMENO4QWVmTLM5a3DMyx69/voMXXxjnuLUVai4TdpmelOCtE3HqmECan/3IYNfwDIszQNPG71jbCWgEtFR7Zyeew11yKSxf5idjYSanokyftLkitvHols/IR0p0jg3Qrjis22zyy0dvcPvMDWzXwMjoaCl9MwFFSkmr/tG3y2d/c9RZatMquVCYZ+Pjo4RzBnhlvLJGfdkhuaEH1vdCocTc21dx4hliQzEi/SbJ4QO79fQ33leklHR1Gv/9zurFQ695TSdZ+mAJLSrp3z2Ct+rg2g2EaWD0RFH0EOUzs3Q8jeTOjbhNyslN409FU4kpRX8YjYDrzOOsOMXmUsQxcn4yt2cYr9rAs2pg6qh6Cj0C7bU6jUIFY30vxmCO1ppNs2jJyLo6aiJBBBAEZPs6Kh/+IvvFeH8onadV9fE9Dd9Taa5YIH3a5Sr1mRUUNQSKQvNWiVBEkPtaPqOb1g99hzsEAV1NEO7d9bhlJ1+zC4WGrq6RyHYIKTa64qK21pCOQ3xzhsRwAqHX0ZI6Srr/Zke791eaefe3VH2FLo0u6aKENLtWjj7nXM695FRXHmu5C7s/t6Vvi28pMSMlerRIHOsWNyN9KVvLjp9fnV2ecuYrpwZ2Z31FVZFek67/Ay4iNxP5+UK0AAAAAElFTkSuQmCC"},681:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAJEklEQVRoQ9Vae3CUVxX/nbu7SQg0tAoy2uBQOkD2W7CiFGkFLK/sboBWYwdaeY3WlgIO2pL9EqnOLK0t7LcBlPoY1EKxgEBVcKDZXfrgJSRgpUKSbwMRKQWq4GNKgASS7D3O3WQxySTZRzad4ftrZ+45v3t+93Fedwlp+KqDaz7B1DRZQIwF83AAwwAMBKEfGDYAVwF8xIwPidhk4LiVLPtHOItq0jA9KFWQqn3efpYb2Y8CmMeE+wFUgHGQwKYkPmVtsl7KbhDXc5HbWJl9JicrC3c1N1uHAjwChHFgTGbGDQjaTsQbtXy9NlVbkiZxanfpgGarXEaEpwAcIuA1q8zaM6xg6c1kjajaa3yeJOYKtRBAuRD8o7z84neTxUmYBHu9whzX5ykBWsHEuyMRWjmqQD+T7ISdyZ8I+fvaGE8C7CFQSDSRPmJm0b8TxU6IRE3If49kbAYgBWNJnttzMtEJkpGrLVuX0yQaVgD0OAFL7C7994noxyVhhnzTwLSVCKvzyusN8nplIsA9kakOGhMI2Ayi7fb8omIi4u7wuiURDvq/weA1xPSY3e3Z3xPDktUNv/XSJ7nZtgskL8grDQtGzvI2doXRJYnqkG8OgXwAuTSnpypZI9Ihf37Hmj5Xc5p/SwDl1Q0ppFmzIp3hdkoiHFjlZCFesUBMTZcvT5VU1Q5vhsjJVnfjvObSFydEIhxYOQRkOUoChXn5+uFUJ0+n3ru7vdnZtuyjzPRTh9uzviN2u53gHTss4Zz3DzPhdw6nXppOQ3qKdSpUmhdheUgwTenoHduRqA74lxLx1+xOz+R4HqGnRqWiXx30PU0Q8+zOovFt7btFovKtFwdZmm1VEQtPHDWtOBxvkhNlvlyboBIABQCGEOikRGSOw1VSHU831XEVcMPjso8weL3DVbwxhnOLhBk0fCDqpzk9S+JNEg74H2LinQDuBBAGuBKgQoAqNJdnQjz9noxXBVaNJ4hNl7PqR0ya5G1WWFESJ/esvMtqtfxNWuTokdNKPuhuksrQ6sEWjqiITUQ0z+707Fby4aB/A4O/GbGwlshO9oSIGTL2s6RfO9welUW0kDBDxiIwP6S5imfHAw+HfD9hpqVgTNfcellMvibomyRB7wDk01wedcx67TNDvq+C8YzmKv5KWxLlkHihrVFdWWAGjdMMRBwu3d5WRp3XmnHZ5ySj0eHW7+01BgBaY8dFQTQ2z+k5S7VlLw1sEtba+gH9B44Zs7Ap3uRm0GBibLG79bkdZasDxkoilIBoVG9HeTNovALguObSf0ZmyJjNEnMcbv3heASiRy9oSBC2aE59Xkd5M+DzgMgQAuN7O1BG8zriRzWnXkhm0LcWoH9oLt1IkMQ5Zpx3uPXxbeWryko1IfgowP+1yazhqRRJicwfk2l1MMc0l/5ptRNvEPALu1PfkwhIOGTsYMYjmRb5qXunlVxROi2JWtNfARpKTBPtbk95Ilg9lTGD/quZlkgumUF/rWA5I89dfCoR0Gh2y7QZTN/W3B51LpV7fZLBvyTm5XZ38cpEcNIhYwaNvwjBC8kMGnU2mZU7rGBpXSLAZ/d5sxpuZp8HcNleUT9KFUlm0NAB+Iily+4uCSWCkw6ZcNAISBLrFAnWXHrcCq/tpGbQ/0OAn2fCEw6nvqEm4BshiaoJOJ5XN+SBrvL+dBje3g7fdhD9ISUS0TvQv7mWGDarbB45rGD5v8yQ3wCzh4i8dqdnRboN7gzPDBrbQNiZ9HGKgbVETdqpQJSbqy1bl9kkblQAuI8IDyfqKHpCts1xSu5it9vOgP9VEC8A6BnN5fmxKqiYLMdU549BMxxOzzs9MTKe7v8vdpIuti1wS79IxQbkMbPT4S5+uybg/5wkPgQgE4QFmlPf3tEYlXDaKGNg3vXBZ3pyf5RTyrTIwS3BjvGh5i72x2Pe6bncawyDhDpGVgk5caSr5ER12erRJCIq7nyGiNddb2z4/piZ3npVOZr9z71AzMqbWQC6BuYjRDgsif6Uc8VSPnjWsw2J2NEx2CWVdnQ2Qc1e48uS8SaYPxKMSSrmnNq95u6ILbINYBXZPwBoLcAzAExR2T8Yb4PwIIAvANGms/qug2me5vaoWqXbr13aEUsAL2XWD4gVGfEAOhsPh/wzmVl1Ja6wtOQ7Cpa9p1a+JufsIga9CCAnqse06Y6rlkWxFVdNgL7WvmNZkSV8D8A1zaUPiWdDuwRQCZshI+FUvDvw1lZPyypK+pbm9mxTP8+8uap/oxQT0CzP2aeXVHaFYQaNTQDmx4tbran4BUH0pWgqHiUR8C0G0UTNpT8WbwXijbfeh10APqtWPdMa+W4sx4qnawaNCgLusbv0Qd3JdloUJVOexjNEjav2f8TG6wEuJOAyA89dyqx/tbvjGg4YjzNhKzFetrv1pd2SCBr7AN6guYpfU3IpNQoSIdJ6TGcTo5SBXADvE9PLzbbGLaOmPncphsHMFA75nwDwcwD/JGvzaPvU5f/pao4uGwVKIdaysZCYkM7WZbR7l5G9EMAyMO6OXm3QSSYZZqYbBH4QoOHM+LuQFrd9+rLTXRGI27JRir3ZPNu3z2sddCM7H4ILwZgAkPJAVnXvVRufbvLavEeK1dtel191wL+QCPO7bJ5FvV9LG/MIE16/bduYisht31CO7WN1qNRNkL8SkqckWvEletmTlYu19olw0e7Un+5M/3Z4ZNlKgEj6keXWjgT8c4m4lCRm2wv0A8muYk/kbz13gS/Kuvr5KT13xQwI7zXyWWILwKX2igb/x/HwGE0oJbYy8LpWUa/HmzOh2jr6BAzeCkYTReSS7vKfnqx+zR99d8gMWkGEOQAWp+0J+FZkbXG/3wHwAwC7IhKreuMxnoH90tr0bNuoHm9hEtqJtiCteVERwOpvEQeJ+TdW7vNGKh2/quCq+wRZ5hDzAgaOSRbPj3QX/Tme0R3HkyYRA1Cv/42i4esEmg/gi2CUM+EAMYWZIqfVH1Qy+l27NuQAGivHZPbPsFnvjEg5lAQNB9MDIJ6sjicztglp2dhduhGPVMok2gKrwqqRrA+RoPtb/yqk/i40EEA/ABmqUAJQx4wLRAiD+T0IcTBdnfP/AciLYQ9XOyq0AAAAAElFTkSuQmCC"},682:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAHoUlEQVRoQ91ae1CcVxX/nW93eS/PsIRHBMojsCSpqeZRmyattiyktlNbJ3VqGrWjTdrpOI6F5Q//YRxrBapOnYlOxwd27LRJtNppmwA+Goc0sbEJOgF2YzYhQMMSIGxgCSzs47vOvcAKZGHvt0Cinr92Zs/rd88955577kdYAeps/lEqI99nFShbwVgxgCIA6SAkgMEAYAzACGNwEjEbA9r0pPvrekvV+RUwD4pUScfx2gTdZNwXATzFCLsA6LTqYgxdUOgwEWs0l1sdWuVn+TWD+Ne7L6/x69UXiPAsgKRIDS+QUwG8qyjseyXlNWe06pQGwWprFdv22GcI9CKAVK2GJPkZgX6t+Mi6/uGqa5IyctvpfEtDvsrwOsA+I6t4mXzDBOwvrbC+JaMnbCRsLXUPgtERAMkyCleUh6ihtLyqhojYUnqXBGFvbniSgTUCiFpR57QoI3ZIHfV8ZcOeWu9iYouC6Gyp+zIx+g0gt+W0+KWVl4B3Stx5j9GePYFQsiFB2Jt+YGGkvHNbI3Cztz8zV1ifkwJhb3opj5GuDUCK1hVbbX7G6EBZZfWrC+3MiwQ7ckRnT+w+CWDbajsUof5JhdG2ksrqc3Pl54HobGr4JhF7JUIDt0iMTpVaqnbMrVhBEO1/fjFD5zdcAJAo440hxoi0/G1ISL8DhtgkTI4NwnnuKKZuSJ9RMmZC8jCwp8sqanjVFBQEYWuurwNgldEcl7oOOZu/AJ0+GlPjw5gauwZjRhE8I070/P1NGRXL4uE912DMxPr776/1B0Gce++lFL1e3wuwhHDaeQTy7/maQN937ihuDF0SIpkbKpCcvRFdH/xKAFttYoyeKqusfj0IwtZS/ywYfipjOKPkc0jNvQsft72FG0NdQZG41E8gd8sTGL58GoMXWmVULZOHtZoranj3PL2dbC31fwPDdhmtBfd+HWAMlz745Xx2IhTu3A+wAC62/lxG1XJ5mEJUUGKpvkyOY99P9yn6AdmTudRSjdF+m0jihWQq3imSvetk4y1JcADPmyusB8nWUv8EGA7JLosA4bTB2X4ziLT8rTAV70L36TfgGemTVRk5H+EPZov1MbI11/0YoG/JairctR/+yTHh6FyKTkhD3va9CPgmcenEL8DUkG2OrBlZvqvmCmsmj8RRMOyWlcq+8xEYTYW4cPwgVP+UECOdHnfc/VUY4pJEieWl9lZRtE5NJltzgwNghbJGkzLNyNr0EPo7mzFypV2IJedsQmaZBYOOExju+lBW1YrwKQrbQrbmejcAo6xGUvQo2nUAfu8Euk41iko1mwu9Z3+H8WuXZVWtCB8jZTcHseStKZSlNQV3I71wB/o7mjHS146o+FQU3PM0PO4BdJ/mt1jNKiMHRPhSRCB4DhTu+AagKKKcBrwToirxiAxdPIlrl05F7pRWyRkQmrbTrA2jqQg5mx/F2IADV/75NkjRieoUYzTh47bfB9sRrT5p5Z/ZTtoSe66RrI2VSMragIHz78PVc1Z0s/nb90LRRYm2ZNzVq9UnzfzTia2xxM61ougMYvWj49PQe/a3GB/uQbQxHXlbnxSRcbYfg/vqzZNKnSEGuqhYeCdGlp0/MyVW22G3cKmi4lIEECJFnBH8XhGTaMK6ux6HPjoBrp42DDlaoQZ8ABFMhTtEa8J/qwGvOFMmrvfBc/0KJkadYAHRXctS8LDT1HaE0h6bnI3cT+9BwD+Fno8OwTvugj4mAdmbHkZcSg58k264us8gIb0A8Wm5mBobwrirB1wuJjFDLAAnDpS3MzzPpGi27dDaAC6mnDvIE131TaH37BFMugfFaqes2wxT0b1Q9NOjq1FnB/ptfwquON+SMUlrBdjU3E9B9ftwsfWmWcBiZqcbQP6vllZ8qRWKX5OPdZ98VLA4O5vg7p/OB0UfHYwIj8JilLVxN5KyymBvaZAJxH9acQGiqe45EB2UkQzHw/OBX10NMYli1a/a3w/2WOFkeW7xCuc4LuPKgkuRlutpOEf4/7zyZJrLYcwoFu3JkOMERvs6wBif4IemxMxSZG/6PFy9bRiw/0XCDNtnrqjhE8rIBgUSFgRL4toSmNbfB34v93lGhYNupx1+7/g8FbyBXGt+EP6pcVw+9RoCPs+SJkIOCriE1pGNLBCeuMk5dyItb4uoWJx4GfbecIGpflGhouJT4POMgDeQ3vHrYVUvOrLhkqs5PONlNH5NHoymYpHkhthEUVq9nhFxU3T1nIHqX3TwPQfYEsMzzjUzxuTd29awy3F7GMKPMblf//MD5dnF7Wx5uZKY+vZ/02ifCK+WWqwHQm2A/99HlmBEmhr2EjE+Jbt9z13AYdU9sS+i565ZIPY/1pczFYdvx8MjA35o/nDCSrW1i5+SslM/8QQM9obsqHMFCpeLgGdW7Al41qGZ8vs8gNpVjAofMbyp6n3f3vjAd/hoVYrCvmMv1MI/iwgYWBXA+GcRUg8yEp7w7XJMZcp3N1RWfSTBP49FM4hZacexnyR6Fc/jBNoHYCfvuLUaB9DNGA4pqq6x9KEX+CtVRBQxiLnW+MXKS/r7SKEtM58K8c+F0gHwZolXtlEAbsZwhQh2MPYPKEqr2VLdEZHXC4T+DdCRAQCP0JG5AAAAAElFTkSuQmCC"},683:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAHeElEQVRoQ91afZBT1RX/nZtkv9wuRaFOZ9YZagskLzCUKSpO1SLC5mWpraUWpCD+U4WCQ6dl84JtZxr6IZuXFVunneqI0hZFgVZx+MjLjjPAOgpaK8XdTcDV2qlAi2M7ddFduknu6bxswuwy2X0fCVaaP3PPx+9377nnnnvuI1Th12tsvpwpO19AXAvmaQCmApgMQiMYPgBnAfybGaeJOM3Aa17yHJweajteBfcgt0Z6DsQaPecabgdwJxOuAXAEjC4CpyXxCW/We6ZhUHzYjOah7oa3murqMDGX814N8HQQ5oIxnxnnIGgHEW9VWrQ+t1gckzixp2NSzivXE+EeAC8QsM0r6/ZObV33H6cgejr1z5PECmFOBHBYCP6pvyX6qlM7tklwLCbSc+vvEaCNTLwnn6dNM1u1t5w6LCd/LJW4zMe4G+AIgVIiS9r0W9ves2vbFonjqcRnJOMJAFIw1vrDkdftOnAi17f/oaasGNwI0DIC1gZU7Q929C1JpFPxhWDaToQH/IcHdIrFpB3Dlcj0GvqNBDwBoh2BlrYoEfF49sYlkTES32TwZmK6IxCOHKwEmFPdzPP3X8E5326QPCnfH7xrxpLY0Fg2xiTRm4ovJ1AcIFUJRXqcgqiG/Ds7N9efbco9RQD5+6cspiVL8uXsliWRSbaHWIjHPBALqpXL3ZLq2RmrEU0N5t54R1G1NbZIZJKbpoA8L5PAYn+L9qJb59XUe3VPrKHB1/AyM/0yGI48cqHtUSvBO3d6Mk1/fZEJvw+GtI5qAqnU1olUhz/P8gXBdMuF2XEUid5kYh0Rfy0Qisy3ygiVgnKj32vEVxPEnYFQ2w0j8Z0n0f38z6705Hw9eQ/fNHNhNOPGycXWMQ/czNyGlxj8SFCNbi35O08ibehxEDUqocjaiw2mEvs9yfYbCOK379YNTL/55ljOtFUg8freTRO9Xs+b0iNnz1i44W+VOPkodNMp/SBL2hIMR8wqYphEOqV/G8zzFDW61ApEOhW/DUxbAFxhJetw/J8g/pYSiu620hvGgO8qavRLI0kchsRPlLC239KAof8LwESAu5hxwErezjgRmWDmmXcORdUmWukUz45TguhafyjyNvXtv39yVnj7BiZNmDxnzqqslYG0oTPARwGaDWBLoH/K6rFOUitbw5XxZb8g8L0EOsbgWYqqWdZzhegx9McAvKao2q8ondKXssTyYFj7ipXTojIz80ZB5GPg+yA868vXLXN6nxiezfptAC0B40EG9xPRj+ySKNR1xLcrIW0xpY34gwD9XVE13QmJYDgaSxv6dwD8HIRDtUJ+9bMLN7xvx8bx5+KfkLX0DIAFAG9Q1Gi8NxmPOSHRnXrgKg/nX1FU7dPmSuwj4NeBkLbXDgAznMyVMEmY8sVK9zcESufzrM5YpP1jPDvF8E0CmM2Eu4Mh7XFT3imJ4ahInK315JspbST6BMsv+8PRE25IFIgMF4zPgnGakVeD6n1vlrNl1mVMnk4QmplpWVCNPFeSc0dC/5MQvIrSht7vk3XNU1vX9bslUZjJVOI6Yt5LgJTSowZb1x8daS+zr30me4QBoBEkblVCbV0jx92QyBh6UpJ4yCTBdjfTyI1dCqeRQIpFWieACQJ8m1+NFlKwecoKEvsADAimULnrrRsSaSO+A0TPVJWECfjY/nizT1AKwOeYsYJAOQh+0gw1rzffMm3BfX8pt+LuSOhPm9mxauE0KjSMzZcTcmaiuL74/5+zRKFZoci7Y4WsGxIjwqnyjV0O2NsHYnXnhuqXMpMvS/TUrFDkw/H2nBsSaaO0sStMsXaSgR0ZlyT6az3yquHDjnFaCUcTdpxdeE7Y0bEj45TEhYedq7KjXHayA7Zae2JU2VEqAM/UDkwqXTLGA/NxWYlRBWAh96d0J6X4qLKjktl3e9gVS/GTgui6QileIJGMrwHRTYqq3WEFKmPoZxh4j5l3Wck6GSeibwD4lKJqk630yl6KnFxPize7hwFcaeXMyTgB5hmyxk4TOW3oBwB+XFGj20wf/z+NApNNqWXjIXHj/7p1OdYKWrZsTMWPffMsmVhFhJVjNs9MEsU25ktM2HXJtjFNIpd8Q7kUi72pjjBBPiok32L3xuckEzmRLbX2iXAqENJWl9O9FB5ZthMgHD+ynF+RZGIFEXeQxNJAq3bIyQxWKnv+uQt8SvYPrHT13FUCkenUW1jiSYA7AkcGEx/Fw+PxTv2LUmI7A7uUIwOalU9b3bbCEzB4OxhZysu1gUUbuiud6XL6hX5UDW0kwnK7p/eoE9sKVDH93gvghwB25yXaL8ZjPAMHpTf7vZkLfnDGClNp3NZKjDRmfhaR93EbwOZnEV3E/Dsv1+9z2sY0bfYY7bMEeZYT810MvCJZ/HhGuO2PdsG7JlFSNF//h8Tg1wm0EsAXwDjMhEPElGHKv2F+oFLT+MEHUw5hqHtO7YQan/eTeSmvJkHTwHQ9iOeb4cmMp4X0bA0sWv+GU/AVkxjp0LxYDZF3Hgm6pvipkPm5kFlSNwKoAWD2aPuZcZIIGTAfhRBd1Xof/y9spQ0PWQGe8gAAAABJRU5ErkJggg=="},684:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAF/ElEQVRoQ91aaWxUVRT+zpulGy1tbaFFyiJL2ylNCHvQqDTSaUETwlKNCib+QEA0RtrpD/9MjIhtUSMRDT8MJhIFKsGA0A5qMCSgxgJJoTPQomALlBYopYPTZabvmDt06tD1vtehBe7Pme8s3z3n3XveOY8QglVV/kk8kzdLgTIPzNMBTAOQCMIoMEwA3ACamXGViJ0MnDKS4ddUa/65EJgH6VVy9qh9lKEtciWA1Ux4BoBBqy5m/A2F9hDxTku2rUarfACvmcT5g1sTfEZ1ExHWAxit13APORXAQUXhD9KyCyu06pQmwXa74lwQsZZAmwHEazUkiWcCfa14yZb6Qv4NSRm5dDrnKJmsMnYBvFBW8RBxNwl4Iz3Htk9Gz6CRcDqKFoNpL4BYGYUhxRCVpGfnFxIRD6R3QBKu8pKXGbwTgDmkzmlRRrxbvd362ow8e0d/Yv2SqHIUvUJM3wByKafFL61YAg6ktUxaTnl5nX3J9knCVfaRlUk5MKIR6O3tl5Yc2wYpEq6yLZOYDKcAxGndsfuNZ6Z1GbkFO3rauScSvHevwRVz6TiA+ffbIZ362xSm+Wm5BZXB8veQqCoreZuIP9NpYJjE6ES6Nf+p4BOrm8SZnzePNfhM1QBihskb3WYY/HpGTqE4Nf2rm4SzvLgIgE235mEUFDVXY7gnddEiu6+bROWPW+KMRmMtwKOG0ZchmWKm1Rm5Bbu6STgdxevB+EJGa/SYaUieYYXBFCEDl8Z0eltRf9YBd6NsMcvHLDmFonq+m05OR/FvYCyQsTg96y0YTOHw3LoMT1OtjMigmMi4FETGp6DT147qX7YNiu8CsEI0Jc1acJFqDn+Y6FWMDbI3c7q1AG0tjQiPGYPmy5Wodx4BeMDSpn+niJCUloW4CbPQ5m5EePQYuBwlsiQEbqMlx7adnI7iF8HYLSspSNz46wRAChKeWAB3Qw2uVB4Eq31WBP2qJcWAcZlLEZOUiqZ/KqD6OpAwZaE2EoT9FqttOTnLiz4F6B2tJK5fOI74ibMxNi0LnqY61J3eD9XXLqVGMZoxfuYyRD02EY3Vx3Dz4h9InPqkdhLANUuOLVlE4hAYS6SsAwhEQpAQKyY5HeMyl6D9zg3UnfwevvZ/B1RlMEdiwuyV/tSpr3Kg+coZP14nCYQZ1FhylpfUADxVLwkhF5UwGSkzl8HbfsdPpMNzq091pojRmDBnFUxh0f4UdDde6MbpJaEoPJec5cUtAKKHQkLIRoxORsqsFWAw6k6W+h/+4BUWneiPgGIwo+7UPv/pFrz0kmBSlggSmo6WnukU7Ig5Kh4T5uTBYAzzPyOBIzgybryfoNrpRe3JUrS7r/faM70kQHgppCSEZ6bwaKTMXgVzZCyunjkEZhWPZz7vT7XailJ4W5v7DPpQSYQknYI9E5eh2PmI2HH+n8UdUFdRCl+Hp9+s1UuiK52G/mD35RkpRsQkpYEUBS31Ln8qDbT0krj7YA/xiJU9EAbD6SXRdcTqv+wGc0zL/zpJdF92usqOwGWnxdGQp1Og7NBTAIra6YEgESgAxe5oKcUHuieGEhUd6fR/Ke4nUVa0AUTbZZyYtuhNdHa0wt1wXgYujYkemwqjORLVRz+XlOnxUqTl9VS82SVlLIbRHCVpTA4m7pBrzp/gbhC9CpnFayw5haJD+Qg1CgSbR6JlI4g89M0zQaKrjXkCwDyZrBwBzOBtTOHUQ99QDuxslWNrLrH6w4PU2ifCjnSrbV2fxWZ/KfHQD1m6I1JW8ioRfzXCEdmjtnjW6Bp3BYi4jhRns4o9IzF4ZOBjy+8eG9ntYs7d7xp0eiok/SNg8Leyrc4QnFpNBKwN2Qg44FDX8bsRgP0+RkU0RL9Tjd53M597T7RWpZZUJII1ic8iOk2cD7D4LCJUAxmRLodVVt6fkZv/p5TnQSDNJAKyNYe3xXQorSsItAbA0wAUrcYBXGLGbkU17Exfukm28utlRjeJYE3ixaqDjM+SQnO7PhUSnwslAhBDGzHIvw2ghRmXieAC82koyjGLteCsDuK9RP4DTdms8TFPyDwAAAAASUVORK5CYII="},685:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAKJElEQVRoQ9Vae3QU1Rn/fXd2SQgYa4UjKvSgFZKZxCqnQCm+EbKzUVSsRSs+etr6QJQqZGdB2xqsCjsboUWpWrUeq6Jgiw+UnY2eAz7BFB+VZDcYbW0FC6KtBBOQzd6v5252wyYNZGYT/+j8s+fMfs97v/c3hAF4mpyl32RKTREQE8E8FsAYAMNBGAqGH8AeAF8w4xMiTjDwto+0DWWBmuYBYA8qlEjj+tqh2r6SiwBczoQJADaB8QqBE5J4qy/l21myV7SNxMj9W0o+LC0uxhEdHb7jAS4DYRIYU5ixD4JWEfHDRpXVUqgsnpXYurZuWIdPzifC1QBeJeBRnyx+fkz13K+8CtFYb59MEpcJdRDARiH49vKq8GavdFwrwbW1IjFp8NUCtIiJ16bTtPjEautDrwx7g/9rPDrEz7gK4BCB4iJFVtn0ms/c0nalRHM8epxkPAZACsac8mDoPbcMvMC1rFtemhJ7FwH0IwLm6Kb1Zzf4fSqRiEemgWklEe4q39huU22tdEO4PzBNjn0aAY+BaJVeVRMmIj4UvUMqkXSilzJ4KTFdogdDG/ojmFfc5Et3Hskd/mdAcpvcvffKypm1+w9G46BKNMUjswgUAcg0AqFGr0IMBPzHq5cO3lPa8QQBVN46+kKaOTPdG91elUjGlgRYiIc0iKkDFcsLVapxde0gUVqifONjw7Suc6VEMrZ4NEh7kwQuLK+yXi+UucJTAqjfQ5mCG/qb19aWlPhL3mSmeyqCoft74nS7CV69WkuWfvQ6E/5UEbDq3DDIh1EHwNAuA1EA4O8AKM3+3wrQe2COE9KP6cGFH3mlvTVeV55m+apgOrtndOymRFMsOpeIZ+iB0JS+IkI34TNOqC0G6CcANBWKAWwFsA3IVAXHAigDIACkAf4D+dIL9ak3f+5FmSYnci1BXK4Hak7Nl69LiS0v3XGU1uFvTGt8+onTwkm3xBtjdROEkE+DM4JuJcLSfYP8q8edddMX+TTee37xEX6/9kNmng/QWBC2SylmVAZr/uKWl0q4yUklbzD4/goz/HAOr0uJhGNHQDTUCITmuCWajC+ZzBAvgVFEwKK2YYcvHj/+mtSh8Ddvvt8/5LPdCxm4FYSvCHKqHljwhluejbElpxLEI58Wt5eddVZth8LLKKFOyefTPpCaHFc5bcE/3RBsro8cIyW9C+BIEC41AtYqN3g5mETcvhiMlQA+F4JPLq8Kf+IWPxG3N7CkByuCIVVFdCqRiNuzwXymYYYv9kBoDRgziGm+Hgwt7Q1P1UTq/UmBUFtv/zfF7RpiREF42ghYF7rnHbkAjJsMM3xGvhIbIfFrI2itc0OouT4yXkpSttygB0KT8p1s/fpa34h9Q+YyYTbAJ3TSow+Ice+O4rblORNQb5mZkvHoJgATheAJbivYbO7YLogmlgdCf6eWdXcOTwlfS/uww4f3Zc9dpuBEfg/QVUSYrges53PvM8QPK1kLQhWANjA68wzhFABDwKiXe9qn5+eNZNw+lxlrAX7AMMOqvHf1JBz7IQBvG6a1gpRtssSsiqB1nivsTvPbppxZbx09Ir8USDr2HQzcrITVOsSsXDmtepC0Tz6ulCPgTt20bsnxyuamHcrJjYA10q0MmbqO+CJlhpRwIssA+pdhWrYbAtlQvIOA53TTOj+H07JueVFK7FNxf0+K6ISeftDZM8gWgEr9svjI/CYq6djPMnBe2pcaceLUW3a6kiN+1yiN0w2GaR2tbuIFAu7NN4tDEVHdmJB4hxh360FrbpcpqXxBsoFB91SYoRt6dWQnejeBr5csJubnh2TMXs6EG6TAuMoqS0U8V0/Cie4p0tIjKeFEWwTLc8uDYZVh+3wyyY1kAxjLjKA1L4fQXG+fIiVe62ku+QRz5iYETs2vy7LWcCORGK8Hat7qU4gsQMKx3xKCr6GEY7f6ZfHIMdVzW90gZ+zbL3cxKF5hhsyum3jBHiE0qFi/yTCtyb3RSji2SmqTZBrHVJ5j7cjBNDlRh8ABLSWGe2lLk44dkySWKyXYMK0+O7x8oRKOnQBwnF8WH5WvfMKJrAMoyODZFWb4vnyczrqH7gU4Zpjh6q4bfDZymCymnWB8ZJiW4eYgczAJJ7IKRGsKUiLp2L9iYBGBb9DN8D0HTnTxCQStAcARAK1hxtPqPyLMAFgls/8w0hMrzIUfdAkSi1wHohUE3Kqb1m3elLCfVInSszkpJtkI9Q8Cdg1t9Y0dNXPe3hzzLS9GdC1NjwL4bg+B3kprfHl+canqqMG7djcTYZQQPNpL6aFo55mTN8c+cJX2bwD8HIxfGkHr9nyBVSZO1NdNhMTJmfcC7xpVNQ09y/uEE70R4GUA7jNMa7aXW1CwBxzbY4jNMcpm+vcB+LWUr6xs+rztXoRIOMuOBlKZMWaKaMxJgdCnXvCzSrQWaXJUZ7JjfGIEw1GvRLqclVGvmyHTSyOVcOxnAKhkeaNhWr/1yntLj2TnuezIMcwUcE7UydRKzHOMYPh3boRJxKI/BfGDAL2mb2o7o5BZVreyI1cA7ixqH5ZfYboRRsFsXbv02LS/oxGEIpkW4yura1T4PeiTdXw1b+3w+dLjxk5d+De3vPLhuhWAGduK255K8Z5Mm5zoTAKrpqilSJMTvj1twe7eBGtWOaGI3gSgE+NSPWg9UYgC2VJ8myD6XqYUzyjRGatPN0zrkkKIZp0sE61UWW2YofN7+ke2d1gD4AIAKwzTur5gXvFemqJC2tOeAqhm6Kj9JarfPgPgOwwz/It8mGTMjjKhRvmBbG07uz+zqIRjr1cTE8MMq3x0YMlSyKCgpyLZJKgy9rfA9DMjGFKNS+6mV6gOzy9Tk8dU37yr0Fs46KBAEcyNbDQSp/VndJl1XFXolYIxnQRpzKzC6b8hMLk/G6E+RzZKkUKHZ//r6JnR/IugzBANYJAQmNrfsWhTLHoNEa446PAsw6tzjPkGE54qZIzZzQfi0enM/Ih6J5l/XBkMP1eoCWVCudsxpgIeyIGyuv6M4/VzMeNpoJw7qaZ4XZAgHxCSz3bb8fXnlA+FmxvtE2G7HrCu7Q32/2HJspIA4XnJ0nUjsehlRFxHEhfr1dbLX9dp90a3a90F3i5b268oaN2VI5yst6tY4nGA6/RNe6P9tW83B5EdOqxk4CljU7vVF09XvXVmBQxeCUaK0nKOfs6CLW6E8QqTqa0G0SIizAJw3YCtgHOCZMOvqndUOfFMWmLJ17GMZ2CD9KXmuR2idSs73J5a58iGawBWc9NXiPmPPh78QkGfRThLThKkzSLmKxlokCxu87J0ycnsypx6U1Bt//eLvT8g0BWZoQBjIxNeJqYkU/p99YHKoKFffjn6ZezfMr7o8EF+3zfSUh5PgsaC6fsgnqLMkxlPCqk9rJ8zX7W6BT0FK5HPTTVW+8l3JgmakP1USH0uNBzAUABqg6r6i1ZmbCNCEszvQIhXBmo//l/CteUPqsjmKAAAAABJRU5ErkJggg=="},686:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAImUlEQVRoQ91aeVCU5xn/vd8u941cyiGHXEu0nhGJxiOJQNJ2orW0E0VnbJpEazudhuOP/sN0mqZC2k4PzTg9bGKSKj3s5BBo02CMQRwJOigLATlFue9rWZZ9O8+3fsuyrPi9Cx1n+vz57ftc73M/7zIsAdSW/jKQs+ldEqTHwXkCgHgAwWDwBocLgFEAQ5zjHmNcz4FqLdNcTEzPqV8C9mDOErlVXuCtMXjuA5DNGbYD0IjS4hzNkNg5xvhp3e68RlF85bywEl9+8EaQSWt+lTEcAeDnLGM7PDOADySJ/zRpd36VKE3VSvCCAkmf6vESA3sNQKAoI5XnOQP7szTN8hK/ltOnEkedO9WXFcWYOd4BeJpawos818+Al5Mz8v6uhs5DLaEvO/4MOCsG4K+G4JKeYawoeXdOPmOML0R3QSXqSote4OCnAbguqXAixBg/ax6ePPRYVoHxQWgPVKK27Ph+xtkZQJ3LicglepYB7yeNRO9lWVkzjnAdKlFX8vN0zqT3H6kF5kv7pi4j76gqJepKXo/mTFMNIED0xuzPM8lSOrjZ4QUKk+ecvZKSmXtqHh/bD7y4WFPn2/o5gM3CHAC4ePjBb4UOXsui4e4TAklrCSWzyQjDaA/G+1sxfE+P6clhZ8gTjkHibHNSZm6NLYE57lRbUvQDxvivRTloXDwQkvAk/MNXA4wBnGNqYgAmA3UbDFp3b7h5Blp/G7p7Ez0NlzAzPSnKiuhVJKfnbLXNWFYlbn78WqjG5NIAwFeEsodfGCLW7pEFNY4PoL+1CqNd9ZgxTc0ho3Fxh09oIpZFb4KrVwBMhjF03DiPyeEuEXYW9wQ/nJKRT1lTBqsS+tLC4wDyRCh6+Idj5cYskO/3NlWgv7kSnFMH8WBgTMKy2FQEx6XJsdJWVYzJobsibMnQzT3uE4k7dxaYrErUfPh6gFarbQe4t1pqWjdvxKYdArnS3ZoPMdIl1pD6hiUhfM1XZZdqrngLpqkxtawt1uAsOyUz9x2rEvqywiPgOClCJWLt8/AJjUf3l+UYaHXcs0ka6sIB88y0Q9LkWiGJOzDa3YiOG/8UYU9qXNJl5FP3bHEnfVnhFXCkqqXi7huGmC3ZmBzuRGulfBlWIHcJWLkeAZFr4eppydLGiUEM3rmBwbbqee4WnXoAHn7L0XLlDAwjQvHBJcbiktJzW1jjhZ8FT0vabpHKvDwlHf4Ra3Cn+h8Y622aVUDSIHL9XjnF0u0rvk6xQ1ahFEs4tnXDOzhOxhnqqEFnbZnae1TOHdNl5J1g+rLCb4HjrAh2/PYjcjA3XDwhp1MFguO3ISg2VRaW4mTGaEmhGlcP2f9Jub7mSvQ2fmZrOiTs+J6sWOOnb4qIQX50Xpeet5fpS4//CmA/VIutdfVC/M6jGO25jY7r5+dYIWHX9+XC1vTZ7+fFAVkibtt35QLY8Mlv51gjYt0e+ISsQmP5SZiM42pFoXNduoy85WSJj8DxrFpMqsQxaYcw0F6N7rr/WNGoXkSnZmOwvRpdNt9t6YYlP4WAqPVorTwzpz6EJj+FwKj1aKl4S67sIuCmMfszfWlRI8BXqUVUhB1oq0J3ffmsEv7hiN78wnx3sSGsuFvr1ffm1IbQpF0IXLkBLVfehmGEwlM9SBLfxPSlhSMAfNSikX8n7DyG8b4WtH/xNyua1s0L8TuOYnLoHlqvvuuQXPTm/fDwX4HGiydhmpp1m6gN++AVFIOG8t9Z40itPJxJz5ISC05NjojFbj0MVw8/NJSfkGNAgcgN++AdFIMu/b/llGoLlHLDdM9grK8Fd2yUpxihwDYahtF8+U9qZbdJDPi2U0oExaUheNUTsu9TDChAdYHyPvVJo90NGO2xbGF8QuLhE5qAmWmDXFeobigQELUOYclPo/f25+hrqnBaCSF3Ii6UoVZtfxkm4wSaLv8BfEZuYWRw81qGFWueg7tv6ByByNfv1XyEqfF+63cqjHHbvgOtuy9uf3pKuPUgQvfdSSywFQmUYOy9fRl9TVfm3SBVYXffEPm7YaRHru72QMFMdMj1yAWdAUtgC6ZYhZHG1RNx214E3SZZg1prEaBEELf1RRmF6gpZ1Rm4n2LFip0tIyVYqUK3V/1VSAalwHXXf4KBti+EcG0OW4udcNthyzFq4zfldqKr7mMMtl9XJYx/xGosT8nAxGAH2q6dndO6qCKgHFLaDmcaQFtGNNHFPnEYEtOgpfJtTI3NBq4jgSjwo7dky4LTHDE9OSQkt91hSwNIH0VbcXuuvmGJCP/K1+XUSS212W40Vc5TTaAUTIrIg1Rn3WIUmG3FZSVKjh8FYycWQ1HJVtSaU7vtCCLWPS/XDHI7cr/Fgd1Q5Mx4ai8AZamojVnwDIx02D/RBEeTHMVBe1XxEuyi+EFdRj5tKBe3KLBXhIpg9JYDcHH3RWdtKYY6bspHlKpM7kbN34yT6VTh53BRQD86u7KxV4T8fWXqfmg0rrhzndyKIXLdHkvLcfXdOS2Hs+70wJUNEXR2eWYvjGdAhOxa1qmPAW3XxFczjpVcYHlGCPfXmNSFPe7sLSl4NDuvWG2ZtTpvlciT4BLAw9eYxGQpF8rySlO+HeFu36G+qhbKCmZt2RuZjJtpEfToHlfs1GAMp5LT815xpN3/7yOL1SIlRQcY4398xBY5Zx6ZOOjUc5eiSN2/CndzM849iodHDvxCVzmRxwoKFtxSP/T1lJSRn4DB3xNZdS4yEw0w4KUlewK2VknLK9IxAAX/Q6tQHvuLWTv9o9VP/1j17kaVJWxvlf4WMePCcwBOf4sQepBZwDrkLhfMXPrJY5k510StKKyEwqDxwm98jdLkNxjYQQBPApBEmQNo5RxnJbPmdPJzr9IrlVPgtBK23GiwMjLtDiaxTff/KkR/FwoGQI82VGvopXGEc3Qwhjpwfh2SdEmXnnvLKantkP4L9j6DAGori9cAAAAASUVORK5CYII="},687:function(e,t,i){e.exports={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{class:e.$style.footer},[a("div",{class:e.$style.contentBlock},[a("p",{class:e.$style.footerCopyright},[e._v("Copyright © 2019, The Holding of GeekBang (Beijing) Co., Ltd. All rights reserved. 极客邦控股(北京)有限公司"),a("em",[e._v(" | ")]),a("span",{class:e.$style.beian},[e._v("京 ICP 备 16027448号-3. "),a("a",{attrs:{href:"http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502037384"}},[a("img",{attrs:{src:i(680),alt:""}}),e._v("京公网安备 11010502037384号")]),a("a",{attrs:{href:"https://static001.geekbang.org/resource/image/42/10/4293759746d85360176d36d3f55aff10.jpg",target:"_blank"}},[e._v("增值电信业务经营许可证")])])]),e._v(" "),a("div",{class:e.$style.footerItemList},[a("span",[e._v("联系我们")]),e._v(" "),a("div",{class:e.$style.footerItems},[a("div",{class:e.$style.footerItem},[a("p",{class:e.$style.iconLink},[a("span",{class:["iconfont",e.$style.icons,e.$style.cellphone]})]),e._v(" "),a("div",{class:e.$style.itemBox},[e._v("\n 010 - 53934972\n ")])]),e._v(" "),a("div",{class:e.$style.footerItem},[a("p",{class:e.$style.iconLink},[a("span",{class:["iconfont",e.$style.icons,e.$style.email]})]),e._v(" "),a("div",{class:e.$style.itemBox},[e._v("service@geekbang.org")])]),e._v(" "),a("div",{class:e.$style.footerItem},[a("p",{class:e.$style.iconLink},[a("span",{class:["iconfont",e.$style.icons,e.$style.location]})]),e._v(" "),a("div",{class:[e.$style.itemBox,e.$style.locationItem]},[e._v("北京市朝阳区容和路1号院1号楼5层")])])])])])])},staticRenderFns:[]}},710:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABMCAYAAACIylL7AAAF8klEQVR4Xu2dW2xURRjH/9/M2V13oYAtt20rRStauYiGS6XlVgsmJqiJ1ZIA+mCwtDYaDUjBC64Qsa2PaiiYeEmMl0RiovGVFxNiJL6IGmN8wFi2wUDitU13tzvmLLRZtnT3nLMze6HfeSJh5v/N/n9n5nzn25ktwcOlIhDxGQvW0JhsAdRqRbgNQA2AGQACHiS5i0MHyGG7VLPhvppaScluUtgJ4CY3fbmtHgccAVNHa6riUh0G1G4Afj2hWcWLAzmBjfYubCeitwHM9RKA++h1YEpgKgIrHgy/CaBTb0hWy8eBawJTkepQLIhPCWpbPuLcV78Dk4DZMysRXHhSgR7UH44V83VgErBYf3gACnvyFeb+Zhy4Cthof/V2UuoTM6FYVYcDE8Aup+7Jnzkb1GGrOY0JYLG+8DHOCM0ZrUs5BWy4t3qRRfgVUD5dwqxjxoEUsNH+8OukcMBMCFbV6QDZhdxEMPybAmp1CrOWGQco9saCRiTFN2bkWVW3AxTvCx9UwFHdwqxnxgGK94Y/U4Q2M/KsqtsBivWFzwJYrluY9cw4YAO7CKDKjDyr6nbABjbKX0rqttWcng1MmZNPU7YCECsfg1jeDprXAAirIGGzBVF/DyLxTjMwFi/6WJwOoCDAaM5iyLYPQFVLnI6rYO0Sxxuh/vq9YPHyDWQeWGAWrCdOgSqq8x2rkf6J97dC/fGjEW0TosaByfXPQzQ9Z2LsWjQZWIaN1q4vQdWrtJhrQsQzMF8IFL4LkAGoC2eBYTvZNn8Zn2G+vecAWbo741wDs5OnNV2QazuBwKwrhBTi/fY+WvOXeWD7o+Y/RR4R3ACj+i2QrUdAc+omRYz3F+YZzcAcJB00exFE6xGIW7dOeWswsDxmjZuuWWeY9EOs7YJc9yxgZT8yMG2BJc8MQCxtA2bMc+O757ZTAaObWyC3vAa6cbEj7WkLLGXgn+cgG7sh1nQC1g2ODPPaKBMYzaqFaH0VYsn9riSnN7ArL7I0cyHExp5UOQvIeQzAlcHjjSeAkYRo7IZsspc/9zcJA0uzn+YvhWyJgOrWe4KSrdM4MLnpJYjGpzzrM7BrWEe3tEK2HNJakxwHZu3+GlRZz8B8Lt/Dcr4XCQvizh2Q6/cBofxPQE0A6/wW9vPL68UzLJdz/plpiYn3U7oMLMNo7TMsQ58qwhAbD0Ase8RTYsLACgxsPBwtWAHZ8gpoUVOuuXnV/zOwIgEbD2uXj8TmQ44TCAZWZGCp8HZisnIXZPNeIJR9fxEDY2CulmS3jUuuWp8zrc/xCXlJdHsLFGmGcdKRJ6jx7pzWazLyikz5Lon84qz3TjA2w7g0ZXbnr84l0Wjxt+M07A2vXi+uJaY5V5CvVx44BnHHQ155gYHZlcFCfoHpr4BsPQyxYrsnaNMbWDG3CFSvgryvFzR/mStw0xZYSWzCsbcL3P045IaetM2i2flNW2CubmsNjbNWVkJzITe96GiZZGAaYDiRcFIKs88G5FomGZgTtzW0cQIsFSbHMnn9ALveDkNMsUxeN8CsHZ+Dahs1zAUzEo5nWEZ4mtsA0bANCFaljhslv//IzAAz45o+4yxWd0DeGynIh/ESxCswL7E09IkZL/7aZ6h8HaeBYKWG8eqXKDNgl8wDs5/XdRtgPfwe4AvpdzxPxTI7lP5DQYClkiz7jNXqJ0F1zal/lwI89U8UiRPryuZnH0jhZMGA5TkRuLt90ys6yMDK6VYQyXsYWJkAI2DQGhmqY2BlAkwRegP7h3hJLBNesQREfajn/CDPsPIgNuDvGepKZdumKx3l4UdJj/KSb0zcTi+cv8TASprT5cEpRTsDB6IThUqeYaUN7YS/Z+iqP1zEwEoUGEF9YY1UPkqRn2LpQ2RgJQhMgb7yj6CdItHhzOExsFIDRjjumz30NO3BNX/XloGVDrCLiuiZwP7ox9mGxMCKD8x+Rr3rk/Qy7Yvm/JVMBlYkYKRwPknqwzHIt+wKhtNhMDCnTnluR3FA/QtgkBR+AeE7JZKnfP9dOEMRJN3K/g/YawSfHrexjwAAAABJRU5ErkJggg=="},716:function(e,t,i){/*! + * vue-scrollto v2.15.0 + * (c) 2019 Randjelovic Igor + * @license MIT + */ +!function(t,i){e.exports=i()}(0,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(){return t=Object.assign||function(e){for(var t=1;t0?i=s:t=s}while(Math.abs(o)>v&&++l=g?l(t,p,e,i):0===u?p:s(t,a,a+x,e,i)}if(!(0<=e&&e<=1&&0<=i&&i<=1))throw new Error("bezier x values must be in [0, 1] range");if(e===t&&i===a)return d;for(var c=y?new Float32Array(w):new Array(w),p=0;p3&&void 0!==arguments[3]?arguments[3]:{passive:!1};t instanceof Array||(t=[t]);for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};if("object"===e(r)?o=r:"number"==typeof r&&(o.duration=r),!(s=S.$(n)))return console.warn("[vue-scrollto warn]: Trying to scroll to an element that is not on the page: "+n);l=S.$(o.container||_.container),d=o.duration||_.duration,c=o.easing||_.easing,p=o.offset||_.offset,u=o.hasOwnProperty("force")?!1!==o.force:_.force,f=o.hasOwnProperty("cancelable")?!1!==o.cancelable:_.cancelable,h=o.onStart||_.onStart,m=o.onDone||_.onDone,g=o.onCancel||_.onCancel,v=void 0===o.x?_.x:o.x,b=void 0===o.y?_.y:o.y;var L=S.cumulativeOffset(l),I=S.cumulativeOffset(s);if("function"==typeof p&&(p=p()),y=t(l),C=I.top-L.top+p,w=i(l),x=I.left-L.left+p,M=!1,z=C-y,E=x-w,!u){var D=y,G=D+l.offsetHeight,O=C,j=O+s.offsetHeight;if(O>=D&&j<=G)return void m(s)}return"string"==typeof c&&(c=k[c]||k.ease),P=A.apply(A,c),z||E?(h&&h(s),S.on(l,T,R,{passive:!0}),window.requestAnimationFrame(a),function(){B=null,M=!0}):void 0}var s,l,d,c,p,u,f,h,m,g,v,b,w,x,y,C,E,z,M,B,P,L,I,D,R=function(e){f&&(B=e,M=!0)};return o}(),M=[],B={bind:function(e,t){f(e).binding=t,S.on(e,"click",h)},unbind:function(e){p(e),S.off(e,"click",h)},update:function(e,t){f(e).binding=t},scrollTo:z,bindings:M},P=function(e,t){t&&c(t),e.directive("scroll-to",B),e.prototype.$scrollTo=B.scrollTo};return"undefined"!=typeof window&&window.Vue&&(window.VueScrollTo=B,window.VueScrollTo.setDefaults=c,window.Vue.use(P)),B.install=P,B})},717:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(716),n=i.n(a);t.default={name:"return-top",components:{},props:{},data:function(){return{scrollY:0}},created:function(){},mounted:function(){this.listenerScroll(),window.addEventListener("scroll",this.listenerScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.listenerScroll)},methods:{listenerScroll:function(e){this.scrollY=window.pageYOffset},route:function(){n.a.scrollTo("#app")}}}},755:function(e,t,i){t=e.exports=i(571)(!1),t.push([e.i,".return-top[data-v-57b648e1]{position:fixed;right:50px;bottom:100px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:60px;height:60px;background:#ccc;border-radius:60px;opacity:.3;-webkit-transition:all .3s ease;transition:all .3s ease;cursor:pointer}.return-top[data-v-57b648e1]:hover{opacity:1}.return-top .iconfont[data-v-57b648e1]{font-size:26px;font-weight:700;-webkit-transform:rotate(180deg) translateY(-2px);transform:rotate(180deg) translateY(-2px);color:#fff}",""])},758:function(e,t,i){var a=i(755);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("474fbf35",a,!0,{})},766:function(e,t,i){function a(e){i(758)}var n=i(22)(i(717),i(767),a,"data-v-57b648e1",null);e.exports=n.exports},767:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"fade"}},[this.scrollY>0?i("div",{staticClass:"return-top",on:{click:e.route}},[i("i",{staticClass:"iconfont"},[e._v("")])]):e._e()])},staticRenderFns:[]}},784:function(e,t,i){"use strict";var a=i(43),n=i.n(a),r=i(146),o=i(218);t.a={getHomeBanner:function(){return new n.a(function(e,t){r.a.post(o.a.timeServer+"/serv/v2/explore/getBannerList").then(function(i){if(200===i.status&&0===i.data.code){var a=i.data.data.list;e(a.reduce(function(e,t){var i=t.extra,a={id:t.id,image:t.banner_cover};switch(t.banner_redirect_type){case"article":a.url="/column/article/"+t.banner_redirect_param;break;case"product":i?(i.column_type=0|i.column_type,3===i.column_type||6===i.column_type?a.url="/course/intro/"+i.column_id:a.url="/column/intro/"+i.column_id):a.image="";break;case"live":a.url="https://live.geekbang.org";break;case"mall":case"url":a.url=t.banner_redirect_param}return a.image&&e.push(a),e},[]))}else t(i)}).catch(function(e){t(e)})})},getBaseData:function(e){var t={};return e&&(t.type=e),new n.a(function(e,i){r.a.post(o.a.timeServer+"/serv/v1/column/newAll",t).then(function(t){if(200===t.status&&0===t.data.code){var a=t.data.data,n=a.nav,r=a.list,o=a.page;e({nav:n,list:r,page:o})}else i(t)}).catch(function(e){i(e)})})},getColumns:function(e,t){var i={is_article:0|t};return e=Array.isArray(e)?e:"string"==typeof e?e.join(","):[e],i.ids=e,new n.a(function(e,t){r.a.post(o.a.timeServer+"/serv/v1/column/details",i).then(function(i){200===i.status&&0===i.data.code?e(i.data.data):t(i)}).catch(function(e){t(e)})})},getTopList:function(){return new n.a(function(e,t){r.a.post(o.a.timeServer+"/serv/v1/column/topList").then(function(i){if(200===i.status&&0===i.data.code){var a=i.data.data,n=a.nav,r=a.list;e({nav:n,list:r})}else t(i)}).catch(function(e){t(e)})})},getLiveStatus:function(){return new n.a(function(e,t){r.a.get("https://live.geekbang.org/serv/v1/stage/live?channel_id=1").then(function(i){200===i.status&&0===i.data.code?e(i.data.data):t(i)}).catch(function(e){t(e)})})},getLiveInfo:function(e){return new n.a(function(t,i){r.a.post(o.a.timeServer+"/serv/v2/explore/list",{block_name:e.blockName}).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):i(e)}).catch(function(e){i(e)})})}}},841:function(e,t,i){t=e.exports=i(571)(!1),t.push([e.i,".swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:50%;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E\");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E\");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E\")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E\")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E\")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E\")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:opacity .3s;-o-transition:.3s opacity;transition:opacity .3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:top .2s,-webkit-transform .2s;transition:top .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s top;transition:transform .2s,top .2s;transition:transform .2s,top .2s,-webkit-transform .2s}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:left .2s,-webkit-transform .2s;transition:left .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s left;transition:transform .2s,left .2s;transition:transform .2s,left .2s,-webkit-transform .2s}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:right .2s,-webkit-transform .2s;transition:right .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s right;transition:transform .2s,right .2s;transition:transform .2s,right .2s,-webkit-transform .2s}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:hsla(0,0%,100%,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:\"\";width:100%;height:100%;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E\");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E\")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px}",""])},850:function(e,t,i){var a=i(841);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("21d347eb",a,!0,{})},898:function(e,t,i){!function(t,i){e.exports=i()}(0,function(){"use strict";function e(e,t){var i=[],a=0;if(e&&!t&&e instanceof De)return e;if(e)if("string"==typeof e){var n,r,o=e.trim();if(o.indexOf("<")>=0&&o.indexOf(">")>=0){var s="div";for(0===o.indexOf(":~]/)?(t||Le).querySelectorAll(e.trim()):[Le.getElementById(e.trim().split("#")[1])],a=0;a0&&e[0].nodeType)for(a=0;a=0;f-=1){var h=u[f];r&&h.listener===r?(p.removeEventListener(d,h.proxyListener,o),u.splice(f,1)):r&&h.listener&&h.listener.dom7proxy&&h.listener.dom7proxy===r?(p.removeEventListener(d,h.proxyListener,o),u.splice(f,1)):r||(p.removeEventListener(d,h.proxyListener,o),u.splice(f,1))}}return this}function f(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=e[0].split(" "),a=e[1],n=0;n0}),s.dispatchEvent(l),s.dom7EventData=[],delete s.dom7EventData}return this}function h(e){function t(r){if(r.target===this)for(e.call(this,r),i=0;i0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null}function g(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null}function v(){if(this.length>0){var e=this[0],t=e.getBoundingClientRect(),i=Le.body,a=e.clientTop||i.clientTop||0,n=e.clientLeft||i.clientLeft||0,r=e===Ie?Ie.scrollY:e.scrollTop,o=e===Ie?Ie.scrollX:e.scrollLeft;return{top:t.top+r-a,left:t.left+o-n}}return null}function b(){return this[0]?Ie.getComputedStyle(this[0],null):{}}function w(e,t){var i;if(1===arguments.length){if("string"!=typeof e){for(i=0;ii-1?new De([]):e<0?(t=i+e,new De(t<0?[]:[this[t]])):new De([this[e]])}function S(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i,a=0;a=0;i-=1)this[t].insertBefore(a.childNodes[i],this[t].childNodes[0])}else if(e instanceof De)for(i=0;i0?t?this[0].nextElementSibling&&e(this[0].nextElementSibling).is(t)?[this[0].nextElementSibling]:[]:this[0].nextElementSibling?[this[0].nextElementSibling]:[]:[])}function z(t){var i=[],a=this[0];if(!a)return new De([]);for(;a.nextElementSibling;){var n=a.nextElementSibling;t?e(n).is(t)&&i.push(n):i.push(n),a=n}return new De(i)}function M(t){if(this.length>0){var i=this[0];return new De(t?i.previousElementSibling&&e(i.previousElementSibling).is(t)?[i.previousElementSibling]:[]:i.previousElementSibling?[i.previousElementSibling]:[])}return new De([])}function B(t){var i=[],a=this[0];if(!a)return new De([]);for(;a.previousElementSibling;){var n=a.previousElementSibling;t?e(n).is(t)&&i.push(n):i.push(n),a=n}return new De(i)}function P(i){for(var a=[],n=0;n=0&&(v=parseFloat(v.replace("%",""))/100*a),e.virtualSize=-v,n?l.css({marginLeft:"",marginTop:""}):l.css({marginRight:"",marginBottom:""});var y;t.slidesPerColumn>1&&(y=Math.floor(d/t.slidesPerColumn)===d/e.params.slidesPerColumn?d:Math.ceil(d/t.slidesPerColumn)*t.slidesPerColumn,"auto"!==t.slidesPerView&&"row"===t.slidesPerColumnFill&&(y=Math.max(y,t.slidesPerView*t.slidesPerColumn)));for(var A,k=t.slidesPerColumn,C=y/k,E=Math.floor(d/t.slidesPerColumn),S=0;S1){var _=void 0,z=void 0,M=void 0;"column"===t.slidesPerColumnFill?(z=Math.floor(S/k),M=S-z*k,(z>E||z===E&&M===k-1)&&(M+=1)>=k&&(M=0,z+=1),_=z+M*y/k,T.css({"-webkit-box-ordinal-group":_,"-moz-box-ordinal-group":_,"-ms-flex-order":_,"-webkit-order":_,order:_})):(M=Math.floor(S/C),z=S-M*C),T.css("margin-"+(e.isHorizontal()?"top":"left"),0!==M&&t.spaceBetween&&t.spaceBetween+"px").attr("data-swiper-column",z).attr("data-swiper-row",M)}if("none"!==T.css("display")){if("auto"===t.slidesPerView){var B=Ie.getComputedStyle(T[0],null),P=T[0].style.transform,L=T[0].style.webkitTransform;if(P&&(T[0].style.transform="none"),L&&(T[0].style.webkitTransform="none"),t.roundLengths)A=e.isHorizontal()?T.outerWidth(!0):T.outerHeight(!0);else if(e.isHorizontal()){var I=parseFloat(B.getPropertyValue("width")),D=parseFloat(B.getPropertyValue("padding-left")),R=parseFloat(B.getPropertyValue("padding-right")),G=parseFloat(B.getPropertyValue("margin-left")),O=parseFloat(B.getPropertyValue("margin-right")),j=B.getPropertyValue("box-sizing");A=j&&"border-box"===j?I+G+O:I+D+R+G+O}else{var V=parseFloat(B.getPropertyValue("height")),U=parseFloat(B.getPropertyValue("padding-top")),Y=parseFloat(B.getPropertyValue("padding-bottom")),X=parseFloat(B.getPropertyValue("margin-top")),H=parseFloat(B.getPropertyValue("margin-bottom")),N=B.getPropertyValue("box-sizing");A=N&&"border-box"===N?V+X+H:V+U+Y+X+H}P&&(T[0].style.transform=P),L&&(T[0].style.webkitTransform=L),t.roundLengths&&(A=Math.floor(A))}else A=(a-(t.slidesPerView-1)*v)/t.slidesPerView,t.roundLengths&&(A=Math.floor(A)),l[S]&&(e.isHorizontal()?l[S].style.width=A+"px":l[S].style.height=A+"px");l[S]&&(l[S].swiperSlideSize=A),u.push(A),t.centeredSlides?(b=b+A/2+w/2+v,0===w&&0!==S&&(b=b-a/2-v),0===S&&(b=b-a/2-v),Math.abs(b)<.001&&(b=0),t.roundLengths&&(b=Math.floor(b)),x%t.slidesPerGroup==0&&c.push(b),p.push(b)):(t.roundLengths&&(b=Math.floor(b)),x%t.slidesPerGroup==0&&c.push(b),p.push(b),b=b+A+v),e.virtualSize+=A+v,w=A,x+=1}}e.virtualSize=Math.max(e.virtualSize,a)+h;var F;if(n&&r&&("slide"===t.effect||"coverflow"===t.effect)&&i.css({width:e.virtualSize+t.spaceBetween+"px"}),Oe.flexbox&&!t.setWrapperSize||(e.isHorizontal()?i.css({width:e.virtualSize+t.spaceBetween+"px"}):i.css({height:e.virtualSize+t.spaceBetween+"px"})),t.slidesPerColumn>1&&(e.virtualSize=(A+t.spaceBetween)*y,e.virtualSize=Math.ceil(e.virtualSize/t.slidesPerColumn)-t.spaceBetween,e.isHorizontal()?i.css({width:e.virtualSize+t.spaceBetween+"px"}):i.css({height:e.virtualSize+t.spaceBetween+"px"}),t.centeredSlides)){F=[];for(var Q=0;Q1&&c.push(e.virtualSize-a)}if(0===c.length&&(c=[0]),0!==t.spaceBetween&&(e.isHorizontal()?n?l.css({marginLeft:v+"px"}):l.css({marginRight:v+"px"}):l.css({marginBottom:v+"px"})),t.centerInsufficientSlides){var K=0;if(u.forEach(function(e){K+=e+(t.spaceBetween?t.spaceBetween:0)}),(K-=t.spaceBetween)1)for(t=0;ti.slides.length)break;a.push(i.slides.eq(r)[0])}else a.push(i.slides.eq(i.activeIndex)[0]);for(t=0;tn?o:n}n&&i.$wrapperEl.css("height",n+"px")}function Y(){for(var e=this,t=e.slides,i=0;i=0&&c0&&p<=i.size||c<=0&&p>=i.size)&&(i.visibleSlides.push(l),i.visibleSlidesIndexes.push(s),n.eq(s).addClass(a.slideVisibleClass))}l.progress=r?-d:d}i.visibleSlides=e(i.visibleSlides)}}function H(e){void 0===e&&(e=this&&this.translate||0);var t=this,i=t.params,a=t.maxTranslate()-t.minTranslate(),n=t.progress,r=t.isBeginning,o=t.isEnd,s=r,l=o;0===a?(n=0,r=!0,o=!0):(n=(e-t.minTranslate())/a,r=n<=0,o=n>=1),Ge.extend(t,{progress:n,isBeginning:r,isEnd:o}),(i.watchSlidesProgress||i.watchSlidesVisibility)&&t.updateSlidesProgress(e),r&&!s&&t.emit("reachBeginning toEdge"),o&&!l&&t.emit("reachEnd toEdge"),(s&&!r||l&&!o)&&t.emit("fromEdge"),t.emit("progress",n)}function N(){var e=this,t=e.slides,i=e.params,a=e.$wrapperEl,n=e.activeIndex,r=e.realIndex,o=e.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass);var s;s=o?e.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+n+'"]'):t.eq(n),s.addClass(i.slideActiveClass),i.loop&&(s.hasClass(i.slideDuplicateClass)?a.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass):a.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass));var l=s.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===l.length&&(l=t.eq(0),l.addClass(i.slideNextClass));var d=s.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===d.length&&(d=t.eq(-1),d.addClass(i.slidePrevClass)),i.loop&&(l.hasClass(i.slideDuplicateClass)?a.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):a.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),d.hasClass(i.slideDuplicateClass)?a.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):a.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))}function F(e){var t,i=this,a=i.rtlTranslate?i.translate:-i.translate,n=i.slidesGrid,r=i.snapGrid,o=i.params,s=i.activeIndex,l=i.realIndex,d=i.snapIndex,c=e;if(void 0===c){for(var p=0;p=n[p]&&a=n[p]&&a=n[p]&&(c=p);o.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(t=r.indexOf(a)>=0?r.indexOf(a):Math.floor(c/o.slidesPerGroup),t>=r.length&&(t=r.length-1),c===s)return void(t!==d&&(i.snapIndex=t,i.emit("snapIndexChange")));var u=parseInt(i.slides.eq(c).attr("data-swiper-slide-index")||c,10);Ge.extend(i,{snapIndex:t,realIndex:u,previousIndex:s,activeIndex:c}),i.emit("activeIndexChange"),i.emit("snapIndexChange"),l!==u&&i.emit("realIndexChange"),i.emit("slideChange")}function Q(t){var i=this,a=i.params,n=e(t.target).closest("."+a.slideClass)[0],r=!1;if(n)for(var o=0;or?"next":an?"next":a=s.length&&(u=s.length-1),(c||o.initialSlide||0)===(d||0)&&i&&n.emit("beforeSlideChangeStart");var f=-s[u];if(n.updateProgress(f),o.normalizeSlideIndex)for(var h=0;h=Math.floor(100*l[h])&&(r=h);if(n.initialized&&r!==c){if(!n.allowSlideNext&&fn.translate&&f>n.maxTranslate()&&(c||0)!==r)return!1}var m;return m=r>c?"next":r(a.snapGrid[r+1]-s)/2&&(n=a.params.slidesPerGroup)}return a.slideTo(n,e,t,i)}function se(){var t,i=this,a=i.params,n=i.$wrapperEl,r="auto"===a.slidesPerView?i.slidesPerViewDynamic():a.slidesPerView,o=i.clickedIndex;if(a.loop){if(i.animating)return;t=parseInt(e(i.clickedSlide).attr("data-swiper-slide-index"),10),a.centeredSlides?oi.slides.length-i.loopedSlides+r/2?(i.loopFix(),o=n.children("."+a.slideClass+'[data-swiper-slide-index="'+t+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),Ge.nextTick(function(){i.slideTo(o)})):i.slideTo(o):o>i.slides.length-r?(i.loopFix(),o=n.children("."+a.slideClass+'[data-swiper-slide-index="'+t+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),Ge.nextTick(function(){i.slideTo(o)})):i.slideTo(o)}else i.slideTo(o)}function le(){var t=this,i=t.params,a=t.$wrapperEl;a.children("."+i.slideClass+"."+i.slideDuplicateClass).remove();var n=a.children("."+i.slideClass);if(i.loopFillGroupWithBlank){var r=i.slidesPerGroup-n.length%i.slidesPerGroup;if(r!==i.slidesPerGroup){for(var o=0;on.length&&(t.loopedSlides=n.length);var l=[],d=[];n.each(function(i,a){var r=e(a);i=n.length-t.loopedSlides&&l.push(a),r.attr("data-swiper-slide-index",i)});for(var c=0;c=0;p-=1)a.prepend(e(l[p].cloneNode(!0)).addClass(i.slideDuplicateClass))}function de(){var e,t=this,i=t.params,a=t.activeIndex,n=t.slides,r=t.loopedSlides,o=t.allowSlidePrev,s=t.allowSlideNext,l=t.snapGrid,d=t.rtlTranslate;t.allowSlidePrev=!0,t.allowSlideNext=!0;var c=-l[a],p=c-t.getTranslate();if(a=2*r||a>=n.length-r){e=-n.length+a+r,e+=r;var u=t.slideTo(e,0,!1,!0);u&&0!==p&&t.setTranslate((d?-t.translate:t.translate)-p)}t.allowSlidePrev=o,t.allowSlideNext=s}function ce(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides;t.children("."+i.slideClass+"."+i.slideDuplicateClass+",."+i.slideClass+"."+i.slideBlankClass).remove(),a.removeAttr("data-swiper-slide-index")}function pe(e){var t=this;if(!(Oe.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked)){var i=t.el;i.style.cursor="move",i.style.cursor=e?"-webkit-grabbing":"-webkit-grab",i.style.cursor=e?"-moz-grabbin":"-moz-grab",i.style.cursor=e?"grabbing":"grab"}}function ue(){var e=this;Oe.touch||e.params.watchOverflow&&e.isLocked||(e.el.style.cursor="")}function fe(e){var t=this,i=t.$wrapperEl,a=t.params;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var n=0;n=s)return void i.appendSlide(t);for(var l=o>e?o+1:o,d=[],c=s-1;c>=e;c-=1){var p=i.slides.eq(c);p.remove(),d.unshift(p)}if("object"==typeof t&&"length"in t){for(var u=0;ue?o+t.length:o}else a.append(t);for(var f=0;f0||a.isTouched&&a.isMoved)){if(n.noSwiping&&e(o.target).closest(n.noSwipingSelector?n.noSwipingSelector:"."+n.noSwipingClass)[0])return void(i.allowClick=!0);if(!n.swipeHandler||e(o).closest(n.swipeHandler)[0]){r.currentX="touchstart"===o.type?o.targetTouches[0].pageX:o.pageX,r.currentY="touchstart"===o.type?o.targetTouches[0].pageY:o.pageY;var s=r.currentX,l=r.currentY,d=n.edgeSwipeDetection||n.iOSEdgeSwipeDetection,c=n.edgeSwipeThreshold||n.iOSEdgeSwipeThreshold;if(!d||!(s<=c||s>=Ie.screen.width-c)){if(Ge.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),r.startX=s,r.startY=l,a.touchStartTime=Ge.now(),i.allowClick=!0,i.updateSize(),i.swipeDirection=void 0,n.threshold>0&&(a.allowThresholdMove=!1),"touchstart"!==o.type){var p=!0;e(o.target).is(a.formElements)&&(p=!1),Le.activeElement&&e(Le.activeElement).is(a.formElements)&&Le.activeElement!==o.target&&Le.activeElement.blur();var u=p&&i.allowTouchMove&&n.touchStartPreventDefault;(n.touchStartForcePreventDefault||u)&&o.preventDefault()}i.emit("touchStart",o)}}}}}function we(t){var i=this,a=i.touchEventsData,n=i.params,r=i.touches,o=i.rtlTranslate,s=t;if(s.originalEvent&&(s=s.originalEvent),!a.isTouched)return void(a.startMoving&&a.isScrolling&&i.emit("touchMoveOpposite",s));if(!a.isTouchEvent||"mousemove"!==s.type){var l="touchmove"===s.type?s.targetTouches[0].pageX:s.pageX,d="touchmove"===s.type?s.targetTouches[0].pageY:s.pageY;if(s.preventedByNestedSwiper)return r.startX=l,void(r.startY=d);if(!i.allowTouchMove)return i.allowClick=!1,void(a.isTouched&&(Ge.extend(r,{startX:l,startY:d,currentX:l,currentY:d}),a.touchStartTime=Ge.now()));if(a.isTouchEvent&&n.touchReleaseOnEdges&&!n.loop)if(i.isVertical()){if(dr.startY&&i.translate>=i.minTranslate())return a.isTouched=!1,void(a.isMoved=!1)}else if(lr.startX&&i.translate>=i.minTranslate())return;if(a.isTouchEvent&&Le.activeElement&&s.target===Le.activeElement&&e(s.target).is(a.formElements))return a.isMoved=!0,void(i.allowClick=!1);if(a.allowTouchCallbacks&&i.emit("touchMove",s),!(s.targetTouches&&s.targetTouches.length>1)){r.currentX=l,r.currentY=d;var c=r.currentX-r.startX,p=r.currentY-r.startY;if(!(i.params.threshold&&Math.sqrt(Math.pow(c,2)+Math.pow(p,2))=25&&(u=180*Math.atan2(Math.abs(p),Math.abs(c))/Math.PI,a.isScrolling=i.isHorizontal()?u>n.touchAngle:90-u>n.touchAngle)}if(a.isScrolling&&i.emit("touchMoveOpposite",s),void 0===a.startMoving&&(r.currentX===r.startX&&r.currentY===r.startY||(a.startMoving=!0)),a.isScrolling)return void(a.isTouched=!1);if(a.startMoving){i.allowClick=!1,s.preventDefault(),n.touchMoveStopPropagation&&!n.nested&&s.stopPropagation(),a.isMoved||(n.loop&&i.loopFix(),a.startTranslate=i.getTranslate(),i.setTransition(0),i.animating&&i.$wrapperEl.trigger("webkitTransitionEnd transitionend"),a.allowMomentumBounce=!1,!n.grabCursor||!0!==i.allowSlideNext&&!0!==i.allowSlidePrev||i.setGrabCursor(!0),i.emit("sliderFirstMove",s)),i.emit("sliderMove",s),a.isMoved=!0;var f=i.isHorizontal()?c:p;r.diff=f,f*=n.touchRatio,o&&(f=-f),i.swipeDirection=f>0?"prev":"next",a.currentTranslate=f+a.startTranslate;var h=!0,m=n.resistanceRatio;if(n.touchReleaseOnEdges&&(m=0),f>0&&a.currentTranslate>i.minTranslate()?(h=!1,n.resistance&&(a.currentTranslate=i.minTranslate()-1+Math.pow(-i.minTranslate()+a.startTranslate+f,m))):f<0&&a.currentTranslatea.startTranslate&&(a.currentTranslate=a.startTranslate),n.threshold>0){if(!(Math.abs(f)>n.threshold||a.allowThresholdMove))return void(a.currentTranslate=a.startTranslate);if(!a.allowThresholdMove)return a.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,a.currentTranslate=a.startTranslate,void(r.diff=i.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY)}n.followFinger&&((n.freeMode||n.watchSlidesProgress||n.watchSlidesVisibility)&&(i.updateActiveIndex(),i.updateSlidesClasses()),n.freeMode&&(0===a.velocities.length&&a.velocities.push({position:r[i.isHorizontal()?"startX":"startY"],time:a.touchStartTime}),a.velocities.push({position:r[i.isHorizontal()?"currentX":"currentY"],time:Ge.now()})),i.updateProgress(a.currentTranslate),i.setTranslate(a.currentTranslate))}}}}}function xe(e){var t=this,i=t.touchEventsData,a=t.params,n=t.touches,r=t.rtlTranslate,o=t.$wrapperEl,s=t.slidesGrid,l=t.snapGrid,d=e;if(d.originalEvent&&(d=d.originalEvent),i.allowTouchCallbacks&&t.emit("touchEnd",d),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&a.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);a.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var c=Ge.now(),p=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap",d),p<300&&c-i.lastClickTime>300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),i.clickTimeout=Ge.nextTick(function(){t&&!t.destroyed&&t.emit("click",d)},300)),p<300&&c-i.lastClickTime<300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),t.emit("doubleTap",d))),i.lastClickTime=Ge.now(),Ge.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!i.isTouched||!i.isMoved||!t.swipeDirection||0===n.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);i.isTouched=!1,i.isMoved=!1,i.startMoving=!1;var u;if(u=a.followFinger?r?t.translate:-t.translate:-i.currentTranslate,a.freeMode){if(u<-t.minTranslate())return void t.slideTo(t.activeIndex);if(u>-t.maxTranslate())return void(t.slides.length1){var f=i.velocities.pop(),h=i.velocities.pop(),m=f.position-h.position,g=f.time-h.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)150||Ge.now()-f.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=a.freeModeMomentumVelocityRatio,i.velocities.length=0;var v=1e3*a.freeModeMomentumRatio,b=t.velocity*v,w=t.translate+b;r&&(w=-w);var x,y,A=!1,k=20*Math.abs(t.velocity)*a.freeModeMomentumBounceRatio;if(wt.minTranslate())a.freeModeMomentumBounce?(w-t.minTranslate()>k&&(w=t.minTranslate()+k),x=t.minTranslate(),A=!0,i.allowMomentumBounce=!0):w=t.minTranslate(),a.loop&&a.centeredSlides&&(y=!0);else if(a.freeModeSticky){for(var C,E=0;E-w){C=E;break}w=Math.abs(l[C]-w)=a.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses()))}for(var S=0,T=t.slidesSizesGrid[0],_=0;_=s[_]&&u=s[_]&&(S=_,T=s[s.length-1]-s[s.length-2]);var z=(u-s[S])/T;if(p>a.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(z>=a.longSwipesRatio?t.slideTo(S+a.slidesPerGroup):t.slideTo(S)),"prev"===t.swipeDirection&&(z>1-a.longSwipesRatio?t.slideTo(S+a.slidesPerGroup):t.slideTo(S))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(S+a.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(S)}}function ye(){var e=this,t=e.params,i=e.el;if(!i||0!==i.offsetWidth){t.breakpoints&&e.setBreakpoint();var a=e.allowSlideNext,n=e.allowSlidePrev,r=e.snapGrid;if(e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),t.freeMode){var o=Math.min(Math.max(e.translate,e.maxTranslate()),e.minTranslate());e.setTranslate(o),e.updateActiveIndex(),e.updateSlidesClasses(),t.autoHeight&&e.updateAutoHeight()}else e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0);e.allowSlidePrev=n,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}}function Ae(e){var t=this;t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}function ke(){var e=this,t=e.params,i=e.touchEvents,a=e.el,n=e.wrapperEl;e.onTouchStart=be.bind(e),e.onTouchMove=we.bind(e),e.onTouchEnd=xe.bind(e),e.onClick=Ae.bind(e);var r="container"===t.touchEventsTarget?a:n,o=!!t.nested;if(Oe.touch||!Oe.pointerEvents&&!Oe.prefixedPointerEvents){if(Oe.touch){var s=!("touchstart"!==i.start||!Oe.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(i.start,e.onTouchStart,s),r.addEventListener(i.move,e.onTouchMove,Oe.passiveListener?{passive:!1,capture:o}:o),r.addEventListener(i.end,e.onTouchEnd,s)}(t.simulateTouch&&!We.ios&&!We.android||t.simulateTouch&&!Oe.touch&&We.ios)&&(r.addEventListener("mousedown",e.onTouchStart,!1),Le.addEventListener("mousemove",e.onTouchMove,o),Le.addEventListener("mouseup",e.onTouchEnd,!1))}else r.addEventListener(i.start,e.onTouchStart,!1),Le.addEventListener(i.move,e.onTouchMove,o),Le.addEventListener(i.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",e.onClick,!0),e.on(We.ios||We.android?"resize orientationchange observerUpdate":"resize observerUpdate",ye,!0)}function Ce(){var e=this,t=e.params,i=e.touchEvents,a=e.el,n=e.wrapperEl,r="container"===t.touchEventsTarget?a:n,o=!!t.nested;if(Oe.touch||!Oe.pointerEvents&&!Oe.prefixedPointerEvents){if(Oe.touch){var s=!("onTouchStart"!==i.start||!Oe.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,e.onTouchStart,s),r.removeEventListener(i.move,e.onTouchMove,o),r.removeEventListener(i.end,e.onTouchEnd,s)}(t.simulateTouch&&!We.ios&&!We.android||t.simulateTouch&&!Oe.touch&&We.ios)&&(r.removeEventListener("mousedown",e.onTouchStart,!1),Le.removeEventListener("mousemove",e.onTouchMove,o),Le.removeEventListener("mouseup",e.onTouchEnd,!1))}else r.removeEventListener(i.start,e.onTouchStart,!1),Le.removeEventListener(i.move,e.onTouchMove,o),Le.removeEventListener(i.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",e.onClick,!0),e.off(We.ios||We.android?"resize orientationchange observerUpdate":"resize observerUpdate",ye)}function Ee(){var e=this,t=e.activeIndex,i=e.initialized,a=e.loopedSlides;void 0===a&&(a=0);var n=e.params,r=n.breakpoints;if(r&&(!r||0!==Object.keys(r).length)){var o=e.getBreakpoint(r);if(o&&e.currentBreakpoint!==o){var s=o in r?r[o]:void 0;s&&["slidesPerView","spaceBetween","slidesPerGroup"].forEach(function(e){var t=s[e];void 0!==t&&(s[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});var l=s||e.originalParams,d=l.direction&&l.direction!==n.direction,c=n.loop&&(l.slidesPerView!==n.slidesPerView||d);d&&i&&e.changeDirection(),Ge.extend(e.params,l),Ge.extend(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),e.currentBreakpoint=o,c&&i&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",l)}}}function Se(e){var t=this;if(e){var i=!1,a=[];Object.keys(e).forEach(function(e){a.push(e)}),a.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var n=0;n=Ie.innerWidth&&!i&&(i=r)}return i||"max"}}function Te(){var e=this,t=e.classNames,i=e.params,a=e.rtl,n=e.$el,r=[];r.push("initialized"),r.push(i.direction),i.freeMode&&r.push("free-mode"),Oe.flexbox||r.push("no-flexbox"),i.autoHeight&&r.push("autoheight"),a&&r.push("rtl"),i.slidesPerColumn>1&&r.push("multirow"),We.android&&r.push("android"),We.ios&&r.push("ios"),(je.isIE||je.isEdge)&&(Oe.pointerEvents||Oe.prefixedPointerEvents)&&r.push("wp8-"+i.direction),r.forEach(function(e){t.push(i.containerModifierClass+e)}),n.addClass(t.join(" "))}function _e(){var e=this,t=e.$el,i=e.classNames;t.removeClass(i.join(" "))}function ze(e,t,i,a,n,r){function o(){r&&r()}var s;e.complete&&n?o():t?(s=new Ie.Image,s.onload=o,s.onerror=o,a&&(s.sizes=a),i&&(s.srcset=i),t&&(s.src=t)):o()}function Me(){function e(){void 0!==t&&null!==t&&t&&!t.destroyed&&(void 0!==t.imagesLoaded&&(t.imagesLoaded+=1),t.imagesLoaded===t.imagesToLoad.length&&(t.params.updateOnImagesReady&&t.update(),t.emit("imagesReady")))}var t=this;t.imagesToLoad=t.$el.find("img");for(var i=0;i6&&(a=a.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),n=new Ie.WebKitCSSMatrix("none"===a?"":a)):(n=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),i=n.toString().split(",")),"x"===t&&(a=Ie.WebKitCSSMatrix?n.m41:16===i.length?parseFloat(i[12]):parseFloat(i[4])),"y"===t&&(a=Ie.WebKitCSSMatrix?n.m42:16===i.length?parseFloat(i[13]):parseFloat(i[5])),a||0},parseUrlQuery:function(e){var t,i,a,n,r={},o=e||Ie.location.href;if("string"==typeof o&&o.length)for(o=o.indexOf("?")>-1?o.replace(/\S*\?/,""):"",i=o.split("&").filter(function(e){return""!==e}),n=i.length,t=0;t0||"ontouchstart"in Ie||Ie.DocumentTouch&&Le instanceof Ie.DocumentTouch)}(),pointerEvents:!!(Ie.navigator.pointerEnabled||Ie.PointerEvent||"maxTouchPoints"in Ie.navigator&&Ie.navigator.maxTouchPoints>0),prefixedPointerEvents:!!Ie.navigator.msPointerEnabled,transition:function(){var t=e.style;return"transition"in t||"webkitTransition"in t||"MozTransition"in t}(),transforms3d:Ie.Modernizr&&!0===Ie.Modernizr.csstransforms3d||function(){var t=e.style;return"webkitPerspective"in t||"MozPerspective"in t||"OPerspective"in t||"MsPerspective"in t||"perspective"in t}(),flexbox:function(){for(var t=e.style,i="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),a=0;a=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(Ie.navigator.userAgent)}}(),Ve=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},Ue={components:{configurable:!0}};Ve.prototype.on=function(e,t,i){var a=this;if("function"!=typeof t)return a;var n=i?"unshift":"push";return e.split(" ").forEach(function(e){a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][n](t)}),a},Ve.prototype.once=function(e,t,i){function a(){for(var i=[],r=arguments.length;r--;)i[r]=arguments[r];t.apply(n,i),n.off(e,a),a.f7proxy&&delete a.f7proxy}var n=this;return"function"!=typeof t?n:(a.f7proxy=t,n.on(e,a,i))},Ve.prototype.off=function(e,t){var i=this;return i.eventsListeners?(e.split(" ").forEach(function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e]&&i.eventsListeners[e].length&&i.eventsListeners[e].forEach(function(a,n){(a===t||a.f7proxy&&a.f7proxy===t)&&i.eventsListeners[e].splice(n,1)})}),i):i},Ve.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i=this;if(!i.eventsListeners)return i;var a,n,r;return"string"==typeof e[0]||Array.isArray(e[0])?(a=e[0],n=e.slice(1,e.length),r=i):(a=e[0].events,n=e[0].data,r=e[0].context||i),(Array.isArray(a)?a:a.split(" ")).forEach(function(e){if(i.eventsListeners&&i.eventsListeners[e]){var t=[];i.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(r,n)})}}),i},Ve.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var a=t.modules[i];a.params&&Ge.extend(e,a.params)})},Ve.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var a=t.modules[i],n=e[i]||{};a.instance&&Object.keys(a.instance).forEach(function(e){var i=a.instance[e];t[e]="function"==typeof i?i.bind(t):i}),a.on&&t.on&&Object.keys(a.on).forEach(function(e){t.on(e,a.on[e])}),a.create&&a.create.bind(t)(n)})},Ue.components.set=function(e){var t=this;t.use&&t.use(e)},Ve.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var a=this;a.prototype.modules||(a.prototype.modules={});var n=e.name||Object.keys(a.prototype.modules).length+"_"+Ge.now();return a.prototype.modules[n]=e,e.proto&&Object.keys(e.proto).forEach(function(t){a.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(function(t){a[t]=e.static[t]}),e.install&&e.install.apply(a,t),a},Ve.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var a=this;return Array.isArray(e)?(e.forEach(function(e){return a.installModule(e)}),a):a.installModule.apply(a,[e].concat(t))},Object.defineProperties(Ve,Ue);var Ye={updateSize:j,updateSlides:V,updateAutoHeight:U,updateSlidesOffset:Y,updateSlidesProgress:X,updateProgress:H,updateSlidesClasses:N,updateActiveIndex:F,updateClickedSlide:Q},Xe={getTranslate:q,setTranslate:W,minTranslate:Z,maxTranslate:K},He={setTransition:J,transitionStart:$,transitionEnd:ee},Ne={slideTo:te,slideToLoop:ie,slideNext:ae,slidePrev:ne,slideReset:re,slideToClosest:oe,slideToClickedSlide:se},Fe={loopCreate:le,loopFix:de,loopDestroy:ce},Qe={setGrabCursor:pe,unsetGrabCursor:ue},qe={appendSlide:fe,prependSlide:he,addSlide:me,removeSlide:ge,removeAllSlides:ve},We=function(){var e=Ie.navigator.userAgent,t={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:Ie.cordova||Ie.phonegap,phonegap:Ie.cordova||Ie.phonegap},i=e.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),a=e.match(/(Android);?[\s\/]+([\d.]+)?/),n=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),o=!n&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);if(i&&(t.os="windows",t.osVersion=i[2],t.windows=!0),a&&!i&&(t.os="android",t.osVersion=a[2],t.android=!0,t.androidChrome=e.toLowerCase().indexOf("chrome")>=0),(n||o||r)&&(t.os="ios",t.ios=!0),o&&!r&&(t.osVersion=o[2].replace(/_/g,"."),t.iphone=!0),n&&(t.osVersion=n[2].replace(/_/g,"."),t.ipad=!0),r&&(t.osVersion=r[3]?r[3].replace(/_/g,"."):null,t.iphone=!0),t.ios&&t.osVersion&&e.indexOf("Version/")>=0&&"10"===t.osVersion.split(".")[0]&&(t.osVersion=e.toLowerCase().split("version/")[1].split(" ")[0]),t.desktop=!(t.os||t.android||t.webView),t.webView=(o||n||r)&&e.match(/.*AppleWebKit(?!.*Safari)/i),t.os&&"ios"===t.os){var s=t.osVersion.split("."),l=Le.querySelector('meta[name="viewport"]');t.minimalUi=!t.webView&&(r||o)&&(1*s[0]==7?1*s[1]>=1:1*s[0]>7)&&l&&l.getAttribute("content").indexOf("minimal-ui")>=0}return t.pixelRatio=Ie.devicePixelRatio||1,t}(),Ze={attachEvents:ke,detachEvents:Ce},Ke={setBreakpoint:Ee,getBreakpoint:Se},Je={addClasses:Te,removeClasses:_e},$e={loadImage:ze,preloadImages:Me},et={checkOverflow:Be},tt={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,preventInteractionOnTransition:!1,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsInverse:!1,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},it={update:Ye,translate:Xe,transition:He,slide:Ne,loop:Fe,grabCursor:Qe,manipulation:qe,events:Ze,breakpoints:Ke,checkOverflow:et,classes:Je,images:$e},at={},nt=function(t){function i(){for(var a,n=[],r=arguments.length;r--;)n[r]=arguments[r];var o,s;1===n.length&&n[0].constructor&&n[0].constructor===Object?s=n[0]:(a=n,o=a[0],s=a[1]),s||(s={}),s=Ge.extend({},s),o&&!s.el&&(s.el=o),t.call(this,s),Object.keys(it).forEach(function(e){Object.keys(it[e]).forEach(function(t){i.prototype[t]||(i.prototype[t]=it[e][t])})});var l=this;void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach(function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],a=t.params[i];if("object"!=typeof a||null===a)return;if(!(i in s&&"enabled"in a))return;!0===s[i]&&(s[i]={enabled:!0}),"object"!=typeof s[i]||"enabled"in s[i]||(s[i].enabled=!0),s[i]||(s[i]={enabled:!1})}});var d=Ge.extend({},tt);l.useModulesParams(d),l.params=Ge.extend({},d,at,s),l.originalParams=Ge.extend({},l.params),l.passedParams=Ge.extend({},s),l.$=e;var c=e(l.params.el);if(o=c[0]){if(c.length>1){var p=[];return c.each(function(e,t){var a=Ge.extend({},s,{el:t});p.push(new i(a))}),p}o.swiper=l,c.data("swiper",l);var u=c.children("."+l.params.wrapperClass);return Ge.extend(l,{$el:c,el:o,$wrapperEl:u,wrapperEl:u[0],classNames:[],slides:e(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===l.params.direction},isVertical:function(){return"vertical"===l.params.direction},rtl:"rtl"===o.dir.toLowerCase()||"rtl"===c.css("direction"),rtlTranslate:"horizontal"===l.params.direction&&("rtl"===o.dir.toLowerCase()||"rtl"===c.css("direction")),wrongRTL:"-webkit-box"===u.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:function(){var e=["touchstart","touchmove","touchend"],t=["mousedown","mousemove","mouseup"];return Oe.pointerEvents?t=["pointerdown","pointermove","pointerup"]:Oe.prefixedPointerEvents&&(t=["MSPointerDown","MSPointerMove","MSPointerUp"]),l.touchEventsTouch={start:e[0],move:e[1],end:e[2]},l.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},Oe.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video",lastClickTime:Ge.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.params.init&&l.init(),l}}t&&(i.__proto__=t),i.prototype=Object.create(t&&t.prototype),i.prototype.constructor=i;var a={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return i.prototype.slidesPerViewDynamic=function(){var e=this,t=e.params,i=e.slides,a=e.slidesGrid,n=e.size,r=e.activeIndex,o=1;if(t.centeredSlides){for(var s,l=i[r].swiperSlideSize,d=r+1;dn&&(s=!0));for(var c=r-1;c>=0;c-=1)i[c]&&!s&&(l+=i[c].swiperSlideSize,o+=1,l>n&&(s=!0))}else for(var p=r+1;p1)&&t.isEnd&&!t.params.centeredSlides?t.slideTo(t.slides.length-1,0,!1,!0):t.slideTo(t.activeIndex,0,!1,!0))||e(),a.watchOverflow&&i!==t.snapGrid&&t.checkOverflow(),t.emit("update")}},i.prototype.changeDirection=function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e?i:("vertical"===a&&(i.$el.removeClass(i.params.containerModifierClass+"vertical wp8-vertical").addClass(""+i.params.containerModifierClass+e),(je.isIE||je.isEdge)&&(Oe.pointerEvents||Oe.prefixedPointerEvents)&&i.$el.addClass(i.params.containerModifierClass+"wp8-"+e)),"horizontal"===a&&(i.$el.removeClass(i.params.containerModifierClass+"horizontal wp8-horizontal").addClass(""+i.params.containerModifierClass+e),(je.isIE||je.isEdge)&&(Oe.pointerEvents||Oe.prefixedPointerEvents)&&i.$el.addClass(i.params.containerModifierClass+"wp8-"+e)),i.params.direction=e,i.slides.each(function(t,i){"vertical"===e?i.style.width="":i.style.height=""}),i.emit("changeDirection"),t&&i.update(),i)},i.prototype.init=function(){var e=this;e.initialized||(e.emit("beforeInit"),e.params.breakpoints&&e.setBreakpoint(),e.addClasses(),e.params.loop&&e.loopCreate(),e.updateSize(),e.updateSlides(),e.params.watchOverflow&&e.checkOverflow(),e.params.grabCursor&&e.setGrabCursor(),e.params.preloadImages&&e.preloadImages(),e.params.loop?e.slideTo(e.params.initialSlide+e.loopedSlides,0,e.params.runCallbacksOnInit):e.slideTo(e.params.initialSlide,0,e.params.runCallbacksOnInit),e.attachEvents(),e.initialized=!0,e.emit("init"))},i.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,a=i.params,n=i.$el,r=i.$wrapperEl,o=i.slides;return void 0===i.params||i.destroyed?null:(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),a.loop&&i.loopDestroy(),t&&(i.removeClasses(),n.removeAttr("style"),r.removeAttr("style"),o&&o.length&&o.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index").removeAttr("data-swiper-column").removeAttr("data-swiper-row")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(function(e){i.off(e)}),!1!==e&&(i.$el[0].swiper=null,i.$el.data("swiper",null),Ge.deleteProps(i)),i.destroyed=!0,null)},i.extendDefaults=function(e){Ge.extend(at,e)},a.extendedDefaults.get=function(){return at},a.defaults.get=function(){return tt},a.Class.get=function(){return t},a.$.get=function(){return e},Object.defineProperties(i,a),i}(Ve),rt={name:"device",proto:{device:We},static:{device:We}},ot={name:"support",proto:{support:Oe},static:{support:Oe}},st={name:"browser",proto:{browser:je},static:{browser:je}},lt={name:"resize",create:function(){var e=this;Ge.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){var e=this;Ie.addEventListener("resize",e.resize.resizeHandler),Ie.addEventListener("orientationchange",e.resize.orientationChangeHandler)},destroy:function(){var e=this;Ie.removeEventListener("resize",e.resize.resizeHandler),Ie.removeEventListener("orientationchange",e.resize.orientationChangeHandler)}}},dt={func:Ie.MutationObserver||Ie.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var i=this,a=dt.func,n=new a(function(e){if(1===e.length)return void i.emit("observerUpdate",e[0]);var t=function(){i.emit("observerUpdate",e[0])};Ie.requestAnimationFrame?Ie.requestAnimationFrame(t):Ie.setTimeout(t,0)});n.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(n)},init:function(){var e=this;if(Oe.observer&&e.params.observer){if(e.params.observeParents)for(var t=e.$el.parents(),i=0;iA)&&i.$wrapperEl.find("."+i.params.slideClass+'[data-swiper-slide-index="'+S+'"]').remove();for(var T=0;T=y&&T<=A&&(void 0===u||e?E.push(T):(T>u&&E.push(T),T'+t+"
        ");return r.attr("data-swiper-slide-index")||r.attr("data-swiper-slide-index",i),n.cache&&(a.virtual.cache[i]=r),r},appendSlide:function(e){var t=this;if("object"==typeof e&&"length"in e)for(var i=0;i=0;a-=1)t.virtual.slides.splice(e[a],1),t.params.virtual.cache&&delete t.virtual.cache[e[a]],e[a]0&&0===t.$el.parents("."+t.params.slideActiveClass).length)return;var o=Ie.innerWidth,s=Ie.innerHeight,l=t.$el.offset();i&&(l.left-=t.$el[0].scrollLeft);for(var d=[[l.left,l.top],[l.left+t.width,l.top],[l.left,l.top+t.height],[l.left+t.width,l.top+t.height]],c=0;c=0&&p[0]<=o&&p[1]>=0&&p[1]<=s&&(r=!0)}if(!r)return}t.isHorizontal()?(37!==n&&39!==n||(a.preventDefault?a.preventDefault():a.returnValue=!1),(39===n&&!i||37===n&&i)&&t.slideNext(),(37===n&&!i||39===n&&i)&&t.slidePrev()):(38!==n&&40!==n||(a.preventDefault?a.preventDefault():a.returnValue=!1),40===n&&t.slideNext(),38===n&&t.slidePrev()),t.emit("keyPress",n)}},enable:function(){var t=this;t.keyboard.enabled||(e(Le).on("keydown",t.keyboard.handle),t.keyboard.enabled=!0)},disable:function(){var t=this;t.keyboard.enabled&&(e(Le).off("keydown",t.keyboard.handle),t.keyboard.enabled=!1)}},ht={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){var e=this;Ge.extend(e,{keyboard:{enabled:!1,enable:ft.enable.bind(e),disable:ft.disable.bind(e),handle:ft.handle.bind(e)}})},on:{init:function(){var e=this;e.params.keyboard.enabled&&e.keyboard.enable()},destroy:function(){var e=this;e.keyboard.enabled&&e.keyboard.disable()}}},mt={lastScrollTime:Ge.now(),event:function(){return Ie.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":Pe()?"wheel":"mousewheel"}(),normalize:function(e){var t=0,i=0,a=0,n=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),a=10*t,n=10*i,"deltaY"in e&&(n=e.deltaY),"deltaX"in e&&(a=e.deltaX),(a||n)&&e.deltaMode&&(1===e.deltaMode?(a*=40,n*=40):(a*=800,n*=800)),a&&!t&&(t=a<1?-1:1),n&&!i&&(i=n<1?-1:1),{spinX:t,spinY:i,pixelX:a,pixelY:n}},handleMouseEnter:function(){this.mouseEntered=!0},handleMouseLeave:function(){this.mouseEntered=!1},handle:function(e){var t=e,i=this,a=i.params.mousewheel;if(!i.mouseEntered&&!a.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);var n=0,r=i.rtlTranslate?-1:1,o=mt.normalize(t);if(a.forceToAxis)if(i.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;n=o.pixelX*r}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;n=o.pixelY}else n=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*r:-o.pixelY;if(0===n)return!0;if(a.invert&&(n=-n),i.params.freeMode){i.params.loop&&i.loopFix();var s=i.getTranslate()+n*a.sensitivity,l=i.isBeginning,d=i.isEnd;if(s>=i.minTranslate()&&(s=i.minTranslate()),s<=i.maxTranslate()&&(s=i.maxTranslate()),i.setTransition(0),i.setTranslate(s),i.updateProgress(),i.updateActiveIndex(),i.updateSlidesClasses(),(!l&&i.isBeginning||!d&&i.isEnd)&&i.updateSlidesClasses(),i.params.freeModeSticky&&(clearTimeout(i.mousewheel.timeout),i.mousewheel.timeout=Ge.nextTick(function(){i.slideToClosest()},300)),i.emit("scroll",t),i.params.autoplay&&i.params.autoplayDisableOnInteraction&&i.autoplay.stop(),s===i.minTranslate()||s===i.maxTranslate())return!0}else{if(Ge.now()-i.mousewheel.lastScrollTime>60)if(n<0)if(i.isEnd&&!i.params.loop||i.animating){if(a.releaseOnEdges)return!0}else i.slideNext(),i.emit("scroll",t);else if(i.isBeginning&&!i.params.loop||i.animating){if(a.releaseOnEdges)return!0}else i.slidePrev(),i.emit("scroll",t);i.mousewheel.lastScrollTime=(new Ie.Date).getTime()}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1},enable:function(){var t=this;if(!mt.event)return!1;if(t.mousewheel.enabled)return!1;var i=t.$el;return"container"!==t.params.mousewheel.eventsTarged&&(i=e(t.params.mousewheel.eventsTarged)),i.on("mouseenter",t.mousewheel.handleMouseEnter),i.on("mouseleave",t.mousewheel.handleMouseLeave),i.on(mt.event,t.mousewheel.handle),t.mousewheel.enabled=!0,!0},disable:function(){var t=this;if(!mt.event)return!1;if(!t.mousewheel.enabled)return!1;var i=t.$el;return"container"!==t.params.mousewheel.eventsTarged&&(i=e(t.params.mousewheel.eventsTarged)),i.off(mt.event,t.mousewheel.handle),t.mousewheel.enabled=!1,!0}},gt={name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){var e=this;Ge.extend(e,{mousewheel:{enabled:!1,enable:mt.enable.bind(e),disable:mt.disable.bind(e),handle:mt.handle.bind(e),handleMouseEnter:mt.handleMouseEnter.bind(e),handleMouseLeave:mt.handleMouseLeave.bind(e),lastScrollTime:Ge.now()}})},on:{init:function(){var e=this;e.params.mousewheel.enabled&&e.mousewheel.enable()},destroy:function(){var e=this;e.mousewheel.enabled&&e.mousewheel.disable()}}},vt={update:function(){var e=this,t=e.params.navigation;if(!e.params.loop){var i=e.navigation,a=i.$nextEl,n=i.$prevEl;n&&n.length>0&&(e.isBeginning?n.addClass(t.disabledClass):n.removeClass(t.disabledClass),n[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](t.lockClass)),a&&a.length>0&&(e.isEnd?a.addClass(t.disabledClass):a.removeClass(t.disabledClass),a[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](t.lockClass))}},onPrevClick:function(e){var t=this;e.preventDefault(),t.isBeginning&&!t.params.loop||t.slidePrev()},onNextClick:function(e){var t=this;e.preventDefault(),t.isEnd&&!t.params.loop||t.slideNext()},init:function(){var t=this,i=t.params.navigation;if(i.nextEl||i.prevEl){var a,n;i.nextEl&&(a=e(i.nextEl),t.params.uniqueNavElements&&"string"==typeof i.nextEl&&a.length>1&&1===t.$el.find(i.nextEl).length&&(a=t.$el.find(i.nextEl))),i.prevEl&&(n=e(i.prevEl),t.params.uniqueNavElements&&"string"==typeof i.prevEl&&n.length>1&&1===t.$el.find(i.prevEl).length&&(n=t.$el.find(i.prevEl))),a&&a.length>0&&a.on("click",t.navigation.onNextClick),n&&n.length>0&&n.on("click",t.navigation.onPrevClick),Ge.extend(t.navigation,{$nextEl:a,nextEl:a&&a[0],$prevEl:n,prevEl:n&&n[0]})}},destroy:function(){var e=this,t=e.navigation,i=t.$nextEl,a=t.$prevEl;i&&i.length&&(i.off("click",e.navigation.onNextClick),i.removeClass(e.params.navigation.disabledClass)),a&&a.length&&(a.off("click",e.navigation.onPrevClick),a.removeClass(e.params.navigation.disabledClass))}},bt={name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){var e=this;Ge.extend(e,{navigation:{init:vt.init.bind(e),update:vt.update.bind(e),destroy:vt.destroy.bind(e),onNextClick:vt.onNextClick.bind(e),onPrevClick:vt.onPrevClick.bind(e)}})},on:{init:function(){var e=this;e.navigation.init(),e.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(t){var i=this,a=i.navigation,n=a.$nextEl,r=a.$prevEl;if(i.params.navigation.hideOnClick&&!e(t.target).is(r)&&!e(t.target).is(n)){var o;n?o=n.hasClass(i.params.navigation.hiddenClass):r&&(o=r.hasClass(i.params.navigation.hiddenClass)),!0===o?i.emit("navigationShow",i):i.emit("navigationHide",i),n&&n.toggleClass(i.params.navigation.hiddenClass),r&&r.toggleClass(i.params.navigation.hiddenClass)}}}},wt={update:function(){var t=this,i=t.rtl,a=t.params.pagination;if(a.el&&t.pagination.el&&t.pagination.$el&&0!==t.pagination.$el.length){var n,r=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,o=t.pagination.$el,s=t.params.loop?Math.ceil((r-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;if(t.params.loop?(n=Math.ceil((t.activeIndex-t.loopedSlides)/t.params.slidesPerGroup),n>r-1-2*t.loopedSlides&&(n-=r-2*t.loopedSlides),n>s-1&&(n-=s),n<0&&"bullets"!==t.params.paginationType&&(n=s+n)):n=void 0!==t.snapIndex?t.snapIndex:t.activeIndex||0,"bullets"===a.type&&t.pagination.bullets&&t.pagination.bullets.length>0){var l,d,c,p=t.pagination.bullets;if(a.dynamicBullets&&(t.pagination.bulletSize=p.eq(0)[t.isHorizontal()?"outerWidth":"outerHeight"](!0),o.css(t.isHorizontal()?"width":"height",t.pagination.bulletSize*(a.dynamicMainBullets+4)+"px"),a.dynamicMainBullets>1&&void 0!==t.previousIndex&&(t.pagination.dynamicBulletIndex+=n-t.previousIndex,t.pagination.dynamicBulletIndex>a.dynamicMainBullets-1?t.pagination.dynamicBulletIndex=a.dynamicMainBullets-1:t.pagination.dynamicBulletIndex<0&&(t.pagination.dynamicBulletIndex=0)),l=n-t.pagination.dynamicBulletIndex,d=l+(Math.min(p.length,a.dynamicMainBullets)-1),c=(d+l)/2),p.removeClass(a.bulletActiveClass+" "+a.bulletActiveClass+"-next "+a.bulletActiveClass+"-next-next "+a.bulletActiveClass+"-prev "+a.bulletActiveClass+"-prev-prev "+a.bulletActiveClass+"-main"),o.length>1)p.each(function(t,i){var r=e(i),o=r.index();o===n&&r.addClass(a.bulletActiveClass),a.dynamicBullets&&(o>=l&&o<=d&&r.addClass(a.bulletActiveClass+"-main"),o===l&&r.prev().addClass(a.bulletActiveClass+"-prev").prev().addClass(a.bulletActiveClass+"-prev-prev"),o===d&&r.next().addClass(a.bulletActiveClass+"-next").next().addClass(a.bulletActiveClass+"-next-next"))});else{if(p.eq(n).addClass(a.bulletActiveClass),a.dynamicBullets){for(var u=p.eq(l),f=p.eq(d),h=l;h<=d;h+=1)p.eq(h).addClass(a.bulletActiveClass+"-main");u.prev().addClass(a.bulletActiveClass+"-prev").prev().addClass(a.bulletActiveClass+"-prev-prev"),f.next().addClass(a.bulletActiveClass+"-next").next().addClass(a.bulletActiveClass+"-next-next")}}if(a.dynamicBullets){var m=Math.min(p.length,a.dynamicMainBullets+4),g=(t.pagination.bulletSize*m-t.pagination.bulletSize)/2-c*t.pagination.bulletSize,v=i?"right":"left";p.css(t.isHorizontal()?v:"top",g+"px")}}if("fraction"===a.type&&(o.find("."+a.currentClass).text(a.formatFractionCurrent(n+1)),o.find("."+a.totalClass).text(a.formatFractionTotal(s))),"progressbar"===a.type){var b;b=a.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";var w=(n+1)/s,x=1,y=1;"horizontal"===b?x=w:y=w,o.find("."+a.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+x+") scaleY("+y+")").transition(t.params.speed)}"custom"===a.type&&a.renderCustom?(o.html(a.renderCustom(t,n+1,s)),t.emit("paginationRender",t,o[0])):t.emit("paginationUpdate",t,o[0]),o[t.params.watchOverflow&&t.isLocked?"addClass":"removeClass"](a.lockClass)}},render:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var i=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,a=e.pagination.$el,n="";if("bullets"===t.type){for(var r=e.params.loop?Math.ceil((i-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length,o=0;o";a.html(n),e.pagination.bullets=a.find("."+t.bulletClass)}"fraction"===t.type&&(n=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):' / ',a.html(n)),"progressbar"===t.type&&(n=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'',a.html(n)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var t=this,i=t.params.pagination;if(i.el){var a=e(i.el);0!==a.length&&(t.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===t.$el.find(i.el).length&&(a=t.$el.find(i.el)),"bullets"===i.type&&i.clickable&&a.addClass(i.clickableClass),a.addClass(i.modifierClass+i.type),"bullets"===i.type&&i.dynamicBullets&&(a.addClass(""+i.modifierClass+i.type+"-dynamic"),t.pagination.dynamicBulletIndex=0,i.dynamicMainBullets<1&&(i.dynamicMainBullets=1)),"progressbar"===i.type&&i.progressbarOpposite&&a.addClass(i.progressbarOppositeClass),i.clickable&&a.on("click","."+i.bulletClass,function(i){i.preventDefault();var a=e(this).index()*t.params.slidesPerGroup;t.params.loop&&(a+=t.loopedSlides),t.slideTo(a)}),Ge.extend(t.pagination,{$el:a,el:a[0]}))}},destroy:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var i=e.pagination.$el;i.removeClass(t.hiddenClass),i.removeClass(t.modifierClass+t.type),e.pagination.bullets&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&i.off("click","."+t.bulletClass)}}},xt={name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:function(e){return e},formatFractionTotal:function(e){return e},bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){var e=this;Ge.extend(e,{pagination:{init:wt.init.bind(e),render:wt.render.bind(e),update:wt.update.bind(e),destroy:wt.destroy.bind(e),dynamicBulletIndex:0}})},on:{init:function(){var e=this;e.pagination.init(),e.pagination.render(),e.pagination.update()},activeIndexChange:function(){var e=this;e.params.loop?e.pagination.update():void 0===e.snapIndex&&e.pagination.update()},snapIndexChange:function(){var e=this;e.params.loop||e.pagination.update()},slidesLengthChange:function(){var e=this;e.params.loop&&(e.pagination.render(),e.pagination.update())},snapGridLengthChange:function(){var e=this;e.params.loop||(e.pagination.render(),e.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(t){var i=this;if(i.params.pagination.el&&i.params.pagination.hideOnClick&&i.pagination.$el.length>0&&!e(t.target).hasClass(i.params.pagination.bulletClass)){!0===i.pagination.$el.hasClass(i.params.pagination.hiddenClass)?i.emit("paginationShow",i):i.emit("paginationHide",i),i.pagination.$el.toggleClass(i.params.pagination.hiddenClass)}}}},yt={setTranslate:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,i=e.rtlTranslate,a=e.progress,n=t.dragSize,r=t.trackSize,o=t.$dragEl,s=t.$el,l=e.params.scrollbar,d=n,c=(r-n)*a;i?(c=-c,c>0?(d=n-c,c=0):-c+n>r&&(d=r+c)):c<0?(d=n+c,c=0):c+n>r&&(d=r-c),e.isHorizontal()?(Oe.transforms3d?o.transform("translate3d("+c+"px, 0, 0)"):o.transform("translateX("+c+"px)"),o[0].style.width=d+"px"):(Oe.transforms3d?o.transform("translate3d(0px, "+c+"px, 0)"):o.transform("translateY("+c+"px)"),o[0].style.height=d+"px"),l.hide&&(clearTimeout(e.scrollbar.timeout),s[0].style.opacity=1,e.scrollbar.timeout=setTimeout(function(){s[0].style.opacity=0,s.transition(400)},1e3))}},setTransition:function(e){var t=this;t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)},updateSize:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,i=t.$dragEl,a=t.$el;i[0].style.width="",i[0].style.height="";var n,r=e.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,o=e.size/e.virtualSize,s=o*(r/e.size);n="auto"===e.params.scrollbar.dragSize?r*o:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?i[0].style.width=n+"px":i[0].style.height=n+"px",a[0].style.display=o>=1?"none":"",e.params.scrollbar.hide&&(a[0].style.opacity=0),Ge.extend(t,{trackSize:r,divider:o,moveDivider:s,dragSize:n}),t.$el[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,i=this,a=i.scrollbar,n=i.rtlTranslate,r=a.$el,o=a.dragSize,s=a.trackSize;t=i.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY;var l;l=(t-r.offset()[i.isHorizontal()?"left":"top"]-o/2)/(s-o),l=Math.max(Math.min(l,1),0),n&&(l=1-l);var d=i.minTranslate()+(i.maxTranslate()-i.minTranslate())*l;i.updateProgress(d),i.setTranslate(d),i.updateActiveIndex(),i.updateSlidesClasses()},onDragStart:function(e){var t=this,i=t.params.scrollbar,a=t.scrollbar,n=t.$wrapperEl,r=a.$el,o=a.$dragEl;t.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),n.transition(100),o.transition(100),a.setDragPosition(e),clearTimeout(t.scrollbar.dragTimeout),r.transition(0),i.hide&&r.css("opacity",1),t.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this,i=t.scrollbar,a=t.$wrapperEl,n=i.$el,r=i.$dragEl;t.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,i.setDragPosition(e),a.transition(0),n.transition(0),r.transition(0),t.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this,i=t.params.scrollbar,a=t.scrollbar,n=a.$el;t.scrollbar.isTouched&&(t.scrollbar.isTouched=!1,i.hide&&(clearTimeout(t.scrollbar.dragTimeout),t.scrollbar.dragTimeout=Ge.nextTick(function(){n.css("opacity",0),n.transition(400)},1e3)),t.emit("scrollbarDragEnd",e),i.snapOnRelease&&t.slideToClosest())},enableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=e.scrollbar,i=e.touchEventsTouch,a=e.touchEventsDesktop,n=e.params,r=t.$el,o=r[0],s=!(!Oe.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},l=!(!Oe.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};Oe.touch?(o.addEventListener(i.start,e.scrollbar.onDragStart,s),o.addEventListener(i.move,e.scrollbar.onDragMove,s),o.addEventListener(i.end,e.scrollbar.onDragEnd,l)):(o.addEventListener(a.start,e.scrollbar.onDragStart,s),Le.addEventListener(a.move,e.scrollbar.onDragMove,s),Le.addEventListener(a.end,e.scrollbar.onDragEnd,l))}},disableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=e.scrollbar,i=e.touchEventsTouch,a=e.touchEventsDesktop,n=e.params,r=t.$el,o=r[0],s=!(!Oe.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},l=!(!Oe.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};Oe.touch?(o.removeEventListener(i.start,e.scrollbar.onDragStart,s),o.removeEventListener(i.move,e.scrollbar.onDragMove,s),o.removeEventListener(i.end,e.scrollbar.onDragEnd,l)):(o.removeEventListener(a.start,e.scrollbar.onDragStart,s),Le.removeEventListener(a.move,e.scrollbar.onDragMove,s),Le.removeEventListener(a.end,e.scrollbar.onDragEnd,l))}},init:function(){var t=this;if(t.params.scrollbar.el){var i=t.scrollbar,a=t.$el,n=t.params.scrollbar,r=e(n.el);t.params.uniqueNavElements&&"string"==typeof n.el&&r.length>1&&1===a.find(n.el).length&&(r=a.find(n.el));var o=r.find("."+t.params.scrollbar.dragClass);0===o.length&&(o=e('
        '),r.append(o)),Ge.extend(i,{$el:r,el:r[0],$dragEl:o,dragEl:o[0]}),n.draggable&&i.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},At={name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){var e=this;Ge.extend(e,{scrollbar:{init:yt.init.bind(e),destroy:yt.destroy.bind(e),updateSize:yt.updateSize.bind(e),setTranslate:yt.setTranslate.bind(e),setTransition:yt.setTransition.bind(e),enableDraggable:yt.enableDraggable.bind(e),disableDraggable:yt.disableDraggable.bind(e),setDragPosition:yt.setDragPosition.bind(e),onDragStart:yt.onDragStart.bind(e),onDragMove:yt.onDragMove.bind(e),onDragEnd:yt.onDragEnd.bind(e),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){var e=this;e.scrollbar.init(),e.scrollbar.updateSize(),e.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},kt={setTransform:function(t,i){var a=this,n=a.rtl,r=e(t),o=n?-1:1,s=r.attr("data-swiper-parallax")||"0",l=r.attr("data-swiper-parallax-x"),d=r.attr("data-swiper-parallax-y"),c=r.attr("data-swiper-parallax-scale"),p=r.attr("data-swiper-parallax-opacity");if(l||d?(l=l||"0",d=d||"0"):a.isHorizontal()?(l=s,d="0"):(d=s,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*i*o+"%":l*i*o+"px",d=d.indexOf("%")>=0?parseInt(d,10)*i+"%":d*i+"px",void 0!==p&&null!==p){var u=p-(p-1)*(1-Math.abs(i));r[0].style.opacity=u}if(void 0===c||null===c)r.transform("translate3d("+l+", "+d+", 0px)");else{var f=c-(c-1)*(1-Math.abs(i));r.transform("translate3d("+l+", "+d+", 0px) scale("+f+")")}},setTranslate:function(){var t=this,i=t.$el,a=t.slides,n=t.progress,r=t.snapGrid;i.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,i){t.parallax.setTransform(i,n)}),a.each(function(i,a){var o=a.progress;t.params.slidesPerGroup>1&&"auto"!==t.params.slidesPerView&&(o+=Math.ceil(i/2)-n*(r.length-1)),o=Math.min(Math.max(o,-1),1),e(a).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,i){t.parallax.setTransform(i,o)})})},setTransition:function(t){void 0===t&&(t=this.params.speed),this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(i,a){var n=e(a),r=parseInt(n.attr("data-swiper-parallax-duration"),10)||t;0===t&&(r=0),n.transition(r)})}},Ct={name:"parallax",params:{parallax:{enabled:!1}},create:function(){var e=this;Ge.extend(e,{parallax:{setTransform:kt.setTransform.bind(e),setTranslate:kt.setTranslate.bind(e),setTransition:kt.setTransition.bind(e)}})},on:{beforeInit:function(){var e=this;e.params.parallax.enabled&&(e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},init:function(){var e=this;e.params.parallax.enabled&&e.parallax.setTranslate()},setTranslate:function(){var e=this;e.params.parallax.enabled&&e.parallax.setTranslate()},setTransition:function(e){var t=this;t.params.parallax.enabled&&t.parallax.setTransition(e)}}},Et={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,n=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(a-t,2)+Math.pow(n-i,2))},onGestureStart:function(t){var i=this,a=i.params.zoom,n=i.zoom,r=n.gesture;if(n.fakeGestureTouched=!1,n.fakeGestureMoved=!1,!Oe.gestures){if("touchstart"!==t.type||"touchstart"===t.type&&t.targetTouches.length<2)return;n.fakeGestureTouched=!0,r.scaleStart=Et.getDistanceBetweenTouches(t)}if(!(r.$slideEl&&r.$slideEl.length||(r.$slideEl=e(t.target).closest(".swiper-slide"),0===r.$slideEl.length&&(r.$slideEl=i.slides.eq(i.activeIndex)),r.$imageEl=r.$slideEl.find("img, svg, canvas"),r.$imageWrapEl=r.$imageEl.parent("."+a.containerClass),r.maxRatio=r.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==r.$imageWrapEl.length)))return void(r.$imageEl=void 0);r.$imageEl.transition(0),i.zoom.isScaling=!0},onGestureChange:function(e){var t=this,i=t.params.zoom,a=t.zoom,n=a.gesture;if(!Oe.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.fakeGestureMoved=!0,n.scaleMove=Et.getDistanceBetweenTouches(e)}n.$imageEl&&0!==n.$imageEl.length&&(Oe.gestures?a.scale=e.scale*a.currentScale:a.scale=n.scaleMove/n.scaleStart*a.currentScale,a.scale>n.maxRatio&&(a.scale=n.maxRatio-1+Math.pow(a.scale-n.maxRatio+1,.5)),a.scalen.touchesStart.x))return void(n.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(n.minY)===Math.floor(n.startY)&&n.touchesCurrent.yn.touchesStart.y))return void(n.isTouched=!1)}e.preventDefault(),e.stopPropagation(),n.isMoved=!0,n.currentX=n.touchesCurrent.x-n.touchesStart.x+n.startX,n.currentY=n.touchesCurrent.y-n.touchesStart.y+n.startY,n.currentXn.maxX&&(n.currentX=n.maxX-1+Math.pow(n.currentX-n.maxX+1,.8)),n.currentYn.maxY&&(n.currentY=n.maxY-1+Math.pow(n.currentY-n.maxY+1,.8)),r.prevPositionX||(r.prevPositionX=n.touchesCurrent.x),r.prevPositionY||(r.prevPositionY=n.touchesCurrent.y),r.prevTime||(r.prevTime=Date.now()),r.x=(n.touchesCurrent.x-r.prevPositionX)/(Date.now()-r.prevTime)/2,r.y=(n.touchesCurrent.y-r.prevPositionY)/(Date.now()-r.prevTime)/2,Math.abs(n.touchesCurrent.x-r.prevPositionX)<2&&(r.x=0),Math.abs(n.touchesCurrent.y-r.prevPositionY)<2&&(r.y=0),r.prevPositionX=n.touchesCurrent.x,r.prevPositionY=n.touchesCurrent.y,r.prevTime=Date.now(),a.$imageWrapEl.transform("translate3d("+n.currentX+"px, "+n.currentY+"px,0)")}}},onTouchEnd:function(){var e=this,t=e.zoom,i=t.gesture,a=t.image,n=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length){if(!a.isTouched||!a.isMoved)return a.isTouched=!1,void(a.isMoved=!1);a.isTouched=!1,a.isMoved=!1;var r=300,o=300,s=n.x*r,l=a.currentX+s,d=n.y*o,c=a.currentY+d;0!==n.x&&(r=Math.abs((l-a.currentX)/n.x)),0!==n.y&&(o=Math.abs((c-a.currentY)/n.y));var p=Math.max(r,o);a.currentX=l,a.currentY=c;var u=a.width*t.scale,f=a.height*t.scale;a.minX=Math.min(i.slideWidth/2-u/2,0),a.maxX=-a.minX,a.minY=Math.min(i.slideHeight/2-f/2,0),a.maxY=-a.minY,a.currentX=Math.max(Math.min(a.currentX,a.maxX),a.minX),a.currentY=Math.max(Math.min(a.currentY,a.maxY),a.minY),i.$imageWrapEl.transition(p).transform("translate3d("+a.currentX+"px, "+a.currentY+"px,0)")}},onTransitionEnd:function(){var e=this,t=e.zoom,i=t.gesture;i.$slideEl&&e.previousIndex!==e.activeIndex&&(i.$imageEl.transform("translate3d(0,0,0) scale(1)"),i.$imageWrapEl.transform("translate3d(0,0,0)"),t.scale=1,t.currentScale=1,i.$slideEl=void 0,i.$imageEl=void 0,i.$imageWrapEl=void 0)},toggle:function(e){var t=this,i=t.zoom;i.scale&&1!==i.scale?i.out():i.in(e)},in:function(t){var i=this,a=i.zoom,n=i.params.zoom,r=a.gesture,o=a.image;if(r.$slideEl||(r.$slideEl=i.clickedSlide?e(i.clickedSlide):i.slides.eq(i.activeIndex),r.$imageEl=r.$slideEl.find("img, svg, canvas"),r.$imageWrapEl=r.$imageEl.parent("."+n.containerClass)),r.$imageEl&&0!==r.$imageEl.length){r.$slideEl.addClass(""+n.zoomedSlideClass);var s,l,d,c,p,u,f,h,m,g,v,b,w,x,y,A,k,C;void 0===o.touchesStart.x&&t?(s="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,l="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(s=o.touchesStart.x,l=o.touchesStart.y),a.scale=r.$imageWrapEl.attr("data-swiper-zoom")||n.maxRatio,a.currentScale=r.$imageWrapEl.attr("data-swiper-zoom")||n.maxRatio,t?(k=r.$slideEl[0].offsetWidth,C=r.$slideEl[0].offsetHeight,d=r.$slideEl.offset().left,c=r.$slideEl.offset().top,p=d+k/2-s,u=c+C/2-l,m=r.$imageEl[0].offsetWidth,g=r.$imageEl[0].offsetHeight,v=m*a.scale,b=g*a.scale,w=Math.min(k/2-v/2,0),x=Math.min(C/2-b/2,0),y=-w,A=-x,f=p*a.scale,h=u*a.scale,fy&&(f=y),hA&&(h=A)):(f=0,h=0),r.$imageWrapEl.transition(300).transform("translate3d("+f+"px, "+h+"px,0)"),r.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+a.scale+")")}},out:function(){var t=this,i=t.zoom,a=t.params.zoom,n=i.gesture;n.$slideEl||(n.$slideEl=t.clickedSlide?e(t.clickedSlide):t.slides.eq(t.activeIndex),n.$imageEl=n.$slideEl.find("img, svg, canvas"),n.$imageWrapEl=n.$imageEl.parent("."+a.containerClass)),n.$imageEl&&0!==n.$imageEl.length&&(i.scale=1,i.currentScale=1,n.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),n.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),n.$slideEl.removeClass(""+a.zoomedSlideClass),n.$slideEl=void 0)},enable:function(){var e=this,t=e.zoom;if(!t.enabled){t.enabled=!0;var i=!("touchstart"!==e.touchEvents.start||!Oe.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};Oe.gestures?(e.$wrapperEl.on("gesturestart",".swiper-slide",t.onGestureStart,i),e.$wrapperEl.on("gesturechange",".swiper-slide",t.onGestureChange,i),e.$wrapperEl.on("gestureend",".swiper-slide",t.onGestureEnd,i)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,".swiper-slide",t.onGestureStart,i),e.$wrapperEl.on(e.touchEvents.move,".swiper-slide",t.onGestureChange,i),e.$wrapperEl.on(e.touchEvents.end,".swiper-slide",t.onGestureEnd,i)),e.$wrapperEl.on(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove)}},disable:function(){var e=this,t=e.zoom;if(t.enabled){e.zoom.enabled=!1;var i=!("touchstart"!==e.touchEvents.start||!Oe.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};Oe.gestures?(e.$wrapperEl.off("gesturestart",".swiper-slide",t.onGestureStart,i),e.$wrapperEl.off("gesturechange",".swiper-slide",t.onGestureChange,i),e.$wrapperEl.off("gestureend",".swiper-slide",t.onGestureEnd,i)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,".swiper-slide",t.onGestureStart,i),e.$wrapperEl.off(e.touchEvents.move,".swiper-slide",t.onGestureChange,i),e.$wrapperEl.off(e.touchEvents.end,".swiper-slide",t.onGestureEnd,i)),e.$wrapperEl.off(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove)}}},St={name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(i){t[i]=Et[i].bind(e)}),Ge.extend(e,{zoom:t});var i=1;Object.defineProperty(e.zoom,"scale",{get:function(){return i},set:function(t){if(i!==t){var a=e.zoom.gesture.$imageEl?e.zoom.gesture.$imageEl[0]:void 0,n=e.zoom.gesture.$slideEl?e.zoom.gesture.$slideEl[0]:void 0;e.emit("zoomChange",t,a,n)}i=t}})},on:{init:function(){var e=this;e.params.zoom.enabled&&e.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){var t=this;t.zoom.enabled&&t.zoom.onTouchStart(e)},touchEnd:function(e){var t=this;t.zoom.enabled&&t.zoom.onTouchEnd(e)},doubleTap:function(e){var t=this;t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&t.zoom.toggle(e)},transitionEnd:function(){var e=this;e.zoom.enabled&&e.params.zoom.enabled&&e.zoom.onTransitionEnd()}}},Tt={loadInSlide:function(t,i){void 0===i&&(i=!0);var a=this,n=a.params.lazy;if(void 0!==t&&0!==a.slides.length){var r=a.virtual&&a.params.virtual.enabled,o=r?a.$wrapperEl.children("."+a.params.slideClass+'[data-swiper-slide-index="'+t+'"]'):a.slides.eq(t),s=o.find("."+n.elementClass+":not(."+n.loadedClass+"):not(."+n.loadingClass+")");!o.hasClass(n.elementClass)||o.hasClass(n.loadedClass)||o.hasClass(n.loadingClass)||(s=s.add(o[0])),0!==s.length&&s.each(function(t,r){var s=e(r);s.addClass(n.loadingClass);var l=s.attr("data-background"),d=s.attr("data-src"),c=s.attr("data-srcset"),p=s.attr("data-sizes");a.loadImage(s[0],d||l,c,p,!1,function(){if(void 0!==a&&null!==a&&a&&(!a||a.params)&&!a.destroyed){if(l?(s.css("background-image",'url("'+l+'")'),s.removeAttr("data-background")):(c&&(s.attr("srcset",c),s.removeAttr("data-srcset")),p&&(s.attr("sizes",p),s.removeAttr("data-sizes")),d&&(s.attr("src",d),s.removeAttr("data-src"))),s.addClass(n.loadedClass).removeClass(n.loadingClass),o.find("."+n.preloaderClass).remove(),a.params.loop&&i){var e=o.attr("data-swiper-slide-index");if(o.hasClass(a.params.slideDuplicateClass)){var t=a.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+a.params.slideDuplicateClass+")");a.lazy.loadInSlide(t.index(),!1)}else{var r=a.$wrapperEl.children("."+a.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');a.lazy.loadInSlide(r.index(),!1)}}a.emit("lazyImageReady",o[0],s[0])}}),a.emit("lazyImageLoad",o[0],s[0])})}},load:function(){function t(e){if(l){if(n.children("."+r.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(o[e])return!0;return!1}function i(t){return l?e(t).attr("data-swiper-slide-index"):e(t).index()}var a=this,n=a.$wrapperEl,r=a.params,o=a.slides,s=a.activeIndex,l=a.virtual&&r.virtual.enabled,d=r.lazy,c=r.slidesPerView;if("auto"===c&&(c=0),a.lazy.initialImageLoaded||(a.lazy.initialImageLoaded=!0),a.params.watchSlidesVisibility)n.children("."+r.slideVisibleClass).each(function(t,i){var n=l?e(i).attr("data-swiper-slide-index"):e(i).index();a.lazy.loadInSlide(n)});else if(c>1)for(var p=s;p1||d.loadPrevNextAmount&&d.loadPrevNextAmount>1){for(var u=d.loadPrevNextAmount,f=c,h=Math.min(s+f+Math.max(u,f),o.length),m=Math.max(s-Math.max(f,u),0),g=s+c;g0&&a.lazy.loadInSlide(i(b));var w=n.children("."+r.slidePrevClass);w.length>0&&a.lazy.loadInSlide(i(w))}}},_t={name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){var e=this;Ge.extend(e,{lazy:{initialImageLoaded:!1,load:Tt.load.bind(e),loadInSlide:Tt.loadInSlide.bind(e)}})},on:{beforeInit:function(){var e=this;e.params.lazy.enabled&&e.params.preloadImages&&(e.params.preloadImages=!1)},init:function(){var e=this;e.params.lazy.enabled&&!e.params.loop&&0===e.params.initialSlide&&e.lazy.load()},scroll:function(){var e=this;e.params.freeMode&&!e.params.freeModeSticky&&e.lazy.load()},resize:function(){var e=this;e.params.lazy.enabled&&e.lazy.load()},scrollbarDragMove:function(){var e=this;e.params.lazy.enabled&&e.lazy.load()},transitionStart:function(){var e=this;e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!e.lazy.initialImageLoaded)&&e.lazy.load()},transitionEnd:function(){var e=this;e.params.lazy.enabled&&!e.params.lazy.loadOnTransitionStart&&e.lazy.load()}}},zt={LinearSpline:function(e,t){var i=function(){var e,t,i;return function(a,n){for(t=-1,e=a.length;e-t>1;)i=e+t>>1,a[i]<=n?t=i:e=i;return e}}();this.x=e,this.y=t,this.lastIndex=e.length-1;var a,n;return this.interpolate=function(e){return e?(n=i(this.x,e),a=n-1,(e-this.x[a])*(this.y[n]-this.y[a])/(this.x[n]-this.x[a])+this.y[a]):0},this},getInterpolateFunction:function(e){var t=this;t.controller.spline||(t.controller.spline=t.params.loop?new zt.LinearSpline(t.slidesGrid,e.slidesGrid):new zt.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate:function(e,t){function i(e){var t=r.rtlTranslate?-r.translate:r.translate;"slide"===r.params.controller.by&&(r.controller.getInterpolateFunction(e),n=-r.controller.spline.interpolate(-t)),n&&"container"!==r.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(r.maxTranslate()-r.minTranslate()),n=(t-r.minTranslate())*a+e.minTranslate()),r.params.controller.inverse&&(n=e.maxTranslate()-n),e.updateProgress(n),e.setTranslate(n,r),e.updateActiveIndex(),e.updateSlidesClasses()}var a,n,r=this,o=r.controller.control;if(Array.isArray(o))for(var s=0;s0&&(e.isBeginning?e.a11y.disableEl(a):e.a11y.enableEl(a)),i&&i.length>0&&(e.isEnd?e.a11y.disableEl(i):e.a11y.enableEl(i))}},updatePagination:function(){var t=this,i=t.params.a11y;t.pagination&&t.params.pagination.clickable&&t.pagination.bullets&&t.pagination.bullets.length&&t.pagination.bullets.each(function(a,n){var r=e(n);t.a11y.makeElFocusable(r),t.a11y.addElRole(r,"button"),t.a11y.addElLabel(r,i.paginationBulletMessage.replace(/{{index}}/,r.index()+1))})},init:function(){var e=this;e.$el.append(e.a11y.liveRegion);var t,i,a=e.params.a11y;e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(i=e.navigation.$prevEl),t&&(e.a11y.makeElFocusable(t),e.a11y.addElRole(t,"button"),e.a11y.addElLabel(t,a.nextSlideMessage),t.on("keydown",e.a11y.onEnterKey)),i&&(e.a11y.makeElFocusable(i),e.a11y.addElRole(i,"button"),e.a11y.addElLabel(i,a.prevSlideMessage),i.on("keydown",e.a11y.onEnterKey)),e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.$el.on("keydown","."+e.params.pagination.bulletClass,e.a11y.onEnterKey)},destroy:function(){var e=this;e.a11y.liveRegion&&e.a11y.liveRegion.length>0&&e.a11y.liveRegion.remove();var t,i;e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(i=e.navigation.$prevEl),t&&t.off("keydown",e.a11y.onEnterKey),i&&i.off("keydown",e.a11y.onEnterKey),e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.$el.off("keydown","."+e.params.pagination.bulletClass,e.a11y.onEnterKey)}},Pt={name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var t=this;Ge.extend(t,{a11y:{liveRegion:e('')}}),Object.keys(Bt).forEach(function(e){t.a11y[e]=Bt[e].bind(t)})},on:{init:function(){var e=this;e.params.a11y.enabled&&(e.a11y.init(),e.a11y.updateNavigation())},toEdge:function(){var e=this;e.params.a11y.enabled&&e.a11y.updateNavigation()},fromEdge:function(){var e=this;e.params.a11y.enabled&&e.a11y.updateNavigation()},paginationUpdate:function(){var e=this;e.params.a11y.enabled&&e.a11y.updatePagination()},destroy:function(){var e=this;e.params.a11y.enabled&&e.a11y.destroy()}}},Lt={init:function(){var e=this;if(e.params.history){if(!Ie.history||!Ie.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);var t=e.history;t.initialized=!0,t.paths=Lt.getPathValues(),(t.paths.key||t.paths.value)&&(t.scrollToSlide(0,t.paths.value,e.params.runCallbacksOnInit),e.params.history.replaceState||Ie.addEventListener("popstate",e.history.setHistoryPopState))}},destroy:function(){var e=this;e.params.history.replaceState||Ie.removeEventListener("popstate",e.history.setHistoryPopState)},setHistoryPopState:function(){var e=this;e.history.paths=Lt.getPathValues(),e.history.scrollToSlide(e.params.speed,e.history.paths.value,!1)},getPathValues:function(){var e=Ie.location.pathname.slice(1).split("/").filter(function(e){return""!==e}),t=e.length;return{key:e[t-2],value:e[t-1]}},setHistory:function(e,t){var i=this;if(i.history.initialized&&i.params.history.enabled){var a=i.slides.eq(t),n=Lt.slugify(a.attr("data-history"));Ie.location.pathname.includes(e)||(n=e+"/"+n);var r=Ie.history.state;r&&r.value===n||(i.params.history.replaceState?Ie.history.replaceState({value:n},null,n):Ie.history.pushState({value:n},null,n))}},slugify:function(e){return e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){var a=this;if(t)for(var n=0,r=a.slides.length;n'),n.append(t)),t.css({height:o+"px"})):(t=a.find(".swiper-cube-shadow"),0===t.length&&(t=e('
        '),a.append(t))));for(var h=0;h-1&&(f=90*g+90*w,l&&(f=90*-g-90*w)),m.transform(k),c.slideShadows){var C=p?m.find(".swiper-slide-shadow-left"):m.find(".swiper-slide-shadow-top"),E=p?m.find(".swiper-slide-shadow-right"):m.find(".swiper-slide-shadow-bottom");0===C.length&&(C=e('
        '),m.append(C)),0===E.length&&(E=e('
        '),m.append(E)),C.length&&(C[0].style.opacity=Math.max(-w,0)),E.length&&(E[0].style.opacity=Math.max(w,0))}}if(n.css({"-webkit-transform-origin":"50% 50% -"+d/2+"px","-moz-transform-origin":"50% 50% -"+d/2+"px","-ms-transform-origin":"50% 50% -"+d/2+"px","transform-origin":"50% 50% -"+d/2+"px"}),c.shadow)if(p)t.transform("translate3d(0px, "+(o/2+c.shadowOffset)+"px, "+-o/2+"px) rotateX(90deg) rotateZ(0deg) scale("+c.shadowScale+")");else{var S=Math.abs(f)-90*Math.floor(Math.abs(f)/90),T=1.5-(Math.sin(2*S*Math.PI/360)/2+Math.cos(2*S*Math.PI/360)/2),_=c.shadowScale,z=c.shadowScale/T,M=c.shadowOffset;t.transform("scale3d("+_+", 1, "+z+") translate3d(0px, "+(s/2+M)+"px, "+-s/2/z+"px) rotateX(-90deg)")}var B=je.isSafari||je.isUiWebView?-d/2:0;n.transform("translate3d(0px,0,"+B+"px) rotateX("+(i.isHorizontal()?0:f)+"deg) rotateY("+(i.isHorizontal()?-f:0)+"deg)")},setTransition:function(e){var t=this,i=t.$el;t.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.cubeEffect.shadow&&!t.isHorizontal()&&i.find(".swiper-cube-shadow").transition(e)}},Yt={name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){var e=this;Ge.extend(e,{cubeEffect:{setTranslate:Ut.setTranslate.bind(e),setTransition:Ut.setTransition.bind(e)}})},on:{beforeInit:function(){var e=this;if("cube"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"cube"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};Ge.extend(e.params,t),Ge.extend(e.originalParams,t)}},setTranslate:function(){var e=this;"cube"===e.params.effect&&e.cubeEffect.setTranslate()},setTransition:function(e){var t=this;"cube"===t.params.effect&&t.cubeEffect.setTransition(e)}}},Xt={setTranslate:function(){for(var t=this,i=t.slides,a=t.rtlTranslate,n=0;n'),r.append(f)),0===h.length&&(h=e('
        '),r.append(h)),f.length&&(f[0].style.opacity=Math.max(-o,0)),h.length&&(h[0].style.opacity=Math.max(o,0))}r.transform("translate3d("+p+"px, "+u+"px, 0px) rotateX("+c+"deg) rotateY("+d+"deg)")}},setTransition:function(e){var t=this,i=t.slides,a=t.activeIndex,n=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(a).transitionEnd(function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i'),m.append(E)),0===S.length&&(S=e('
        '),m.append(S)),E.length&&(E[0].style.opacity=b>0?b:0),S.length&&(S[0].style.opacity=-b>0?-b:0)}}if(Oe.pointerEvents||Oe.prefixedPointerEvents){r[0].style.perspectiveOrigin=c+"px 50%"}},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},Ft={name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){var e=this;Ge.extend(e,{coverflowEffect:{setTranslate:Nt.setTranslate.bind(e),setTransition:Nt.setTransition.bind(e)}})},on:{beforeInit:function(){var e=this;"coverflow"===e.params.effect&&(e.classNames.push(e.params.containerModifierClass+"coverflow"),e.classNames.push(e.params.containerModifierClass+"3d"),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},setTranslate:function(){var e=this;"coverflow"===e.params.effect&&e.coverflowEffect.setTranslate()},setTransition:function(e){var t=this;"coverflow"===t.params.effect&&t.coverflowEffect.setTransition(e)}}},Qt={init:function(){var e=this,t=e.params,i=t.thumbs,a=e.constructor;i.swiper instanceof a?(e.thumbs.swiper=i.swiper,Ge.extend(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Ge.extend(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):Ge.isObject(i.swiper)&&(e.thumbs.swiper=new a(Ge.extend({},i.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),e.thumbs.swiperCreated=!0),e.thumbs.swiper.$el.addClass(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",e.thumbs.onThumbClick)},onThumbClick:function(){var t=this,i=t.thumbs.swiper;if(i){var a=i.clickedIndex,n=i.clickedSlide;if(!(n&&e(n).hasClass(t.params.thumbs.slideThumbActiveClass)||void 0===a||null===a)){var r;if(r=i.params.loop?parseInt(e(i.clickedSlide).attr("data-swiper-slide-index"),10):a,t.params.loop){var o=t.activeIndex;t.slides.eq(o).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,o=t.activeIndex);var s=t.slides.eq(o).prevAll('[data-swiper-slide-index="'+r+'"]').eq(0).index(),l=t.slides.eq(o).nextAll('[data-swiper-slide-index="'+r+'"]').eq(0).index();r=void 0===s?l:void 0===l?s:l-or?n-Math.floor(a/2)+1:n+Math.floor(a/2)-1:n>r&&(n=n-a+1),i.slideTo(n,e?0:void 0))}var l=1,d=t.params.thumbs.slideThumbActiveClass;if(t.params.slidesPerView>1&&!t.params.centeredSlides&&(l=t.params.slidesPerView),i.slides.removeClass(d),i.params.loop)for(var c=0;c0&&(e.activityInfo=e.normalizeList(t.list)[0],console.log("activityInfo",e.activityInfo))})},getLiveInfo:function(){var e=this;l.a.getLiveInfo({blockName:"hot_live"}).then(function(t){if(t&&t.list&&t.list.length>0){t=t.list[0];var i=new Date(1e3*t.live_start),a=i.getMonth()+1,n=i.getDate(),r=["周日","周一","周二","周三","周四","周五","周六"][i.getDay()],o=("0"+i.getHours()).slice(-2),s=("0"+i.getMinutes()).slice(-2);e.liveInfo.time="时间:"+a+"月"+n+"日("+r+")"+o+":"+s,e.liveInfo.title=t.live_title,t.live_url&&(e.liveInfo.url=t.live_url),e.liveInfo.title&&e.liveInfo.image&&(e.liveInfo.visibility="visible")}})},getLiveStatus:function(){var e=this;l.a.getLiveStatus().then(function(t){var i=t.status;"1"===String(i)&&(e.liveInfo.status="预告"),"2"===String(i)&&(e.liveInfo.status="直播"),"3"===String(i)&&(e.liveInfo.status="回放"),e.liveInfo.image=t.image,e.liveInfo.title&&e.liveInfo.image&&(e.liveInfo.visibility="visible")}).catch(function(){})},normalizeList:function(e){return e.reduce(function(e,t){var i=t.extra,a={id:t.id,image:t.banner_cover};switch(t.banner_redirect_type){case"article":a.url="/column/article/"+t.banner_redirect_param;break;case"product":i?(i.column_type=0|i.column_type,3===i.column_type||6===i.column_type?a.url="/course/intro/"+i.column_id:a.url="/column/intro/"+i.column_id):a.image="";break;case"live":a.url="https://live.geekbang.org";break;case"mall":case"url":a.url=t.banner_redirect_param}return a.image&&e.push(a),e},[])}}}},960:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(850),n=(i.n(a),i(903));i.n(n);t.default={name:"HomeBannerPc",components:{swiper:n.swiper,swiperSlide:n.swiperSlide},props:{banners:{type:Array,default:function(){return[]}}},data:function(){return{options:{spaceBetween:0,autoplay:this.banners.length>1&&{delay:5e3,disableOnInteraction:!1},speed:300,loop:this.banners.length>1,pagination:{el:"."+this.$style.pagination,bulletClass:this.$style.paginationBullet,bulletActiveClass:this.$style.paginationBulletActive,clickable:!0},navigation:{nextEl:"."+this.$style.navigationButtonNext,prevEl:"."+this.$style.navigationButtonPrev}},showNavigation:!1}}}},962:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=i(65);t.default={name:"column-card",props:{data:{type:Object,default:function(){return{}}},type:{type:String,default:"home"}},data:function(){return{iOSAppSwitch:a.a.getQueryString(window.location.href,"switch"),radio:parseInt(Math.min(2,window.devicePixelRatio||1))}},methods:{jump:function(e,t,i){if(a.a.isInApp()){"3"===String(t)?a.a.jumpCourseIntro(e):i?a.a.jumpColumnDetail(e):a.a.jumpColumnIntro(e)}else 3===t?this.$router.push("/course/intro/"+e):this.$router.push("/column/intro/"+e)},columnLink:function(e,t){return 3===t?a.a.pathToAbsoluteURL("/course/intro/"+e):a.a.pathToAbsoluteURL("/column/intro/"+e)}}}},971:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,"._3G37Gvtw_0{position:relative;width:100%;height:138px;overflow:hidden}._3G37Gvtw_0,._10kuaQyp_0{border-radius:5px}._1_B4rMeZ_0{display:block;width:305px;height:138px;position:relative;overflow:hidden}._1_B4rMeZ_0 img{width:327px;position:relative;left:-11px}._1fHJS7Cr_0{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:5px;bottom:7px;right:15px;z-index:5}._3w8D91mo_0{outline:none;display:block;background:#fff;margin-right:5px;width:9px;height:2px;cursor:pointer}._2vj34EO0_0{background:#fa8919}._3K3r910m_0{outline:none;position:absolute;top:50%;margin-top:-12px;width:24px;height:24px;background:url("+a(i(1039))+") 50% no-repeat;background-size:100%;z-index:5;cursor:pointer;visibility:hidden;opacity:0;-webkit-transition:all .3s ease;transition:all .3s ease}._3K3r910m_0._3JV_Crj3_0{visibility:visible;opacity:1}._285xUmCF_0{-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:center center;transform-origin:center center;left:8px}._3OMO1kuJ_0{right:8px}",""]),t.locals={swiperContainer:"_3G37Gvtw_0",swiperWrapper:"_10kuaQyp_0",swiperItem:"_1_B4rMeZ_0",pagination:"_1fHJS7Cr_0",paginationBullet:"_3w8D91mo_0",paginationBulletActive:"_2vj34EO0_0",navigationButton:"_3K3r910m_0",show:"_3JV_Crj3_0",navigationButtonPrev:"_285xUmCF_0",navigationButtonNext:"_3OMO1kuJ_0"}},979:function(e,t,i){t=e.exports=i(571)(!1),t.push([e.i,"._3msts6Ff_0{padding-bottom:100px}.l_qKJA5b_0._36kHyit0_0{margin-top:45px}.l_qKJA5b_0 ._3dLcguX__0{height:50px;line-height:50px;font-weight:500;color:#404040}.l_qKJA5b_0 ._2MStqmWP_0{display:block;width:100%;height:137px;cursor:pointer;border-radius:5px;overflow:hidden}.l_qKJA5b_0 ._2MStqmWP_0 img{width:100%;height:100%}._2GcQzCHT_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;width:100%;height:35px;border-radius:5px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;background:#fcfcfc;cursor:pointer}._2GcQzCHT_0:first-child{margin-top:0}._2GcQzCHT_0 p{margin-left:17px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:14px;font-weight:400}._2GcQzCHT_0 span{display:block;width:20px;height:20px}._2GcQzCHT_0 span img{width:100%}._2GcQzCHT_0 i{font-size:12px;color:#d4d4d4;-webkit-transform:scale(.8);transform:scale(.8)}._2GcQzCHT_0._28RLEb3b_0 p{color:#6a9ad4}._2GcQzCHT_0._28RLEb3b_0:hover{background:#f5f9fd}._2GcQzCHT_0._28RLEb3b_0:hover i{color:#6a9ad4;opacity:.4}._2GcQzCHT_0._2vYxcVSv_0 p{color:#73a7a7}._2GcQzCHT_0._2vYxcVSv_0:hover{background:#f2fbfa}._2GcQzCHT_0._2vYxcVSv_0:hover i{color:#73a7a7;opacity:.4}._2T3aLRDl_0{-webkit-box-sizing:border-box;box-sizing:border-box;padding:17px 0 20px;background-size:100%;background:#f8f9fd;border-radius:5px}._1IkDzjvu_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px}._1IkDzjvu_0 ._3ftPW0q9_0{width:78px;height:78px;margin-right:3px}._1IkDzjvu_0 ._3ftPW0q9_0 img{width:100%;height:100%}._1IkDzjvu_0 ._25QZ0nBe_0{-webkit-box-flex:1;-ms-flex:1;flex:1}._1IkDzjvu_0 ._3HI7cXyt_0{font-size:14px;font-weight:500;color:#404040;padding-left:5px;position:relative;top:-8px}._1IkDzjvu_0 ._2XhqXVtI_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;top:-5px}._1IkDzjvu_0 ._2XhqXVtI_0 span{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;margin-top:4px;color:#888;font-weight:400;font-size:12px;line-height:1}.q8VcFPPB_0{margin-top:15px}.q8VcFPPB_0 ._2LnKxbVQ_0{font-size:13px;color:#404040;font-weight:500;padding-left:30px}.q8VcFPPB_0 ._2KpLfbR6_0{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 22px 0}.q8VcFPPB_0 ._2KpLfbR6_0 a{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.q8VcFPPB_0 ._2KpLfbR6_0 a img{width:70%;border-radius:100%}.q8VcFPPB_0 ._2KpLfbR6_0 a span{display:block;color:#888;font-size:12px;font-weight:400}.q8VcFPPB_0 ._2KpLfbR6_0 a:hover img{-webkit-box-shadow:0 2px 4px 1px hsla(0,0%,65%,.35);box-shadow:0 2px 4px 1px hsla(0,0%,65%,.35)}._1hysrmo4_0{cursor:pointer}._1hysrmo4_0:hover .E295PdAU_0{opacity:1;-webkit-transform:scale(1);transform:scale(1)}._1hysrmo4_0:hover ._2Aj8sOkn_0{text-decoration:underline}.E295PdAU_0{background:rgba(0,0,0,.2);position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;font-size:41px;color:#fff;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-transition:all .3s ease;transition:all .3s ease;-webkit-transform:scale(2);transform:scale(2)}._3OJoOG-z_0,.E295PdAU_0{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}._3OJoOG-z_0{height:171px;overflow:hidden;border-radius:5px;position:relative}._3OJoOG-z_0 img{width:100%}._7ffYXmxM_0{position:absolute;top:7px;right:7px;background:#fa8919;color:#fff;font-size:12px;font-weight:500;padding:0 5px;border-radius:3px;height:18px;line-height:18px;z-index:10}._2Aj8sOkn_0{color:#404040;font-weight:400;font-size:14px;margin-top:8px;padding-left:8px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._1BicuzXJ_0{color:#888;font-size:13px;padding-left:8px}._3a_gAge1_0{width:100%;border-radius:5px}._3a_gAge1_0,.ASpNlhio_0{position:relative;height:138px;overflow:hidden}.ASpNlhio_0{display:block;width:305px}.ASpNlhio_0 img{width:327px;position:relative;left:-11px}",""]),t.locals={wrap:"_3msts6Ff_0",rectRight:"l_qKJA5b_0",mgt45:"_36kHyit0_0",rightTitle:"_3dLcguX__0",pull_new:"_2MStqmWP_0",pullNew:"_2MStqmWP_0",otherLink:"_2GcQzCHT_0",blue:"_28RLEb3b_0",green:"_2vYxcVSv_0",attentionWrapper:"_2T3aLRDl_0",attentionHeader:"_1IkDzjvu_0",attentionQrcode:"_3ftPW0q9_0",attentionTexts:"_25QZ0nBe_0",attentionTitle:"_3HI7cXyt_0",tips:"_2XhqXVtI_0",attentionFooter:"q8VcFPPB_0",attentionMsg:"_2LnKxbVQ_0",attentionIcons:"_2KpLfbR6_0",livePreview:"_1hysrmo4_0",livePlayer:"E295PdAU_0",liveTit:"_2Aj8sOkn_0",liveCover:"_3OJoOG-z_0",liveStatus:"_7ffYXmxM_0",liveTime:"_1BicuzXJ_0",swiperContainer:"_3a_gAge1_0",swiperItem:"ASpNlhio_0"}},990:function(e,t,i){var a=i(620);t=e.exports=i(571)(!1),t.push([e.i,".column-card-wrap[data-v-635d7976]{display:-webkit-box;display:-ms-flexbox;display:flex}.column-card-wrap .column-card-cover[data-v-635d7976]{display:block;width:82px;height:108px;position:relative;margin-right:16px}.column-card-wrap .column-card-cover .icon-video[data-v-635d7976]{position:absolute;right:0;bottom:0;width:27px;height:19px;background:url("+a(i(710))+') 50% no-repeat;background-size:100%}.column-card-wrap .column-cover[data-v-635d7976]{-ms-flex-negative:0;flex-shrink:0;width:82px;height:108px;background-color:#eaeaea;border-radius:4px}.column-card-wrap .column-detail[data-v-635d7976]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.column-card-wrap .column-detail .column-detail-hd-wrap[data-v-635d7976],.column-card-wrap .column-detail[data-v-635d7976]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.column-card-wrap .column-detail .column-detail-hd[data-v-635d7976]{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-top:4px}.column-card-wrap .column-detail .column-detail-hd h3[data-v-635d7976]{line-height:19px;font-size:18px;font-weight:700;color:#4c4c4c;max-width:230px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.column-card-wrap .column-detail .column-detail-hd i[data-v-635d7976]{font-size:14px;color:#b2b2b2}.column-card-wrap .column-detail .column-detail-author[data-v-635d7976]{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3;overflow:hidden;padding-top:8px;margin-right:30px;border-radius:0 2px 2px 0;line-height:17px;word-break:keep-all;white-space:nowrap;text-overflow:ellipsis}.column-card-wrap .column-detail .column-detail-author span[data-v-635d7976]{padding:0 3px;margin-right:3px;background-color:#f1f1f1;border-radius:2px;line-height:18px;font-size:12px;font-weight:400;color:#767676}.column-card-wrap .column-detail .column-detail-info[data-v-635d7976]{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4;overflow:hidden;padding-top:8px;margin-right:30px;line-height:12px;word-break:keep-all;white-space:nowrap;text-overflow:ellipsis;font-size:12px;color:#767676}.column-card-wrap .column-detail .column-detail-info.order[data-v-635d7976]{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;padding-top:3px;margin-bottom:-3px;line-height:14px;font-size:14px}.column-card-wrap .column-detail .column-detail-buy[data-v-635d7976]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.column-card-wrap .column-detail .column-detail-buy .column-detail-had[data-v-635d7976]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#9e9e9e;font-size:12px}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-v-635d7976]{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-v-635d7976]:before{display:block;position:absolute;left:0;top:50%;width:56px;height:26px;border:2px solid #e5a942;border-radius:6px;line-height:26px;text-align:center;font-size:20px;font-weight:800;color:#e5a942;-webkit-transform-origin:left center;transform-origin:left center;-webkit-transform:translateY(-50%) scale(.5);transform:translateY(-50%) scale(.5)}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-type="1"][data-v-635d7976]:before{display:none}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-type="2"][data-v-635d7976]{padding-left:38px}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-type="2"][data-v-635d7976]:before{color:#ff6b43;border-color:#ff6b43;content:"\\9650\\65F6"}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-type="3"][data-v-635d7976]{padding-left:38px}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd[data-type="3"][data-v-635d7976]:before{content:"\\62FC\\56E2";border-color:#e5a942;color:#e5a942}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd .column-detail-nprice[data-v-635d7976]{margin-right:6px;line-height:16px;font-size:16px;font-weight:500;color:#fa8919}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd .column-detail-nprice i[data-v-635d7976]{margin-right:-4px;font-size:14px}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd .column-detail-nprice.disable[data-v-635d7976]{line-height:14px;font-size:12px;color:#b2b2b2;text-decoration:line-through}.column-card-wrap .column-detail .column-detail-buy .column-detail-buy-hd .column-detail-nprice.disable i[data-v-635d7976]{margin-right:-2px;font-size:13px}.column-card-wrap .column-detail .column-detail-buy .column-detail-read[data-v-635d7976]{outline:none;padding:1px 15px 0;background-color:#fbf5ee;border:none;border-radius:15px;line-height:24px;font-size:15px;font-weight:500;color:#fa8919}.column-card-wrap .column-detail .column-detail-buy .column-detail-subcount[data-v-635d7976]{font-size:12px;color:#ababab}',""])},998:function(e,t,i){var a=i(971);"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);i(572)("d3e88728",a,!0,{})}}); \ No newline at end of file diff --git a/re/geekbang/routes/list/source/2703e65de1b7699fffa1754c80985eb5.jpg b/re/geekbang/routes/list/source/2703e65de1b7699fffa1754c80985eb5.jpg new file mode 100644 index 0000000..675195c Binary files /dev/null and b/re/geekbang/routes/list/source/2703e65de1b7699fffa1754c80985eb5.jpg differ diff --git a/re/geekbang/routes/list/source/2d5e1c53fd7aa2a8f7663db0dae0ee12.jpg b/re/geekbang/routes/list/source/2d5e1c53fd7aa2a8f7663db0dae0ee12.jpg new file mode 100644 index 0000000..7678aee Binary files /dev/null and b/re/geekbang/routes/list/source/2d5e1c53fd7aa2a8f7663db0dae0ee12.jpg differ diff --git a/re/geekbang/routes/list/source/42db8ef7b28bcdc26410141dd97b8178.jpg b/re/geekbang/routes/list/source/42db8ef7b28bcdc26410141dd97b8178.jpg new file mode 100644 index 0000000..bca9844 Binary files /dev/null and b/re/geekbang/routes/list/source/42db8ef7b28bcdc26410141dd97b8178.jpg differ diff --git a/re/geekbang/routes/list/source/4d544deddd94e30924f840eb8b28f48b.jpg b/re/geekbang/routes/list/source/4d544deddd94e30924f840eb8b28f48b.jpg new file mode 100644 index 0000000..b550837 Binary files /dev/null and b/re/geekbang/routes/list/source/4d544deddd94e30924f840eb8b28f48b.jpg differ diff --git a/re/geekbang/routes/list/source/5ad916cc2f38a4e85e261930c38492fd.jpg b/re/geekbang/routes/list/source/5ad916cc2f38a4e85e261930c38492fd.jpg new file mode 100644 index 0000000..e9a505d Binary files /dev/null and b/re/geekbang/routes/list/source/5ad916cc2f38a4e85e261930c38492fd.jpg differ diff --git a/re/geekbang/routes/list/source/5ececab2885832a6ef22d1c3b3e61e35.png b/re/geekbang/routes/list/source/5ececab2885832a6ef22d1c3b3e61e35.png new file mode 100644 index 0000000..73e0995 Binary files /dev/null and b/re/geekbang/routes/list/source/5ececab2885832a6ef22d1c3b3e61e35.png differ diff --git a/re/geekbang/routes/list/source/7503b89359b2920c5ad4312a23652cab.jpg b/re/geekbang/routes/list/source/7503b89359b2920c5ad4312a23652cab.jpg new file mode 100644 index 0000000..a428b75 Binary files /dev/null and b/re/geekbang/routes/list/source/7503b89359b2920c5ad4312a23652cab.jpg differ diff --git a/re/geekbang/routes/list/source/937c6584122951abcc85f4781028f5b9.jpg b/re/geekbang/routes/list/source/937c6584122951abcc85f4781028f5b9.jpg new file mode 100644 index 0000000..373e24d Binary files /dev/null and b/re/geekbang/routes/list/source/937c6584122951abcc85f4781028f5b9.jpg differ diff --git a/re/geekbang/routes/list/source/ab5a43490b577940c9e937461b54b563.jpg b/re/geekbang/routes/list/source/ab5a43490b577940c9e937461b54b563.jpg new file mode 100644 index 0000000..9b7bd68 Binary files /dev/null and b/re/geekbang/routes/list/source/ab5a43490b577940c9e937461b54b563.jpg differ diff --git a/re/geekbang/routes/list/source/aliplayer-min.css b/re/geekbang/routes/list/source/aliplayer-min.css new file mode 100644 index 0000000..c3fac55 --- /dev/null +++ b/re/geekbang/routes/list/source/aliplayer-min.css @@ -0,0 +1 @@ +.prism-player .prism-big-play-btn{background:url(./img/bigplay.png) no-repeat;background-size:contain;width:64px;height:64px}.prism-player .prism-big-play-btn .outter{border:7px solid rgba(255,255,255,.51);width:64px;height:64px;border-radius:100%;position:absolute;box-sizing:border-box;top:0;left:0}.prism-player .prism-big-play-btn:hover{cursor:pointer}.prism-player .prism-play-btn{width:24px;height:24px;background:url(./img/smallplay.png) no-repeat;background-size:contain}.prism-player .prism-play-btn:hover{cursor:pointer}.prism-player .prism-live-display{font-size:12px;color:#ebecec;line-height:44px;text-align:center;margin:0}.prism-player .live-shift-display:hover{cursor:pointer;font-size:14px}.prism-player .prism-play-btn.playing{background:url(./img/smallpause.png) no-repeat;background-size:contain}.prism-player .prism-play-btn.playing:hover{cursor:pointer}.prism-player .prism-fullscreen-btn{width:24px;height:24px;background:url(./img/fullscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn:hover{cursor:pointer}.prism-player .prism-fullscreen-btn.fullscreen{background:url(./img/smallscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn.fullscreen:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-volume{position:relative}.prism-player .prism-volume .volume-icon{width:28px;height:28px;background:url(./img/volume.png);background-size:contain}.prism-player .prism-volume .volume-icon .long-horizontal{width:3px;background:#ebecec;height:18px;position:absolute;right:5px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon .short-horizontal{width:3px;background:#ebecec;height:8px;position:absolute;right:10px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon:hover{-ms-transform-origin:0 50%;transform-origin:0 50%;background-size:contain;cursor:pointer}.prism-player .prism-volume .mute .long-horizontal{-ms-transform:rotate(-45deg);transform:rotate(-45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume .mute .short-horizontal{-ms-transform:rotate(45deg);transform:rotate(45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume-control{position:absolute;bottom:44px;display:none;background:rgba(60,60,60,.95);box-shadow:0 0 6px 0 rgba(0,0,0,.1);width:32px;height:130px;z-index:10000}.prism-player .prism-volume-control .volume-control-icon{width:32px;height:32px;background:url(./img/unmutevolume.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon:hover{cursor:pointer;background:url(./img/volumehover.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute{background:url(./img/volumemute.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute:hover{background:url(./img/volumemutehover.png) no-repeat;background-size:contain;cursor:pointer}.prism-player .prism-volume-control:hover{cursor:pointer}.prism-player .prism-volume-control .volume-control-icon{position:absolute;bottom:6px;left:8px;width:26px;height:26px}.prism-player .prism-volume-control .volume-range{position:absolute;left:14px;bottom:10px;border-radius:1px;background:#6c6262;box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);width:4px;height:100px}.prism-player .prism-volume-control .volume-value{width:100%;height:0%;background:#30adf2;position:absolute;border-radius:1px;bottom:0}.prism-player .prism-volume-control .volume-cursor{position:absolute;bottom:0;background:#fff;width:15px;height:15px;border-radius:15px;left:-6px}.prism-player .prism-volume-control .volume-cursor:hover{background:#00c1de}.prism-player .prism-animation{width:64px;height:64px;border-radius:64px;opacity:0;position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-play-animation{background:url(./img/playanimation.png) no-repeat;background-size:contain}.prism-player .prism-pause-animation{background:url(./img/pauseanimation.png) no-repeat;background-size:contain}.prism-player .play-apply-animation{animation:prismplayanimation 1s 1;-moz-animation:prismplayanimation 1s 1;-webkit-animation:prismplayanimation 1s 1;-o-animation:prismplayanimation 1s 1;animation-fill-mode:both}@keyframes prismplayanimation{0%{width:32px;height:32px;border-radius:32px;opacity:0}50%{width:32px;height:32px;border-radius:32px;opacity:1}99%{width:76px;height:76px;border-radius:76px;opacity:0}100%{width:0;height:0}}@keyframes spinoffPulse{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@keyframes hoverAnimationRotate{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}50%{transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg)}100%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}}@keyframes hoverAnimationScale{0%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}50%{transform:scale(1.2);-webkit-transform:scale(1.2);-moz-transform:scale(1.2)}100%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}}@keyframes hoverAnimationScaleX{0%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}50%{transform:scaleX(1.2);-webkit-transform:scaleX(1.2);-moz-transform:scaleX(1.2)}100%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}}@keyframes hoverVolumeAnimation{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.volume-hover-animation{animation:hoverVolumeAnimation .3s 1;-moz-animation:hoverVolumeAnimation .3s 1;-webkit-animation:hoverVolumeAnimation .3s 1;-o-animation:hoverVolumeAnimation .3s 1}@keyframes hoverPlayButtonAnimation{0%{width:63px;height:63px;border:7px solid #fff}60%{width:90px;height:90px;border:7px solid rgba(255,255,255,.51)}100%{width:97px;height:97px;border:14px solid rgba(255,255,255,0)}}@keyframes warn{0%{transform:scale(1);opacity:0}25%{transform:scale(1);opacity:.1}50%{transform:scale(1.1);opacity:.3}75%{transform:scale(1.5);opacity:.5}100%{transform:scale(2);opacity:0}}.big-playbtn-hover-animation{animation:warn 1s ease-out;-moz-animation:warn 1s ease-out;-webkit-animation:warn 1s ease-out;-o-animation:warn 1s ease-out}.big-playbtn-hover-animation1{animation:hoverPlayButtonAnimation 1s 1;-moz-animation:hoverPlayButtonAnimation 1s 1;-webkit-animation:hoverPlayButtonAnimation 1s 1;-o-animation:hoverPlayButtonAnimation 1s 1}.prism-player{background-color:#000;position:relative}.prism-player a{text-decoration:none}.prism-player video{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform-origin:center;-moz-transform-origin:center;-webkit-transform-origin:center;-o-transform-origin:center}.prism-player .x5-full-screen{object-fit:fill;object-position:50% 50%}.prism-player .x5-top-left{object-fit:contain;object-position:0 0}.prism-player .prism-cover{width:100%;height:100%;background-repeat:no-repeat;background-position:center;background-size:cover;position:absolute;top:0;left:0;z-index:11}.prism-player .prism-ErrorMessage{width:100%;height:100%;background-color:#000;background-repeat:no-repeat;background-position:center;background-size:contain;position:absolute;z-index:99;top:0;left:0;overflow:hidden;display:none}.prism-player .prism-ErrorMessage .prism-error-content{margin-top:20px;padding:0 5px}.prism-player .prism-ErrorMessage .prism-error-content p{text-align:center;font-size:12px;color:#fff}.prism-player .prism-ErrorMessage .prism-error-operation{margin-top:10px;margin-bottom:10px;padding-bottom:5px;border-bottom:1.5px;border-bottom-color:rgba(255,255,255,.15);border-bottom-style:dotted;text-align:center}.prism-player .prism-ErrorMessage .prism-error-operation a{width:80px;height:32px;line-height:32px;vertical-align:top;display:inline-block;margin-left:10px}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh{color:#21c5e0;border:solid 1px #21c5e0}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:hover{color:#05d3f5;border-color:#05d3f5;cursor:pointer}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:active{color:#026a7b;border-color:#026a7b}.prism-player .prism-ErrorMessage .prism-error-operation .prism-button-orange:visited{color:#05d3f5}.prism-player .prism-ErrorMessage .prism-detect-info{color:#fff;font-size:10px}.prism-player .prism-ErrorMessage .prism-detect-info p{padding:0 5px;word-break:break-all;margin:0 0 4px}.prism-player .prism-ErrorMessage .prism-detect-info span.info-label{display:inline-block;font-weight:700}.prism-player .prism-ErrorMessage .prism-detect-info span.info-content{color:gray}.prism-player .prism-big-play-btn{display:none;z-index:1000}.prism-player .prism-controlbar{width:100%;height:44px;position:relative;z-index:10;font-size:14px}.prism-player .prism-controlbar .prism-controlbar-bg{background:rgba(75,75,75,.15);width:100%;height:40px;position:absolute;bottom:0;left:0;z-index:-1}.prism-player .prism-time-display{height:40px;line-height:40px;color:#a4aab3;font-size:12px}.prism-player .prism-time-display .current-time{color:#fff}.prism-player .prism-live-time-display{height:44px;line-height:44px;color:#a4aab3;font-size:12px}.prism-player .prism-live-time-display span{display:inline}.prism-player .prism-live-time-display .live-text{margin-left:5px;font-size:12px;color:#ebecec}.prism-player .prism-live-time-display .current-time{color:#fff}.prism-player .prism-fullscreen-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-liveshift-progress,.prism-player .prism-progress{bottom:40px!important;width:100%;height:4px;background:rgba(195,197,198,.5);box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);position:relative;cursor:pointer}.prism-player .prism-liveshift-progress .prism-progress-time,.prism-player .prism-progress .prism-progress-time{position:absolute;top:-25px;background:rgba(0,0,0,.8);box-shadow:0 0 5px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.1);color:#fff;font-size:14px;border-radius:7.5px;padding:0 6px 0 6px;text-align:center;white-space:nowrap}.prism-player .prism-liveshift-progress .prism-progress-loaded,.prism-player .prism-progress .prism-progress-loaded{position:absolute;top:0;left:0;width:0;height:100%;background:#c3c5c6}.prism-player .prism-liveshift-progress .prism-progress-played,.prism-player .prism-progress .prism-progress-played{position:absolute;top:0;left:0;width:0;height:100%;background-color:#00c1de}.prism-player .prism-liveshift-progress .prism-progress-cursor,.prism-player .prism-progress .prism-progress-cursor{position:absolute;border-radius:8px;top:-5px;width:16px;height:16px;overflow:hidden;box-sizing:content-box;background:url(./img/dragcursorhover.png) center;display:none}.prism-player .prism-liveshift-progress .prism-progress-cursor img,.prism-player .prism-progress .prism-progress-cursor img{width:14px;height:14px;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-liveshift-progress .cursor-hover,.prism-player .prism-progress .cursor-hover{border-radius:9px;width:18px;height:18px;top:-5px!important}.prism-player .prism-liveshift-progress .cursor-hover img,.prism-player .prism-progress .cursor-hover img{width:16px;height:16px}.prism-player .prism-liveshift-progress .prism-progress-marker,.prism-player .prism-progress .prism-progress-marker{width:100%;height:100%;position:absolute}.prism-player .prism-liveshift-progress .prism-progress-marker .prism-marker-dot,.prism-player .prism-progress .prism-progress-marker .prism-marker-dot{position:absolute;background:#d9edf7;width:5px;height:100%;border-radius:20%}.prism-player .prism-progress-hover{cursor:pointer;height:6px;transition:height .1s}.prism-player .prism-progress-hover .prism-marker-dot{width:10px;height:80%;top:8%;border-radius:30%}.prism-player .prism-progress-hover .prism-progress-cursor{top:-4px}.prism-player .prism-liveshift-progress{background:0 0}.prism-player .prism-liveshift-progress .prism-enable-liveshift{cursor:pointer;position:absolute;background:#fff;height:4px}.prism-player .prism-liveshift-progress .prism-enable-liveshift:hover{height:6px;transition:height .1s}.prism-player .prism-liveshift-progress .prism-liveshift-seperator{height:15px;position:absolute;right:0;top:-8px;color:#fff;margin-right:5px;margin-left:5px;right:-65px}.prism-player .prism-marker-text{padding:5px;background:rgba(0,0,0,.8);position:absolute;max-width:180px;max-height:100px;bottom:50px;color:#fff;border-radius:3px;z-index:9999;display:none;overflow:auto}.prism-player .prism-marker-text p{text-align:center;word-break:break-all;margin:0;font-size:12px}.prism-player .prism-loading{width:55px;height:55px;z-index:10}.prism-player .prism-loading .circle{background-color:rgba(0,0,0,0);border:5px solid;border-color:rgba(0,193,222,.2) rgba(0,193,222,.5) rgba(0,193,222,.7) rgba(0,193,222,.1);opacity:.9;border-radius:50px;width:45px;height:45px;margin:0 auto;-moz-animation:spinoffPulse .9s infinite linear;-webkit-animation:spinoffPulse .9s infinite linear}.prism-player .prism-hide{display:none}.prism-player .prism-snapshot-btn{width:32px;height:32px;background:url(./img/snapshot.png) no-repeat;background-size:contain}.prism-player .prism-snapshot-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-snapshot-btn:active{displa:block}.prism-player .prism-info-display{width:100%;color:#fff;font-size:18px;text-align:center;top:50%;position:absolute;z-index:900;height:44px;line-height:28px;font-size:16px;padding:10px 12px 10px 12px}.prism-player .prism-info-display span{color:#00c1de}.prism-player .prism-info-left-bottom{width:auto!important;top:auto!important;bottom:70px;left:20px!important;text-align:left}.prism-player .prism-info-top-center{width:auto!important;top:20px!important;left:50%!important;text-align:left!important;-ms-transform:translateX(-50%)!important;transform:translateX(-50%)!important;color:red!important}.prism-player .prism-info-black{color:#000!important}.prism-player .prism-auto-stream-selector{position:absolute;bottom:50%;width:100%;margin:auto;color:#efeff4;display:none}.prism-player .prism-auto-stream-selector p.tip-text{text-align:center}.prism-player .prism-auto-stream-selector .operators{width:100px;margin:auto}.prism-player .prism-button-cancel{font-size:16px;border:1px #ffffffa8 solid;padding:2px 5px 2px 5px;color:#ffffffa8;margin-left:5px;background:#503f3f3d}.prism-player .prism-button-ok{font-size:16px;border:1px #fff solid;padding:2px 5px 2px 5px;color:#fff;background:#503f3f63}.prism-player .prism-button-cancel:hover,.prism-player .prism-button-ok:hover{color:#f5f5f5}.prism-player .prism-cc-btn{height:24px;width:24px;background:url(./img/cc.png) center no-repeat;background-size:contain}.prism-player .prism-cc-btn:hover{cursor:pointer;animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-setting-btn{height:24px;width:24px;background:url(./img/setting.png) center no-repeat;background-size:contain}.prism-player .prism-setting-btn:hover{cursor:pointer;animation:hoverAnimationRotate 1s 1;-moz-animation:hoverAnimationRotate 1s 1;-webkit-animation:hoverAnimationRotate 1s 1;-o-animation:hoverAnimationRotate 1s 1}.prism-player .prism-setting-list{background:rgba(60,60,60,.95);width:220px;position:absolute;right:14px;bottom:45px;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-list .prism-setting-item{font-size:14px;color:#ebecec;height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content{width:100%}.prism-player .prism-setting-list .prism-setting-item .setting-content:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-list .prism-setting-item .setting-content span{line-height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content .setting-title{margin-left:15px}.prism-player .prism-setting-list .prism-setting-item .setting-content .current-setting{float:right}.prism-player .prism-setting-list .prism-setting-item .array{display:inline-block;border-right:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(-45deg);transform:rotate(-45deg);margin-right:10px;margin-top:10px;margin-left:10px;float:right}.prism-player .prism-setting-selector{right:40px;position:absolute;bottom:45px;width:150px;background:rgba(60,60,60,.95);font-size:14px;color:#ebecec;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-selector .header{background:#242424;width:150px;height:30px}.prism-player .prism-setting-selector .header:hover{cursor:pointer}.prism-player .prism-setting-selector .header .left-array{display:inline-block;border-left:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(45deg);transform:rotate(45deg);margin-right:6px;margin-top:12px;margin-left:16px;float:left}.prism-player .prism-setting-selector .header span{line-height:30px}.prism-player .prism-setting-selector ul{list-style-type:none;padding-left:0;max-height:150px;overflow-y:auto;padding-left:16px;margin-top:5px}.prism-player .prism-setting-selector ul li{height:28px;padding-left:10px}.prism-player .prism-setting-selector ul li.current{color:#30adf2;padding-left:0}.prism-player .prism-setting-selector ul li.current:before{content:"";display:inline-block;line-height:0;border:5px solid transparent;border-left-color:#30adf2;border-right-width:0;margin-top:5px;padding-right:5px}.prism-player .prism-setting-selector ul li:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-selector ul span{line-height:28px}.prism-player .prism-thumbnail{border:1px solid rgba(0,0,0,.8);width:174px;height:98px;position:absolute;bottom:50px;display:none}.prism-player .prism-thumbnail .none{border:none}.prism-player .prism-thumbnail span{font-size:12px;color:#fff;line-height:20px;background:rgba(0,0,0,.8);text-align:center;text-shadow:1px 1px 4px #373d41;padding-left:5px;padding-right:5px;display:inline-block;position:absolute;bottom:0;left:33%}.prism-player .prism-tooltip{background:#3c3c3c;box-shadow:0 0 5px 0 rgba(0,0,0,.1);height:28px;margin:0;padding-left:5px;padding-right:5px;padding-top:0;padding-bottom:0;position:absolute;bottom:50px;color:#fff;line-height:28px;font-size:10px;white-space:nowrap;display:none}:-webkit-full-screen{width:100%!important;height:100%!important}:-moz-full-screen{width:100%!important;height:100%!important}:-ms-full-screen{width:100%!important;height:100%!important}:-ms-fullscreen{width:100%!important;height:100%!important}:-webkit-full-screen{width:100%!important;height:100%!important}:fullscreen{width:100%!important;height:100%!important}body.prism-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.prism-fullscreen{position:fixed;overflow:hidden;z-index:99999;left:0!important;top:0!important;bottom:0!important;right:0!important;width:100%!important;height:100%!important;position:absolute}.prism-button{cursor:pointer;text-align:center;text-shadow:0 1px 1px rgba(0,0,0,.3);border-radius:.5em;box-shadow:0 1px 2px rgba(0,0,0,.2)}.prism-button-orange{color:#a56117;border:solid 1px #a56117}.prism-button-retry{color:#f2dede;border:solid 1px #f2dede}.prism-button-orange:hover{color:#d67400;border-color:#d67400}.prism-button-orange:active{color:#d67400;border-color:#d67400}.prism-button-orange:visited{color:#d67400}.prism-button-retry:hover{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:active{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:visited{color:#fcf8e3}.prism-center{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.prism-width90{width:90%}.prism-stream-selector{font-size:16px;position:relative;line-height:32px}.prism-stream-selector .current-stream-selector{text-align:center;width:70px;display:none;color:#efeff4}.prism-stream-selector .current-stream-selector:hover{cursor:pointer;color:#00c1de}.prism-stream-selector .stream-selector-tip{color:#fff;text-align:center;padding:2px 5px 2px 5px;display:none;position:absolute;bottom:61.5px;white-space:nowrap;left:43%;font-size:18px}.prism-stream-selector .stream-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;width:70px;margin:0;display:none}.prism-stream-selector .stream-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-stream-selector .stream-selector-list li:last-child{margin-bottom:10px}.prism-stream-selector .stream-selector-list li.current{color:#00c1de}.prism-stream-selector .stream-selector-list li span.current{color:#00c1de}.prism-stream-selector .stream-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-speed-selector{font-size:16px;position:relative;line-height:32px}.prism-speed-selector .current-speed-selector{color:#efeff4;text-align:center;width:60px}.prism-speed-selector .current-speed-selector:hover{cursor:pointer;color:#00c1de}.prism-speed-selector .speed-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;display:none;margin:0}.prism-speed-selector .speed-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-speed-selector .speed-selector-list li:last-child{margin-bottom:10px}.prism-speed-selector .speed-selector-list li.current{color:#00c1de}.prism-speed-selector .speed-selector-list li span.current{color:#00c1de}.prism-speed-selector .speed-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-ai-container{position:absolute;overflow:hidden}.prism-ai-container .prism-ai-marking{font-size:12px;position:absolute}.prism-ai-container .prism-ai-marking[vh=large]{font-size:18px}.prism-ai-container .prism-ai-marking[vh=middle]{font-size:16px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region{position:relative;display:inline-block}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title{height:0;-ms-transform:translateY(-40px);transform:translateY(-40px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title p{background:#ff1d00;text-align:center;width:100%;color:#fff;word-break:keep-all;margin:10px 0 0 0}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-left-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-left-color:red;border-left-style:solid;border-width:1px;-ms-transform:translate(-5px,10px);transform:translate(-5px,10px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-right-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-right-color:red;border-right-style:solid;border-width:1px;-ms-transform:translate(5px,5px);transform:translate(5px,5px);float:right}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect{border-style:solid;border-color:#ff1d00;border-width:1px;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;color:rgba(255,29,0,.3);background:rgba(255,29,0,.1)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash-container{overflow:hidden;width:100%;height:100%;position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash{content:"";display:block;box-sizing:border-box;border-top-width:1px;border-top-style:solid;height:10px;margin-top:15px;border-bottom-width:1px;border-bottom-style:solid;transform:rotateZ(-45deg) scaleX(2);-ms-transform-origin:bottom center;transform-origin:bottom center}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-top-slash{margin-top:-10px!important}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .anchor-plug{position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-left{top:-7px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-right{top:-7px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-left{bottom:-8px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-right{bottom:-8px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-labels{color:#fff;float:right;background:rgba(0,0,0,.4);padding-top:5px;padding-bottom:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p{text-align:left;padding-left:5px;padding-right:5px;margin:0}.prism-ai-container .prism-ai-marking .prism-ai-labels a{padding-left:5px;padding-right:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=large]{padding-left:25px;padding-right:25px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=middle]{padding-left:15px;padding-right:15px}video::-webkit-media-text-track-container{overflow:visible!important}video::cue{line-height:1.7}.disabled{pointer-events:none;color:gray}.center{position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)} \ No newline at end of file diff --git a/re/geekbang/routes/list/source/aliplayer-min.js b/re/geekbang/routes/list/source/aliplayer-min.js new file mode 100644 index 0000000..d06872e --- /dev/null +++ b/re/geekbang/routes/list/source/aliplayer-min.js @@ -0,0 +1,2 @@ +/*! Aliplayer - v2.8.2 - 2019-05-09 16.34.41 */ +!function n(a,s,l){function u(t,e){if(!s[t]){if(!a[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=s[t]={exports:{}};a[t][0].call(o.exports,function(e){return u(a[t][1][e]||e)},o,o.exports,n,a,s,l)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;ei.offsetHeight){t=i,e.fastClickScrollParent=i;break}i=i.parentElement}while(i)}t&&(t.fastClickLastScrollTop=t.scrollTop)},l.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},l.prototype.onTouchStart=function(e){var t,i,r;if(1i||Math.abs(t.pageY-this.touchStartY)>i},l.prototype.onTouchMove=function(e){return this.trackingClick&&(this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0},l.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},l.prototype.onTouchEnd=function(e){var t,i,r,o,n,a=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,i=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,d&&(n=e.changedTouches[0],(a=document.elementFromPoint(n.pageX-window.pageXOffset,n.pageY-window.pageYOffset)||a).fastClickScrollParent=this.targetElement.fastClickScrollParent),"label"===(r=a.tagName.toLowerCase())){if(t=this.findControl(a)){if(this.focus(a),u)return!1;a=t}}else if(this.needsFocus(a))return 100"+a.get("Cancel_Text")+"",e},bindEvent:function(){var r=this;r._player.on(s.Private.AutoStreamShow,function(e){var t=document.querySelector("#"+r.getId()+" .tip-text");if(r._player._getLowerQualityLevel){var i=r._player._getLowerQualityLevel();i&&(r._switchUrl=i,t.innerText=a.get("Auto_Stream_Tip_Text").replace("$$",i.item.desc),o.css(r.el(),"display","block"))}}),r._player.on(s.Private.AutoStreamHide,function(e){document.querySelector("#"+r.getId()+" .tip-text");o.css(r.el(),"display","none")});var e=document.querySelector("#"+r.getId()+" .prism-button-ok");n.on(e,"click",function(){r._player._changeStream&&r._switchUrl&&r._player._changeStream(r._switchUrl.index,a.get("Quality_Change_Text")),o.css(r.el(),"display","none")});var t=document.querySelector("#"+r.getId()+" .prism-button-cancel");n.on(t,"click",function(){o.css(r.el(),"display","none")})}});t.exports=l},{"../lang/index":11,"../lib/dom":18,"../lib/event":19,"../lib/ua":31,"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],3:[function(e,t,i){var r=e("../ui/component"),s=e("../lib/dom"),o=e("../lib/event"),n=e("../lib/ua"),a=e("../lib/function"),l=(e("../lang/index"),e("../lib/util")),u=e("../config"),c=e("../lib/playerutil"),d=e("../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-liveshift-progress",this.addClass(this.className),this._liveshiftService=e._liveshiftService},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='

        00:00:00
        ',e},bindEvent:function(){var i=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.controlNode=document.querySelector("#"+this._player._options.id+" .prism-controlbar"),this.seperatorNode=document.querySelector("#"+this.id()+" .prism-liveshift-seperator"),this.progressNode=document.querySelector("#"+this.id()+" .prism-enable-liveshift");var e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),t="//"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1a&&(sec=a),sec},_onMouseClick:function(e){var t=this,i=this._getSeconds(e),r=this._liveshiftService.availableLiveShiftTime-i;this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()});var o=this._liveshiftService.getSourceUrl(r),n=t._player._options.source,a=c.isHls(t._player._options.source);a&&o==n?t._player.seek(i):t._player._loadByUrlInner(o,i,!0),t._player.trigger(d.Private.Play_Btn_Hide),t._liveshiftService.seekTime=i,t._player.trigger(d.Private.EndStart,{toTime:i}),t._updateCursorPosition(i),a&&setTimeout(function(){t._player.play()})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()}),o.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),o.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),o.on(this._player.tag,"mouseup",function(e){t._onMouseUp(e)}),o.on(this._player.tag,"touchend",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"mouseup",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"touchend",function(e){t._onMouseUp(e)})},_onMouseUp:function(e){e.preventDefault(),o.off(this.controlNode,"mousemove"),o.off(this.controlNode,"touchmove"),o.off(this._player.tag,"mouseup"),o.off(this._player.tag,"touchend"),o.off(this.controlNode,"mouseup"),o.off(this.controlNode,"touchend");var t=this._liveshiftService.availableLiveShiftTime,i=this.playedNode.offsetWidth/this.el().offsetWidth*t;this._player.seek(i),this._player.trigger(d.Private.Play_Btn_Hide),this._liveshiftService.seekTime=i,this._player.trigger(d.Private.EndStart,{toTime:i})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._updateProgressBar(this.playedNode,this._getCurrentTime()),this._updateCursorPosition(this._getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._getCurrentTime()})},_getCurrentTime:function(){var e=this._liveshiftService.seekTime;return-1==e&&(e=0),this._player.getCurrentTime()+e},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){if(1!=this._player._switchSourcing){var i=0;if(-1==this._liveshiftService.seekTime)i=1;else{var r=this._liveshiftService.availableLiveShiftTime;1<(i=r?t/r:0)&&(i=1,this._liveshiftService.seekTime=-1)}this.liveShiftStartDisplay;e&&s.css(e,"width",100*i+"%")}},_updateCursorPosition:function(e){if(this._player.el()&&1!=this._player._switchSourcing&&(0!=e||0!=this._player.tag.readyState)){var t=0,i=1,r=this._player.el().clientWidth;if(-1==this._liveshiftService.seekTime)t=1;else{var o=this._liveshiftService.availableLiveShiftTime;1<(t=o?e/o:0)&&(this._liveshiftService.seekTime=-1)}if(0!=r){var n=18/r;i=1-n,t-=n}this.cursorNode&&(ie.seekTime&&-1!=e.seekTime){var i=o._liveshiftService.getBaseTime(),r=n.formatTime(i+o._player.getCurrentTime());t.innerText=r}else e.currentTimeDisplay&&(t.innerText=e.currentTimeDisplay)}),this._player.on(a.Private.LiveShiftQueryCompleted,function(){o.updateTime()})},updateTime:function(){document.querySelector("#"+this.id()+" .end-time").innerText=this._liveshiftService.liveTimeRange.endDisplay,document.querySelector("#"+this.id()+" .live-time").innerText=this._liveshiftService.currentTimeDisplay}});t.exports=o},{"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],5:[function(e,t,i){t.exports={domain:"g.alicdn.com",flashVersion:"2.8.2",h5Version:"2.8.2",cityBrain:!0,logDuration:10,logCount:100,logReportTo:"https://videocloud.cn-hangzhou.log.aliyuncs.com/logstores/newplayer/track"}},{}],6:[function(e,t,i){e("./lang/index").load();var r=e("./player/adaptivePlayer"),o=e("./lib/componentutil"),n=e("./config"),a=function(e,t){return r.create(e,t)};a.getVersion=function(){return n.h5Version},o.register(a);var s=window.Aliplayer=a;a.players={},"function"==typeof define&&define.amd?define([],function(){return s}):"object"==typeof i&&"object"==typeof t&&(t.exports=s),"undefined"!=typeof Uint8Array&&(Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:Array.prototype.slice}))},{"./config":5,"./lang/index":11,"./lib/componentutil":14,"./player/adaptivePlayer":40}],7:[function(e,t,i){var r=e("../lib/oo"),o=e("../lang/index"),n=r.extend({init:function(e,t){this._player=e,this._options=e.options()}});n.prototype.handle=function(e){if(this._options.autoPlayDelay){var t=this._options.autoPlayDelayDisplayText;t||(t=o.get("AutoPlayDelayDisplayText").replace("$$",this._options.autoPlayDelay)),this._player.trigger("info_show",t),this._player.trigger("h5_loading_hide"),this._player.trigger("play_btn_hide");var i=this;this._timeHandler=setTimeout(function(){i._player.trigger("info_hide"),i._options.autoPlayDelay=0,e&&e()},1e3*this._options.autoPlayDelay),this._player.on("play",function(){a(i)}),this._player.on("pause",function(){a(i)})}},n.prototype.dispose=function(){a(this),this._player=null};var a=function(e){e._timeHandler&&(clearTimeout(e._timeHandler),e._timeHandler=null)};t.exports=n},{"../lang/index":11,"../lib/oo":27}],8:[function(e,t,i){t.exports=t.exports={OD:"OD",FD:"360p",LD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Speed:"Speed",Speed_05X_Text:"0.5X",Speed_1X_Text:"Normal",Speed_125X_Text:"1.25X",Speed_15X_Text:"1.5X",Speed_2X_Text:"2X",Refresh_Text:"Refresh",Cancel:"Cancel",Mute:"Mute",Snapshot:"Snapshot",Detection_Text:"Diagnosis",Play_DateTime:"Time",Quality_Change_Fail_Switch_Text:"Cannot play, switch to ",Quality_Change_Text:"Switch to ",Quality_The_Url:"The url",AutoPlayDelayDisplayText:"Play in $$ seconds",Error_Load_Abort_Text:"Data abort erro",Error_Network_Text:"Loading failed due to network error",Error_Decode_Text:"Decode error",Error_Server_Network_NotSupport_Text:"Network error or \xa0the format of video is unsupported",Error_Offline_Text:"The network is unreachable, please click Refresh",Error_Play_Text:"Error occured while playing",Error_Retry_Text:" Please close or refresh",Error_AuthKey_Text:"Authentication expired or the domain is not in white list",Error_H5_Not_Support_Text:"The format of video is not supported by\xa0h5 player\uff0cplease use flash player",Error_Not_Support_M3U8_Text:"The format of m3u8 is not supported by this explorer",Error_Not_Support_MP4_Text:"The format of mp4\xa0is not supported by this explorer",Error_Not_Support_encrypt_Text:"Play the encrypted video,please set encryptType to 1",Error_Vod_URL_Is_Empty_Text:"The url is empty",Error_Vod_Fetch_Urls_Text:"Error occured when fetch urls\uff0cplease close or refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Error_Playauth_Decode_Text:"PlayAuth parse failed",Error_Vid_Not_Same_Text:"Cannot renew url due to vid changed",Error_Playauth_Expired_Text:"Playauth expired, please close or refresh",Error_MTS_Fetch_Urls_Text:"Error occurred while requesting mst server",Error_Load_M3U8_Failed_Text:"The\xa0m3u8 file loaded failed",Error_Load_M3U8_Timeout_Text:"Timeout error occored\xa0when the\xa0m3u8 file loaded",Error_M3U8_Decode_Text:"The m3u8 file decoded failed",Error_TX_Decode_Text:"Video decoded failed",Error_Waiting_Timeout_Text:"Buffering timeout,\xa0please close or refresh",Error_Invalidate_Source:"Video shoud be mp4\u3001mp3\u3001m3u8\u3001mpd or flv",Error_Empty_Source:"Video URL shouldn't be empty",Error_Vid_Empty_Source:"vid's video URL hasn't been fetched",Error_Fetch_NotStream:"The vid has no stream to play",Error_Not_Found:"Url is not found",Live_End:"Live has finished",Play_Before_Fullscreen:"Please play before fullscreen",Can_Not_Seekable:"Can not seek to this position",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Request_Block_Text:"This request is blocked, the video Url should be over https",Open_Html_By_File:"Html page should be on the server",Maybe_Cors_Error:"please make sure enable cors,refer to document",Speed_Switch_To:"Speed switch to ",Curent_Volume:"Current volume:",Volume_Mute:"set to mute",Volume_UnMute:"set to unmute",ShiftLiveTime_Error:"Live start time should not be greater than over time",Error_Not_Support_Format_On_Mobile:"flv\u3001rmtp can't be supported on mobile\uff0cplease use m3u8",SessionId_Ticket_Invalid:"please assign value for sessionId and ticket properties",Http_Error:" An HTTP network request failed with an error, but not from the server.",Http_Timeout:"A network request timed out",DRM_License_Expired:"DRM license is expired, please refresh",Not_Support_DRM:"Browser doesn't support DRM",CC_Switch_To:"Subtitle switch to ",AudioTrack_Switch_To:"Audio tracks switch to ",Subtitle:"Subtitle/CC",AudioTrack:"Audio Track",Quality:"Quality",Auto:"Auto",Quality_Switch_To:"Quality switch to ",Fullscreen:"Full Screen",Setting:"Settings",Volume:"Volume",Play:"Play",Pause:"Pause",CloseSubtitle:"Close CC",OpenSubtitle:"Open CC",ExistFullScreen:"Exit Full Screen",Muted:"Muted",Retry:"Retry",SwitchToLive:"Return to live",iOSNotSupportVodEncription:"iOS desn't suport Vod's encription video",UseChromeForVodEncription:"This browser desn't suport Vod's encription video, please use latest Chrome"}},{}],9:[function(e,t,i){t.exports=t.exports={OD:"OD",LD:"360p",FD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Forbidden_Text:"Internal information is strictly forbidden to outsider",Refresh:"Refresh",Diagnosis:"Diagnosis",Live_Finished:"Live has finished, thanks for watching",Play:"Play",Pause:"Pause",Snapshot:"Snapshot",Replay:"Replay",Live:"Live",Encrypt:"Encrypt",Sound:"Sound",Fullscreen:"Full Screen",Exist_Fullscreen:"Exit Full-screen",Resolution:"Resolution",Next:"Next Video",Brightness:"Brightness",Default:"Default",Contrast:"Contrast",Titles_Credits:"Titles\xa0and\xa0Credits",Skip_Titles:"Skip Titles",Skip_Credits:"Skip Credits",Not_Support_Out_Site:"The video is not supported for outside website, please watch it by TaoTV",Watch_Now:"Watch now",Network_Error:"Network is unreachable, please try to refresh",Video_Error:"Playing a video error,\xa0please try to refresh",Decode_Error:"Data decoding\xa0error",Live_Not_Start:"Live has not started, to be expected",Live_Loading:"Live information is loading,\xa0please try to refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Live_End:"Live has finished",Live_Abrot:"Signal aborted,\xa0please try to refresh",Corss_Domain_Error:"Please ensure your domain has obtained IPC license and combined CNAME, \r\n or to set\xa0\xa0cross-domain accessing available",Url_Timeout_Error:"The video url is timeout,\xa0please try to refresh",Connetction_Error:"Sorry\uff0cthe video cannot play because of connection error, please try to watch other videos",Fetch_MTS_Error:"Fetching video list failed, please ensure",Token_Expired_Error:"Requesting open api failed, please ensure token expired or not",Video_Lists_Empty_Error:"The video list is empty, please check the format of video",Encrypted_Failed_Error:"Fetching encrypted file failed, please check the permission of player",Fetch_Failed_Permission_Error:"Fetching video list failed, please check the permission of player",Invalidate_Param_Error:"No video url, please check the parameters",AutoPlayDelayDisplayText:"Play in $$ seconds",Fetch_MTS_NOT_NotStream_Error:"The vid has no stream to play",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Open_Html_By_File:"Html page should be on the server",Cant_Use_Flash_On_Mobile:"Mobile doesn't support flash player\uff0cplease use h5 player",Flash_Not_Ready:"Flash Player plugin hasn't been installed install plugin, or check if disable Flash plugin"}},{}],10:[function(e,t,i){t.exports=t.exports={OD:"\u539f\u753b",FD:"\u6d41\u7545",LD:"\u6807\u6e05",SD:"\u9ad8\u6e05",HD:"\u8d85\u6e05","2K":"2K","4K":"4K",FHD:"\u5168\u9ad8\u6e05",XLD:"\u6781\u901f",SQ:"\u666e\u901a\u97f3\u8d28",HQ:"\u9ad8\u97f3\u8d28",Forbidden_Text:"\u5185\u90e8\u4fe1\u606f\uff0c\u4e25\u7981\u5916\u4f20",Refresh:"\u5237\u65b0",Diagnosis:"\u8bca\u65ad",Live_Finished:"\u76f4\u64ad\u5df2\u7ed3\u675f,\u8c22\u8c22\u89c2\u770b",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Snapshot:"\u622a\u56fe",Replay:"\u91cd\u64ad",Live:"\u76f4\u64ad",Encrypt:"\u52a0\u5bc6",Sound:"\u58f0\u97f3",Fullscreen:"\u5168\u5c4f",Exist_Fullscreen:"\u9000\u51fa\u5168\u5c4f",Resolution:"\u6e05\u6670\u5ea6",Next:"\u4e0b\u4e00\u96c6",Brightness:"\u4eae\u5ea6",Default:"\u9ed8\u8ba4",Contrast:"\u5bf9\u6bd4\u5ea6",Titles_Credits:"\u7247\u5934\u7247\u5c3e",Skip_Titles:"\u8df3\u8fc7\u7247\u5934",Skip_Credits:"\u8df3\u8fc7\u7247\u5c3e",Not_Support_Out_Site:"\u8be5\u89c6\u9891\u6682\u4e0d\u652f\u6301\u7ad9\u5916\u64ad\u653e\uff0c\u8bf7\u5230\u6dd8TV\u89c2\u770b",Watch_Now:"\u7acb\u5373\u89c2\u770b",Network_Error:"\u7f51\u7edc\u65e0\u6cd5\u8fde\u63a5\uff0c\u8bf7\u5c1d\u8bd5\u68c0\u67e5\u7f51\u7edc\u540e\u5237\u65b0\u8bd5\u8bd5",Video_Error:"\u89c6\u9891\u64ad\u653e\u5f02\u5e38\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Decode_Error:"\u64ad\u653e\u6570\u636e\u89e3\u7801\u9519\u8bef",Live_Not_Start:"\u4eb2\uff0c\u76f4\u64ad\u8fd8\u672a\u5f00\u59cb\u54e6\uff0c\u656c\u8bf7\u671f\u5f85",Live_Loading:"\u76f4\u64ad\u4fe1\u606f\u52a0\u8f7d\u4e2d\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Live_End:"\u4eb2\uff0c\u76f4\u64ad\u5df2\u7ed3\u675f",Live_Abrot:"\u5f53\u524d\u76f4\u64ad\u4fe1\u53f7\u4e2d\u65ad\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Corss_Domain_Error:"\u8bf7\u786e\u8ba4\u60a8\u7684\u57df\u540d\u5df2\u5b8c\u6210\u5907\u6848\u548cCNAME\u7ed1\u5b9a\uff0c\r\n\u5e76\u5904\u4e8e\u542f\u7528\u72b6\u6001\uff0c\u6216\u8d44\u6e90\u5141\u8bb8\u8de8\u8d8a\u8bbf\u95ee",Url_Timeout_Error:"\u60a8\u6240\u89c2\u770b\u7684\u89c6\u9891\u5730\u5740\u8fde\u63a5\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Connetction_Error:"\u62b1\u6b49,\u8be5\u89c6\u9891\u7531\u4e8e\u8fde\u63a5\u9519\u8bef\u6682\u65f6\u4e0d\u80fd\u64ad\u653e,\u8bf7\u89c2\u770b\u5176\u5b83\u89c6\u9891",Fetch_MTS_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4",Token_Expired_Error:"\u8bf7\u6c42\u63a5\u53e3\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4Token\u662f\u5426\u8fc7\u671f",Video_Lists_Empty_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u4e3a\u7a7a\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6570\u636e\u4e0e\u683c\u5f0f",Encrypted_Failed_Error:"\u83b7\u53d6\u89c6\u9891\u52a0\u5bc6\u79d8\u94a5\u9519\u8bef\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Fetch_Failed_Permission_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Invalidate_Param_Error:"\u65e0\u8f93\u5165\u89c6\u9891\uff0c\u8bf7\u786e\u8ba4\u8f93\u5165\u53c2\u6570",AutoPlayDelayDisplayText:"$$\u79d2\u4ee5\u540e\u5f00\u59cb\u64ad\u653e",Fetch_MTS_NOT_NotStream_Error:"\u6b64vid\u6ca1\u6709\u53ef\u64ad\u653e\u89c6\u9891",Cancel_Text:"\u53d6\u6d88",OK_Text:"\u786e\u8ba4",Auto_Stream_Tip_Text:"\u7f51\u7edc\u4e0d\u7ed9\u529b\uff0c\u662f\u5426\u5207\u6362\u5230$$",Fetch_Playauth_Error:"\u83b7\u53d6\u64ad\u653e\u51ed\u8bc1\u51fa\u9519\u5566\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Open_Html_By_File:"\u4e0d\u80fd\u76f4\u63a5\u5728\u6d4f\u89c8\u5668\u6253\u5f00html\u6587\u4ef6\uff0c\u8bf7\u90e8\u7f72\u5230\u670d\u52a1\u7aef",Cant_Use_Flash_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301Flash\u64ad\u653e\u5668\uff0c\u8bf7\u4f7f\u7528h5\u64ad\u653e\u5668",Flash_Not_Ready:"Flash Player\u63d2\u4ef6\u672a\u5b89\u88c5\u5b89\u88c5\u63d2\u4ef6\uff0c\u5982\u679c\u5df2\u7ecf\u5b89\u88c5\u8bf7\u68c0\u67e5\u662f\u5426\u88ab\u7981\u7528"}},{}],11:[function(n,e,t){var i=n("../config"),a=n("../lib/storage"),o=(n("../lib/io"),"aliplayer_lang"),s=function(){if(void 0===window[o]||!window[o]){var e=(navigator.language||navigator.browserLanguage).toLowerCase();e=e&&-1\u53c2\u8003\u6587\u6863",Speed_Switch_To:"\u500d\u901f\u5207\u6362\u5230 ",Curent_Volume:"\u5f53\u524d\u97f3\u91cf\uff1a",Volume_Mute:"\u8bbe\u7f6e\u4e3a\u9759\u97f3",Volume_UnMute:"\u8bbe\u7f6e\u4e3a\u975e\u9759\u97f3",ShiftLiveTime_Error:"\u76f4\u64ad\u5f00\u59cb\u65f6\u95f4\u4e0d\u80fd\u5927\u4e8e\u76f4\u64ad\u7ed3\u675f\u65f6\u95f4",Error_Not_Support_Format_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301flv\u3001rmtp\u89c6\u9891\uff0c\u8bf7\u4f7f\u7528m3u8",SessionId_Ticket_Invalid:"DRM\u89c6\u9891\u64ad\u653e\uff0csessionId\u548cticket\u5c5e\u6027\u4e0d\u80fd\u4e3a\u7a7a",Http_Error:"Http\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25",Http_Timeout:"http\u8bf7\u6c42\u8d85\u65f6",DRM_License_Expired:"DRM license\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0",Not_Support_DRM:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301DRM\u89c6\u9891\u7684\u64ad\u653e",CC_Switch_To:"\u5b57\u5e55\u5207\u6362\u5230 ",AudioTrack_Switch_To:"\u97f3\u8f68\u5207\u6362\u5230 ",Subtitle:"\u5b57\u5e55",AudioTrack:"\u97f3\u8f68",Quality:"\u6e05\u6670\u5ea6",Auto:"\u81ea\u52a8",Quality_Switch_To:"\u6e05\u6670\u5ea6\u5207\u6362\u5230 ",Fullscreen:"\u5168\u5c4f",Setting:"\u8bbe\u7f6e",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",CloseSubtitle:"\u5173\u95ed\u5b57\u5e55",OpenSubtitle:"\u6253\u5f00\u5b57\u5e55",ExistFullScreen:"\u9000\u51fa\u5168\u5c4f",Muted:"\u9759\u97f3",Retry:"\u91cd\u8bd5",SwitchToLive:"\u8fd4\u56de\u76f4\u64ad",iOSNotSupportVodEncription:"iOS\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e",UseChromeForVodEncription:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e\uff0c\u8bf7\u4f7f\u7528\u6700\u65b0Chrome\u6d4f\u89c8\u5668"}},{}],13:[function(e,t,i){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";if(window.Uint8Array)for(var d=new Uint8Array(256),r=0;r>4,c[l++]=(15&r)<<4|o>>2,c[l++]=(3&o)<<6|63&n;return u},encode:function(e){var t,i=new Uint8Array(e),r=i.length,o="";for(t=0;t>2],o+=n[(3&i[t])<<4|i[t+1]>>4],o+=n[(15&i[t+1])<<2|i[t+2]>>6],o+=n[63&i[t+2]];return r%3==2?o=o.substring(0,o.length-1)+"=":r%3==1&&(o=o.substring(0,o.length-2)+"=="),o},unpackPlayReady:unpackPlayReady}},{}],14:[function(e,t,i){var r=e("./oo"),o=e("../player/base/event/eventtype");t.exports.stopPropagation=function(e){window.event?window.event.cancelBubble=!0:e.stopPropagation()},t.exports.register=function(e){e.util={stopPropagation:t.exports.stopPropagation},e.Component=r.extend,e.EventType=o.Player}},{"../player/base/event/eventtype":43,"./oo":27}],15:[function(e,t,i){var r=e("../lang/index");t.exports.LOAD_START="loadstart",t.exports.LOADED_METADATA="loadedmetadata",t.exports.LOADED_DATA="loadeddata",t.exports.PROGRESS="progress",t.exports.CAN_PLAY="canplay",t.exports.CAN_PLYA_THROUGH="canplaythrough",t.exports.PLAY="play",t.exports.PAUSE="pause",t.exports.ENDED="ended",t.exports.PLAYING="playing",t.exports.WAITING="waiting",t.exports.ERROR="error",t.exports.SUSPEND="suspend",t.exports.STALLED="stalled",t.exports.AuthKeyExpiredEvent="authkeyexpired",t.exports.DRMKeySystem={4:"com.microsoft.playready",5:"com.widevine.alpha"},t.exports.EncryptionType={Private:1,Standard:2,ChinaDRM:3,PlayReady:4,Widevine:5},t.exports.VodEncryptionType={AliyunVoDEncryption:1,HLSEncryption:2},t.exports.DRMType={Widevine:"Widevine",PlayReady:"PlayReady"},t.exports.ErrorCode={InvalidParameter:4001,AuthKeyExpired:4002,InvalidSourceURL:4003,NotFoundSourceURL:4004,StartLoadData:4005,LoadedMetadata:4006,PlayingError:4007,LoadingTimeout:4008,RequestDataError:4009,EncrptyVideoNotSupport:4010,FormatNotSupport:4011,PlayauthDecode:4012,PlayDataDecode:4013,NetworkUnavaiable:4014,UserAbort:4015,NetworkError:4016,URLsIsEmpty:4017,CrossDomain:4027,OtherError:4400,ServerAPIError:4500,FlashNotInstalled:4600},t.exports.AuthKeyExpired=7200,t.exports.AuthKeyRefreshExpired=7e3,t.exports.AuthInfoExpired=100,t.exports.VideoErrorCode={1:4015,2:4016,3:4013,4:4400},t.exports.IconType={FontClass:"fontclass",Symbol:"symbol",Sprite:"Sprite"},t.exports.SelectedStreamLevel="selectedStreamLevel",t.exports.SelectedCC="selectedCC",t.exports.WidthMapToLevel={0:"OD",640:"FD",960:"LD",1280:"SD",1920:"HD",2580:"2K",3840:"4K"};var o=function(){t.exports.VideoErrorCodeText={1:r.get("Error_Load_Abort_Text"),2:r.get("Error_Network_Text"),3:r.get("Error_Decode_Text"),4:r.get("Error_Server_Network_NotSupport_Text")},t.exports.VideoLevels={0:r.get("OD"),640:r.get("FD"),960:r.get("LD"),1280:r.get("SD"),1920:r.get("HD"),2580:r.get("2K"),3840:r.get("4K")},t.exports.QualityLevels={OD:r.get("OD"),LD:r.get("LD"),FD:r.get("FD"),SD:r.get("SD"),HD:r.get("HD"),"2K":r.get("2K"),"4K":r.get("4K"),XLD:r.get("XLD"),FHD:r.get("FHD"),SQ:r.get("SQ"),HQ:r.get("HQ")},t.exports.SpeedLevels=[{key:.5,text:r.get("Speed_05X_Text")},{key:1,text:r.get("Speed_1X_Text")},{key:1.25,text:r.get("Speed_125X_Text")},{key:1.5,text:r.get("Speed_15X_Text")},{key:2,text:r.get("Speed_2X_Text")}]};o(),t.exports.updateByLanguage=o},{"../lang/index":11}],16:[function(e,t,i){t.exports.get=function(e){for(var t=e+"",i=document.cookie.split(";"),r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},hexadecimalInteger:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var i=new Uint8Array(t.length/2),r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},decimalFloatingPoint:function(e){return parseFloat(this[e])},enumeratedString:function(e){return this[e]},decimalResolution:function(e){var t=r.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}},parseAttrList:function(e){var t,i={};for(o.lastIndex=0;null!==(t=o.exec(e));){var r=t[2];0===r.indexOf('"')&&r.lastIndexOf('"')===r.length-1&&(r=r.slice(1,-1)),i[t[1]]=r}return i}},t.exports=n},{}],23:[function(e,t,i){var P=e("./attrlist"),r=e("../io"),o=e("./URLToolkit"),c=/#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g,u=/#EXT-X-MEDIA:(.*)/g,w=new RegExp([/#EXTINF:(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/|(?!#)(\S+)/.source,/|#EXT-X-BYTERANGE:*(.+)/.source,/|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/|#.*/.source].join(""),"g"),C=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,k=function(){this.method=null,this.key=null,this.iv=null,this._uri=null},I=function(){this._url=null,this._byteRange=null,this._decryptdata=null,this.tagList=[]};I.prototype.getUrl=function(){return!this._url&&this.relurl&&(this._url=o.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},I.prototype.Seturl=function(e){this._url=e},I.prototype.getProgramDateTime=function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime},I.prototype.GetbyteRange=function(){if(!this._byteRange){var e=this._byteRange=[];if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var i=this.lastByteRangeEndOffset;e[0]=i||0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange},I.prototype.getByteRangeStartOffset=function(){return this.byteRange[0]},I.prototype.getByteRangeEndOffset=function(){return this.byteRange[1]};I.prototype.getDecryptdata=function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata};var n=function(){this.loaders={}};n.prototype={parseMasterPlaylist:function(e,t){var i,r=[];for(c.lastIndex=0;null!=(i=c.exec(e));){var o={},n=o.attrs=new P(i[1]);o.url=this.resolve(i[2],t);var a=n.decimalResolution("RESOLUTION");a&&(o.width=a.width,o.height=a.height),o.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),o.name=n.NAME;var s=n.CODECS;if(s){s=s.split(/[ ,]+/);for(var l=0;l",quot:'"',"#x27":"'","#x60":"`"}[t.toLowerCase()]||e})}},{}],27:[function(e,t,i){var o=e("./object"),n=function(){};(n=function(){}).extend=function(e){var t,i;for(var r in t=(e=e||{}).init||e.init||this.prototype.init||this.prototype.init||function(){},(((i=function(){t.apply(this,arguments)}).prototype=o.create(this.prototype)).constructor=i).extend=n.extend,i.create=n.create,e)e.hasOwnProperty(r)&&(i.prototype[r]=e[r]);return i},n.create=function(){var e=o.create(this.prototype);return this.apply(e,arguments),e},t.exports=n},{"./object":26}],28:[function(e,f,t){var _=e("./object"),i=e("../config"),r=e("./dom"),o=e("./cookie"),n=e("./constants"),a=e("../lang/index"),s=e("./ua"),g=e("../player/base/plugin/defaultemptycomponent"),y={preload:!0,autoplay:!0,useNativeControls:!1,width:"100%",height:"300px",cover:"",from:"",trackLog:!0,logBatched:!0,isLive:!1,playsinline:!0,showBarTime:5e3,rePlay:!1,liveRetry:5,liveRetryInterval:1,liveRetryStep:0,vodRetry:3,format:"",definition:"",defaultDefinition:"",loadDataTimeout:20,waitingTimeout:60,delayLoadingShow:1,controlBarForOver:!1,controlBarVisibility:"hover",enableSystemMenu:!1,qualitySort:"asc",x5_video_position:"normal",x5_type:"",x5_fullscreen:!1,x5_orientation:"landscape|portrait",x5LandscapeAsFullScreen:!0,autoPlayDelay:0,autoPlayDelayDisplayText:"",useHlsPluginForSafari:!1,enableMSEForAndroid:!0,encryptType:0,language:"zh-cn",languageTexts:{},mediaType:"video",outputType:"",playConfig:{},reAuthInfo:{},components:[],liveTimeShiftUrl:"",liveShiftSource:"",liveShiftTime:"",videoHeight:"100%",videoWidth:"100%",enableWorker:!0,authTimeout:"",enableMockFullscreen:!1,region:"cn-shanghai",debug:!1,progressMarkers:[],snapshotWatermark:{left:"500",top:"100",text:"",font:"16px \u5b8b\u4f53",fillColor:"#FFFFFF",strokeColor:"#FFFFFF"},liveStartTime:"",liveOverTime:"",enableStashBufferForFlv:!0,stashInitialSizeForFlv:32,flvOption:{},hlsOption:{stopLoadAsPaused:!1},hlsLoadingTimeOut:2e4,useHlsPlugOnMobile:!0,nudgeMaxRetry:5,tracks:[],recreatePlayer:function(){},diagnosisButtonVisible:!0,_native:!0,ai:{label:!1,meta:{url:"http://172.19.61.105:8085/meta/query",getMeta:""},boxes:"",host:"",app:"",streamName:"",startDateTime:0,waitMetaDataTime:2,displayAttrs:{header:"\u59d3\u540d","\u8bc1\u4ef6\u53f7\u7801":"text","\u6027\u522b":"text","\u5e74\u9f84":"text","\u53d1\u578b":"text","\u4eba\u8138\u5927\u56fe":function(e){},"\u4eba\u8138\u5c0f\u56fe":function(e){}},getClass:function(e,t){return""}},thumbnailUrl:"",skinRes:"//"+i.domain+"/de/prismplayer-flash/"+i.flashVersion+"/atlas/defaultSkin"};f.exports.defaultH5Layout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"H5Loading",align:"cc"},{name:"errorDisplay",align:"tlabs",x:0,y:0},{name:"infoDisplay"},{name:"tooltip",align:"blabs",x:0,y:50},{name:"thumbnail"},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"fullScreenButton",align:"tr",x:10,y:12},{name:"subtitle",align:"tr",x:15,y:12},{name:"setting",align:"tr",x:15,y:12},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultAudioLayout=[{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultFlashLayout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"tlabs",x:0,y:0},{name:"playButton",align:"tl",x:15,y:26},{name:"nextButton",align:"tl",x:10,y:26},{name:"timeDisplay",align:"tl",x:10,y:24},{name:"fullScreenButton",align:"tr",x:10,y:25},{name:"streamButton",align:"tr",x:10,y:23},{name:"volume",align:"tr",x:10,y:25}]},{name:"fullControlBar",align:"tlabs",x:0,y:0,children:[{name:"fullTitle",align:"tl",x:25,y:6},{name:"fullNormalScreenButton",align:"tr",x:24,y:13},{name:"fullTimeDisplay",align:"tr",x:10,y:12},{name:"fullZoom",align:"cc"}]}],f.exports.canPlayType=function(e){var t=document.createElement("video");return t.canPlayType?t.canPlayType(e):""},f.exports.canPlayHls=function(){return""!=f.exports.canPlayType("application/x-mpegURL")},f.exports.isUsedHlsPluginOnMobile=function(e){return!(!s.IS_MOBILE||!s.IS_CHROME&&!s.IS_FIREFOX)},f.exports.isSafariUsedHlsPlugin=function(e){return!!(s.os.pc&&s.browser.safari&&e)},f.exports.hasUIComponent=function(e,t){if(void 0===e||!e||0==e.length)return!1;for(var i=0,r=e.length;ix'}).firstChild.href),e},t.exports.parseUrl=function(e){var t,i,r,o,n;o=["protocol","hostname","port","pathname","search","hash","host"],(r=""===(i=s.createEl("a",{href:e})).host&&"file:"!==i.protocol)&&((t=s.createEl("div")).innerHTML='',i=t.firstChild,t.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(t)),n={};for(var a=0;a/g,">").replace(/\&/g,"&").replace(/"/g,""").replace(/'/g,"'")},r.exports.toBinary=function(e){if(!window.atob)return"";for(var t=atob(e),i=t.length,r=new Uint8Array(i),o=0;o>>0).toString()},r={parse:function(e,t,i){var r,o=e.trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),n=[],a=new s;a.oncue=function(e){e.id=l(e.startTime)+l(e.endTime)+l(e.text),e.text=decodeURIComponent(escape(e.text)),e.isBig=!1;var t=e.text.split("#xywh=");if(2==t.length){var i=t[1].split(",");e.x=i[0],e.y=i[1],e.w=i[2],e.h=i[3],e.isBig=!0}0/gi,"\n")}(e);tthis._uploadCount||"4001"==e.e||"2002"==e.e)&&this._report()},r.prototype.dispose=function(){this._report(),this._disposed=!0},r.prototype._start=function(){this._disposed=!1;this._retry=0,this._report()},r.prototype._report=function(t){if(this._tickHandler&&(clearTimeout(this._tickHandler),this._tickHandler=null),t||(t=this._logs.splice(0,this._uploadCount)),0this._uploadCount?e._report():this._tickHandler=setTimeout(function(){e._report()},1e3*this._uploadDuration)}},t.exports=r},{"../lib/io":24,"../lib/storage":30}],38:[function(e,t,i){var r=e("../lib/oo"),u=e("../lib/object"),v=e("../lib/data"),c=e("../lib/io"),m=e("../lib/ua"),S=e("../config"),o=e("../player/base/event/eventtype"),T=e("./util"),b=e("./log"),n=0,d={STARTFETCHDATA:1003,COMPLETEFETCHDATA:1004,PREPARE:1101,PREPAREEND:1102,STARTPLAY:2e3,PLAY:2001,STOP:2002,PAUSE:2003,SEEK:2004,FULLSREEM:2005,QUITFULLSCREEM:2006,RESOLUTION:2007,RESOLUTION_DONE:2008,RECOVER:2010,SEEK_END:2011,FETCHEDIP:2020,CDNDETECT:2021,DETECT:2022,UNDERLOAD:3002,LOADED:3001,HEARTBEAT:9001,ERROR:4001,ERRORRETRY:4002,SNAPSHOT:2027,ROTATE:2028,IMAGE:2029,THUMBNAILSTART:2031,THUMBNAILCOMPLETE:2032,CCSTART:2033,CCCOMPLETE:2034,AUDIOTRACKSTART:2033,AUDIOTRACKCOMPLETE:2034},a=r.extend({init:function(e,t,i){void 0===i&&(i=!0),this.trackLog=i,this.player=e,this.requestId="",this.sessionId=v.guid(),this.playId=0,this.firstPlay=!0,this.osName=m.os.name,this.osVersion=m.os.version||"",this.exName=m.browser.name,this.exVersion=m.browser.version||"",this._logService="",t.logBatched&&(this._logService=new b(S));var r=this.player.getOptions(),o=t.from?t.from:"",n=(r.isLive,r.isLive?"live":"vod"),a="pc";m.IS_IPAD?a="pad":m.os.phone&&(a="phone");var s=this.encodeURL(m.getReferer()),l=m.getHref(),u=this.encodeURL(l),c="";l&&(c=m.getHost(l));var d=S.h5Version,p=T.getUuid(),h=r.source?this.encodeURL(r.source):"",f=m.getHost(r.source),_=r.userId?r.userId+"":"0",g=this.sessionId,y=(new Date).getTime();this._userNetInfo={cdnIp:"",localIp:""};this.opt={APIVersion:"0.6.0",t:y,ll:"info",lv:"1.0",pd:"player",md:"saas_player",ui:"saas_player",sm:"play",os:this.osName,ov:this.osVersion,et:this.exName,ev:this.exVersion,uat:m.USER_AGENT,hn:"0.0.0.0",bi:o,ri:g,e:"0",args:"0",vt:n,tt:a,dm:"h5",av:d,uuid:p,vu:h,vd:f,ua:_,dn:"custom",cdn_ip:"0.0.0.0",app_n:c,r:s,pu:u},this.bindEvent()},updateVideoInfo:function(e){var t=e.from?e.from:"";this.opt.bi=t+"",this.updateSourceInfo()},updateSourceInfo:function(){var e=this.player.getOptions();if(e){var t=e.source?this.encodeURL(e.source):"",i=m.getHost(e.source);this.opt.vu=t,this.opt.vd=i}},replay:function(){this.reset(),this.player.trigger(o.Video.LoadStart),this.player.trigger(o.Video.LoadedMetadata),this.player.trigger(o.Video.LoadedData)},bindEvent:function(){var t=this;this.player.on(o.Player.Init,function(){t._onPlayerInit()}),this.player.on(o.Video.LoadStart,function(){t._onPlayerloadstart()}),this.player.on(o.Video.LoadedMetadata,function(){t._onPlayerLoadMetadata()}),this.player.on(o.Video.LoadedData,function(){t._onPlayerLoaddata()}),this.player.on(o.Video.Play,function(){t._onPlayerPlay()}),this.player.on(o.Video.Playing,function(){t._onPlayerReady()}),this.player.on(o.Video.Ended,function(){t._onPlayerFinish()}),this.player.on(o.Video.Pause,function(){t._onPlayerPause()}),this.player.on(o.Private.SeekStart,function(e){t._onPlayerSeekStart(e)}),this.player.on(o.Private.EndStart,function(e){t._seekEndData=e.paramData}),this.player.on(o.Player.Waiting,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._waitingDelayLoadingShowHandle=setTimeout(function(){t._onPlayerLoaded()},1e3*t.player._options.delayLoadingShow)}),this.player.on(o.Video.CanPlayThrough,function(){}),this.player.on(o.Video.CanPlay,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._onPlayerUnderload(),t._onPlayerCanplay()}),this.player.on(o.Video.TimeUpdate,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._seekEndData&&t.seeking&&t._onPlayerSeekEnd()}),this.player.on(o.Player.Error,function(){t._onPlayerError()}),this.player.on(o.Player.RequestFullScreen,function(){t._onFullscreenChange(1)}),this.player.on(o.Player.CancelFullScreen,function(){t._onFullscreenChange(0)}),this.player.on(o.Private.PREPARE,function(e){t._prepareTime=(new Date).getTime(),t._log("PREPARE",{dn:e.paramData})}),this.player.on(o.Player.Snapshoted,function(){t._log("SNAPSHOT")}),setInterval(function(){if(t.player.getCurrentTime()){var e=Math.floor(1e3*t.player.getCurrentTime());t.player.paused()||30<=++n&&(t._log("HEARTBEAT",{vt:e,interval:1e3*n}),n=0)}},1e3)},removeEvent:function(){this.player.off("init"),this.player.off("ready"),this.player.off("ended"),this.player.off("play"),this.player.off("pause"),this.player.off("seekStart"),this.player.off("seekEnd"),this.player.off("canplaythrough"),this.player.off("playing"),this.player.off("timeupdate"),this.player.off("error"),this.player.off("fullscreenchange"),this.player.off(o.Private.PREPARE),this._logService&&this._logService.dispose()},reset:function(){this.startTimePlay=0,this.buffer_flag=0,this.firstPlay=!1,this.playId=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},encodeURL:function(e){if(!e)return"";var t=this.player.getOptions();return t&&!t.logBatched?encodeURIComponent(e):e},_onFullscreenChange:function(e){e?this._log("FULLSREEM",{}):this._log("QUITFULLSCREEM",{})},_onPlayerloadstart:function(){this.loadstartTime=(new Date).getTime(),this.playId=v.guid(),!this.loadstarted&&this.player._isPreload()&&(this.loadstarted=1,this._log("STARTPLAY",{vt:(new Date).getTime()}))},_onPlayerLoadMetadata:function(){this.loadMetaDataCost=(new Date).getTime()-this.loadstartTime},_onPlayerLoaddata:function(){if(!this._LoadedData&&!this.buffer_flag){var e=0,t=0;this.player.tag&&(e=this.player.tag.videoWidth,t=this.player.tag.videoHeight),this._log("PREPAREEND",{tc:(new Date).getTime()-this._prepareTime,cc:(new Date).getTime()-this.loadstartTime,md:this.loadMetaDataCost,mi:JSON.stringify({type:"video",definition:e+"*"+t})})}this._LoadedData=1},_onPlayerCanplay:function(){this._canPlay=1,this._reportPlay()},_onPlayerInit:function(){this.buffer_flag=0,this.pause_flag=0,this.startTimePlay=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},_onPlayerReady:function(){this.startTimePlay||(this.startTimePlay=(new Date).getTime())},_onPlayerFinish:function(){this._log("STOP",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.reset()},_reportPlay:function(){return!(this.buffer_flag||!this._LoadedData||!this.playstartTime)&&(this.first_play_time=(new Date).getTime(),this._log("PLAY",{dsm:"fix",tc:this.first_play_time-this.loadstartTime,fc:this.first_play_time-this.playstartTime}),this.buffer_flag=1,!0)},_onPlayerPlay:function(){this.playstartTime=(new Date).getTime(),0==this.playId&&(this.playId=v.guid()),this.firstPlay||0!=this.pause_flag||this.seeking||(this.sessionId=v.guid()),this.player._isPreload()||(this._log("STARTPLAY",{vt:(new Date).getTime()}),this.loadstartTime=(new Date).getTime()),this._canPlay&&this._reportPlay()||this.buffer_flag&&this.pause_flag&&(this.pause_flag=0,this.pauseEndTime=(new Date).getTime(),this._log("RECOVER",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.pauseEndTime-this.pauseTime}))},_onPlayerPause:function(){this.buffer_flag&&this.startTimePlay&&(this.seeking||(this.pause_flag=1,this.pauseTime=(new Date).getTime(),this._log("PAUSE",{vt:Math.floor(1e3*this.player.getCurrentTime())})))},_onPlayerSeekStart:function(e){this.seekStartTime=e.paramData.fromTime,this.seeking=!0,this.startTimePlay=0,this.seekStartStamp=(new Date).getTime()},_onPlayerSeekEnd:function(){this.seekEndStamp=(new Date).getTime(),this._log("SEEK",{drag_from_timestamp:Math.floor(1e3*this.seekStartTime),drag_to_timestamp:Math.floor(1e3*this._seekEndData.toTime)}),this._log("SEEK_END",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.seekEndStamp-this.seekStartStamp}),this.seeking=!1,this._seekEndData=null},_onPlayerLoaded:function(){this.buffer_flag&&this.startTimePlay&&(this.stucking||this.seeking||(this.stuckStartTime=(new Date).getTime(),this.stuckStartTime-this.startTimePlay<=1e3||(this.stucking=!0,this._log("UNDERLOAD",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.stuckStartTime=(new Date).getTime())))},_onPlayerUnderload:function(){if((this.buffer_flag||!this.player._options||!this.player._options.autoplay)&&this.stucking&&!this.seeking){var e=Math.floor(1e3*this.player.getCurrentTime()),t=this.stuckStartTime||(new Date).getTime(),i=Math.floor((new Date).getTime()-t);0t._liveRetryCount?t._reloadAndPlayForM3u8():(t._liveRetryCount=0,t.trigger(c.Player.LiveStreamStop),t._liveErrorHandle=setTimeout(function(){var e={mediaId:"ISLIVE",error_code:r,error_msg:p.get("Error_Play_Text")+"\uff0c"+p.get("Error_Retry_Text")};t.logError(e),t.trigger("error",e)}));else if(t._reloadForVod());else{var a=p.get("Error_Play_Text"),s=!1;if(i<4){if(3==i&&t._firstDecodeError){var l=t.getCurrentTime()+1;return t._loadByUrlInner(t._options.source,l,!0),void(t._firstDecodeError=!1)}a=d.VideoErrorCodeText[i]}else t._eventState==d.SUSPEND?(a=p.get("Error_Load_Abort_Text"),r=d.ErrorCode.RequestDataError):t._eventState==d.LOAD_START?(a=p.get("Error_Network_Text"),0"+(100*e).toFixed()+"%";this._player.trigger(T.Private.Info_Show,{text:i,duration:1e3,align:"lb"})},P.prototype._setInnerVolume=function(e){this.tag.volume=e,this.trigger(T.Private.VolumnChanged,e)},P.prototype.hideProgress=function(){this.trigger(T.Private.HideProgress)},P.prototype.cancelHideProgress=function(){this.trigger(T.Private.CancelHideProgress)},P.prototype.setPlayerSize=function(e,t){this._el.style.width=e,this._el.style.height=t},P.prototype.getBuffered=function(){return this.tag.buffered},P.prototype.setRotate=function(e){this.tag&&(this._rotate=e,this._setTransform(),this.log("ROTATE",{rotation:e}))},P.prototype.getRotate=function(e){return void 0===this._rotate?0:this._rotate},P.prototype.setImage=function(e){this.tag&&(this._image=e,this._setTransform(),this.log("IMAGE",{mirror:"horizon"==e?2:1,text:e}))},P.prototype.getImage=function(){return this._image},P.prototype.cancelImage=function(){this.tag&&(this._image="",this._setTransform(),this.log("IMAGE",{mirror:0}))},P.prototype.setCover=function(e){var t=document.querySelector("#"+this.id()+" .prism-cover");t&&e&&(t.style.backgroundImage="url("+e+")",this._options.cover=e,this.trigger(T.Private.Cover_Show))},P.prototype._setTransform=function(){this._transformProp||(this._transformProp=o.getTransformName(this.tag));var e=" translate(-50%, -50%)";this._rotate&&(e+=" rotate("+this._rotate+"deg)"),this._image&&("vertical"==this._image?e+=" scaleY(-1)":"horizon"==this._image&&(e+=" scaleX(-1)")),this.tag.style[this._transformProp]=e},P.prototype._startPlay=function(){this.tag.paused&&this.tag.play()},P.prototype._initPlayBehavior=function(e,t){if(this._checkSupportVideoType())return!1;if(p.validateSource(t))return void 0===e&&(e=!1),this._created||(this._created=!0,this.trigger(T.Private.Created)),this.loaded||this.trigger(T.Player.Init),this._options.autoplay||this._options._autoplay||this._options.preload||e?(this._options._preload=!0,this._initLoad(t),(this._options.autoplay||this._options._autoplay)&&this._startPlay()):this.trigger(T.Private.Play_Btn_Show),!0;var i={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return i.display_msg=_.get("Error_Invalidate_Source"),this.trigger(T.Player.Error,i),!1},P.prototype._isPreload=function(){return this._options.autoplay||this._options.preload||this._options._preload},P.prototype._initLoad=function(e){this.getMetaData(),e&&(this._isPreload()&&!r.IS_MOBILE?this.trigger(T.Private.H5_Loading_Show):(this.trigger(T.Private.H5_Loading_Hide),this.trigger(T.Private.Play_Btn_Show)),this.tag.setAttribute("src",e),this.loaded=!0)},P.prototype._clearLiveErrorHandle=function(){this._liveErrorHandle&&(clearTimeout(this._liveErrorHandle),this._liveErrorHandle=null)},P.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(T.Player.OnM3u8Retry);var e=this._options,t=e.liveRetryInterval+e.liveRetryStep*this._liveRetryCount;d.sleep(1e3*t),this._liveRetryCount++,this.tag.load(this._options.source),this.tag.play()},P.prototype._checkSupportVideoType=function(){if(!this.tag.canPlayType||!this._options.source||!r.IS_MOBILE)return"";var e=this._options.source,t="";if(0=this._options.playConfig.PreviewTime},P.prototype.isPreview=function(){var e=this._options.playConfig.PreviewTime,t=this._vodDuration||this.tag.duration;return 0'},_getPlayer:function(e){return-1!=navigator.appName.indexOf("Microsoft")?document.getElementById(e):document[e]},_getLowerQualityLevel:function(){var e=this._getVideoUrls();if(!e)return"";var t=e.Urls,i=e.index;return t&&0==t.length||-1==i?"":0u._liveRetryCount){0==u._liveRetryCount&&u.trigger(_.Player.OnM3u8Retry);var l=s.liveRetryInterval+s.liveRetryStep*u._liveRetryCount;u._liveRetryCount++,h.sleep(1e3*l),u._loadByUrlInner(s.source)}else u._liveErrorHandle&&clearTimeout(u._liveErrorHandle),u.trigger(_.Player.LiveStreamStop),u._liveErrorHandle=setTimeout(a,500)}else{if(u._reloadForVod())return;a()}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],72:[function(e,t,i){var r=e("../base/player"),o=e("./flvinjector"),n=r.extend({init:function(e,t){o.inject(this,n,r,t,function(e){}),t._native=!1,r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./flvinjector":71}],73:[function(e,t,i){var c=e("../../lib/io"),d=e("../../config"),p=e("../../lib/constants"),h=e("../../lib/util"),f=e("../../lib/playerutil"),_=(e("../../lib/dom"),e("../../lib/ua")),g=e("../../lang/index"),y=e("../base/event/eventtype");e("../base/player");t.exports.inject=function(e,t,i,r,n,o){var a=r.source,s=r.useHlsPluginForSafari,l=r.useHlsPlugOnMobile;if(n||o||function(e,t,i,r){return!(e._hls||!f.isHls(t)||!(!f.canPlayHls()||f.isSafariUsedHlsPlugin(i)||r&&f.isUsedHlsPluginOnMobile()))}(e,a,s,l)){e._Type=t,e._superType=i,e._superPt=i.prototype,e._disposed=!1,t.prototype._checkHlsReady=function(){if(null==e._hls)throw new Error("please invoke this method after ready event")},e._isHls=!0,e._hls=null,e._isLoadedHls=!1,e._stopLoadAsPaused=!0,t.prototype.play=function(e){this._checkHlsReady(),this._isManualPlay=e||!1;if(this.trigger(y.Private.Cover_Hide),this._options.autoplay||this._options.preload||this._loadSourced||(this._loadSourced=!0,this._options._autoplay=!0,this._hls.loadSource(this._options.source)),this.tag.ended||this._ended)this.replay();else if(this.tag.paused&&(this.tag.play(),this._stopLoadAsPaused)){var t=this.getCurrentTime();this._hls.startLoad(t)}return this},t.prototype.replay=function(){return this._monitor&&this._monitor.replay(),this._hls.startLoad(0),this.tag.play(),this},t.prototype.pause=function(e){return this.tag&&(this._checkHlsReady(),this.tag.pause(),this._stopLoadAsPaused&&this._hls.stopLoad()),this._isManualPause=e||!1,this},t.prototype.stop=function(){return this._checkHlsReady(),this.tag.setAttribute("src",null),this._hls.stopLoad(),this},t.prototype.seek=function(e){this._checkHlsReady();try{this._superPt.seek.call(this,e),this.tag.paused&&this._stopLoadAsPaused&&this._hls.startLoad(e)}catch(e){console.log(e)}return this},t.prototype.getProgramDateTime=function(){if(this._checkHlsReady(),-1==this._hls.currentLevel)return"";var e=this._hls.currentLevel,t=this._hls.levels[e].details;if(t){var i=t.programDateTime;if(console.log("ProgramDateTime="+i),i)return new Date(i).valueOf()}return 0},t.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(y.Player.OnM3u8Retry),this._liveRetryCount++},t.prototype._switchLevel=function(e){this.trigger(y.Player.LevelSwitch);for(var t=this._hls.levels,i=0;il._liveRetryCount){0==l._liveRetryCount&&l.trigger(y.Player.OnM3u8Retry);var s=a.liveRetryInterval+a.liveRetryStep*l._liveRetryCount;l._liveRetryCount++,h.sleep(1e3*s),o&&l._loadByUrlInner(l._options.source,0,!0)}else l._liveErrorHandle&&clearTimeout(l._liveErrorHandle),l.trigger(y.Player.LiveStreamStop),l._liveErrorHandle=setTimeout(n,500)}else{if(l._reloadForVod())return;n()}}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],74:[function(e,t,i){var r=e("../base/player"),o=e("./hlsinjector"),n=r.extend({init:function(e,t){t._native=!1,o.inject(this,n,r,t),r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./hlsinjector":73}],75:[function(e,t,i){var r=e("../../lib/constants"),o=e("../../lib/oo").extend({init:function(e){this.player=e,this.tickhandle=null}});o.prototype.tick=function(e,t){var i=this;this.tickhandle=setTimeout(function(){i.player&&i.player.trigger(r.AuthKeyExpiredEvent),t&&t()},1e3*e)},o.prototype.clearTick=function(e){this.tickhandle&&clearTimeout(this.tickhandle)},t.exports=o},{"../../lib/constants":15,"../../lib/oo":27}],76:[function(e,t,i){var l=e("../../lib/io"),u=(e("../../lib/ua"),e("../../lib/bufferbase64")),c=e("../../lib/constants"),d=e("./signature"),p=e("./util"),h=e("../../lang/index"),f=function(e,r,o){var t=d.randomUUID(),i="https://mts."+e.domainRegion+".aliyuncs.com/?",n={AccessKeyId:e.accessId,Action:"GetLicense",MediaId:e.vid,LicenseUrl:i,data:e.data,SecurityToken:e.stsToken,Format:"JSON",Type:e.encryptionType,Version:"2014-06-18",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",SignatureNonce:t};e.header&&(n.Header=e.header);var a=i+("Signature="+d.AliyunEncodeURI(d.makeChangeSiga(n,e.accessSecret,"POST"))),s=d.makeUTF8sort(n,"=","&");l.post(a,s,function(e){if(e){var t=JSON.parse(e);if(r){var i=t.License;r(i)}}else o&&o(p.createError("MPS\u83b7\u53d6License\u5931\u8d25"))},function(e){if(o){var t={Code:"",Message:h.get("Error_MTS_Fetch_Urls_Text")};try{t=JSON.parse(e)}catch(e){}o({Code:c.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId||""})}})};t.exports.requestLicenseKey=function(e){var l=e;return l._options.vid&&(l.__vid=l._options.vid),function(e,i){var t=l._options,r=l._getDRMEncryptItem();if(r){var o={vid:l.__vid,accessId:t.accId,accessSecret:t.accSecret,stsToken:t.stsToken,domainRegion:t.domainRegion,authInfo:t.authInfo,encryptionType:r.encryptionType};if(r.encryptionType==c.EncryptionType.Widevine)o.data=u.encode(e.message);else if(r.encryptionType==c.EncryptionType.PlayReady){var n=u.unpackPlayReady(e.message);o.data=n.changange,n.header&&(o.header=JSON.stringify(n.header))}console.log(o.data);var a=l.__licenseKeys,s=l.__vid+r.Url;a&&a[s],f(o,function(e){l.__licenseKeys||(l.__licenseKeys={}),10e&&(this.loadByUrl(this._urls[e].Url,this.getCurrentTime()),this._currentPlayIndex=e,this.trigger(y.Private.QualityChange,t||_.get("Quality_Change_Fail_Switch_Text")))},v.prototype._getLowerQualityLevel=function(){if(0==this._urls.length||-1==this._currentPlayIndex)return"";if("asc"==this.options().qualitySort){if(0"+n,r.trigger("error",l),console.log("PrismPlayer Error: "+i+"! error_msg :"+n+";")},t.exports=v},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/cookie":16,"../../lib/event":19,"../../lib/io":24,"../../lib/playerutil":29,"../audio/audioplayer":41,"../base/event/eventtype":43,"../base/player":62,"../drm/drminjector":68,"../flv/flvinjector":71,"../hls/hlsinjector":73,"./authkeyexpiredhandle":75,"./signature":80}],80:[function(e,c,t){var r=e("crypto-js/hmac-sha1"),o=e("crypto-js/enc-base64"),i=e("crypto-js/enc-utf8");c.exports.randomUUID=function(){for(var e=[],t="0123456789abcdef",i=0;i<36;i++)e[i]=t.substr(Math.floor(16*Math.random()),1);return e[14]="4",e[19]=t.substr(3&e[19]|8,1),e[8]=e[13]=e[18]=e[23]="-",e.join("")},c.exports.returnUTCDate=function(){var e=new Date,t=e.getUTCFullYear(),i=e.getUTCMonth(),r=e.getUTCDate(),o=e.getUTCHours(),n=e.getUTCMinutes(),a=e.getUTCSeconds(),s=e.getUTCMilliseconds();return Date.UTC(t,i,r,o,n,a,s)},c.exports.AliyunEncodeURI=function(e){var t=encodeURIComponent(e);return t=(t=(t=t.replace("+","%2B")).replace("*","%2A")).replace("%7E","~")},c.exports.makesort=function(e,t,i){if(!e)throw new Error("PrismPlayer Error: vid should not be null!");var r=[];for(var o in e)r.push(o);var n=r.sort(),a="",s=n.length;for(o=0;o=this.liveTimeRange.end)},r.prototype.switchToLive=function(){var e=that._player._options.recreatePlayer;e&&this._isLiveShift&&(this._player.dispose(),setTimeout(function(){e()},1e3),this._isLiveShift=!1)},r.prototype.getBaseTime=function(){this.liveShiftStartDisplay;return-1==this.seekTime?n.parseTime(this.currentTimeDisplay):n.parseTime(this.liveShiftStartDisplay)+this.seekTime},r.prototype.getSourceUrl=function(e,t){var i=this._originalPlayUrl;return this.availableLiveShiftTime<=e?i:(this._isLiveShift=!0,(e=parseInt(e))<=5&&(e=5),(i=this._switchLiveShiftPlayer(t))&&(i=i.replace("lhs_offset_unix_s_0","z")),i=-1==i.indexOf("?")?i+"?lhs_offset_unix_s_0="+e:i+"&lhs_offset_unix_s_0="+e)},r.prototype._switchLiveShiftPlayer=function(e){var t=this._originalPlayUrl,i=this._player._options.liveShiftSource,r=this._player._options.source;if(a.isHls(r))t=r;else if(a.isFlv(t)&&i&&a.isHls(i)){this._player._flv&&this._player._destroyFlv();var o=this._player._superType,n=this._player._Type;return this._player._options._autoplay=!0,l.inject(this._player,n,o,this._player._options,"",!0),i}return t},r.prototype.getTimeline=function(i,r){if(this._player.trigger(c.Private.LiveShiftQueryCompleted),!this._liveShiftUrl)return p(this,(new Date).valueOf()/1e3),void(i&&i());var o=this;this.queryLiveShift(this._liveShiftUrl,function(e){if(e){var t=e;0==t.retCode?(p(o,t.content.current),i&&i()):r({Code:u.ErrorCode.ServerAPIError,Message:t.retCode+"|"+t.description+"|"+t.content})}else console.log("\u83b7\u53d6\u76f4\u64ad\u65f6\u79fb\u6570\u636e\u5931\u8d25")},function(e){if(r&&e){var t={};if(e){if(-1"+_.get("Retry")+""+_.get("Detection_Text")+"

        code\uff1a

        vid:

        uuid:

        requestId:

        "+_.get("Play_DateTime")+"\uff1a

        ",e},bindEvent:function(){var i=this;i._player.on(a.Private.Error_Show,function(e){var t=null;i._player.getMonitorInfo&&(t=i._player.getMonitorInfo()),i._show(e,t)}),i._player.on(a.Private.Error_Hide,function(){i._hide()});var e=document.querySelector("#"+i.id()+" .prism-button-refresh");if(o.on(e,"click",function(){location.reload(!0)}),n.IS_MOBILE){e=document.querySelector("#"+i.id()+" .prism-detect-info");f.addClass(e,"prism-width90")}var t=document.querySelector("#"+i.id()+" .prism-button-retry");o.on(t,"click",function(){var e=i._player.getCurrentTime(),t=i._player._options.source;i._player._setDefaultCC=!0,i._player._loadByUrlInner(t,e,!0)})},_show:function(e,t){var i=e.paramData,r="",o="";i.mediaId&&(r=i.mediaId);var n=document.querySelector("#"+this.id()+" .prism-button-orange");if(n){if(t&&this._player._options.diagnosisButtonVisible){t.vu?o=decodeURIComponent(t.vu):f.css(n,"display","none");var a="//player.alicdn.com/detection.html?from=h5&vid="+r+"&source="+(o?encodeURIComponent(o):"")+"&uuid="+t.uuid+"&lang="+_.getCurrentLanguage();n&&(n.href=a)}else f.css(n,"display","none");var s=i.display_msg||i.error_msg;document.querySelector("#"+this.id()+" .prism-error-content p").innerHTML=s,document.querySelector("#"+this.id()+" .errorCode .info-content").innerText=i.error_code;var l=document.querySelector("#"+this.id()+" .vid");if(i.mediaId?(f.css(l,"display","block"),document.querySelector("#"+this.id()+" .vid .info-content").innerText=i.mediaId):f.css(l,"display","none"),i.uuid)document.querySelector("#"+this.id()+" .uuid .info-content").innerText=i.uuid;else{var u=document.querySelector("#"+this.id()+" .uuid");f.css(u,"display","none")}if(i.requestId)document.querySelector("#"+this.id()+" .requestId .info-content").innerText=i.requestId;else{var c=document.querySelector("#"+this.id()+" .requestId");f.css(c,"display","none")}document.querySelector("#"+this.id()+" .dateTime .info-content").innerText=h.formatDate(new Date,"yyyy-MM-dd HH:mm:ss");var d=document.querySelector("#"+this.id());f.css(d,"display","block");var p=this;p.playHideHandler&&clearTimeout(p.playHideHandler),p.playHideHandler=setTimeout(function(){p._player.trigger("play_btn_hide")})}},_hide:function(){var e=document.querySelector("#"+this.id());f.css(e,"display","none")},disposeUI:function(){this.playHideHandler&&(clearTimeout(this.playHideHandler),this.playHideHandler=null)}});t.exports=s},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],100:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=(e("../../lib/event"),e("../../lib/ua")),a=e("../../lang/index"),s=e("./util"),l=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-fullscreen-btn")},bindEvent:function(){var e=this;this._player.on(o.Player.RequestFullScreen,function(){n.IS_IOS||e.addClass("fullscreen")}),this._player.on(o.Player.CancelFullScreen,function(){e.removeClass("fullscreen")}),s.registerTooltipEvent.call(this,this.el(),function(){return e._player.fullscreenService.getIsFullScreen()?a.get("ExistFullScreen"):a.get("Fullscreen")}),this.on("click",function(){e._player.fullscreenService.getIsFullScreen()?e._player.fullscreenService.cancelFullScreen():e._player.fullscreenService.requestFullScreen(),e._player.trigger(o.Private.MarkerTextHide)})}});t.exports=l},{"../../lang/index":11,"../../lib/event":19,"../../lib/ua":31,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],101:[function(e,t,i){"use strict";var r=e("../component"),o=e("../../lib/dom"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-hide")},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
        ',e},_loading_hide:function(e){var t=document.querySelector("#"+this.id()+" .prism-loading");t&&(o.removeClass(t,"prism-loading"),o.addClass(t,"prism-hide"))},_loading_show:function(e){var t=document.querySelector("#"+this.id()+" .prism-hide");t&&(o.removeClass(t,"prism-hide"),o.addClass(t,"prism-loading"))},bindEvent:function(){this._player.on(n.Private.H5_Loading_Show,this._loading_show),this._player.on(n.Private.H5_Loading_Hide,this._loading_hide)}});t.exports=a},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],102:[function(e,t,i){var r=e("../component"),o=(e("../../lib/util"),e("../../lib/dom")),n=(e("../../lib/event"),e("../../lib/ua"),e("../../lang/index"),e("../../player/base/event/eventtype")),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-info-display",this.addClass(this.className)},createEl:function(){return r.prototype.createEl.call(this,"p")},bindEvent:function(){var r=this;r._player.on(n.Private.Info_Show,function(e){var t=document.querySelector("#"+r.id()),i=e.paramData;i&&(void 0!==i.text&&i.text?(t.innerHTML=i.text,void 0!==i.duration&&i.duration&&(r.handler&&clearTimeout(r.handler),r.handler=setTimeout(function(){o.css(t,"display","none")},i.duration)),"lb"==i.align?(o.addClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")):"tc"==i.align?(o.addClass(t,"prism-info-top-center"),o.removeClass(t,"prism-info-left-bottom")):(o.removeClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")),i.isBlack?o.addClass(t,"prism-info-black"):o.removeClass(t,"prism-info-black")):t.innerHTML=i,o.css(t,"display","block"))}),r._player.on(n.Private.Info_Hide,function(e){var t=document.querySelector("#"+r.id());o.css(t,"display","none")})},disposeUI:function(){this.handler&&(clearTimeout(this.handler),this.handler=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],103:[function(e,t,i){var r=e("../component"),o=e("./util"),n=(e("../../lib/util"),e("../../lib/dom")),a=e("../../lib/event"),s=e("../../lib/playerUtil"),l=e("../../lang/index"),u=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-live-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="LIVE",s.isLiveShift(this._player._options)&&n.addClass(e,"live-shift-display"),e},bindEvent:function(){var e=document.querySelector("#"+this.id()),t=this;s.isLiveShift(this._player._options)&&(a.on(e,"click",function(){t._player._liveshiftService.switchToLive()}),o.registerTooltipEvent.call(this,this.el(),l.get("SwitchToLive")))}});t.exports=u},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/playerUtil":28,"../../lib/util":33,"../component":94,"./util":121}],104:[function(e,t,i){var r=e("../component"),o=(e("../../lib/dom"),e("../../lib/event"),e("../../player/base/event/eventtype")),n=e("../../player/base/plugin/status"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-animation")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t._player._isManualPlay&&(t.removeClass("prism-pause-animation"),t.addClass("prism-play-animation"),t.removeClass("play-apply-animation"),t.playHandler&&clearTimeout(t.playHandler),t.playHandler=setTimeout(function(){t.addClass("play-apply-animation")}))}),this._player.on(o.Player.Pause,function(){var e=t._player._status;e!=n.ended&&e!=n.error&&t._player._isManualPause&&(t.removeClass("prism-play-animation"),t.addClass("prism-pause-animation"),t.removeClass("play-apply-animation"),t.pauseHandler&&clearTimeout(t.pauseHandler),t.pauseHandler=setTimeout(function(){t.addClass("play-apply-animation")}))})},disposeUI:function(){this.playHandler&&(clearTimeout(this.playHandler),this.playHandler=null),this.pauseHandler&&(clearTimeout(this.pauseHandler),this.pauseHandler=null)}});t.exports=a},{"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../../player/base/plugin/status":66,"../component":94}],105:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=e("./util"),a=e("../../lang/index"),s=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-play-btn")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t.addClass("playing")}),this._player.on(o.Player.Pause,function(){t.removeClass("playing")}),this.on(o.Private.PlayClick,function(){if(t._player.paused()){var e=t._player.getCurrentTime();(t._player.getDuration()<=e||t._player._ended||t._player.exceedPreviewTime(e))&&t._player.seek(0),t._player.play(!0),t.addClass("playing")}else t._player.pause(!0),t.removeClass("playing");t._player.trigger(o.Private.MarkerTextHide)}),n.registerTooltipEvent.call(this,this.el(),function(){return t._player.paused()?a.get("Play"):a.get("Pause")})}});t.exports=s},{"../../lang/index":11,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],106:[function(e,t,i){var r=e("../component"),a=e("../../lib/dom"),n=(e("../../lib/constants"),e("../../lib/event")),s=e("../../lib/ua"),l=e("../../lib/function"),o=e("../../lang/index"),u=e("../../config"),c=e("../../lib/util"),d=e("../../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-progress",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='

        ',e},bindEvent:function(){var t=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.timeNode=document.querySelector("#"+this._player._options.id+" .prism-progress-time");var i=document.querySelector("#"+this.id()),e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),r="https://"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1this._player.getDuration()&&(r=this._player.getDuration()),r},_getDistance:function(e){for(var t=this.el().offsetLeft,i=this.el();i=i.offsetParent;){var r=a.getTranslateX(i);t+=i.offsetLeft+r}var o=e.touches?e.touches[0].pageX:e.pageX;return Math.abs(o-t)},_onMouseClick:function(e){var t=this,i=t._getSeconds(e);if(t._canSeekable(i)){t._player.exceedPreviewTime(i)&&(i=t._player.getPreviewTime()),t._updateCursorPosition(i);this._mouseClickTimeHandle&&clearTimeout(this._mouseClickTimeHandle),this._mouseClickTimeHandle=setTimeout(function(){t._player._seeking=!0,t._player.trigger(d.Private.SeekStart,{fromTime:t._player.getCurrentTime()}),t._player.seek(i),t._player.trigger(d.Private.EndStart,{toTime:i}),t._mouseClickTimeHandle=null,t._inWaitingSeek=!1},300),this._inWaitingSeek=!0}else t._player.trigger(d.Private.Info_Show,{text:o.get("Can_Not_Seekable"),duration:2e3})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._player.getCurrentTime()}),n.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),n.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),n.on(this._player.tag,"mouseup",function(e){t._onPlayerMouseUp(e)}),n.on(this._player.tag,"touchend",function(e){t._onPlayerMouseUp(e)}),n.on(this.controlNode,"mouseup",function(e){t._onControlBarMouseUp(e)}),n.on(this.controlNode,"touchend",function(e){t._onControlBarMouseUp(e)})},_onMouseUp:function(e){this._onMouseUpIntern(e)},_onControlBarMouseUp:function(e){this._onMouseUpIntern(e)},_onPlayerMouseUp:function(e){this._onMouseUpIntern(e)},_offMouseUp:function(){n.off(this.controlNode,"mousemove"),n.off(this.controlNode,"touchmove"),n.off(this._player.tag,"mouseup"),n.off(this._player.tag,"touchend"),n.off(this.controlNode,"mouseup"),n.off(this.controlNode,"touchend")},_onMouseUpIntern:function(e){e.preventDefault(),this._offMouseUp();var t=this.playedNode.offsetWidth/this.el().offsetWidth*this._player.getDuration();this._player.getDuration();isNaN(t)||this._player.seek(t),this._player.trigger(d.Private.EndStart,{toTime:t})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._player.exceedPreviewTime(t)&&(t=this._player.getPreviewTime()),this._player.seek(t),this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._inWaitingSeek||this._player._seeking||this._progressDown||(this._updateProgressBar(this.playedNode,this._player.getCurrentTime()),this._updateCursorPosition(this._player.getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._player.getCurrentTime()}))},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){var i=this._player.getDuration();if(1!=this._player._switchSourcing&&i){var r=t/i+.005;1e?(o.css(r.el(),"right","0px"),o.css(r.el(),"left","auto")):(left-=width/2,left=left<0?0:left,o.css(r.el(),"right","auto"),o.css(r.el(),"left",left+"px"))}},30)}}),r._player.on(a.Private.MarkerTextHide,function(e){r._player.trigger(a.Player.MarkerDotOut),r._player.trigger(a.Private.LifeCycleChanged,{type:a.Player.MarkerDotOut,data:""}),r._thumbnailShowHanlde&&clearTimeout(r._thumbnailShowHanlde),o.css(r.el(),"display","none")}),n.on(r._player.tag,"click",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)}),n.on(r._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)})},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=s},{"../../lib/dom":18,"../../lib/event":19,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],108:[function(e,t,i){var r=e("./selector"),s=e("../../../lib/object"),u=(e("../../../lib/util"),e("../../../lib/cookie")),l=e("../../../lib/dom"),c=(e("../../../lib/event"),e("../../../lib/constants")),d=e("../../../lang/index"),p=e("../../../player/base/event/eventtype"),o=r.extend({init:function(e,t){this.Name=d.get("Quality"),this.Type="quality",this.Tooltip=d.get("Quality_Switch_To"),r.call(this,e,t),this._isMasterLevel=!1},showTip:function(e,t){this._player.trigger(p.Private.Info_Show,{text:e,duration:t,align:"lb"})},bindEvent:function(){this.bindCommonEvent();var s=this;this._player.on(p.Private.QualityChange,function(e){var t=s._player._urls,i=e.paramData;if(i.levelSwitch){var r=i.desc;s._autoSWitchDesc=r,s._updateText(r)}else if(0
        {value}
        ",i=t.replace(/{type}/g,"speed").replace("{value}",c.get("Speed")),r=t.replace(/{type}/g,"cc").replace("{value}",c.get("Subtitle")),o=t.replace(/{type}/g,"audio").replace("{value}",c.get("AudioTrack")),n=t.replace(/{type}/g,"quality").replace("{value}",c.get("Quality"));return e.innerHTML=i+r+o+n,e},bindEvent:function(){document.querySelector("#"+this.id()+" .prism-setting-speed .current-setting").innerText=c.get("Speed_1X_Text");var o=this,t=function(){o._player.trigger(l.Private.SettingListHide),o.isOpened=!1},i=function(e){e&&e.text&&(document.querySelector("#"+o.id()+" .prism-setting-"+e.type+" .current-setting").innerText=e.text)};this._player.on(l.Private.SettingListShow,function(e){o.isOpened=!0;e=e.paramData;i(e),r.css(o.el(),"display","block")}),this._player.on(l.Private.UpdateToSettingList,function(e){e=e.paramData;i(e)}),this._player.on(l.Private.SelectorUpdateList,function(e){e=e.paramData;i(e),o._player.trigger(l.Private.SelectorValueChange,e)}),this._player.on(l.Private.SettingListHide,function(){o.isOpened=!1,r.css(o.el(),"display","none")}),s.on(this.el(),"click",function(e){o._player.trigger(l.Private.SettingListHide);var t=e.srcElement?e.srcElement:e.target;if(t=u.findItemElementForList(t)){var i=t.getAttribute("type");o._player.trigger(l.Private.SelectorShow,{type:i})}});var e=n.IS_MOBILE?"touchleave":"mouseleave";s.on(this.el(),e,function(){t()}),s.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&t()}),s.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&t()}),this._player.on(l.Private.QualityChange,function(e){var t=e.paramData;if(t.levelSwitch){var i=document.querySelector("#"+o.id()+" .prism-setting-quality .current-setting"),r=c.get("Auto");-1
          ',e},bindEvent:function(){this.bindCommonEvent()},bindCommonEvent:function(){var n=this,e=document.querySelector("#"+n.id()+" .selector-list"),t=document.querySelector("#"+n.id()+" .header");this._player.on(u.Private.ChangeURL,function(){n._hasGeneratedList=!1}),s.on(t,"click",function(){n._player.trigger(u.Private.SelectorHide),n._player.trigger(u.Private.SettingListShow,{type:n.Type,text:n._previousSelection?n._previousSelection.text:""})}),s.on(e,"click",function(e){var t=e.srcElement?e.srcElement:e.target,i=t.key,r=t.text;if(void 0!==r){n._previousSelection&&a.removeClass(n._previousSelection,"current"),n._previousSelection=l.findliElementForSelector(t),a.addClass(n._previousSelection,"current"),n.execute&&n.execute(i);var o=n.Tooltip+""+r+"";n._player.trigger(u.Private.Info_Show,{text:o,duration:1e3,align:"lb"})}}),n._player.on(u.Private.SelectorHide,function(){i()}),n._player.on(u.Private.SelectorValueChange,function(e){var t=e.paramData;if(t){if(t.type!=n.Type)return;var i=document.querySelectorAll("#"+n.id()+" .selector-list li");if(i){var r=i.length;0==r&&(n._backupSelector=t.text);for(var o=0;ot.progressWidth?t.left-s:(a=t.left-s/2)<0?0:a,c.css(u.el(),"left",a+"px")}},30)}),u._player.on(n.Private.ThumbnailHide,function(e){u._thumbnailShowHanlde&&clearTimeout(u._thumbnailShowHanlde),c.css(u.el(),"display","none")})},_createSamllThumbnail:function(){},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],119:[function(e,t,i){var r=e("../component"),o=e("../../lib/util"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-time-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='00:00 / 00:00',e},bindEvent:function(){var i=this;this._player.on(n.Video.DurationChange,function(){var e=o.formatTime(i._player.getDisplayDuration());e?(document.querySelector("#"+i.id()+" .time-bound").style.display="inline",document.querySelector("#"+i.id()+" .duration").style.display="inline",document.querySelector("#"+i.id()+" .duration").innerText=e):(document.querySelector("#"+i.id()+" .duration").style.display="none",document.querySelector("#"+i.id()+" .time-bound").style.display="none")}),this._player.on(n.Video.TimeUpdate,function(){var e=i._player.getCurrentTime(),t=o.formatTime(e);document.querySelector("#"+i.id()+" .current-time")&&(t?(document.querySelector("#"+i.id()+" .current-time").style.display="inline",document.querySelector("#"+i.id()+" .current-time").innerText=t):document.querySelector("#"+i.id()+" .current-time").style.display="none")})}});t.exports=a},{"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],120:[function(e,t,i){var r=e("../component"),s=e("../../lib/dom"),o=e("../../player/base/event/eventtype"),n=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-tooltip",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="\u63d0\u793a\u4fe1\u606f",e},bindEvent:function(){var a=this;a._player.on(o.Private.TooltipShow,function(e){var t=document.querySelector("#"+a.id()),i=e.paramData;t.innerText=i.text,s.css(t,"display","block");var r=t.offsetWidth,o=document.querySelector("#"+a._player.id()+" .prism-controlbar");if(o){var n=o.offsetWidth;i.left+r>n?s.css(t,"left",n-r+"px"):s.css(t,"left",i.left-(r-i.width)/2+"px")}}),a._player.on(o.Private.TooltipHide,function(e){var t=document.querySelector("#"+a.id());s.css(t,"display","none")})}});t.exports=n},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],121:[function(e,t,i){var r=e("../../lib/event"),s=e("../../player/base/event/eventtype");t.exports.registerTooltipEvent=function(e,o){var n=this,a=function(){n._controlbarTooltipHandler&&(clearTimeout(n._controlbarTooltipHandler),n._controlbarTooltipHandler=null)};r.on(this.el(),"mouseover",function(e){a(),n._controlbarTooltipHandler=setTimeout(function(){n._player.trigger(s.Private.TooltipHide)},4e3);var t=n.el().offsetLeft,i=n.el().offsetWidth,r=o;"function"==typeof r&&(r=o.call(this)),n._player.trigger(s.Private.TooltipShow,{left:t,width:i,text:r})}),r.on(this.el(),"mouseout",function(){a(),n._player.trigger(s.Private.TooltipHide)})},t.exports.throttle=function(i,r){var o=Date.now();return function(){var e=arguments,t=Date.now();r<=t-o&&(i(e),o=t)}}},{"../../lib/event":19,"../../player/base/event/eventtype":43}],122:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=e("./util"),l=e("../../lang/index"),u=e("./volumecontrol"),c=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume");var i=new u(e,t);e.addChild(i,t)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
          ',e},bindEvent:function(){var i=this;this.icon=document.querySelector("#"+i.id()+" .volume-icon"),s.registerTooltipEvent.call(this,this.el(),function(){return i._player.muted()||0==i._player.getVolume()?l.get("Muted"):l.get("Volume")}),n.on(this.icon,"click",function(e){var t=i.el().offsetLeft;i._player.trigger(a.Private.SettingListHide),i._player.trigger(a.Private.SelectorHide),i._player.trigger(a.Private.VolumeVisibilityChange,t),i._player.trigger(a.Private.MarkerTextHide)});var e=document.querySelector("#"+i.id()+" .long-horizontal"),t=document.querySelector("#"+i.id()+" .short-horizontal");n.on(this.el(),"mouseover",function(){o.removeClass(e,"volume-hover-animation"),setTimeout(function(){o.addClass(e,"volume-hover-animation")}),setTimeout(function(){o.removeClass(e,"volume-hover-animation"),o.addClass(t,"volume-hover-animation"),setTimeout(function(){o.removeClass(t,"volume-hover-animation"),o.addClass(e,"volume-hover-animation")},300)},300)})}});t.exports=c},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../component":94,"./util":121,"./volumecontrol":123}],123:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=(e("./util"),e("../../lang/index"),r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume-control"),this._shown=!1},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='
          ',e},bindEvent:function(){var r=this;this.icon=document.querySelector("#"+r._player.id()+" .volume-icon"),this.control=document.querySelector("#"+r.id()),this.volumnValue=document.querySelector("#"+r.id()+" .volume-value"),this.volumnRange=document.querySelector("#"+r.id()+" .volume-range"),this.volumnCursor=document.querySelector("#"+r.id()+" .volume-cursor"),this._player.on(a.Private.VolumeVisibilityChange,function(e){var t=e.paramData;if(!r._shown&&t){var i=r._player.getVolume();r._setVolumnUI(i),o.css(r.control,"display","block"),t&&o.css(r.control,"left",t-5+"px"),r._shown=!0}else o.css(r.control,"display","none"),r._shown=!1}),n.on(this.volumnRange,"click",function(e){var t=o.getPointerPosition(r.volumnRange,e).y;t<0||1>>2]>>>24-n%4*8&255;t[r+n>>>2]|=a<<24-(r+n)%4*8}else for(n=0;n>>2]=i[n>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=c.ceil(t/4)},clone:function(){var e=r.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t,i=[],r=function(t){t=t;var i=987654321,r=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return e/=4294967296,(e+=.5)*(.5>>2]>>>24-o%4*8&255;r.push((n>>>4).toString(16)),r.push((15&n).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new d.init(i,t/2)}},a=o.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,r=[],o=0;o>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(n))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new d.init(i,t)}},s=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(a.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return a.parse(unescape(encodeURIComponent(e)))}},l=t.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new d.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=s.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,n=r/(4*o),a=(n=e?c.ceil(n):c.max((0|n)-this._minBufferSize,0))*o,s=c.min(4*a,r);if(a){for(var l=0;l>>2]>>>24-n%4*8&255)<<16|(t[n+1>>>2]>>>24-(n+1)%4*8&255)<<8|t[n+2>>>2]>>>24-(n+2)%4*8&255,s=0;s<4&&n+.75*s>>6*(3-s)&63));var l=r.charAt(64);if(l)for(;o.length%4;)o.push(l);return o.join("")},parse:function(e){var t=e.length,i=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-n%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return l.create(r,o)}(e,t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},e.enc.Base64},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],127:[function(e,t,i){var r,o;r=this,o=function(e){return e.enc.Utf8},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],128:[function(e,t,i){var r,o;r=this,o=function(e){return e.HmacSHA1},"object"==typeof i?t.exports=i=o(e("./core"),e("./sha1"),e("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)},{"./core":125,"./hmac":129,"./sha1":130}],129:[function(e,t,i){var r,o;r=this,o=function(e){var t,i,u;i=(t=e).lib.Base,u=t.enc.Utf8,t.algo.HMAC=i.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=u.parse(t));var i=e.blockSize,r=4*i;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),n=this._iKey=t.clone(),a=o.words,s=n.words,l=0;l>>31}var c=(r<<5|r>>>27)+s+d[l];c+=l<20?1518500249+(o&n|~o&a):l<40?1859775393+(o^n^a):l<60?(o&n|o&a|n&a)-1894007588:(o^n^a)-899497514,s=a,a=n,n=o<<30|o>>>2,o=r,r=c}i[0]=i[0]+r|0,i[1]=i[1]+o|0,i[2]=i[2]+n|0,i[3]=i[3]+a|0,i[4]=i[4]+s|0},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(64+r>>>9<<4)]=Math.floor(i/4294967296),t[15+(64+r>>>9<<4)]=i,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),e.SHA1},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}]},{},[6]); \ No newline at end of file diff --git a/re/geekbang/routes/list/source/analytics.js b/re/geekbang/routes/list/source/analytics.js new file mode 100644 index 0000000..c85ccc1 --- /dev/null +++ b/re/geekbang/routes/list/source/analytics.js @@ -0,0 +1,74 @@ +(function(){var k=this||self,l=function(a,b){a=a.split(".");var c=k;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b};var n=function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},p=function(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1};var q=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;var r=window,u=document,v=function(a,b){u.addEventListener?u.addEventListener(a,b,!1):u.attachEvent&&u.attachEvent("on"+a,b)};var w={},x=function(){w.TAGGING=w.TAGGING||[];w.TAGGING[1]=!0};var y=/:[0-9]+$/,A=function(a,b){b&&(b=String(b).toLowerCase());if("protocol"===b||"port"===b)a.protocol=z(a.protocol)||z(r.location.protocol);"port"===b?a.port=String(Number(a.hostname?a.port:r.location.port)||("http"==a.protocol?80:"https"==a.protocol?443:"")):"host"===b&&(a.hostname=(a.hostname||r.location.hostname).replace(y,"").toLowerCase());var c=z(a.protocol);b&&(b=String(b).toLowerCase());switch(b){case "url_no_fragment":b="";a&&a.href&&(b=a.href.indexOf("#"),b=0>b?a.href:a.href.substr(0, +b));a=b;break;case "protocol":a=c;break;case "host":a=a.hostname.replace(y,"").toLowerCase();break;case "port":a=String(Number(a.port)||("http"==c?80:"https"==c?443:""));break;case "path":a.pathname||a.hostname||x();a="/"==a.pathname.substr(0,1)?a.pathname:"/"+a.pathname;a=a.split("/");a:if(b=a[a.length-1],c=[],Array.prototype.indexOf)b=c.indexOf(b),b="number"==typeof b?b:-1;else{for(var d=0;d>2;g=(g&3)<<4|f>>4;f=(f&15)<<2|h>>6;h&=63;e||(h=64,d||(f=64));b.push(D[m],D[g],D[f],D[h])}return b.join("")},H=function(a){function b(m){for(;d>4);64!=f&&(c+=String.fromCharCode(g<<4&240|f>>2),64!=h&&(c+=String.fromCharCode(f<<6&192|h)))}};var I;function J(a,b){if(!a||b===u.location.hostname)return!1;for(var c=0;cc;c++){for(var d=c,e=0;8>e;e++)d=d&1?d>>>1^3988292384:d>>>1;b[c]=d}}I=b;b=4294967295;for(c=0;c>>8^I[(b^a.charCodeAt(c))&255];return((b^-1)>>>0).toString(36)},ba=function(a){return function(b){var c=B(r.location.href),d=c.search.replace("?","");a:{var e=d.split("&");for(var g=0;gc;++c){var d=P.exec(a);if(d){var e=d;break a}a=decodeURIComponent(a)}e=void 0}if(e&&"1"===e[1]){var g=e[2],f=e[3];a:{for(e=0;e>21:b}return b};var $c=function(a){this.w=a||[]};$c.prototype.set=function(a){this.w[a]=!0};$c.prototype.encode=function(){for(var a=[],b=0;b=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, +d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} +function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} +function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; +a.set(Ia,ua,!0)}function Hc(a){qc().expId&&a.set(Nc,qc().expId);qc().expVar&&a.set(Oc,qc().expVar);var b=P(a,Na);if(b=h(b).pending_experiments){var c=[];for(d in b)b.hasOwnProperty(d)&&b[d]&&c.push(encodeURIComponent(d)+"."+encodeURIComponent(b[d]));var d=c.join("!")}else d=void 0;d&&a.set(m,d,!0)}function cd(){if(O.navigator&&"preview"==O.navigator.loadPurpose)throw"abort";}function yd(a){var b=O.gaDevIds;ka(b)&&0!=b.length&&a.set("&did",b.join(","),!0)} +function vb(a){if(!a.get(Na))throw"abort";};var hd=function(){return Math.round(2147483647*Math.random())},Bd=function(){try{var a=new Uint32Array(1);O.crypto.getRandomValues(a);return a[0]&2147483647}catch(b){return hd()}};function Ta(a){var b=R(a,Ua);500<=b&&J(15);var c=P(a,Va);if("transaction"!=c&&"item"!=c){c=R(a,Wa);var d=(new Date).getTime(),e=R(a,Xa);0==e&&a.set(Xa,d);e=Math.round(2*(d-e)/1E3);0=c)throw"abort";a.set(Wa,--c)}a.set(Ua,++b)};var Ya=function(){this.data=new ee};Ya.prototype.get=function(a){var b=$a(a),c=this.data.get(a);b&&void 0==c&&(c=ea(b.defaultValue)?b.defaultValue():b.defaultValue);return b&&b.Z?b.Z(this,a,c):c};var P=function(a,b){a=a.get(b);return void 0==a?"":""+a},R=function(a,b){a=a.get(b);return void 0==a||""===a?0:Number(a)};Ya.prototype.Z=function(a){return(a=this.get(a))&&ea(a)?a:ua}; +Ya.prototype.set=function(a,b,c){if(a)if("object"==typeof a)for(var d in a)a.hasOwnProperty(d)&&ab(this,d,a[d],c);else ab(this,a,b,c)};var ab=function(a,b,c,d){if(void 0!=c)switch(b){case Na:wb.test(c)}var e=$a(b);e&&e.o?e.o(a,b,c,d):a.data.set(b,c,d)};var ue=new ee,ve=[],bb=function(a,b,c,d,e){this.name=a;this.F=b;this.Z=d;this.o=e;this.defaultValue=c},$a=function(a){var b=ue.get(a);if(!b)for(var c=0;c=b?!1:!0},gc=function(a){var b={};if(Ec(b)||Fc(b)){var c=b[Eb];void 0==c||Infinity==c||isNaN(c)||(0c)a[b]=void 0},Fd=function(a){return function(b){if("pageview"==b.get(Va)&&!a.I){a.I=!0;var c=aa(b),d=0a.length)J(12);else{for(var d=[],e=0;e=a&&d.push({hash:ca[0],R:e[g],O:ca})}if(0!=d.length)return 1==d.length?d[0]:Zc(b,d)||Zc(c,d)||Zc(null,d)||d[0]}function Zc(a,b){if(null==a)var c=a=1;else c=La(a),a=La(D(a,".")?a.substring(1):"."+a);for(var d=0;d=ca[0]||0>=ca[1]?"":ca.join("x");a.set(rb,c);a.set(tb,fc());a.set(ob,M.characterSet||M.charset);a.set(sb,b&&"function"===typeof b.javaEnabled&&b.javaEnabled()||!1);a.set(nb,(b&&(b.language||b.browserLanguage)||"").toLowerCase());a.data.set(ce,be("gclid",!0));a.data.set(ie,be("gclsrc",!0));a.data.set(fe, +Math.round((new Date).getTime()/1E3));if(d&&a.get(cc)&&(b=M.location.hash)){b=b.split(/[?&#]+/);d=[];for(c=0;carguments.length)){if("string"===typeof arguments[0]){var b=arguments[0];var c=[].slice.call(arguments,1)}else b=arguments[0]&&arguments[0][Va],c=arguments;b&&(c=za(me[b]||[],c),c[Va]=b,this.b.set(c,void 0,!0),this.filters.D(this.b),this.b.data.m={})}};pc.prototype.ma=function(a,b){var c=this;u(a,c,b)||(v(a,function(){u(a,c,b)}),y(String(c.get(V)),a,void 0,b,!0))};var rc=function(a){if("prerender"==M.visibilityState)return!1;a();return!0},z=function(a){if(!rc(a)){J(16);var b=!1,c=function(){if(!b&&rc(a)){b=!0;var d=c,e=M;e.removeEventListener?e.removeEventListener("visibilitychange",d,!1):e.detachEvent&&e.detachEvent("onvisibilitychange",d)}};L(M,"visibilitychange",c)}};var te=/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/,sc=function(a){if(ea(a[0]))this.u=a[0];else{var b=te.exec(a[0]);null!=b&&4==b.length&&(this.c=b[1]||"t0",this.K=b[2]||"",this.C=b[3],this.a=[].slice.call(a,1),this.K||(this.A="create"==this.C,this.i="require"==this.C,this.g="provide"==this.C,this.ba="remove"==this.C),this.i&&(3<=this.a.length?(this.X=this.a[1],this.W=this.a[2]):this.a[1]&&(qa(this.a[1])?this.X=this.a[1]:this.W=this.a[1])));b=a[1];a=a[2];if(!this.C)throw"abort";if(this.i&&(!qa(b)||""==b))throw"abort"; +if(this.g&&(!qa(b)||""==b||!ea(a)))throw"abort";if(ud(this.c)||ud(this.K))throw"abort";if(this.g&&"t0"!=this.c)throw"abort";}};function ud(a){return 0<=a.indexOf(".")||0<=a.indexOf(":")};var Yd,Zd,$d,A;Yd=new ee;$d=new ee;A=new ee;Zd={ec:45,ecommerce:46,linkid:47}; +var u=function(a,b,c){b==N||b.get(V);var d=Yd.get(a);if(!ea(d))return!1;b.plugins_=b.plugins_||new ee;if(b.plugins_.get(a))return!0;b.plugins_.set(a,new d(b,c||{}));return!0},y=function(a,b,c,d,e){if(!ea(Yd.get(b))&&!$d.get(b)){Zd.hasOwnProperty(b)&&J(Zd[b]);a=N.j(a);if(p.test(b)){J(52);if(!a)return!0;c=d||{};d={id:b,B:c.dataLayer||"dataLayer",ia:!!a.get("anonymizeIp"),sync:e,G:!1};a.get(">m")==b&&(d.G=!0);var g=String(a.get("name"));"t0"!=g&&(d.target=g);G(String(a.get("trackingId")))||(d.clientId= +String(a.get(Q)),d.ka=Number(a.get(n)),c=c.palindrome?r:q,c=(c=M.cookie.replace(/^|(; +)/g,";").match(c))?c.sort().join("").substring(1):void 0,d.la=c,d.qa=E(a.b.get(kb)||"","gclid"));c=d.B;g=(new Date).getTime();O[c]=O[c]||[];g={"gtm.start":g};e||(g.event="gtm.js");O[c].push(g);c=t(d)}!c&&Zd.hasOwnProperty(b)?(J(39),c=b+".js"):J(43);if(c){if(a){var ca=a.get(oe);qa(ca)||(ca=void 0)}c&&0<=c.indexOf("/")||(c=(ca?ca+"/34":bd(!1)+"/plugins/ua/")+c);ca=ae(c);a=ca.protocol;d=M.location.protocol;if(("https:"== +a||a==d||("http:"!=a?0:"http:"==d))&&B(ca)){if(ca=ca.url)a=(a=M.querySelector&&M.querySelector("script[nonce]")||null)?a.nonce||a.getAttribute&&a.getAttribute("nonce")||"":"",e?(e="",a&&Nd.test(a)&&(e=' nonce="'+a+'"'),f.test(ca)&&M.write("\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| +[];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; +d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0c;c++){var d=b[c].src;if(d&&0==d.indexOf(bd(!0)+ +"/analytics")){b=!0;break a}}b=!1}b&&(Ba=!0)}(O.gaplugins=O.gaplugins||{}).Linker=Dc;b=Dc.prototype;C("linker",Dc);X("decorate",b,b.ca,20);X("autoLink",b,b.S,25);C("displayfeatures",fd);C("adfeatures",fd);a=a&&a.q;ka(a)?Z.D.apply(N,a):J(50)}};N.da=function(){for(var a=N.getAll(),b=0;b",components:{App:l.a}})},218:function(e,t,n){"use strict";t.a={defaultAvatar:n(226),timeServer:"//time.geekbang.org",androidDownloadUrl:"https://time.geekbang.org/download/android/latest",iosDownloadUrl:"https://itunes.apple.com/cn/app/id1280245865",appstoreUrl:"http://a.app.qq.com/o/simple.jsp?pkgname=org.geekbang.geekTime&utm_source=website&utm_medium=geektime&utm_campaign=download&utm_content=app",errorCode:{"-10086":"请求出错,请检查网络","-1002":"系统内部错误","-1003":"未知错误","-2021":"专栏已下架,不能订阅","-2022":"该专栏不存在","-2023":"您已订阅该专栏,不能重复订阅","-2001":"余额账户异常","-2102":"余额不足","-2120":"订单创建失败","-2121":"支付失败","-2901":"无效的反馈内容","-2902":"反馈内容请不要超过 500 字","-3007":"验证码错误","-3003":"请重新登录","-3004":"验证码为空","-3005":"请更新验证码","-3006":"验证码错误","-3101":"阅码格式错误","-3102":"阅码无效","-3103":"阅码信息获取失败","-3105":"阅码与专栏不匹配","-3351":"已获取过云栖优惠码","-3352":"优惠码已被领完","-3363":"金额大于1元才能提现","-3364":"金额超出提现范围,请联系客服","-3365":"现金余额不足,请联系客服","-3366":"提现失败,请重试","-3369":"单日提现次数仅限1次","-3370":"提现频率过高,请稍后重试"},questions:[{id:14,q:"如何联系在线客服?",a:"微信搜索“极客时间”,关注我们的微信服务号,在对话框输入您的问题即可召唤在线客服。",bold:!1},{id:6,q:"为什么收不到短信验证码?",a:"在手机信号稳定且无欠费的状态下,仍收不到短信验证码,常见的有两种情况:
          1.手机号被短信服务商过滤
          您可能曾将此类短信列为垃圾短信,因此短信服务商发送该类短信时会将您的手机号过滤保证您不再收到。
          解决方法:您可以在我的-设置-帮助反馈中向我们反馈,并留下您的手机号。
          2.您可能设置了短信拦截
          您可能在手机短信中设置了比较严苛的拦截规则,导致无法接受某些号码发出的短信。
          解决方法:可尝试暂时关闭拦截功能。"},{id:13,q:"为什么我的礼券无法使用?",a:"如果您获得的礼券为“不与其他优惠叠加使用”,则这张礼券不能在拼团优惠和限时优惠中使用,优惠期结束之后您可以使用这张礼券。
          一个订单只能使用一张礼券,不可以叠加使用多张礼券。",bold:!1},{id:1,q:"订阅的专栏和视频课程有效期是多久?",a:"专栏和视频课程订阅之后可以永久阅读。"},{id:3,q:"如何开具发票?",a:"微信关注“极客时间”微信服务号,在微信中点击服务号底部的「更多服务」,进入「发票开具」可以在线申请开票。
          发票为增值税普通电子发票,明细为:研发和技术服务+商品名称,不支持开具其他税收分类的发票。"},{id:5,q:"如何订阅专栏更新通知?",a:"进入App后,依次进入「我的」--「设置」--「推送设置」内进行设置。"},{id:7,q:"支付过程中遇到错误提示怎么办?",a:"当您多次支付不成功,可以通过以下方式解决:
          1. 切换网络之后重新尝试支付;
          2. 更换支付方式之后重新尝试支付;
          3. 在浏览器中打开商品购买页面,重新尝试支付;
          4. 如果以上方式无法解决您的问题,请通过右上角的「反馈问题」向我们反馈您的问题,或通过极客时间微信公众号联系人工客服。"},{id:10,q:"充值余额时支付成功但余额没有增加,如何处理?",a:"充值到账会有短暂延迟,如果您充值的余额长时间未到账,可以尝试清除应用后台并重新打开应用。如果您在充值后24小时内或收到苹果支付的账单后,充值金额仍未到账,请您及时联系微信公众号在线客服。"},{id:8,q:"订阅的专栏、视频课程、每日一课会员等能否退款或更换?",a:"专栏、视频课程以及每日一课会员等服务均属于虚拟产品,订阅之后均不支持退款和更换,请您理解。"},{id:16,q:"好友扫描我的分享海报购买,为什么没有获得返现?",a:"温馨提示:只有通过分享有赏的指定渠道并且规范方法购买,才可以得到返现。
          分享:
          1. 极客时间APP:
          分享者操作方法:极客时间APP-我的-课程-分享有赏-六种方法任选-成功分享
          被分享者操作方法:别人的分享-打开(扫描二维码、打开链接等)-订阅
          2. 极客时间公众号:
          分享者操作方法:微信-极客时间公众号-我的-获取专属海报-分享
          被分享者操作方法:海报-扫描二维码-订阅"},{id:21,q:"如何修改绑定手机号、登录密码以及其他账号问题?",a:"您可以在极客时间App内,凭原登录密码或验证码修改绑定手机号和新的登录密码,更换绑定手机号要求新账号为未注册极客时间的账号,为了保证您的账号安全,暂时不支持账号注销、合并等操作,请您理解。
          如果上述答案仍未解决您的问题,请您通过极客时间微信服务号联系在线客服,会有客服帮您解决问题。"},{id:29,q:"投诉侵权、盗版资源或其他上述未提到的问题",a:"您可以通过极客时间微信服务号联系在线客服,或通过邮件(service@geekbang.org)联系我们,我们在收到您的反馈之后会尽快进行处理,感谢您的理解。您可以通过极客时间微信服务号联系在线客服,或通过邮件(service@geekbang.org)联系我们,我们在收到您的反馈之后会尽快进行处理,感谢您的理解。"}]}},223:function(e,t,n){"use strict";var o=n(43),i=n.n(o),a=n(146),r=n(102),s=n.n(r);t.a={getLoginUser:function(){return new i.a(function(e,t){a.a.get("//account.geekbang.org/serv/v1/user/auth",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})},getImgVerify:function(){return new i.a(function(e,t){s.a.post("//time.geekbang.org/serv/v1/geekcode/verify").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},checkCode:function(e,t){return new i.a(function(n,o){a.a.post("//time.geekbang.org/serv/v1/geekcode",{geekcode:e,verifycode:t}).then(function(e){200===e.status&&0===e.data.code?n(e.data.data):o(e.data)}).catch(function(e){o(e)})})},subscribeByGeekcode:function(e,t){return new i.a(function(n,o){a.a.post("//time.geekbang.org/serv/v1/column/subscribe",{cid:e,channel:"geekcode",extra:{code:t}}).then(function(e){200===e.status&&0===e.data.code?n(e.data.data):o(e.data)}).catch(function(e){o(e)})})},subscribeDlVipByGeekcode:function(e){return new i.a(function(t,n){a.a.post("//cashier.geekbang.org/serv/v1/order/store",e).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):n(e.data)}).catch(function(e){n(e)})})},getYunqiTicketStatus:function(e,t){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/yunqi/code/show",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getYunqiTicketCode:function(e,t){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/yunqi/code/get",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUcode:function(){return new i.a(function(e,t){a.a.post("//account.geekbang.org/account/user/ucode").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUinfoByUcode:function(e){return new i.a(function(t,n){a.a.post("//account.geekbang.org/account/ucode",{ucode:e}).then(function(e){200===e.status&&0===e.data.code?t(e.data.data):n(e.data)}).catch(function(e){n(e)})})},getInvitedList:function(){return new i.a(function(e,t){a.a.post("//account.geekbang.org/account/user/invited").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n.data)}).catch(function(e){t(e)})})},getUserData:function(){return new i.a(function(e,t){a.a.post("//time.geekbang.org/serv/v1/my/data").then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})},charge:function(e){var t={code:e.code,sku:e.sku,is_ios:e.is_ios,amount:e.amount};return new i.a(function(e,n){a.a.post("//time.geekbang.org/serv/v1/geekcode/charge",t).then(function(t){200===t.status&&0===t.data.code?e(t.data.data):n(t)}).catch(function(e){n(e)})})},getLoginData:function(){return new i.a(function(e,t){s.a.post("//time.geekbang.org/serv/v2/login_member/data",{}).then(function(n){200===n.status&&0===n.data.code?e(n.data.data):t(n)}).catch(function(e){t(e)})})}}},226:function(e,t){e.exports="data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QN5aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MCA3OS4xNjA0NTEsIDIwMTcvMDUvMDYtMDE6MDg6MjEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YWE3YmZhMDItMzBhMC00MDg3LTg3MmYtOGMwMjMxNjNhZWRjIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI2MTlEODM3NTgzMTExRTk5NDY4Qjk3QUFCNDFBN0QzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI2MTlEODM2NTgzMTExRTk5NDY4Qjk3QUFCNDFBN0QzIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTYyRTNCMDNBREI4MTFFOEFFNTJDODlGREQ1OTUzMDMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTYyRTNCMDRBREI4MTFFOEFFNTJDODlGREQ1OTUzMDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQIBAQICAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCADuAO4DAREAAhEBAxEB/8QAfAABAAICAwEBAAAAAAAAAAAAAAYHBAgBAwUCCgEBAAAAAAAAAAAAAAAAAAAAABAAAgIBAgIECwQJBQAAAAAAAAECAwQRBSEGMWESF0FRgVITk+MUVJTUIkJiB5EyhBVFhbXFNnFygqJTEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwD9vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGHmbhg7fD0mbl4+LF69l32wrctPBCMmpTfUk2BG7ue+Wqm4rNsua6XTi5DWvVKyutPyaoDmnnrlq19l506W9NPTYuSk2/xQqnGPlaQElxM7Dzq/S4WVj5VfhlRbC1Rfil2G3GXU9GBlAAAAAAAAAAAAAAAAAAAAAAAAAAAA4bUU5SajGKblJtJJJattvgkkBVHMnP8AJSswtilHSLcLdxcVLV9DWHCWsdF/6ST1+6uiQFW35F+VbK/Jutvum9Z23WSssk/xTm3JgdIADvx8nIxLY34t9uPdD9W2myVc1412otPR6cV0MC1uWufvTTrwd8cITlpCrcYpQhKT4KOXBaQrbf346R8aXFgWmnrxXFPimvCAAAAAAAAAAAAAAAAAAAAAAAAAAFUfmBzHKLexYVjjrGMtxsg+LU12oYia6E4tSn400vOQFTAAAAAAAuDkDmSWRFbHm2OVtUHLb7ZvWU6oLWeK2+LdMV2ofgTX3UBaAAAAAAAAAAAAAAAAAAAAAAAABi52XDAwsvNs4wxce6+S10cvRQlNQX4ptaLrYGr+RfblX3ZN8nO7Itsutk/vWWSc5Pq4sDpAAAAAABlYWXbgZeNmUPS3Guruhx0TcJJ9mWnTGa4NeFMDaDGvrysejJqeteRTVfW/HC2EbI/9ZAdwAAAAAAAAAAAAAAAAAAAAAACJc8WurlncOzwdrxateqeVT2v0wTXlA18AAAAAAAAAbFcnXSu5a2mcnq402U/8cfJuoivJGtASYAAAAAAAAAAAAAAAAAAAAAABFOdqXdyzuSjxlWse7yVZVMp/or1YGvQAAAAAAAADY3lGiWPy3tNclo5Yzv8AF9nJusyYvyxtQEjAAAAAAAAAAAAAAAAAAAAAAAdGVj15eNkYty1qyaLaLF4exbCVctOvSXADWDNxLsDLycLIj2bsa6dM/E3B6KUfHCa0afhTAxQAAAAAAZ224Nu55+LgUp+kyboV6pa9iDetljXm1VpyfUgNnqaoUU1UVLs101wqrj4oVxUILyRQHYAAAAAAAAAAAAAAAAAAAAAAAAVrz5yzPNh++cGtzyaK1HNpgtZX0QX2bopcZW0R4NdLhp5ujCmQAAAAAAXbyLyzPbaXumdW4ZuVX2aKprSWNjS0bck+Mbr9FqumMeHS2gLDAAAAAAAAAAAAAAAAAAAAAAAAAACuOZOQ6c+dmbtDrxcubc7cWX2cbIm+LlW0n7vbLw8OxJ+bxbCpM7bM/bLXVn4l+NPVpekg1CenhrsWtdseuLaAwQAHo7ftO47raqsDEuyZapSlCOlVevhtul2aql/uaAt3lrkWjbJ15u5yry86Gk6qYrXFxpripfaSd90X0NpRi+hNpSAsIAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4sqrug67a4W1y/WhZCM4P/AFjJNMDw7eVuXrm5T2jCTfT6Kr0C49VLrQHNPK/L1ElKvaMJtcU7alfo/Gle7FqB7cK4VQVdcIVwitIwhFQhFeJRikkgPsAAAAAAAAAAAAAAAAAAAAAAAAAY2XmYuBRPKzL68aiv9ay2XZjq+iKXTKcvBFJt+BARGf5g8uRk4q3LsSeinDFkoy60pyhPR9aQHz3h8u+dm/K+0Ad4fLvnZvyvtAHeHy752b8r7QB3h8u+dm/K+0Ad4fLvnZvyvtAHeHy752b8r7QB3h8u+dm/K+0Ad4fLvnZvyvtAMjG575cybY1PKtxnJpRnk0Trq1fglZHtxrXXLRLxgTCMozjGUZKUZJSjKLTjKLWqlFrVNNPgwOQAAAAAAAAAAAAAAAAAAAAUZ+YW43ZG9ywHOSx9vqpUa9fsu7IphkTta8MnCyMepLrYECAAAAAAAAAAAF0/lxuN2Tt+Zg2zlOO320uhyerhTlK1qpPzYWUSa8Xa06NALHAAAAAAAAAAAAAAAAAAAABr3zx/lO6fsX9OxAImAAAAAAAAAAALY/K/+Ofyz+4AWwAAAAAAAAAAAAAAAAAAAADXvnj/ACndP2L+nYgETAAAAAAAAAAAFsflf/HP5Z/cALYAAAAAAAAAAAAAAAAAAAABVvMfJG7bxvOZuONkbdCjI937Eb7cmNq9DiUUS7Ua8S2C1nU2tJPgB4fdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAHdrvvxe0+vzPoAJvyby1ncvfvH323Et989z9F7rZdPs+7+9dvt+loo019OtNNfD0ATcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Z"},262:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98);t.default={name:"gkui-button",components:{},props:{color:o.a.string.def(""),size:o.a.string.def(""),disabled:o.a.bool.def(!1),useLock:o.a.bool.def(!1),label:o.a.string.def(""),lockLabel:o.a.string.def(""),stop:o.a.bool.def(!0)},data:function(){return{locked:!1}},computed:{_disabled:function(){return this.disabled||this.locked}},created:function(){},methods:{handleClick:function(e){var t=this;this.stop&&e.stopPropagation(),this._disabled||(this.useLock&&(this.locked=!0),this.$emit("click",{clear:function(){t.locked=!1}}))}}}},263:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98),i=n(106),a=n(545),r=n.n(a);t.default={name:"gkui-confirm",components:{Dialog:r.a},props:{title:o.a.string,message:o.a.string,type:o.a.string.def("message"),value:o.a.bool.def(!1),center:o.a.bool.def(!1),verticalCenter:o.a.bool.def(!1),name:o.a.string,width:o.a.number.def(412),top:o.a.oneOfType([Number,String]).def(100),okText:o.a.string.def("确定"),cancelText:o.a.string.def("取消"),okBtnColor:o.a.string.def("blue"),cancelBtnColor:o.a.string.def("transparent"),loading:o.a.bool.def(!1)},methods:{handleOk:function(e){var t=e.clear,n=e.close;return"message"===this.type?(n&&n(),!0):(i.a.event.$emit("closeMessage",{ok:!0,clear:t,close:n}),!0)},handleCancel:function(e){var t=e.close;return i.a.event.$emit("closeMessage",{ok:!1,close:t}),!0}}}},264:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(43),i=n.n(o),a=n(287),r=n.n(a),s=n(284),c=n.n(s),l=n(44),u=n.n(l),A=n(98),d=n(257),p=n(161);t.default={name:"gkui-dialog",components:{Button:d.a,Loading:p.a},props:{value:A.a.bool.def(!1),name:A.a.string,transitionName:A.a.string.def("modal-zoom-in"),title:A.a.string,dialogClass:A.a.string,mask:A.a.bool.def(!0),maskClickClose:A.a.bool.def(!0),center:A.a.bool.def(!1),hasClose:A.a.bool.def(!0),verticalCenter:A.a.bool.def(!1),width:A.a.number.def(520),top:A.a.oneOfType([Number,String]).def(100),hasCancel:A.a.bool.def(!0),handleOk:{type:Function},handleCancel:{type:Function},okText:A.a.string.def("确定"),cancelText:A.a.string.def("取消"),okBtnColor:A.a.string.def("blue"),cancelBtnColor:A.a.string.def("transparent"),loading:A.a.bool.def(!1)},data:function(){return{showHead:!0,visible:!1,contentVisible:!1}},computed:{mainStyle:function(){var e={},t=parseInt(this.width),n={width:t<=100?t+"%":t+"px",top:"string"==typeof this.top?this.top:this.top+"px"},o=this.styles?this.styles:{};return u()(e,n,o),e},wrapClass:function(){return["gkui-dialog",{"gkui-dialog-can-close":this.maskClickClose&&this.mask,"gkui-dialog-center":this.center,"gkui-dialog-vertical-center":this.verticalCenter},this.dialogClass]}},watch:{value:function(e){var t=this;this.mask&&(e?this.$modal.showLayer():this.$modal.hideLayer()),e?(this.visible=e,this.$nextTick(function(){t.contentVisible=e})):(this.contentVisible=e,setTimeout(function(){t.visible=e},300))}},created:function(){},mounted:function(){var e=this;this.visible=this.value,this.$nextTick(function(){e.contentVisible=e.value});var t=!0;void 0!==this.$slots.header||this.title||(t=!1),this.showHead=t},methods:{close:function(){this.$emit("input",!1),this.$emit("cancel")},ok:function(e){var t=this,n=e.clear;return c()(r.a.mark(function e(){return r.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.loading){e.next=6;break}if(!t.handleOk){e.next=4;break}return e.next=4,t.handleOk({clear:n,close:t.destroy});case 4:return t.$emit("ok",{clear:n}),e.abrupt("return");case 6:if(!t.handleOk){e.next=10;break}return e.next=9,t.handleOk({clear:n,close:t.destroy});case 9:return e.abrupt("return");case 10:t.$emit("input",!1),t.$emit("ok",{clear:n});case 12:case"end":return e.stop()}},e,t)}))()},cancel:function(){var e=this;return c()(r.a.mark(function t(){return r.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.handleCancel){t.next=5;break}return t.next=3,e.destroy();case 3:return e.handleCancel({close:e.close}),t.abrupt("return");case 5:e.close();case 6:case"end":return t.stop()}},t,e)}))()},handleMask:function(){this.mask&&this.maskClickClose&&this.close()},destroy:function(){var e=this;this.contentVisible=!1,setTimeout(function(){e.visible=!1,e.hideLayer().then(function(){return e.$modal.hide(e.name),!0})},100)},hideLayer:function(){var e=this;return new i.a(function(t,n){e.$modal.hideLayer(),t()})}}}},265:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(258);t.default={name:"gk-loading",components:{},props:{visible:{type:Boolean,default:!0},label:{type:String,default:""},size:{type:String,default:"40px"},color:{type:String,default:"white"}},data:function(){return{}},computed:{colorClass:function(){return o.a.getColor(this.color)||""},styles:function(){return{width:this.size,height:this.size}}},created:function(){},methods:{}}},266:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(98),i=n(161),a=n(80);t.default={name:"gku-message",components:{Loading:i.a},props:{type:o.a.string.def("info"),name:o.a.string,message:o.a.string,duration:o.a.number.def(1.5),onClose:o.a.func,closable:o.a.bool.def(!1),prefix:o.a.string,customClose:o.a.string,loadingColor:o.a.string.def("blue"),loadingSize:o.a.string.def("14px"),transitionName:o.a.string.def("fade-up")},data:function(){return{timer:null}},computed:{customCloseBtn:function(){return this.customClose||""},typeCls:function(){return a.a.getType(this.type)||""}},mounted:function(){this.startTimer()},methods:{startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout(function(){e.close()},1e3*this.duration))},clearTimer:function(){clearTimeout(this.timer)},close:function(){this.$emit("close",this.name),this.onClose()}}}},267:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(99),i=n.n(o),a=n(547),r=n.n(a),s=n(80);t.default={name:"gku-message-box",components:{MessageItem:r.a},props:{},computed:{},data:function(){return{messageList:[],styles:{top:"24px"},transitionName:"fade-up"}},created:function(){s.a.register(this)},mounted:function(){},methods:{add:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.styles=i()({},this.styles,n.styles),this.transitionName=n.transitionName,this.$nextTick(function(){t.messageList.push(e)})},close:function(e){this.messageList=this.messageList.filter(function(t){return t.name!==e}),s.a.remove(e)},clear:function(){this.messageList=[]},handleEnter:function(e){e.style.height=e.scrollHeight+"px"},handleLeave:function(e){1!==document.getElementsByClassName("gkui-message-content-wrap").length&&(e.style.height=0)}}}},268:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(44),i=n.n(o),a=n(106),r=n(107);t.default={name:"gkui-modal-controller",components:{},props:{},data:function(){return{isShowLayer:!1,modals:[],zIndex:0}},created:function(){this.$modal._setModalContainer(this)},beforeMount:function(){var e=this;a.a.event.$on("toggle",function(t,n,o){n?e._eventToggleOpen(t,o):e._eventToggleClose(t)})},mounted:function(){},destroyed:function(){},methods:{showLayer:function(){this.isShowLayer=!0,document.body.classList.add("gkui--modal-block-scroll")},hideLayer:function(){this.isShowLayer=!1,document.body.classList.remove("gkui--modal-block-scroll")},add:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments[2],a=r.a.guid();n.zIndex=++this.zIndex,o.auto=void 0===o.auto||o.auto,o.layer=void 0===o.layer||o.layer;var s=this.modals.find(function(e){return o.name===e.name});s?s.params=i()({},n):this.modals.push({id:a,name:o.name,component:e,params:n,layer:o.layer}),this.$nextTick(function(){o.auto&&t.$modal.show(o.name,n)})},_eventToggleOpen:function(e,t){var n=this.modals.find(function(t){return t.name===e});n.visible=!0,n.params=i()({},n.params,t),n.layer&&this.showLayer()},_eventToggleClose:function(e){var t=!1,n=void 0,o=void 0;for(var i in this.modals)this.modals[i].name===e?(n=i,o=this.modals[i]):this.modals[i].visible&&this.modals[i].layer&&(t=!0);void 0!==n&&this.modals.splice(n,1),!t&&o.layer&&this.hideLayer()}}}},269:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(65),i=n(102),a=n.n(i),r=n(551),s=n.n(r);t.default={name:"app",components:{GlobalLayer:s.a},created:function(){window.location.hash&&this.$router.push(window.location.hash.replace("#","")),this.hack(),this.addAppEventListener(),this.entryUrl=window.location.href,document.domain="geekbang.org",this.timer=null,this.initWxConfig(),this.initEventDispatcher(),document.addEventListener("keydown",function(e){(e.ctrlKey||e.metaKey)&&65===e.keyCode&&(e.returnValue=!1,e.preventDefault())})},methods:{getHtmlFirstNodeHTML:function(e){if(!e)return"";if(!e.match(/^<\w+.+<\/\w+>/))return"

          "+e+"

          ";var t=document.createElement("div");return t.innerHTML=e,t.children[0].outerHTML},initWxConfig:function(){if(o.a.isInWeixin()){var e=o.a.isIOS()?this.entryUrl:window.location.href;a.a.get("https://misc.geekbang.org/wxmisc/wxshare/sign?url="+encodeURIComponent(e)+"&mpid=geekbang").then(function(e){var t=e.data;if(0===t.code&&t.data)try{window.wx.config({debug:!1,appId:t.data.appId,timestamp:String(t.data.timestamp),nonceStr:t.data.nonceStr,signature:t.data.signature,jsApiList:["getLocation","onMenuShareTimeline","onMenuShareAppMessage","chooseWXPay","onMenuShareQQ","onMenuShareWeibo","onMenuShareQZone","hideAllNonBaseMenuItem","showAllNonBaseMenuItem","showMenuItems","hideMenuItems"]})}catch(e){console.log(e)}},function(e){})}},initEventDispatcher:function(){o.a.isInApp()&&o.a.isInAndroidApp()&&(window.geekTimeNotify=function(e){if("string"==typeof e)try{e=JSON.parse(e);var t=new CustomEvent("notify",{detail:e});document.dispatchEvent(t)}catch(e){}else{var n=new CustomEvent("notify",{detail:e});document.dispatchEvent(n)}})},addAppEventListener:function(){var e=this;document.addEventListener("notify",function(t){try{var n=t.detail.data;switch(t.detail.type){case"gtInfoUpdate":o.a.getTicket()!==n.ticket&&window.location.reload();break;case"sub:paybox:show":e.$ga.sendPv("/fake/column/paybox");break;case"sub:paybox:success":e.$ga.sendEvent("订阅成功","专栏或视频课订阅成功",n.column_title)}}catch(e){console.log(e)}})},hack:function(){if(o.a.isInApp()){var e=navigator.userAgent;(o.a.isInAndroidApp()&&e.match(/[\d.]+$/)&&o.a.version(e.match(/[\d.]+$/)[0])>=o.a.version("1.0.6")||!o.a.isInAndroidApp()&&e.match(/[\d.]+$/)&&o.a.version(e.match(/[\d.]+$/)[0])>=o.a.version("1.1.1"))&&localStorage.removeItem("gtInfo")}}},watch:{$route:{handler:function(e,t){var n=this;clearTimeout(this.timer),document.title="极客时间",this.timer=setTimeout(function(){n.initWxConfig()},300)}}}}},270:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={computed:{data:function(){return this.$store.state.globalLayers}}}},271:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={data:function(){return{title:"",content:"",btnCancel:"",btnOk:"",closed:!1,visible:!1,cancelCallback:null,okCallback:null}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},okHandler:function(){this.close(),this.okCallback()},cancelHandler:function(){this.close(),this.cancelCallback()},close:function(){this.closed=!0}},watch:{closed:function(e,t){e&&(console.log("closed: ",e),this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}}}},272:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={data:function(){return{size:"40px",visible:!1,message:"",showLoading:!1}},computed:{styles:function(){return{width:this.size,height:this.size}}},mounted:function(){}}},273:function(e,t,n){"use strict";var o=n(39),i=n(552),a=n.n(i),r=o.a.extend(a.a),s=void 0,c=[],l=1,u=function(e){e=e||{};var t="message_"+l++;return s=new r({data:e}),c.length>0&&(c[0].close(),c.splice(0,1)),s.id=t,s.vm=s.$mount(),document.body.appendChild(s.vm.$el),s.vm.visible=!0,s.dom=s.vm.$el,s.dom.style.zIndex=100,c.push(s),s.vm};t.a=u},274:function(e,t,n){"use strict";function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"加载中...";u.message=e,u.showLoading=!0,setTimeout(function(){u.visible=!0},0),document.body.appendChild(u.$el)}function i(){u.visible=!1,setTimeout(function(){u.showLoading=!1},200)}function a(){r.a.prototype.$loading={open:o,close:i}}var r=n(39),s=n(553),c=n.n(s),l=r.a.extend(c.a),u=new l({el:document.createElement("div")});t.a=a},275:function(e,t,n){"use strict";var o=n(65);t.a={formatDate:function(e,t){return t?o.a.formatDate(e).replace(/\-/g,t):o.a.formatDate(e)},formatTime:function(e){return o.a.formateTime(e)},formatContent:function(e){return o.a.formatContent(e)},formatCash:function(e){return o.a.formatCash(e)},columnPrice:function(e){return o.a.formatPrice(e)},formatSize:function(e){return o.a.formatSize(e)},formatDuration:function(e){return o.a.formatDuration(e)},filterTime:function(e){return e>86400?Math.floor(e/86400)+"天":e>3600?Math.floor(e/3600)+"小时":e>60?Math.floor(e/60)+"分":e+"秒"},filterColumnUnit:function(e){var t=String(e);return t=/\d/.test(t)?t.match(/\d+/)[0]:null},cutStr:function(e,t){var n=o.a.subString(e,t);return n!==e?n+"...":n},resizeImg:function(e,t,n){return isNaN(t)||isNaN(n)?e:e&&"string"==typeof e&&e.match(/^https*:\/\/static.*\.geekbang\.org\//i)?e+"?x-oss-process=image/resize,m_fill,h_"+n+",w_"+t:e},trim:function(e){return"string"==typeof e?e.trim():""},escapeHtml:function(e){var t={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"'};return e.replace(/&(lt|gt|nbsp|amp|quot);/gi,function(e,n){return t[n]})},formatDateReadable:function(e,t){return o.a.formatDateReadable(e,t)}}},276:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var o=function(e){return n.e(45).then(function(){var t=[n(574)];e.apply(null,t)}.bind(this)).catch(n.oe)},i=function(e){return n.e(46).then(function(){var t=[n(575)];e.apply(null,t)}.bind(this)).catch(n.oe)},a=[{path:"/columninfo/:id(\\d+)",name:"ColumnInfo",component:o},{path:"/agreement",name:"Agreement",component:o},{path:"/legal",name:"Legal",component:o},{path:"/permit",name:"Permit",component:o},{path:"/questions",name:"Questions",component:o},{path:"/question/:id",name:"Question",component:o},{path:"/rules/coupon",name:"CouponRules",component:o},{path:"/rules/share",name:"ShareRules",component:o},{path:"/rules/groupon",name:"GrouponRules",component:o},{path:"/rules/invite",name:"InviteRules",component:o},{path:"/special/:id",name:"Special",component:o},{path:"/list/special/:id",name:"ListSpecial",component:o},{path:"/list/videos/:id",name:"ListVideos",component:o},{path:"/list/videos/v2/:id",name:"ListVideosV2",component:o},{path:"/guide/recharge",name:"RechargeGuide",component:o},{path:"/agreement/partner",name:"PartnerAgreement",component:o},{path:"/activity/newusergift",name:"PullNew",component:o},{path:"/activity/get-newusergift",name:"PullNewSuccess",component:o},{path:"/activity/invite",name:"Invite",component:o},{path:"/activity/getinvite",name:"GetInvite",component:o},{path:"/activity/inviterecord",name:"InviteRecord",component:o},{path:"/activity/sale-poster",name:"SalePosterList",component:o},{path:"/activity/sale-poster/:cid",name:"SalePosterDetail",component:o},{path:"/activity/share-poster",name:"SharePosterList",component:o},{path:"/activity/share-withdraw",name:"ShareWithdraw",component:o},{path:"/activity/share-poster-new",name:"SharePosterListNew",component:o},{path:"/activity/share-ranking-list",name:"ShareWithdrawNew",component:o},{path:"/activity/column-ranking-list/:id",name:"ColumnRankingList",component:o},{path:"/readhub/share-poster",name:"ReadhubPoster",component:o},{path:"/readhub/hot/:id",name:"ReadhubHotDetail",component:o},{path:"/readhub/dev/:id",name:"ReadhubDevDetail",component:o},{path:"/poster/article",name:"ContentPoster",component:o},{path:"/bought/all",name:"BoughtAll",component:o},{path:"/app/course-module/:id(\\d+)",name:"AppCourseModule",component:o},{path:"/gift/card",name:"RechargeCard",component:i}]},277:function(e,t,n){"use strict";var o=n(99),i=n.n(o),a=n(220),r=n.n(a),s=n(39),c=n(565),l=n(163),u=n(65),A=n(276),d=function(e){return n.e(9).then(function(){var t=[n(577)];e.apply(null,t)}.bind(this)).catch(n.oe)},p=function(e){return n.e(12).then(function(){var t=[n(615)];e.apply(null,t)}.bind(this)).catch(n.oe)},h=function(e){return n.e(19).then(function(){var t=[n(616)];e.apply(null,t)}.bind(this)).catch(n.oe)},m=function(e){return n.e(10).then(function(){var t=[n(619)];e.apply(null,t)}.bind(this)).catch(n.oe)},f=function(e){return n.e(32).then(function(){var t=[n(597)];e.apply(null,t)}.bind(this)).catch(n.oe)},g=function(e){return n.e(2).then(function(){var t=[n(596)];e.apply(null,t)}.bind(this)).catch(n.oe)},v=function(e){return n.e(1).then(function(){var t=[n(598)];e.apply(null,t)}.bind(this)).catch(n.oe)},y=function(e){return n.e(8).then(function(){var t=[n(599)];e.apply(null,t)}.bind(this)).catch(n.oe)},b=function(e){return n.e(44).then(function(){var t=[n(580)];e.apply(null,t)}.bind(this)).catch(n.oe)},w=function(e){return n.e(18).then(function(){var t=[n(579)];e.apply(null,t)}.bind(this)).catch(n.oe)},k=function(e){return n.e(17).then(function(){var t=[n(587)];e.apply(null,t)}.bind(this)).catch(n.oe)},C=function(e){return n.e(14).then(function(){var t=[n(588)];e.apply(null,t)}.bind(this)).catch(n.oe)},x=function(e){return n.e(0).then(function(){var t=[n(608)];e.apply(null,t)}.bind(this)).catch(n.oe)},I=function(e){return n.e(4).then(function(){var t=[n(609)];e.apply(null,t)}.bind(this)).catch(n.oe)},_=function(e){return n.e(35).then(function(){var t=[n(590)];e.apply(null,t)}.bind(this)).catch(n.oe)},M=function(e){return n.e(39).then(function(){var t=[n(591)];e.apply(null,t)}.bind(this)).catch(n.oe)},L=function(e){return n.e(41).then(function(){var t=[n(583)];e.apply(null,t)}.bind(this)).catch(n.oe)},T=function(e){return n.e(40).then(function(){var t=[n(585)];e.apply(null,t)}.bind(this)).catch(n.oe)},S=function(e){return n.e(26).then(function(){var t=[n(584)];e.apply(null,t)}.bind(this)).catch(n.oe)},D=function(e){return n.e(29).then(function(){var t=[n(618)];e.apply(null,t)}.bind(this)).catch(n.oe)},E=function(e){return n.e(15).then(function(){var t=[n(601)];e.apply(null,t)}.bind(this)).catch(n.oe)},N=function(e){return n.e(23).then(function(){var t=[n(602)];e.apply(null,t)}.bind(this)).catch(n.oe)},P=function(e){return n.e(20).then(function(){var t=[n(605)];e.apply(null,t)}.bind(this)).catch(n.oe)},O=function(e){return n.e(24).then(function(){var t=[n(603)];e.apply(null,t)}.bind(this)).catch(n.oe)},B=function(e){return n.e(37).then(function(){var t=[n(589)];e.apply(null,t)}.bind(this)).catch(n.oe)},R=function(e){return n.e(31).then(function(){var t=[n(614)];e.apply(null,t)}.bind(this)).catch(n.oe)},j=function(e){return n.e(36).then(function(){var t=[n(600)];e.apply(null,t)}.bind(this)).catch(n.oe)},U=function(e){return n.e(28).then(function(){var t=[n(604)];e.apply(null,t)}.bind(this)).catch(n.oe)},V=function(e){return n.e(30).then(function(){var t=[n(586)];e.apply(null,t)}.bind(this)).catch(n.oe)},Q=function(e){return n.e(34).then(function(){var t=[n(613)];e.apply(null,t)}.bind(this)).catch(n.oe)},W=function(e){return n.e(11).then(function(){var t=[n(611)];e.apply(null,t)}.bind(this)).catch(n.oe)},J=function(e){return n.e(7).then(function(){var t=[n(612)];e.apply(null,t)}.bind(this)).catch(n.oe)},q=function(e){return n.e(21).then(function(){var t=[n(607)];e.apply(null,t)}.bind(this)).catch(n.oe)},z=function(e){return n.e(25).then(function(){var t=[n(617)];e.apply(null,t)}.bind(this)).catch(n.oe)},H=function(e){return n.e(43).then(function(){var t=[n(573)];e.apply(null,t)}.bind(this)).catch(n.oe)},$=function(e){return n.e(27).then(function(){var t=[n(578)];e.apply(null,t)}.bind(this)).catch(n.oe)},F=function(e){return n.e(33).then(function(){var t=[n(576)];e.apply(null,t)}.bind(this)).catch(n.oe)},G=function(e){return n.e(5).then(function(){var t=[n(581)];e.apply(null,t)}.bind(this)).catch(n.oe)},Y=function(e){return n.e(3).then(function(){var t=[n(582)];e.apply(null,t)}.bind(this)).catch(n.oe)},X=function(e){return n.e(38).then(function(){var t=[n(610)];e.apply(null,t)}.bind(this)).catch(n.oe)},Z=function(e){return n.e(13).then(function(){var t=[n(592)];e.apply(null,t)}.bind(this)).catch(n.oe)},K=function(e){return n.e(6).then(function(){var t=[n(593)];e.apply(null,t)}.bind(this)).catch(n.oe)},ee=function(e){return n.e(42).then(function(){var t=[n(594)];e.apply(null,t)}.bind(this)).catch(n.oe)},te=function(e){return n.e(16).then(function(){var t=[n(595)];e.apply(null,t)}.bind(this)).catch(n.oe)},ne=function(e){return n.e(22).then(function(){var t=[n(606)];e.apply(null,t)}.bind(this)).catch(n.oe)};s.a.use(c.a);var oe=new c.a({mode:"history",routes:[{path:"/",name:"Index",component:p,meta:{notScrollTop:!0}},{path:"/library",name:"Index",component:h},{path:"/download",name:"Download",component:d},{path:"/search",name:"Search",component:m},{path:"/column/intro",name:"ColumnIntroForPreview",component:v,meta:{appLink:"views/column/intro.js"}},{path:"/column/:id(\\d+)",name:"ColumnArticleList",component:f,meta:{appLink:"views/column/intro.js",urlscheme:"time://columnIntro?id={{id}}"}},{path:"/column/article",name:"ColumnArticle",component:g,meta:{appLink:"views/column/article.js"}},{path:"/column/article/:id(\\d+)",name:"ColumnArticleDetail",component:g,meta:{appLink:"views/column/article.js",notScrollTop:!0}},{path:"/column/article/comment",name:"Comment",component:j},{path:"/article",name:"ArticlePreview",component:g,meta:{appLink:"views/column/article.js"}},{path:"/article/:id(\\d+)",name:"Article",component:g,meta:{appLink:"views/column/article.js",urlscheme:"time://article?id={{id}}"}},{path:"/column/article/:id(\\w+)/share",name:"Share",component:y},{path:"/column/intro/:id(\\d+)",name:"ColumnIntroDetail",component:v,meta:{appLink:"views/column/intro.js",urlscheme:"time://columnIntro?id={{id}}"}},{path:"/recharge/login",name:"RechargeLogin",component:b},{path:"/recharge/confirm",name:"RechargeConfirm",component:w},{path:"/activity/recharge-2019",name:"RechargeFor2019",component:k},{path:"/activity/recharge/expand",name:"RechargeExpand",component:C},{path:"/list/groupon/:id",name:"ListGroupon",component:B},{path:"/activity/dl-generalize",name:"DailyLessonGeneralize",component:V},{path:"/course/intro/:id",name:"CourseIntro",component:x,meta:{appLink:"views/courses/course_intro.js",urlscheme:"time://courseIntro?id={{id}}"}},{path:"/course/detail/:id-:vid",name:"CourseDetail",component:I,meta:{appLink:"views/course/detail.js",urlscheme:"time://courseDetail?id={{id}}&aid={{vid}}"}},{path:"/dailylesson/readlist/:id",name:"DailyLessonReadList",component:Q,meta:{urlscheme:"time://dailyExplore"}},{path:"/dailylesson/collection/:id",name:"DailyLessonCollection",component:W,meta:{urlscheme:"time://dailyCollection?collectionId={{id}}"}},{path:"/dailylesson/detail/:sku",name:"DailyLessonDetail",component:J,meta:{urlscheme:"time://dailySingle?sku={{sku}}"}},{path:"/cash/account",name:"CashAccount",component:_},{path:"/cash/detail",name:"CashDetail",component:M},{path:"/wxlite/groupbuy/:id(\\d+)",name:"WxliteGroupBuy",component:L},{path:"/wxlite/paid/:code",name:"WxliteGroupBuyPaid",component:T},{path:"/wxlite/course/aliyunvideo/:cid-:aid",name:"WxliteCourseAliyunVideo",component:X},{path:"/note/all",name:"NoteAll",component:D},{path:"/comment/all",name:"CommentAll",component:E},{path:"/comment/detail/:id(\\d+)",name:"CommentDetail",component:N},{path:"/comment/nice/:id(\\d+)",name:"NiceComment",component:P},{path:"/comment/nice-module/:id(\\d+)",name:"NiceCommentModule",component:ne},{path:"/discuss/detail/:id(\\d+)",name:"DiscussDetail",component:O},{path:"/discuss/write",name:"DiscussWrite",component:U},{path:"/activity/wxlite/groupbuylist",name:"WxliteGroupBuyList",component:S},{path:"/reply",name:"Reply",component:q},{path:"/mygroupbuy",name:"mygroupbuy",component:$},{path:"/convert",name:"convert",component:F},{path:"/training/:id",name:"college",component:G},{path:"/college/algorithm/:id",name:"CollegeAlgorithm",component:Y},{path:"/groupon/:code",name:"Groupon",component:R},{path:"/learning/record",name:"LearningRecord",component:z},{path:"/channel/home",name:"Channel",component:Z},{path:"/channel/materialdetail/:id",name:"materialdetail",component:K},{path:"/channel/rule",name:"channelRule",component:ee},{path:"/channel/myearnings",name:"myearnings",component:te},{path:"/billfeedback",name:"billfeedback",component:H},{path:"*",redirect:"/"}].concat(r()(A.a)),scrollBehavior:function(e,t,n){if(!e.meta.notScrollTop)return n||{x:0,y:0}}}),ie=!1,ae=new RegExp(/^gk_|^utm_|code/),re=function(e,t,n){var o=!0;for(var i in t.query)ae.test(i)&&e.query[i]!==t.query[i]&&(o=!1);if(!ie&&document.referrer&&document.referrer.search(/\?/)>0&&u.a.checkGeekbangDomain(document.referrer)){document.referrer.split("?")[1].split("&").forEach(function(n,o){var i=n.split("=");ae.test(i[0])&&(t.query[i[0]]=e.query[i[0]]=decodeURIComponent(i[1]))}),n({path:e.path,query:e.query})}else if(o||!ie)n({});else{for(var a in t.query)ae.test(a)&&(e.query[a]=t.query[a]);n({path:e.path,query:e.query})}};oe.beforeEach(function(e,t,n){window._MEIQIA&&window._MEIQIA("hidePanel"),re(e,t,function(e){ie?n(i()({},e,{replace:!0})):(ie=!0,l.a.dispatch("getLoginUser").then(function(){n(i()({},e,{replace:!0}))}).catch(function(t){n(i()({},e,{replace:!0})),console.log(t)}))})}),t.a=oe},278:function(e,t,n){"use strict";var o=n(43),i=n.n(o),a=n(223),r=n(164),s={getLoginUser:function(e){var t=e.commit;return new i.a(function(e,n){a.a.getLoginUser().then(function(n){t(r.a,n),e()}).catch(function(e){n(),console.log("get login error: ",e)})})},logout:function(e){(0,e.commit)(r.a,null)},addGlobalLayer:function(e,t){var n=e.commit,o=e.state;n(r.b,[].concat(o.globalLayers,[t]))},removeGlobalLayer:function(e,t){var n=e.commit,o=e.state,i=o.globalLayers.filter(function(e){return e.name!==t});n(r.b,i)},clearGlobalLayers:function(e){(0,e.commit)(r.b,[])}};t.a=s},279:function(e,t,n){"use strict";var o,i=n(224),a=n.n(i),r=n(99),s=n.n(r),c=n(164),l=(o={},a()(o,c.a,function(e,t){e.loginUser=s()({},e.loginUser,t)}),a()(o,c.c,function(e){e.loginUser=null}),a()(o,c.b,function(e,t){e.globalLayers=t}),o);t.a=l},280:function(e,t,n){"use strict";var o={loginUser:null,globalLayers:[]};t.a=o},281:function(e,t,n){"use strict";t.a={sendPv:function(e){"time.geekbang.org"===window.location.host&&(window.ga&&window.ga("send","pageview",e),window._hmt&&window._hmt.push(["_trackPageview",e]))},sendEvent:function(e,t,n){console.log(e,t,n),"time.geekbang.org"===window.location.host&&(window.ga&&window.ga("send","event",e,t,n),window._hmt&&window._hmt.push(["_trackEvent",e,t,n]))}}},523:function(e,t){},524:function(e,t){e.exports={button:"_3onsJjul_0"}},525:function(e,t){e.exports={main:"_2sRsF5RP_0"}},526:function(e,t){},527:function(e,t){},528:function(e,t){},529:function(e,t){},530:function(e,t){},543:function(e,t,n){function o(e){this.$style=n(524)}var i=n(22)(n(262),n(560),o,null,null);e.exports=i.exports},544:function(e,t,n){var o=n(22)(n(263),n(556),null,null,null);e.exports=o.exports},545:function(e,t,n){var o=n(22)(n(264),n(558),null,null,null);e.exports=o.exports},546:function(e,t,n){var o=n(22)(n(265),n(554),null,null,null);e.exports=o.exports},547:function(e,t,n){var o=n(22)(n(266),n(555),null,null,null);e.exports=o.exports},548:function(e,t,n){function o(e){n(529)}var i=n(22)(n(267),n(562),o,"data-v-99cd8b4a",null);e.exports=i.exports},549:function(e,t,n){function o(e){n(527)}var i=n(22)(n(268),n(559),o,null,null);e.exports=i.exports},550:function(e,t,n){function o(e){n(528)}var i=n(22)(n(269),n(561),o,null,null);e.exports=i.exports},551:function(e,t,n){function o(e){this.$style=n(525)}var i=n(22)(n(270),n(563),o,null,null);e.exports=i.exports},552:function(e,t,n){function o(e){n(526)}var i=n(22)(n(271),n(557),o,null,null);e.exports=i.exports},553:function(e,t,n){function o(e){n(530)}var i=n(22)(n(272),n(564),o,null,null);e.exports=i.exports},554:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"fade"}},[e.visible?n("div",{staticClass:"gk-loading"},[n("svg",{staticClass:"gk-loading-spinner",style:e.styles,attrs:{viewBox:"0 0 66 66",xmlns:"http://www.w3.org/2000/svg"}},[n("circle",{staticClass:"gk-loading-path",class:[e.colorClass],attrs:{fill:"none","stroke-width":"6","stroke-linecap":"round",cx:"33",cy:"33",r:"30"}})]),e._v(" "),e.label?n("p",{staticClass:"label"},[e._v(e._s(e.label))]):e._e()]):e._e()])},staticRenderFns:[]}},555:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"gkui-message-content-wrap"},[n("div",{class:["gkui-message-content",e.typeCls]},[e.prefix?n("span",{staticClass:"gkui-message-prefix",domProps:{innerHTML:e._s(e.prefix)}}):e._e(),e._v(" "),"loading"===e.type?n("Loading",{staticClass:"gkui-message-loading-prefix",attrs:{color:e.loadingColor,size:e.loadingSize}}):e._e(),e._v(" "),n("span",{staticClass:"gkui-message-text"},[e._v(e._s(e.message))]),e._v(" "),e.closable?n("span",{staticClass:"gkui-message-close",on:{click:e.close}},[n("i",{class:{defaultClose:!e.customClose},domProps:{innerHTML:e._s(e.customCloseBtn)}})]):e._e()],1)])},staticRenderFns:[]}},556:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{name:e.name,dialogClass:"gkui-dialog-confirm",value:e.value,hasClose:!1,maskClickClose:!1,hasCancel:"confirm"===e.type,handleOk:e.handleOk,handleCancel:e.handleCancel,center:e.center,verticalCenter:e.verticalCenter,okText:e.okText,cancelText:e.cancelText,okBtnColor:e.okBtnColor,cancelBtnColor:e.cancelBtnColor,width:e.width,top:e.top,loading:e.loading}},[n("div",{attrs:{slot:"header"},domProps:{innerHTML:e._s(e.title)},slot:"header"}),e._v(" "),n("div",{staticClass:"gkui-confirm-content"},[e._v("\n "+e._s(e.message)+"\n ")])])},staticRenderFns:[]}},557:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"confirm-box-wrapper"},[n("div",{staticClass:"mask"}),e._v(" "),n("div",{staticClass:"confirm-box"},[n("h2",{staticClass:"head"},[e._v(e._s(e.title))]),e._v(" "),n("div",{staticClass:"body",domProps:{innerHTML:e._s(e.content)}}),e._v(" "),n("div",{staticClass:"foot"},[e.btnCancel?n("a",{staticClass:"button button-cancel",on:{click:e.cancelHandler}},[e._v(e._s(e.btnCancel))]):e._e(),e._v(" "),e.btnOk?n("a",{staticClass:"button button-primary",on:{click:e.okHandler}},[e._v(e._s(e.btnOk))]):e._e()])])])])},staticRenderFns:[]}},558:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.visible?n("div",{class:e.wrapClass},[n("div",{staticClass:"gkui-dialog-mask",on:{click:e.handleMask}}),e._v(" "),n("transition",{attrs:{name:e.transitionName}},[e.contentVisible?n("div",{staticClass:"gkui-dialog-container",style:e.mainStyle},[e.hasClose?n("span",{staticClass:"gkui-dialog-close",on:{click:e.close}}):e._e(),e._v(" "),e.showHead?n("div",{staticClass:"gkui-dialog-header"},[e._t("header",[e._v("\n "+e._s(e.title)+"\n ")])],2):e._e(),e._v(" "),n("div",{staticClass:"gkui-dialog-body"},[e._t("default")],2),e._v(" "),n("div",{staticClass:"gkui-dialog-footer"},[e._t("footer",[e.hasCancel?n("Button",{attrs:{size:"normal",color:e.cancelBtnColor},on:{click:e.cancel}},[e._v(e._s(e.cancelText))]):e._e(),e._v(" "),n("Button",{attrs:{size:"normal",color:e.okBtnColor,useLock:!0},on:{click:e.ok},scopedSlots:e._u([{key:"status",fn:function(t){var o=t.locked;return[e.loading&&o?n("Loading",{staticClass:"gkui-dialog-loading",attrs:{color:"white",size:"14px"}}):e._e()]}}],null,!1,1531177023)},[e._v("\n "+e._s(e.okText)+"\n ")])])],2)]):e._e()])],1):e._e()},staticRenderFns:[]}},559:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"gkui-modal-controller"}},[n("transition",{attrs:{name:"fade"}},[e.isShowLayer?n("div",{staticClass:"gkui-modal-layer"}):e._e()]),e._v(" "),e._l(e.modals,function(t){return[n(t.component,e._b({key:t.params.id,tag:"component",style:{zIndex:9e4+t.params.zIndex}},"component",t.params,!1))]})],2)},staticRenderFns:[]}},560:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:[e.$style.button],attrs:{"gk-button":"","gkbtn-color":e.color,"gkbtn-size":e.size,disabled:e._disabled},on:{click:e.handleClick}},[e._t("status",null,{disabled:e.disabled,locked:e.locked}),e._v(" "),e._t("default",[e._v("\n "+e._s(e.locked?e.lockLabel||e.label:e.label)+"\n ")]),e._v(" "),e._t("end",null,{disabled:e.disabled,locked:e.locked})],2)},staticRenderFns:[]}},561:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("router-view")],1),e._v(" "),n("GlobalLayer")],1)},staticRenderFns:[]}},562:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{style:e.styles,attrs:{id:"gkui-message-list"}},[n("transition-group",{attrs:{name:e.transitionName},on:{enter:e.handleEnter,leave:e.handleLeave}},[e._l(e.messageList,function(t){return[n("MessageItem",{key:t.name,attrs:{type:t.type,duration:t.duration,closable:t.closable,name:t.name,message:t.message,onClose:t.onClose,prefix:t.prefix,customClose:t.customClose,loadingColor:t.loadingColor,loadingSize:t.loadingSize,transitionName:e.transitionName},on:{close:e.close}})]})],2)],1)},staticRenderFns:[]}},563:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.$style.main},e._l(e.data,function(e,t){return n(e,{key:t,tag:"component"})}),1)},staticRenderFns:[]}},564:function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.showLoading?n("div",{staticClass:"_loading_wrap_"},[n("transition",{attrs:{name:"fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"_loading_div_class_"},[n("svg",{staticClass:"spinner spinner--circle",style:e.styles,attrs:{viewBox:"0 0 66 66",xmlns:"http://www.w3.org/2000/svg"}},[n("circle",{staticClass:"path",attrs:{fill:"none","stroke-width":"6","stroke-linecap":"round",cx:"33",cy:"33",r:"30"}})]),e._v(" "),n("p",{staticClass:"message"},[e._v(e._s(e.message))])])])],1):e._e()},staticRenderFns:[]}},570:function(e,t,n){n(217),e.exports=n(216)},65:function(e,t,n){"use strict";var o=n(147),i=n.n(o),a=n(221),r=n.n(a),s=n(282),c=n.n(s),l=n(218),u=n(39),A=n(106),d=n(259),p=n(227);u.a.use(A.a),u.a.use(d.a),t.a={formatDate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-",n=new Date(10===String(e).length?1e3*e:e),o=n.getMonth()+1,i=n.getDate();return[n.getFullYear(),(o>9?"":"0")+o,(i>9?"":"0")+i].join(t)},formateTime:function(e){var t=new Date(10===String(e).length?1e3*e:e);return[(t.getHours()>9?"":"0")+t.getHours(),(t.getMinutes()>9?"":"0")+t.getMinutes(),(t.getSeconds()>9?"":"0")+t.getSeconds()].join(":")},formatPrice:function(e){return e||(e=0),e/100},formatCash:function(e){return e||(e=0),(e/100).toFixed(2)},formatSize:function(e){var t=Number(e);return t<1024?t:t<1048576?(t/1024).toFixed(2)+"K":t<1073741824?(t/1024/1024).toFixed(2)+"M":(t/1024/1024/1024).toFixed(2)+"G"},version:function(e){if(!e)return 0;e=e.toString();for(var t=e.split("."),n=0;n=812&&screen.width>=375},eqAndroidVersion:function(e){var t=navigator.userAgent;return this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])===this.version(e)},ltAndroidVersion:function(e){var t=navigator.userAgent;return this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])=this.version(e)},ltIOSVersion:function(e){var t=navigator.userAgent;return this.isInApp()&&!this.isInAndroidApp()&&t.match(/[\d.]+$/)&&this.version(t.match(/[\d.]+$/)[0])=this.version(e)},formatDuration:function(e){var t=Number(e);return t<60?t+"秒":t<3600?Math.floor(t/60)+"分"+(t%60==0?"":t%60+"秒"):Math.floor(t/60/60)+"小时"+this.formatDuration(t%3600)},getQueryString:function(e,t){var n=new RegExp("(^|&)"+t+"=([^&]*)(&|$)","i"),o=e.split("?").length>1?e.split("?")[1]:"",i=o.match(n);return null!==i?decodeURIComponent(i[2]):""},queryPack:function(e){var t="";for(var n in e)t+=n+"="+encodeURIComponent(e[n])+"&";return t.substr(0,t.length-1)},parseAudio:function(e){return e?'\n \n ':""},imgToBase64:function(e,t){var n=document.createElement("img");n.src=e,n.crossOrigin="Anonymous",document.body.appendChild(n),n.onload=function(){var e=window.getComputedStyle(n,null),o=document.createElement("canvas");o.width=e.getPropertyValue("width").split("px")[0],o.height=e.getPropertyValue("height").split("px")[0],o.getContext("2d").drawImage(n,0,0);var i=o.toDataURL("image/png",1);document.body.removeChild(n),t(i)},n.src=e,(n.complete||void 0===n.complete)&&(n.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",n.src=e)},b64toBlob:function(e,t,n){t=t||"",n=n||512;for(var o=atob(e),i=[],a=0;a(.+?)<\/code>/g,function(e,n){return t.push(n),"$"+(t.length-1)+""}),e=e.replace(/([\u4E00-\u9FA5])([a-z0-9@#&;=_\[\$\%\^\*\-\+\(\/])/gi,"$1 $2"),e=e.replace(/([a-z0-9#!~&;=_\]\,\.\:\?\$\%\^\*\-\+\)\/])([\u4E00-\u9FA5])/gi,"$1 $2"),e=e.replace(/\$(\d+)<\/code>/g,function(e,n){var o=parseInt(n,10);return c()(o)?""+t[o]+"":e})},utcToLocal:function(e){var t=new Date;return(10===String(e).length?1e3*e:1*e)-6e4*t.getTimezoneOffset()},formatDateReadable:function(e,t){var n=10===String(e).length?1e3*e:1*e;t&&(n=this.utcToLocal(n));var o=(new Date).valueOf(),i=o-n;if(i<6e4)return Math.floor(i/1e3)+" 秒前";if(i<36e5)return Math.floor(i/6e4)+" 分钟前";if(i<864e5)return Math.floor(i/36e5)+" 小时前";var a=new Date(n),r=a.getMonth()+1,s=a.getDate(),c=(r>9?"":"0")+r+"月"+(s>9?"":"0")+s+"日";return a.getFullYear()!==(new Date).getFullYear()&&(c=a.getFullYear()+"年"+c),c},canTimeUniversalJump:function(){return this.gteqAndroidVersion("1.1.3")||this.gteqIOSVersion("1.1.12")},jumpColumnIntro:function(e){var t="time://columnIntro?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column/intro.js",data:{id:e}}):location.href="/column/intro/"+e},jumpColumnDetail:function(e){var t="time://columnDetail?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column_detail.js",data:{id:e}}):location.href="/column/"+e},jumpCourseIntro:function(e){var t="time://courseIntro?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/courses/course_intro.js",data:{id:e}}):location.href="/course/intro/"+e},jumpCourseDetail:function(e,t){var n="time://courseDetail?id="+e+"&aid="+t;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",n,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:n}):this.isInApp()?this.notifyApp({type:"jump",path:"views/courses/course_detail.js",data:{id:e,aid:t}}):location.href="/course/detail/"+e+"-"+t},jumpArticle:function(e){var t="time://article?id="+e;p.hasNativeMethod("common.routeJump")?p.call("common.routeJump",t,function(){return console.log("调起成功")}):this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0")?this.notifyApp({type:"urlscheme",url:t}):this.isInApp()?this.notifyApp({type:"jump",path:"views/column/article.js",data:{id:e}}):location.href="/column/article/"+e},parseTimeLink:function(e){if(e.match(/^time:\/\//)){var t=e.match(/([\w]+)\?(.+)/);if(t.length<3)return;var n={};if(t[2].split("&").forEach(function(e){var t=e.match(/([\w]+)=(.+)/);3===t.length&&(n[t[1]]=decodeURIComponent(t[2]))}),p.hasNativeMethod("common.routeJump"))p.call("common.routeJump",e,function(){return console.log("调起成功")});else if(this.gteqAndroidVersion("2.4.0")||this.gteqIOSVersion("2.4.0"))this.notifyApp({type:"urlscheme",url:e});else if(this.canTimeUniversalJump())this.notifyApp({type:"route",name:t[1],data:n});else if(this.isInApp())switch(t[1]){case"mall":this.toast("请升级到极客时间最新版后,点击该链接购买");break;default:this.toast("需要升级到极客时间最新版")}else switch(t[1]){case"mall":var o=e.match(/url=(.+)/i);o.length>1?setTimeout(function(){window.location.href=decodeURIComponent(o[1])},200):this.error("链接出现错误");break;default:this.toast("需要升级到极客时间最新版")}}else window.location.href=e},isPC:function(){for(var e=navigator.userAgent,t=["Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"],n=!0,o=0;o0){n=!1;break}return n},isIOS:function(){return!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)},isIPad:function(){return!!navigator.userAgent.match(/ipad/i)},isAndroid:function(){return!!navigator.userAgent.match(/android/i)},isInWeixin:function(){return!!window.navigator.userAgent.match(/MicroMessenger/i)},isInWXMiniProgram:function(){return window.__wxjs_environment&&"miniprogram"===window.__wxjs_environment||window.navigator.userAgent.toLowerCase().indexOf("miniprogram")>-1},isInAliApp:function(){return!!window.navigator.userAgent.match(/AliApp/i)},isInQQ:function(){return!!navigator.userAgent.match(/QQBrowser/i)},isInWeibo:function(){return!!navigator.userAgent.match(/WeiBo/i)},isInApp:function(){return!!navigator.userAgent.match(/org\.geekbang\.GeekTime/i)},isInAndroidApp:function(){return!!navigator.userAgent.match(/android\.org\.geekbang\.GeekTime/i)},isMac:function(){return navigator.platform.indexOf("Mac")>-1},isWin:function(){return navigator.platform.indexOf("Win")>-1},isIpad:function(){return navigator.userAgent.toLowerCase().indexOf("ipad")>-1},addUrlParam:function(e,t,n){var o=t+"="+encodeURIComponent(n),i="?"+o;return e&&(i=e.replace(new RegExp("([?&])"+t+"[^&]*"),"$1"+o))===e&&e.indexOf(o)<0&&(i+=(e.indexOf("?")>0?"&":"?")+o),i},shareInWeixin:function(e){if(this.isInWeixin()){var t="https://static001.geekbang.org/static/icon/time/logo-180.png";window.wx&&window.wx.ready(function(){window.wx.onMenuShareTimeline({title:e.timelineTitle||"极客时间",link:e.url||window.location.href,imgUrl:e.img||t}),window.wx.onMenuShareAppMessage({title:e.messageTitle||"极客时间",link:e.url||window.location.href,imgUrl:e.img||t,desc:e.desc||""})})}},subString:function(e,t){var n=e.slice(0,t),o=n.replace(/[x00-xff]/g,"").length;switch(o){case 0:return n;case t:return e.slice(0,t>>1);default:var i=t-o,a=e.slice(i,t),r=a.replace(/[x00-xff]/g,"").length;return r?e.slice(0,i)+this.subString(a,r):e.slice(0,i)}},getTicket:function(){var e=window.localStorage.getItem("gtInfo");return e&&JSON.parse(e)?JSON.parse(e).ticket:this.getQueryString(window.location.href,"ticket")},getDeviceId:function(){var e=window.localStorage.getItem("gtInfo");return e&&JSON.parse(e)?JSON.parse(e).deviceId:this.getQueryString(window.location.href,"deviceId")},toast:function(e){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()?this.notifyApp({type:"toast",data:{message:e}}):u.a.prototype.$Message.info({message:e,top:"100px"})},success:function(e){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"toast",data:{message:e}}):u.a.prototype.$Message.success({message:e})},error:function(e,t,n){p.hasNativeMethod("common.toast")?p.call("common.toast",e):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"error",data:{message:e}}):u.a.prototype.$Message.error({message:e,top:t,prefix:n})},parseError:function(e){if(e.data&&e.data.error)if("-2000"===String(e.data.error.code))this.login();else try{this.error(l.a.errorCode[e.data.error.code]||e.data.error.msg)}catch(e){this.error(e)}},canNotifyApp:function(){return window.webkit&&window.webkit.messageHandlers||window.webviewJSInterface&&window.webviewJSInterface},notifyApp:function(e){if(this.canNotifyApp()){var t=this.getQueryString(window.location.href,"utm_term");if("jump"===e.type&&e.data&&t&&(e.data.utm_term=t),this.isInAndroidApp())try{window.webviewJSInterface&&window.webviewJSInterface.notifyWeex(r()(e))}catch(e){console.log(e)}else try{window.webkit.messageHandlers.notifyWeex.postMessage({data:e})}catch(e){console.log(e)}}},login:function(){p.hasNativeMethod("common.routeJump")?p.call("common.routeJump","time://login",function(e){}):this.isInApp()&&this.canNotifyApp()?this.notifyApp({type:"login",data:{}}):this.isInWXMiniProgram()?window.wx&&window.wx.miniProgram.navigateTo({url:"/pages/login/login?redirect="+encodeURIComponent("/pages/gkwebview/gkwebview?url="+window.location.href+"&auth=true")}):window.location.href="//account.geekbang.org/singin?redirect="+encodeURIComponent(window.location.href)},previewImgInApp:function(e,t){if(p.hasNativeMethod("common.viewLargeImage")){var n={images:e,pos:t};p.call("common.viewLargeImage",n,function(){return console.log("调起成功")})}else this.gteqAndroidVersion("1.0.8")?this.notifyApp({type:"img",data:{url:e[t]}}):this.notifyApp({type:"img",data:{imgs:e,index:t}})},html2Text:function(e){var t=document.createElement("div");return t.innerHTML=e,t.innerText},checkGeekbangDomain:function(e){return!!e&&!!e.match(/^https*\:\/\/([\w]+?)\.geekbang\.org/i)},handleMathJax:function(e){if(document.querySelector("script#MathJax"))window.MathJax&&window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,e]);else{var t=document.createElement("script");t.id="MathJax",t.src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML",document.getElementsByTagName("head")[0].appendChild(t),t.onload=function(t){window.MathJax.Hub.Queue(["Typeset",window.MathJax.Hub,e])}}},getSelectionText:function(){var e="";if(void 0!==window.getSelection){var t=window.getSelection();if(t.rangeCount){for(var n=document.createElement("div"),o=0,i=t.rangeCount;o=a){var r=o[n+1];return r?{length:o.length,index:n+1,rest:(e-a)/(r-a)}:{length:o.length,index:n+1,rest:0}}var s=o[n-1];return s?{length:o.length,index:n-1,rest:(e-s)/(a-s)}:{length:o.length,index:n,rest:0}}var c=Math.floor(i/2-1);return e>t[c]?this.getPositionInSortNumberList(e,t.slice(c+1),n+c+1,o):this.getPositionInSortNumberList(e,t.slice(0,c+1),n,o)},html2escape:function(e){return e.replace(/[<>&"\/]/g,function(e){return{"<":"<",">":">","&":"&",'"':""","/":"/"}[e]})},shareToWeibo:function(e){event.preventDefault();var t="https://service.weibo.com/share/share.php?&appkey=3532615846";t=this.addUrlParam(t,"url",e.link||document.location.href),t=this.addUrlParam(t,"title",e.title||document.title),t=this.addUrlParam(t,"content",e.description||""),t=this.addUrlParam(t,"sharesource","weibo"),t=this.addUrlParam(t,"pic",e.img||""),window.open(t,"_blank")},copy:function(e){var t=e;if(void 0!==window.clipboardData){window.clipboardData.setData("Text",t),this.success("复制成功")}else try{var n=document.createElement("input");document.body.appendChild(n),n.setAttribute("value",t),n.select(),document.execCommand("copy")&&(document.execCommand("copy"),this.success("复制成功")),document.body.removeChild(n)}catch(e){this.error("你的浏览器不支持该操作,请手动复制")}},isRealHeightMoreThanVisibleHeight:function(e,t){var n=window.getComputedStyle(e,null),o=n.getPropertyValue("width"),i=n.getPropertyValue("height"),a=n.getPropertyValue("font-size"),r=n.getPropertyValue("line-height"),s=n.getPropertyValue("font-weight"),c=document.createElement("div");c.style.width=o,c.style.fontSize=a,c.style.whiteSpace="normal",c.style.fontWeight=s,c.style.lineHeight=r,c.style.wordBreak="break-all",c.style.position="absolute",c.innerHTML=t,document.body.appendChild(c);var l=c.offsetHeight;return document.body.removeChild(c),l>parseFloat(i)},fixedBody:function(e){var t=0,n=0;return{open:function(){t=document.scrollingElement.scrollTop||document.body.scrollTop,document.body.style.top=-t+"px",document.body.classList.add("fixed"),n=document.body.style.top},close:function(){document.body.classList.remove("fixed"),document.scrollingElement.scrollTop=t,document.body.scrollTop=t,document.body.style.top=n}}}()}}},[570]); \ No newline at end of file diff --git a/re/geekbang/routes/list/source/b683240befccbdcaa86da8f382d3a11a.jpg b/re/geekbang/routes/list/source/b683240befccbdcaa86da8f382d3a11a.jpg new file mode 100644 index 0000000..e6686b2 Binary files /dev/null and b/re/geekbang/routes/list/source/b683240befccbdcaa86da8f382d3a11a.jpg differ diff --git a/re/geekbang/routes/list/source/c674eb1df43af0f1bd2f73f629b532fd.jpg b/re/geekbang/routes/list/source/c674eb1df43af0f1bd2f73f629b532fd.jpg new file mode 100644 index 0000000..582065b Binary files /dev/null and b/re/geekbang/routes/list/source/c674eb1df43af0f1bd2f73f629b532fd.jpg differ diff --git a/re/geekbang/routes/list/source/ca39e9384b7793c4713dcc762da5f5c0.jpg b/re/geekbang/routes/list/source/ca39e9384b7793c4713dcc762da5f5c0.jpg new file mode 100644 index 0000000..350a0d2 Binary files /dev/null and b/re/geekbang/routes/list/source/ca39e9384b7793c4713dcc762da5f5c0.jpg differ diff --git a/re/geekbang/routes/list/source/dfe48389682b96854d36e161b6e8e487.jpg b/re/geekbang/routes/list/source/dfe48389682b96854d36e161b6e8e487.jpg new file mode 100644 index 0000000..ee2a35d Binary files /dev/null and b/re/geekbang/routes/list/source/dfe48389682b96854d36e161b6e8e487.jpg differ diff --git a/re/geekbang/routes/list/source/dfe9e621882fc283612f4f4deb77d1db.jpg b/re/geekbang/routes/list/source/dfe9e621882fc283612f4f4deb77d1db.jpg new file mode 100644 index 0000000..c4d587d Binary files /dev/null and b/re/geekbang/routes/list/source/dfe9e621882fc283612f4f4deb77d1db.jpg differ diff --git a/re/geekbang/routes/list/source/ed2d0aa1e881ee055ba14f58c9603fe0.jpg b/re/geekbang/routes/list/source/ed2d0aa1e881ee055ba14f58c9603fe0.jpg new file mode 100644 index 0000000..e7ec729 Binary files /dev/null and b/re/geekbang/routes/list/source/ed2d0aa1e881ee055ba14f58c9603fe0.jpg differ diff --git a/re/geekbang/routes/list/source/font_372689_nw1guejwd2q.js b/re/geekbang/routes/list/source/font_372689_nw1guejwd2q.js new file mode 100644 index 0000000..e17944a --- /dev/null +++ b/re/geekbang/routes/list/source/font_372689_nw1guejwd2q.js @@ -0,0 +1 @@ +(function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/re/geekbang/routes/list/source/hm.js b/re/geekbang/routes/list/source/hm.js new file mode 100644 index 0000000..4f59052 --- /dev/null +++ b/re/geekbang/routes/list/source/hm.js @@ -0,0 +1,78 @@ +(function(){var h={},mt={},c={id:"022f847c4e3acd44d4a2481d9187f1e6",dm:["time.geekbang.org","horde.geekbang.org","promo.geekbang.org","cashier.geekbang.org","market.geekbang.org"],js:"tongji.baidu.com/hm-web/js/",etrk:[],cetrk:[],icon:'',ctrk:false,align:-1,nv:0,vdur:1800000,age:31536000000,rec:0,rp:[],trust:0,vcard:0,qiao:0,lxb:0,kbtrk:0,pt:0,spa:0,aet:'',hca:'500386218E6AA4F1',conv:0,med:0,cvcc:'',cvcf:[],apps:''};var r=void 0,s=!0,v=null,w=!1;mt.cookie={};mt.cookie.set=function(b,a,e){var d;e.L&&(d=new Date,d.setTime(d.getTime()+e.L));document.cookie=b+"="+a+(e.domain?"; domain="+e.domain:"")+(e.path?"; path="+e.path:"")+(d?"; expires="+d.toGMTString():"")+(e.jc?"; secure":"")};mt.cookie.get=function(b){return(b=RegExp("(^| )"+b+"=([^;]*)(;|$)").exec(document.cookie))?b[2]:v}; +mt.cookie.Gb=function(b,a){try{var e="Hm_ck_"+ +new Date;mt.cookie.set(e,"is-cookie-enabled",{domain:b,path:a,L:r});var d="is-cookie-enabled"===mt.cookie.get(e)?"1":"0";mt.cookie.set(e,"",{domain:b,path:a,L:-1});return d}catch(f){return"0"}};mt.lang={};mt.lang.d=function(b,a){return"[object "+a+"]"==={}.toString.call(b)};mt.lang.ra=function(b){return mt.lang.d(b,"Number")&&isFinite(b)};mt.lang.aa=function(b){return mt.lang.d(b,"String")}; +mt.lang.g=function(b){return b.replace?b.replace(/'/g,"'0").replace(/\*/g,"'1").replace(/!/g,"'2"):b};mt.lang.trim=function(b){return b.replace(/^\s+|\s+$/g,"")};mt.lang.J=function(b,a){var e=w;if(b==v||!mt.lang.d(b,"Array")||a===r)return e;if(Array.prototype.indexOf)e=-1!==b.indexOf(a);else for(var d=0;d"),d=document.body,f=b.length-1;0<=f;f--)if(-1"+d.join(">"):l,f.push(l)),d.unshift(encodeURIComponent(String(a.nodeName).toLowerCase())+(1"));return f};mt.f.tb=function(a){return(a= +mt.f.oa(a,s))&&a.length?String(a[0]):""};mt.f.rb=function(a){return mt.f.oa(a,w)};mt.f.dc=function(a,b){for(b=b.toUpperCase();(a=a.parentNode)&&1==a.nodeType;)if(a.tagName==b)return a;return v};mt.f.lb=function(a){return 9===a.nodeType?a:a.ownerDocument||a.document};mt.f.ec=function(a){var b={top:0,left:0};if(!a)return b;var d=mt.f.lb(a).documentElement;"undefined"!==typeof a.getBoundingClientRect&&(b=a.getBoundingClientRect());return{top:b.top+(window.pageYOffset||d.scrollTop)-(d.clientTop||0),left:b.left+ +(window.pageXOffset||d.scrollLeft)-(d.clientLeft||0)}};mt.f.getAttribute=function(a,b){var d=a.getAttribute&&a.getAttribute(b)||v;if(!d&&a.attributes&&a.attributes.length)for(var f=a.attributes,g=f.length,m=0;ma?"0"+a:a}var e={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};return function(d){switch(typeof d){case "undefined":return"undefined";case "number":return isFinite(d)?String(d):"null";case "string":return b(d);case "boolean":return String(d); +default:if(d===v)return"null";if(d instanceof Array){var f=["["],g=d.length,e,l,p;for(l=0;l(new Date).getTime())return b.substring(a+1)}}else if(mt.localStorage.ea())try{return mt.localStorage.l.load(document.location.hostname),mt.localStorage.l.getAttribute(b)}catch(d){}return v}; +mt.localStorage.remove=function(b){if(window.localStorage)window.localStorage.removeItem(b);else if(mt.localStorage.ea())try{mt.localStorage.l.load(document.location.hostname),mt.localStorage.l.removeAttribute(b),mt.localStorage.l.save(document.location.hostname)}catch(a){}};mt.sessionStorage={};mt.sessionStorage.set=function(b,a){try{window.sessionStorage&&window.sessionStorage.setItem(b,a)}catch(e){}}; +mt.sessionStorage.get=function(b){try{return window.sessionStorage?window.sessionStorage.getItem(b):v}catch(a){return v}};mt.sessionStorage.remove=function(b){try{window.sessionStorage&&window.sessionStorage.removeItem(b)}catch(a){}};mt.Sa={};mt.Sa.log=function(b,a){var e=new Image,d="mini_tangram_log_"+Math.floor(2147483648*Math.random()).toString(36);window[d]=e;e.onload=function(){e.onload=v;e=window[d]=v;a&&a(b)};e.src=b};mt.xa={}; +mt.xa.wb=function(){var b="";if(navigator.plugins&&navigator.mimeTypes.length){var a=navigator.plugins["Shockwave Flash"];a&&a.description&&(b=a.description.replace(/^.*\s+(\S+)\s+\S+$/,"$1"))}else if(window.ActiveXObject)try{if(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))(b=a.GetVariable("$version"))&&(b=b.replace(/^.*\s+(\d+),(\d+).*$/,"$1.$2"))}catch(e){}return b}; +mt.xa.bc=function(b,a,e,d,f){return''};mt.url={}; +mt.url.m=function(b,a){var e=b.match(RegExp("(^|&|\\?|#)("+a+")=([^&#]*)(&|$|#)",""));return e?e[3]:v};mt.url.fc=function(b){return(b=b.match(/^(https?:)\/\//))?b[1]:v};mt.url.ob=function(b){return(b=b.match(/^(https?:\/\/)?([^\/\?#]*)/))?b[2].replace(/.*@/,""):v};mt.url.N=function(b){return(b=mt.url.ob(b))?b.replace(/:\d+$/,""):b};mt.url.oa=function(b){return(b=b.match(/^(https?:\/\/)?[^\/]*(.*)/))?b[2].replace(/[\?#].*/,"").replace(/^$/,"/"):v}; +(function(){function b(){for(var a=w,b=document.getElementsByTagName("script"),d=b.length,d=100l*g.split(">").length)for(g=0;g").length,l=0;l"));a&&(b.d(a,"Object")&&a.Ea)&&a.Ea(e)},Kb:function(a, +b){return function(e){(e.target||e.srcElement).setAttribute(a.da,e.clientX+":"+e.clientY);a&&a.r&&(b?a.r(b):a.r("#"+encodeURIComponent(this.id),e.type))}}};return h.ma=e})(); +(function(){var b=mt.f,a=mt.o,e=mt.event,d=mt.lang,f=h.ma,g=h.V,m=g.T,l={da:"HM_ce",Va:function(){if(c.cetrk&&c.cetrk.length){e.e(document,"click",f.U(l,c.cetrk));for(var d=0,g=c.cetrk.length;d")&&(0===u.indexOf("#")&&(u=u.substring(1)),(u=b.Ga(u))&&e.e(u,"click",f.Kb(l,m)))}}},Ea:function(b){if(c.cetrk&&c.cetrk.length)for(var d=0,f=c.cetrk.length;df.ia||(encodeURIComponent(x.join("!")+a).length>f.ia&&(t.r(x.join("!")),x=[]), +x.push(a))},r:function(a){h.c.b.et=5;h.c.b.ep=a;h.c.b.p=l(m.C("autoEventTracking"));h.c.i();h.c.b.p=""},S:function(){return function(){x&&x.length&&(t.r(x.join("!")),x=[])}}};b.aa(c.aet)&&""!==c.aet&&g.e("pv-b",function(){e.e(document,"click",t.U());"ontouchend"in document&&e.e(window,"touchend",t.U());e.e(window,"unload",t.S())});return t})(); +(function(){var b=mt.event,a=mt.h,e=h.A,d=h.I,f=+new Date,g=[],m=v,l={gb:function(){return function(){h.c&&(h.c.P&&c.aet&&c.aet.length)&&(window.clearTimeout(m),m=window.setTimeout(function(){l.Xa(a.Y()+a.O())},150))}},Xa:function(a){l.ga([+new Date-(h.c.D!==r?h.c.D:f),a].join("*"))},ga:function(a){if(encodeURIComponent(g.join("!")+a).length>e.ia||3a.length)){var b=a[1],e=a[4]||3;if(0b&&0e){k.ca++;for(var f=(h.c.b.cv||"*").split("!"),g=f.length;ga.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!==r&&a!==r){var y=decodeURIComponent(t.getData("Hm_ct_"+c.id)||""),y=b(y,e,1,a);t.setData("Hm_ct_"+c.id,encodeURIComponent(y),c.age)}}},_setVisitTag:function(a){if(!(3>a.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!== +r&&a!==r){var y=k.z.za,y=b(y,e,2,a);k.z.za=y}}},_setPageTag:function(a){if(!(3>a.length)){var e=d.g(a[1]);a=d.g(a[2]);if(e!==r&&a!==r){var y=k.z.page,y=b(y,e,3,a);k.z.page=y}}},_setReferrerOverride:function(a){1c.vdur?1:4;var b=w;this.Z(document.referrer)&&this.Z(document.location.href)?b=s:(b=a.N(document.referrer),b=this.Q(b||"",document.location.hostname));return b?k.G-k.K>c.vdur?1:4:3},Qb:function(){var a,b,d,e,f;k.K=t.getData("Hm_lpvt_"+c.id)||0;13===k.K.length&&(k.K=Math.round(k.K/1E3));b=this.ub();a=4!==b?1:0;if(d=t.getData("Hm_lvt_"+c.id)){e=d.split(",");for(f=e.length-1;0<=f;f--)13===e[f].length&&(e[f]=""+Math.round(e[f]/1E3)); +for(;2592E3e.length?2:3;for(1===a&&e.push(k.G);4=+new Date-g;);};if(c.med)g="/zoosnet",f="swt",m=/swt|zixun|call|chat|zoos|business|talk|kefu|openkf|online|\/LR\/Chatpre\.aspx/i,l={click:function(){for(var a=[],b=p(document.getElementsByTagName("a")),b=[].concat.apply(b,p(document.getElementsByTagName("area"))),b=[].concat.apply(b,p(document.getElementsByTagName("img"))),d,e,f=0,g=b.length;f0){var n=e.split("?")[0],i=e.split("?")[1];return n+=".html",void 0!==i?n+"?"+i:n}}if(!e.jWeixin){var h={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},v=function(){var e={};for(var n in h)e[h[n]]=n;return e}(),I=e.document,S=I.title,y=navigator.userAgent.toLowerCase(),_=navigator.platform.toLowerCase(),w=!(!_.match("mac")&&!_.match("win")),T=-1!=y.indexOf("wxdebugger"),k=-1!=y.indexOf("micromessenger"),M=-1!=y.indexOf("android"),P=-1!=y.indexOf("iphone")||-1!=y.indexOf("ipad"),x=function(){var e=y.match(/micromessenger\/(\d+\.\d+\.\d+)/)||y.match(/micromessenger\/(\d+\.\d+)/);return e?e[1]:""}(),A={initStartTime:p(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},V={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:P?1:M?2:-1,clientVersion:x,url:encodeURIComponent(location.href)},C={},L={_completes:[]},B={state:0,data:{}};f(function(){A.initEndTime=p()});var O=!1,E=[],N={config:function(e){C=e,u("config",e);var n=!1!==C.check;f(function(){if(n)i(h.config,{verifyJsApiList:d(C.jsApiList)},function(){L._complete=function(e){A.preVerifyEndTime=p(),B.state=1,B.data=e},L.success=function(e){V.isPreVerifyOk=0},L.fail=function(e){L._fail?L._fail(e):B.state=-1};var e=L._completes;return e.push(function(){l()}),L.complete=function(n){for(var i=0,t=e.length;i0){var n=E.shift();wx.getLocalImgData(n)}},e))):E.push(e)},getNetworkType:function(e){var n=function(e){var n=e.errMsg;e.errMsg="getNetworkType:ok";var i=e.subtype;if(delete e.subtype,i)e.networkType=i;else{var t=n.indexOf(":"),o=n.substring(t+1);switch(o){case"wifi":case"edge":case"wwan":e.networkType=o;break;default:e.errMsg="getNetworkType:fail"}}return e};i("getNetworkType",{},(e._complete=function(e){e=n(e)},e))},openLocation:function(e){i("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},getLocation:function(e){e=e||{},i(h.getLocation,{type:e.type||"wgs84"},(e._complete=function(e){delete e.type},e))},hideOptionMenu:function(e){i("hideOptionMenu",{},e)},showOptionMenu:function(e){i("showOptionMenu",{},e)},closeWindow:function(e){i("closeWindow",{},e=e||{})},hideMenuItems:function(e){i("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){i("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){i("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){i("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){i("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){if(P){var n=e.resultStr;if(n){var i=JSON.parse(n);e.resultStr=i&&i.scan_code&&i.scan_code.scan_result}}},e))},openAddress:function(e){i(h.openAddress,{},(e._complete=function(e){e=a(e)},e))},openProductSpecificView:function(e){i(h.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,t=[],o=0,r=n.length;o { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./routes/list/browser/index.tsx": +/*!***************************************!*\ + !*** ./routes/list/browser/index.tsx ***! + \***************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); +var react_dom_1 = __importDefault(__webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js")); +var container_1 = __importDefault(__webpack_require__(/*! ../component/container */ "./routes/list/component/container.tsx")); +var App = (function (_super) { + __extends(App, _super); + function App(props) { + var _this = _super.call(this, props) || this; + _this.state = { + columns: window.reactInitData, + filtType: window.reactInitFiltType, + sortType: window.reactInitSortType, + }; + return _this; + } + App.prototype.render = function () { + var _this = this; + console.log("this.state.columns", this.state.columns); + return (react_1.default.createElement(container_1.default, { columns: this.state.columns, filt: function (filtType) { + fetch("/list/data?sort=" + _this.state.sortType + "&filt=" + filtType) + .then(function (res) { return res.json(); }) + .then(function (json) { + _this.setState({ + columns: json.columns, + filtType: filtType, + }); + }); + }, sort: function (sortType) { + fetch("/list/data?sort=" + sortType + "&filt=" + _this.state.filtType) + .then(function (res) { return res.json(); }) + .then(function (json) { + _this.setState({ + columns: json.columns, + sortType: sortType, + }); + }); + } })); + }; + return App; +}(react_1.default.Component)); +react_dom_1.default.render(react_1.default.createElement(App, null), document.getElementById('reactapp')); + + +/***/ }), + +/***/ "./routes/list/component/column_item.tsx": +/*!***********************************************!*\ + !*** ./routes/list/component/column_item.tsx ***! + \***********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); +exports.default = (function (props) { + var column = props.column; + return (react_1.default.createElement("div", { className: "_20Cq3Rn7_0" }, + react_1.default.createElement("div", { className: "_2sej44xY_0" }, + react_1.default.createElement("a", { "data-seo": "", href: "//time.geekbang.org/course/intro/237" }, + react_1.default.createElement("img", { src: column.column_cover, alt: "", className: "_1miPDP4s_0" }), + react_1.default.createElement("span", { className: "_1wLiyUbR_0" }))), + react_1.default.createElement("div", { className: "_3M3E-ESU_0" }, + react_1.default.createElement("div", { className: "_3gQBs_6X_0" }, + react_1.default.createElement("div", { className: "_3G50nw0p_0" }, + react_1.default.createElement("h2", null, column.column_title), + ' ', + react_1.default.createElement("p", null, + column.column_unit, + " ", + react_1.default.createElement("em", null, "|"), + " ", + column.sub_count, + "\u4EBA\u5DF2\u5B66\u4E60")), + react_1.default.createElement("div", { className: "_33lENDr7_0" }, + column.author_name, + " ", + column.author_intro)), + react_1.default.createElement("div", { className: "_14n6BJoa_0" }, + react_1.default.createElement("ul", null, column.articles.map(function (article, index) { + return (react_1.default.createElement("li", { key: article.id }, + react_1.default.createElement("a", { href: "", className: article.is_video_preview ? '_10vvBdC9_0' : '' }, + article.is_video_preview ? (react_1.default.createElement("span", { className: "_ffA7FdL_0" }, "\u514D\u8D39")) : (''), + '0' + index + ' | ' + article.article_title))); + }))), + react_1.default.createElement("div", { className: "_2zRFFX7P_0" }, + react_1.default.createElement("p", { className: "_14cxbu2p_0" }, + react_1.default.createElement("span", { className: "_1BSc9YvC_0" }, + "\u9650\u65F6 \u00A5", + column.column_price / 100), + column.column_price_market ? (react_1.default.createElement("s", { className: "_1EwQIhcU_0" }, + "\u539F\u4EF7 \u00A5", + column.column_price_market / 100)) : ('')), + react_1.default.createElement("div", { className: "_1NLR_mQs_0" }, + react_1.default.createElement("button", { className: "_272_Yrle_0" }, "\u7ACB\u5373\u8BA2\u9605")))))); +}); + + +/***/ }), + +/***/ "./routes/list/component/container.tsx": +/*!*********************************************!*\ + !*** ./routes/list/component/container.tsx ***! + \*********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); +var column_item_1 = __importDefault(__webpack_require__(/*! ./column_item */ "./routes/list/component/column_item.tsx")); +exports.default = (function (props) { + console.log('xxxx', props); + return (react_1.default.createElement("div", { className: '_2lx4a-CP_0' }, + react_1.default.createElement("div", { className: '_3KjZQbwk_0' }, + react_1.default.createElement("div", { className: 'kcMABq6U_0' }, + react_1.default.createElement("span", null, "\u8BFE\u7A0Bxx\uFF1A"), + react_1.default.createElement("a", { className: '_2TWCBjxa_0', onClick: function () { + props.filt(0); + } }, "\u5168\u90E8"), + react_1.default.createElement("a", { className: '_2TWCBjxa_0', onClick: function () { + props.filt(1); + } }, "\u4E13\u680F"), + react_1.default.createElement("a", { className: '_2TWCBjxa_0', onClick: function () { + props.filt(2); + } }, "\u89C6\u9891\u8BFE\u7A0B"), + react_1.default.createElement("a", { className: '_2TWCBjxa_0', onClick: function () { + props.filt(3); + } }, "\u5FAE\u8BFE"))), + react_1.default.createElement("div", { className: '_3hVBef3W_0' }, + react_1.default.createElement("div", { className: '_3S9KmBtG_0' }, + react_1.default.createElement("div", { className: '_1o6EOwiF_0' }, + react_1.default.createElement("div", { className: '_3HUryTHs_0' }, + react_1.default.createElement("a", { className: '_1kRLIDSR_0', onClick: function () { + props.sort(1); + } }, "\u4E0A\u65B0"), + react_1.default.createElement("a", { className: '_1kRLIDSR_0', onClick: function () { + props.sort(2); + } }, "\u8BA2\u9605\u6570"), + react_1.default.createElement("a", { className: '_1kRLIDSR_0', onClick: function () { + props.sort(3); + } }, + "\u4EF7\u683C", + react_1.default.createElement("span", { className: '_1Yk9PA11_0' }, + react_1.default.createElement("i", { className: 'iconfont _2jewjGCJ_0' }, "\uE621"), + ' ', + react_1.default.createElement("i", { className: 'iconfont _38FM8KCt_0' }, "\uE621")))), + react_1.default.createElement("span", { className: 'JfgzzksA_0' }, + props.columns.length, + "\u4E2A\u8BFE\u7A0B")), + react_1.default.createElement("div", null, props.columns.map(function (column) { + return react_1.default.createElement(column_item_1.default, { column: column, key: column.id }); + })), + react_1.default.createElement("div", { className: 'OjL5wNoM_0' }, + react_1.default.createElement("span", null, "\u2014 \u6CA1\u6709\u66F4\u591A\u4E86 \u2014")))))); +}); + + +/***/ }), + +/***/ "./node_modules/object-assign/index.js": +/*!*********************************************!*\ + !*** ./node_modules/object-assign/index.js ***! + \*********************************************/ +/***/ ((module) => { + +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), + +/***/ "./node_modules/react-dom/cjs/react-dom.development.js": +/*!*************************************************************!*\ + !*** ./node_modules/react-dom/cjs/react-dom.development.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +/** @license React v17.0.2 + * react-dom.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (true) { + (function() { +'use strict'; + +var React = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); +var Scheduler = __webpack_require__(/*! scheduler */ "./node_modules/scheduler/index.js"); +var tracing = __webpack_require__(/*! scheduler/tracing */ "./node_modules/scheduler/tracing.js"); + +var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + +// by calls to these methods by a Babel plugin. +// +// In PROD (or in packages without access to React internals), +// they are left as they are instead. + +function warn(format) { + { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + printWarning('warn', format, args); + } +} +function error(format) { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } + + var argsWithFormat = args.map(function (item) { + return '' + item; + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} + +if (!React) { + { + throw Error( "ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM." ); + } +} + +var FunctionComponent = 0; +var ClassComponent = 1; +var IndeterminateComponent = 2; // Before we know whether it is function or class + +var HostRoot = 3; // Root of a host tree. Could be nested inside another node. + +var HostPortal = 4; // A subtree. Could be an entry point to a different renderer. + +var HostComponent = 5; +var HostText = 6; +var Fragment = 7; +var Mode = 8; +var ContextConsumer = 9; +var ContextProvider = 10; +var ForwardRef = 11; +var Profiler = 12; +var SuspenseComponent = 13; +var MemoComponent = 14; +var SimpleMemoComponent = 15; +var LazyComponent = 16; +var IncompleteClassComponent = 17; +var DehydratedFragment = 18; +var SuspenseListComponent = 19; +var FundamentalComponent = 20; +var ScopeComponent = 21; +var Block = 22; +var OffscreenComponent = 23; +var LegacyHiddenComponent = 24; + +// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. + +var enableProfilerTimer = true; // Record durations for commit and passive effects phases. + +var enableFundamentalAPI = false; // Experimental Scope support. +var enableNewReconciler = false; // Errors that are thrown while unmounting (or after in the case of passive effects) +var warnAboutStringRefs = false; + +var allNativeEvents = new Set(); +/** + * Mapping from registration name to event name + */ + + +var registrationNameDependencies = {}; +/** + * Mapping from lowercase registration names to the properly cased version, + * used to warn in the case of missing event handlers. Available + * only in true. + * @type {Object} + */ + +var possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true + +function registerTwoPhaseEvent(registrationName, dependencies) { + registerDirectEvent(registrationName, dependencies); + registerDirectEvent(registrationName + 'Capture', dependencies); +} +function registerDirectEvent(registrationName, dependencies) { + { + if (registrationNameDependencies[registrationName]) { + error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName); + } + } + + registrationNameDependencies[registrationName] = dependencies; + + { + var lowerCasedName = registrationName.toLowerCase(); + possibleRegistrationNames[lowerCasedName] = registrationName; + + if (registrationName === 'onDoubleClick') { + possibleRegistrationNames.ondblclick = registrationName; + } + } + + for (var i = 0; i < dependencies.length; i++) { + allNativeEvents.add(dependencies[i]); + } +} + +var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'); + +// A reserved attribute. +// It is handled by React separately and shouldn't be written to the DOM. +var RESERVED = 0; // A simple string attribute. +// Attributes that aren't in the filter are presumed to have this type. + +var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called +// "enumerated" attributes with "true" and "false" as possible values. +// When true, it should be set to a "true" string. +// When false, it should be set to a "false" string. + +var BOOLEANISH_STRING = 2; // A real boolean attribute. +// When true, it should be present (set either to an empty string or its name). +// When false, it should be omitted. + +var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value. +// When true, it should be present (set either to an empty string or its name). +// When false, it should be omitted. +// For any other value, should be present with that value. + +var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric. +// When falsy, it should be removed. + +var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric. +// When falsy, it should be removed. + +var POSITIVE_NUMERIC = 6; + +/* eslint-disable max-len */ +var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; +/* eslint-enable max-len */ + +var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; +var ROOT_ATTRIBUTE_NAME = 'data-reactroot'; +var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$'); +var hasOwnProperty = Object.prototype.hasOwnProperty; +var illegalAttributeNameCache = {}; +var validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) { + return true; + } + + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) { + return false; + } + + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { + validatedAttributeNameCache[attributeName] = true; + return true; + } + + illegalAttributeNameCache[attributeName] = true; + + { + error('Invalid attribute name: `%s`', attributeName); + } + + return false; +} +function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) { + if (propertyInfo !== null) { + return propertyInfo.type === RESERVED; + } + + if (isCustomComponentTag) { + return false; + } + + if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) { + return true; + } + + return false; +} +function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) { + if (propertyInfo !== null && propertyInfo.type === RESERVED) { + return false; + } + + switch (typeof value) { + case 'function': // $FlowIssue symbol is perfectly valid here + + case 'symbol': + // eslint-disable-line + return true; + + case 'boolean': + { + if (isCustomComponentTag) { + return false; + } + + if (propertyInfo !== null) { + return !propertyInfo.acceptsBooleans; + } else { + var prefix = name.toLowerCase().slice(0, 5); + return prefix !== 'data-' && prefix !== 'aria-'; + } + } + + default: + return false; + } +} +function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) { + if (value === null || typeof value === 'undefined') { + return true; + } + + if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) { + return true; + } + + if (isCustomComponentTag) { + return false; + } + + if (propertyInfo !== null) { + + switch (propertyInfo.type) { + case BOOLEAN: + return !value; + + case OVERLOADED_BOOLEAN: + return value === false; + + case NUMERIC: + return isNaN(value); + + case POSITIVE_NUMERIC: + return isNaN(value) || value < 1; + } + } + + return false; +} +function getPropertyInfo(name) { + return properties.hasOwnProperty(name) ? properties[name] : null; +} + +function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) { + this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN; + this.attributeName = attributeName; + this.attributeNamespace = attributeNamespace; + this.mustUseProperty = mustUseProperty; + this.propertyName = name; + this.type = type; + this.sanitizeURL = sanitizeURL; + this.removeEmptyString = removeEmptyString; +} // When adding attributes to this list, be sure to also add them to +// the `possibleStandardNames` module to ensure casing and incorrect +// name warnings. + + +var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM. + +var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular +// elements (not just inputs). Now that ReactDOMInput assigns to the +// defaultValue property -- do we need this? +'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style']; +reservedProps.forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // A few React string attributes have a different name. +// This is a mapping from React prop names to the attribute names. + +[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) { + var name = _ref[0], + attributeName = _ref[1]; + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are "enumerated" HTML attributes that accept "true" and "false". +// In React, we let users pass `true` and `false` even though technically +// these aren't boolean attributes (they are coerced to strings). + +['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty + name.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are "enumerated" SVG attributes that accept "true" and "false". +// In React, we let users pass `true` and `false` even though technically +// these aren't boolean attributes (they are coerced to strings). +// Since these are SVG attributes, their attribute names are case-sensitive. + +['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML boolean attributes. + +['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM +// on the client side because the browsers are inconsistent. Instead we call focus(). +'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata +'itemScope'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty + name.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are the few React props that we set as DOM properties +// rather than attributes. These are all booleans. + +['checked', // Note: `option.selected` is not updated if `select.multiple` is +// disabled with `removeAttribute`. We have special logic for handling this. +'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML attributes that are "overloaded booleans": they behave like +// booleans, but can also accept a string value. + +['capture', 'download' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML attributes that must be positive numbers. + +['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML attributes that must be numbers. + +['rowSpan', 'start'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty + name.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); +var CAMELIZE = /[\-\:]([a-z])/g; + +var capitalize = function (token) { + return token[1].toUpperCase(); +}; // This is a list of all SVG attributes that need special casing, namespacing, +// or boolean value assignment. Regular attributes that just accept strings +// and have the same names are omitted, just like in the HTML attribute filter. +// Some of these attributes can be hard to find. This list was created by +// scraping the MDN documentation. + + +['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (attributeName) { + var name = attributeName.replace(CAMELIZE, capitalize); + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, null, // attributeNamespace + false, // sanitizeURL + false); +}); // String SVG attributes with the xlink namespace. + +['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (attributeName) { + var name = attributeName.replace(CAMELIZE, capitalize); + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL + false); +}); // String SVG attributes with the xml namespace. + +['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (attributeName) { + var name = attributeName.replace(CAMELIZE, capitalize); + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL + false); +}); // These attribute exists both in HTML and SVG. +// The attribute name is case-sensitive in SVG so we can't just use +// the React name like we do for attributes that exist only in HTML. + +['tabIndex', 'crossOrigin'].forEach(function (attributeName) { + properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty + attributeName.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These attributes accept URLs. These must not allow javascript: URLS. +// These will also need to accept Trusted Types object in the future. + +var xlinkHref = 'xlinkHref'; +properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty +'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL +false); +['src', 'href', 'action', 'formAction'].forEach(function (attributeName) { + properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty + attributeName.toLowerCase(), // attributeName + null, // attributeNamespace + true, // sanitizeURL + true); +}); + +// and any newline or tab are filtered out as if they're not part of the URL. +// https://url.spec.whatwg.org/#url-parsing +// Tab or newline are defined as \r\n\t: +// https://infra.spec.whatwg.org/#ascii-tab-or-newline +// A C0 control is a code point in the range \u0000 NULL to \u001F +// INFORMATION SEPARATOR ONE, inclusive: +// https://infra.spec.whatwg.org/#c0-control-or-space + +/* eslint-disable max-len */ + +var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i; +var didWarn = false; + +function sanitizeURL(url) { + { + if (!didWarn && isJavaScriptProtocol.test(url)) { + didWarn = true; + + error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url)); + } + } +} + +/** + * Get the value for a property on a node. Only used in DEV for SSR validation. + * The "expected" argument is used as a hint of what the expected value is. + * Some properties have multiple equivalent values. + */ +function getValueForProperty(node, name, expected, propertyInfo) { + { + if (propertyInfo.mustUseProperty) { + var propertyName = propertyInfo.propertyName; + return node[propertyName]; + } else { + if ( propertyInfo.sanitizeURL) { + // If we haven't fully disabled javascript: URLs, and if + // the hydration is successful of a javascript: URL, we + // still want to warn on the client. + sanitizeURL('' + expected); + } + + var attributeName = propertyInfo.attributeName; + var stringValue = null; + + if (propertyInfo.type === OVERLOADED_BOOLEAN) { + if (node.hasAttribute(attributeName)) { + var value = node.getAttribute(attributeName); + + if (value === '') { + return true; + } + + if (shouldRemoveAttribute(name, expected, propertyInfo, false)) { + return value; + } + + if (value === '' + expected) { + return expected; + } + + return value; + } + } else if (node.hasAttribute(attributeName)) { + if (shouldRemoveAttribute(name, expected, propertyInfo, false)) { + // We had an attribute but shouldn't have had one, so read it + // for the error message. + return node.getAttribute(attributeName); + } + + if (propertyInfo.type === BOOLEAN) { + // If this was a boolean, it doesn't matter what the value is + // the fact that we have it is the same as the expected. + return expected; + } // Even if this property uses a namespace we use getAttribute + // because we assume its namespaced name is the same as our config. + // To use getAttributeNS we need the local name which we don't have + // in our config atm. + + + stringValue = node.getAttribute(attributeName); + } + + if (shouldRemoveAttribute(name, expected, propertyInfo, false)) { + return stringValue === null ? expected : stringValue; + } else if (stringValue === '' + expected) { + return expected; + } else { + return stringValue; + } + } + } +} +/** + * Get the value for a attribute on a node. Only used in DEV for SSR validation. + * The third argument is used as a hint of what the expected value is. Some + * attributes have multiple equivalent values. + */ + +function getValueForAttribute(node, name, expected) { + { + if (!isAttributeNameSafe(name)) { + return; + } // If the object is an opaque reference ID, it's expected that + // the next prop is different than the server value, so just return + // expected + + + if (isOpaqueHydratingObject(expected)) { + return expected; + } + + if (!node.hasAttribute(name)) { + return expected === undefined ? undefined : null; + } + + var value = node.getAttribute(name); + + if (value === '' + expected) { + return expected; + } + + return value; + } +} +/** + * Sets the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + * @param {*} value + */ + +function setValueForProperty(node, name, value, isCustomComponentTag) { + var propertyInfo = getPropertyInfo(name); + + if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) { + return; + } + + if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) { + value = null; + } // If the prop isn't in the special list, treat it as a simple attribute. + + + if (isCustomComponentTag || propertyInfo === null) { + if (isAttributeNameSafe(name)) { + var _attributeName = name; + + if (value === null) { + node.removeAttribute(_attributeName); + } else { + node.setAttribute(_attributeName, '' + value); + } + } + + return; + } + + var mustUseProperty = propertyInfo.mustUseProperty; + + if (mustUseProperty) { + var propertyName = propertyInfo.propertyName; + + if (value === null) { + var type = propertyInfo.type; + node[propertyName] = type === BOOLEAN ? false : ''; + } else { + // Contrary to `setAttribute`, object properties are properly + // `toString`ed by IE8/9. + node[propertyName] = value; + } + + return; + } // The rest are treated as attributes with special cases. + + + var attributeName = propertyInfo.attributeName, + attributeNamespace = propertyInfo.attributeNamespace; + + if (value === null) { + node.removeAttribute(attributeName); + } else { + var _type = propertyInfo.type; + var attributeValue; + + if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) { + // If attribute type is boolean, we know for sure it won't be an execution sink + // and we won't require Trusted Type here. + attributeValue = ''; + } else { + // `setAttribute` with objects becomes only `[object]` in IE8/9, + // ('' + value) makes it output the correct toString()-value. + { + attributeValue = '' + value; + } + + if (propertyInfo.sanitizeURL) { + sanitizeURL(attributeValue.toString()); + } + } + + if (attributeNamespace) { + node.setAttributeNS(attributeNamespace, attributeName, attributeValue); + } else { + node.setAttribute(attributeName, attributeValue); + } + } +} + +// ATTENTION +// When adding new symbols to this file, +// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var REACT_ELEMENT_TYPE = 0xeac7; +var REACT_PORTAL_TYPE = 0xeaca; +var REACT_FRAGMENT_TYPE = 0xeacb; +var REACT_STRICT_MODE_TYPE = 0xeacc; +var REACT_PROFILER_TYPE = 0xead2; +var REACT_PROVIDER_TYPE = 0xeacd; +var REACT_CONTEXT_TYPE = 0xeace; +var REACT_FORWARD_REF_TYPE = 0xead0; +var REACT_SUSPENSE_TYPE = 0xead1; +var REACT_SUSPENSE_LIST_TYPE = 0xead8; +var REACT_MEMO_TYPE = 0xead3; +var REACT_LAZY_TYPE = 0xead4; +var REACT_BLOCK_TYPE = 0xead9; +var REACT_SERVER_BLOCK_TYPE = 0xeada; +var REACT_FUNDAMENTAL_TYPE = 0xead5; +var REACT_SCOPE_TYPE = 0xead7; +var REACT_OPAQUE_ID_TYPE = 0xeae0; +var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; +var REACT_OFFSCREEN_TYPE = 0xeae2; +var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; + +if (typeof Symbol === 'function' && Symbol.for) { + var symbolFor = Symbol.for; + REACT_ELEMENT_TYPE = symbolFor('react.element'); + REACT_PORTAL_TYPE = symbolFor('react.portal'); + REACT_FRAGMENT_TYPE = symbolFor('react.fragment'); + REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode'); + REACT_PROFILER_TYPE = symbolFor('react.profiler'); + REACT_PROVIDER_TYPE = symbolFor('react.provider'); + REACT_CONTEXT_TYPE = symbolFor('react.context'); + REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); + REACT_SUSPENSE_TYPE = symbolFor('react.suspense'); + REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); + REACT_MEMO_TYPE = symbolFor('react.memo'); + REACT_LAZY_TYPE = symbolFor('react.lazy'); + REACT_BLOCK_TYPE = symbolFor('react.block'); + REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block'); + REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); + REACT_SCOPE_TYPE = symbolFor('react.scope'); + REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id'); + REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); + REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen'); + REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); +} + +var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; +function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable !== 'object') { + return null; + } + + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + + return null; +} + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: _assign({}, props, { + value: prevLog + }), + info: _assign({}, props, { + value: prevInfo + }), + warn: _assign({}, props, { + value: prevWarn + }), + error: _assign({}, props, { + value: prevError + }), + group: _assign({}, props, { + value: prevGroup + }), + groupCollapsed: _assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: _assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if (!fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} + +function describeClassComponentFrame(ctor, source, ownerFn) { + { + return describeNativeComponentFrame(ctor, true); + } +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_BLOCK_TYPE: + return describeFunctionComponentFrame(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +function describeFiber(fiber) { + var owner = fiber._debugOwner ? fiber._debugOwner.type : null ; + var source = fiber._debugSource ; + + switch (fiber.tag) { + case HostComponent: + return describeBuiltInComponentFrame(fiber.type); + + case LazyComponent: + return describeBuiltInComponentFrame('Lazy'); + + case SuspenseComponent: + return describeBuiltInComponentFrame('Suspense'); + + case SuspenseListComponent: + return describeBuiltInComponentFrame('SuspenseList'); + + case FunctionComponent: + case IndeterminateComponent: + case SimpleMemoComponent: + return describeFunctionComponentFrame(fiber.type); + + case ForwardRef: + return describeFunctionComponentFrame(fiber.type.render); + + case Block: + return describeFunctionComponentFrame(fiber.type._render); + + case ClassComponent: + return describeClassComponentFrame(fiber.type); + + default: + return ''; + } +} + +function getStackByFiberInDevAndProd(workInProgress) { + try { + var info = ''; + var node = workInProgress; + + do { + info += describeFiber(node); + node = node.return; + } while (node); + + return info; + } catch (x) { + return '\nError generating stack: ' + x.message + '\n' + x.stack; + } +} + +function getWrappedName(outerType, innerType, wrapperName) { + var functionName = innerType.displayName || innerType.name || ''; + return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); +} + +function getContextName(type) { + return type.displayName || 'Context'; +} + +function getComponentName(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case REACT_FRAGMENT_TYPE: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + return getComponentName(type.type); + + case REACT_BLOCK_TYPE: + return getComponentName(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentName(init(payload)); + } catch (x) { + return null; + } + } + } + } + + return null; +} + +var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; +var current = null; +var isRendering = false; +function getCurrentFiberOwnerNameInDevOrNull() { + { + if (current === null) { + return null; + } + + var owner = current._debugOwner; + + if (owner !== null && typeof owner !== 'undefined') { + return getComponentName(owner.type); + } + } + + return null; +} + +function getCurrentFiberStackInDev() { + { + if (current === null) { + return ''; + } // Safe because if current fiber exists, we are reconciling, + // and it is guaranteed to be the work-in-progress version. + + + return getStackByFiberInDevAndProd(current); + } +} + +function resetCurrentFiber() { + { + ReactDebugCurrentFrame.getCurrentStack = null; + current = null; + isRendering = false; + } +} +function setCurrentFiber(fiber) { + { + ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackInDev; + current = fiber; + isRendering = false; + } +} +function setIsRendering(rendering) { + { + isRendering = rendering; + } +} +function getIsRendering() { + { + return isRendering; + } +} + +// Flow does not allow string concatenation of most non-string types. To work +// around this limitation, we use an opaque type that can only be obtained by +// passing the value through getToStringValue first. +function toString(value) { + return '' + value; +} +function getToStringValue(value) { + switch (typeof value) { + case 'boolean': + case 'number': + case 'object': + case 'string': + case 'undefined': + return value; + + default: + // function, symbol are assigned as empty strings + return ''; + } +} + +var hasReadOnlyValue = { + button: true, + checkbox: true, + image: true, + hidden: true, + radio: true, + reset: true, + submit: true +}; +function checkControlledValueProps(tagName, props) { + { + if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) { + error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + } + + if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) { + error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + } + } +} + +function isCheckable(elem) { + var type = elem.type; + var nodeName = elem.nodeName; + return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio'); +} + +function getTracker(node) { + return node._valueTracker; +} + +function detachTracker(node) { + node._valueTracker = null; +} + +function getValueFromNode(node) { + var value = ''; + + if (!node) { + return value; + } + + if (isCheckable(node)) { + value = node.checked ? 'true' : 'false'; + } else { + value = node.value; + } + + return value; +} + +function trackValueOnNode(node) { + var valueField = isCheckable(node) ? 'checked' : 'value'; + var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); + var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail + // and don't track value will cause over reporting of changes, + // but it's better then a hard failure + // (needed for certain tests that spyOn input values and Safari) + + if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { + return; + } + + var get = descriptor.get, + set = descriptor.set; + Object.defineProperty(node, valueField, { + configurable: true, + get: function () { + return get.call(this); + }, + set: function (value) { + currentValue = '' + value; + set.call(this, value); + } + }); // We could've passed this the first time + // but it triggers a bug in IE11 and Edge 14/15. + // Calling defineProperty() again should be equivalent. + // https://github.com/facebook/react/issues/11768 + + Object.defineProperty(node, valueField, { + enumerable: descriptor.enumerable + }); + var tracker = { + getValue: function () { + return currentValue; + }, + setValue: function (value) { + currentValue = '' + value; + }, + stopTracking: function () { + detachTracker(node); + delete node[valueField]; + } + }; + return tracker; +} + +function track(node) { + if (getTracker(node)) { + return; + } // TODO: Once it's just Fiber we can move this to node._wrapperState + + + node._valueTracker = trackValueOnNode(node); +} +function updateValueIfChanged(node) { + if (!node) { + return false; + } + + var tracker = getTracker(node); // if there is no tracker at this point it's unlikely + // that trying again will succeed + + if (!tracker) { + return true; + } + + var lastValue = tracker.getValue(); + var nextValue = getValueFromNode(node); + + if (nextValue !== lastValue) { + tracker.setValue(nextValue); + return true; + } + + return false; +} + +function getActiveElement(doc) { + doc = doc || (typeof document !== 'undefined' ? document : undefined); + + if (typeof doc === 'undefined') { + return null; + } + + try { + return doc.activeElement || doc.body; + } catch (e) { + return doc.body; + } +} + +var didWarnValueDefaultValue = false; +var didWarnCheckedDefaultChecked = false; +var didWarnControlledToUncontrolled = false; +var didWarnUncontrolledToControlled = false; + +function isControlled(props) { + var usesChecked = props.type === 'checkbox' || props.type === 'radio'; + return usesChecked ? props.checked != null : props.value != null; +} +/** + * Implements an host component that allows setting these optional + * props: `checked`, `value`, `defaultChecked`, and `defaultValue`. + * + * If `checked` or `value` are not supplied (or null/undefined), user actions + * that affect the checked state or value will trigger updates to the element. + * + * If they are supplied (and not null/undefined), the rendered element will not + * trigger updates to the element. Instead, the props must change in order for + * the rendered element to be updated. + * + * The rendered element will be initialized as unchecked (or `defaultChecked`) + * with an empty value (or `defaultValue`). + * + * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html + */ + + +function getHostProps(element, props) { + var node = element; + var checked = props.checked; + + var hostProps = _assign({}, props, { + defaultChecked: undefined, + defaultValue: undefined, + value: undefined, + checked: checked != null ? checked : node._wrapperState.initialChecked + }); + + return hostProps; +} +function initWrapperState(element, props) { + { + checkControlledValueProps('input', props); + + if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) { + error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type); + + didWarnCheckedDefaultChecked = true; + } + + if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) { + error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type); + + didWarnValueDefaultValue = true; + } + } + + var node = element; + var defaultValue = props.defaultValue == null ? '' : props.defaultValue; + node._wrapperState = { + initialChecked: props.checked != null ? props.checked : props.defaultChecked, + initialValue: getToStringValue(props.value != null ? props.value : defaultValue), + controlled: isControlled(props) + }; +} +function updateChecked(element, props) { + var node = element; + var checked = props.checked; + + if (checked != null) { + setValueForProperty(node, 'checked', checked, false); + } +} +function updateWrapper(element, props) { + var node = element; + + { + var controlled = isControlled(props); + + if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) { + error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components'); + + didWarnUncontrolledToControlled = true; + } + + if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) { + error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components'); + + didWarnControlledToUncontrolled = true; + } + } + + updateChecked(element, props); + var value = getToStringValue(props.value); + var type = props.type; + + if (value != null) { + if (type === 'number') { + if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible. + // eslint-disable-next-line + node.value != value) { + node.value = toString(value); + } + } else if (node.value !== toString(value)) { + node.value = toString(value); + } + } else if (type === 'submit' || type === 'reset') { + // Submit/reset inputs need the attribute removed completely to avoid + // blank-text buttons. + node.removeAttribute('value'); + return; + } + + { + // When syncing the value attribute, the value comes from a cascade of + // properties: + // 1. The value React property + // 2. The defaultValue React property + // 3. Otherwise there should be no change + if (props.hasOwnProperty('value')) { + setDefaultValue(node, props.type, value); + } else if (props.hasOwnProperty('defaultValue')) { + setDefaultValue(node, props.type, getToStringValue(props.defaultValue)); + } + } + + { + // When syncing the checked attribute, it only changes when it needs + // to be removed, such as transitioning from a checkbox into a text input + if (props.checked == null && props.defaultChecked != null) { + node.defaultChecked = !!props.defaultChecked; + } + } +} +function postMountWrapper(element, props, isHydrating) { + var node = element; // Do not assign value if it is already set. This prevents user text input + // from being lost during SSR hydration. + + if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) { + var type = props.type; + var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the + // default value provided by the browser. See: #12872 + + if (isButton && (props.value === undefined || props.value === null)) { + return; + } + + var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input + // from being lost during SSR hydration. + + if (!isHydrating) { + { + // When syncing the value attribute, the value property should use + // the wrapperState._initialValue property. This uses: + // + // 1. The value React property when present + // 2. The defaultValue React property when present + // 3. An empty string + if (initialValue !== node.value) { + node.value = initialValue; + } + } + } + + { + // Otherwise, the value attribute is synchronized to the property, + // so we assign defaultValue to the same thing as the value property + // assignment step above. + node.defaultValue = initialValue; + } + } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug + // this is needed to work around a chrome bug where setting defaultChecked + // will sometimes influence the value of checked (even after detachment). + // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416 + // We need to temporarily unset name to avoid disrupting radio button groups. + + + var name = node.name; + + if (name !== '') { + node.name = ''; + } + + { + // When syncing the checked attribute, both the checked property and + // attribute are assigned at the same time using defaultChecked. This uses: + // + // 1. The checked React property when present + // 2. The defaultChecked React property when present + // 3. Otherwise, false + node.defaultChecked = !node.defaultChecked; + node.defaultChecked = !!node._wrapperState.initialChecked; + } + + if (name !== '') { + node.name = name; + } +} +function restoreControlledState(element, props) { + var node = element; + updateWrapper(node, props); + updateNamedCousins(node, props); +} + +function updateNamedCousins(rootNode, props) { + var name = props.name; + + if (props.type === 'radio' && name != null) { + var queryRoot = rootNode; + + while (queryRoot.parentNode) { + queryRoot = queryRoot.parentNode; + } // If `rootNode.form` was non-null, then we could try `form.elements`, + // but that sometimes behaves strangely in IE8. We could also try using + // `form.getElementsByName`, but that will only return direct children + // and won't include inputs that use the HTML5 `form=` attribute. Since + // the input might not even be in a form. It might not even be in the + // document. Let's just use the local `querySelectorAll` to ensure we don't + // miss anything. + + + var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]'); + + for (var i = 0; i < group.length; i++) { + var otherNode = group[i]; + + if (otherNode === rootNode || otherNode.form !== rootNode.form) { + continue; + } // This will throw if radio buttons rendered by different copies of React + // and the same name are rendered into the same form (same as #1939). + // That's probably okay; we don't support it just as we don't support + // mixing React radio buttons with non-React ones. + + + var otherProps = getFiberCurrentPropsFromNode(otherNode); + + if (!otherProps) { + { + throw Error( "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported." ); + } + } // We need update the tracked value on the named cousin since the value + // was changed but the input saw no event or value set + + + updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that + // was previously checked to update will cause it to be come re-checked + // as appropriate. + + updateWrapper(otherNode, otherProps); + } + } +} // In Chrome, assigning defaultValue to certain input types triggers input validation. +// For number inputs, the display value loses trailing decimal points. For email inputs, +// Chrome raises "The specified value is not a valid email address". +// +// Here we check to see if the defaultValue has actually changed, avoiding these problems +// when the user is inputting text +// +// https://github.com/facebook/react/issues/7253 + + +function setDefaultValue(node, type, value) { + if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js + type !== 'number' || getActiveElement(node.ownerDocument) !== node) { + if (value == null) { + node.defaultValue = toString(node._wrapperState.initialValue); + } else if (node.defaultValue !== toString(value)) { + node.defaultValue = toString(value); + } + } +} + +var didWarnSelectedSetOnOption = false; +var didWarnInvalidChild = false; + +function flattenChildren(children) { + var content = ''; // Flatten children. We'll warn if they are invalid + // during validateProps() which runs for hydration too. + // Note that this would throw on non-element objects. + // Elements are stringified (which is normally irrelevant + // but matters for ). + + React.Children.forEach(children, function (child) { + if (child == null) { + return; + } + + content += child; // Note: we don't warn about invalid children here. + // Instead, this is done separately below so that + // it happens during the hydration code path too. + }); + return content; +} +/** + * Implements an