tujidelv 7 rokov pred
commit
01ace424d6
53 zmenil súbory, kde vykonal 10562 pridanie a 0 odobranie
  1. 7 0
      - 副本.gitignore
  2. 12 0
      .gitignore
  3. 5 0
      README.md
  4. 19 0
      TOC.md
  5. 81 0
      _config - 副本.yml
  6. 95 0
      _config.yml
  7. 3 0
      hd.sh
  8. 3 0
      hs.sh
  9. 19 0
      package - 副本.json
  10. 3849 0
      package-lock - 副本.json
  11. 3849 0
      package-lock.json
  12. 24 0
      package.json
  13. 4 0
      scaffolds/draft.md
  14. 4 0
      scaffolds/page.md
  15. 6 0
      scaffolds/post.md
  16. 7 0
      source/404/index.md
  17. 1 0
      source/CNAME
  18. 3 0
      source/README.md
  19. 456 0
      source/_posts/af-hexo.md
  20. BIN
      source/_posts/af-hexo/sf-hexo-001.png
  21. BIN
      source/_posts/af-hexo/sf-hexo-002.png
  22. BIN
      source/_posts/af-hexo/sf-hexo-003.png
  23. BIN
      source/_posts/af-hexo/sf-hexo-004.png
  24. 244 0
      source/_posts/af-nodejs.md
  25. 242 0
      source/_posts/dl-markdown.md
  26. 62 0
      source/_posts/st-ashampoo-snap.md
  27. BIN
      source/_posts/st-ashampoo-snap/dowload.png
  28. BIN
      source/_posts/st-ashampoo-snap/st-ashampoo-snap-001.png
  29. BIN
      source/_posts/st-ashampoo-snap/st-ashampoo-snap-002.png
  30. BIN
      source/_posts/st-ashampoo-snap/st-ashampoo-snap-003.png
  31. BIN
      source/_posts/st-ashampoo-snap/st-ashampoo-snap-004.png
  32. BIN
      source/_posts/st-ashampoo-snap/st-ashampoo-snap-005.png
  33. BIN
      source/_posts/st-ashampoo-snap/st-ashampoo-snap-006.png
  34. 93 0
      source/_posts/st-eclipse.md
  35. 66 0
      source/_posts/st-finalshell.md
  36. BIN
      source/_posts/st-finalshell/dowload.png
  37. BIN
      source/_posts/st-finalshell/st-finalshell-001.png
  38. BIN
      source/_posts/st-finalshell/st-finalshell-002.png
  39. BIN
      source/_posts/st-finalshell/st-finalshell-003.png
  40. BIN
      source/_posts/st-finalshell/st-finalshell-004.png
  41. 235 0
      source/_posts/st-git-basic.md
  42. BIN
      source/_posts/st-git-basic/st-git-basic-001.png
  43. BIN
      source/_posts/st-git-basic/st-git-basic-002.png
  44. BIN
      source/_posts/st-git-basic/st-git-basic-003.png
  45. 246 0
      source/_posts/st-git-remote.md
  46. 81 0
      source/_posts/st-git-workflow.md
  47. BIN
      source/_posts/st-git-workflow/st-git-workflow-001.png
  48. BIN
      source/_posts/st-git-workflow/st-git-workflow-002.png
  49. 354 0
      source/_posts/st-idea-advanced.md
  50. 467 0
      source/_posts/st-idea-basic.md
  51. 15 0
      source/about/index.md
  52. 4 0
      source/categories/index.md
  53. 6 0
      source/tags/index.md

+ 7 - 0
- 副本.gitignore

@@ -0,0 +1,7 @@
+.DS_Store
+Thumbs.db
+db.json
+*.log
+node_modules/
+public/
+.deploy*/

+ 12 - 0
.gitignore

@@ -0,0 +1,12 @@
+.DS_Store
+Thumbs.db
+db.json
+*.log
+node_modules/
+public/
+.deploy*/
+themes/
+
+### IntelliJ IDEA ###
+.idea/
+*.iml

+ 5 - 0
README.md

@@ -0,0 +1,5 @@
+# 目的
+
+- 该仓库主要用于记录本人技术博客的 Markdown 源文件,方便后续管理。
+- 技术博客:<https://tujidelv.github.io>
+- [目录](TOC.md)

+ 19 - 0
TOC.md

@@ -0,0 +1,19 @@
+- **Operating System**
+    - 更新中...
+- **Development Language**
+    - [Markdown 札记](source/_posts/dl-markdown.md)
+- **Application Framework**
+    - [NodeJS 札记](source/_posts/af-nodejs.md)
+    - [Hexo 札记](source/_posts/af-hexo.md)
+- **Software Tool**
+    - [Eclipse 札记](source/_posts/st-eclipse.md)
+    - [IDEA 札记:基础](source/_posts/st-idea-basic.md)
+    - [IDEA 札记:进阶](source/_posts/st-idea-advanced.md)
+    - [Git 札记:基础](source/_posts/st-git-basic.md)
+    - [Git 札记:远程库](source/_posts/st-git-remote.md)
+    - [Git 札记:工作流](source/_posts/st-git-workflow.md)
+    - [超强 SSH 客户端 FinalShell](source/_posts/st-finalshell.md)
+    - [阿香婆屏幕截图工具 Ashampoo Snap](source/_posts/st-ashampoo-snap.md)
+    - <del>[最强屏幕录像软件 Camtasia Studio](source/_posts/st-camtasia-studio.md)</del>
+- **Scientific Internet**
+    - 更新中...

+ 81 - 0
_config - 副本.yml

@@ -0,0 +1,81 @@
+# Hexo Configuration
+## Docs: https://hexo.io/docs/configuration.html
+## Source: https://github.com/hexojs/hexo/
+
+# Site
+title: Hexo
+subtitle:
+description:
+keywords:
+author: John Doe
+language:
+timezone:
+
+# URL
+## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
+url: http://yoursite.com
+root: /
+permalink: :year/:month/:day/:title/
+permalink_defaults:
+
+# Directory
+source_dir: source
+public_dir: public
+tag_dir: tags
+archive_dir: archives
+category_dir: categories
+code_dir: downloads/code
+i18n_dir: :lang
+skip_render:
+
+# Writing
+new_post_name: :title.md # File name of new posts
+default_layout: post
+titlecase: false # Transform title into titlecase
+external_link: true # Open external links in new tab
+filename_case: 0
+render_drafts: false
+post_asset_folder: false
+relative_link: false
+future: true
+highlight:
+  enable: true
+  line_number: true
+  auto_detect: false
+  tab_replace:
+  
+# Home page setting
+# path: Root path for your blogs index page. (default = '')
+# per_page: Posts displayed per page. (0 = disable pagination)
+# order_by: Posts order. (Order by date descending by default)
+index_generator:
+  path: ''
+  per_page: 10
+  order_by: -date
+  
+# Category & Tag
+default_category: uncategorized
+category_map:
+tag_map:
+
+# Date / Time format
+## Hexo uses Moment.js to parse and display date
+## You can customize the date format as defined in
+## http://momentjs.com/docs/#/displaying/format/
+date_format: YYYY-MM-DD
+time_format: HH:mm:ss
+
+# Pagination
+## Set per_page to 0 to disable pagination
+per_page: 10
+pagination_dir: page
+
+# Extensions
+## Plugins: https://hexo.io/plugins/
+## Themes: https://hexo.io/themes/
+theme: landscape
+
+# Deployment
+## Docs: https://hexo.io/docs/deployment.html
+deploy:
+  type:

+ 95 - 0
_config.yml

@@ -0,0 +1,95 @@
+# Hexo Configuration
+## Docs: https://hexo.io/docs/configuration.html
+## Source: https://github.com/hexojs/hexo/
+
+# Site,网站,这一块区域主要是设置博客的主要说明,需要注意的是:每个冒号后面都是有一个空格,然后再书写自己的内容
+title: Tujidelv Code # 网站标题
+subtitle: 好记性不如烂笔头 # 网站副标题
+description: Tujidelv的技术小窝 # 网站描述,主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词
+keywords:
+author: Tujide.lv # 您的名字,用于主题显示文章的作者
+language: zh-CN # 网站使用的语言,也可以用zh-Hans
+timezone:
+
+# URL,网址,这一块区域一般可以设置的是 url 这个参数,比如我要设置绑定域名的,这里就需要填写我的域名信息
+## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
+## 如果您的网站存放在子目录中,例如 http://yoursite.com/blog,则请将您的 url 设为 http://yoursite.com/blog 并把 root 设为 /blog/。
+url: https://www.lvzhiqiang.top # 网址
+root: / # 网站根目录
+permalink: :year/:month/:day/:title/ # 文章的永久链接格式
+permalink_defaults:
+
+# Directory,目录,这一块一般不需要修改
+source_dir: source # 资源文件夹,这个文件夹用来存放内容。
+public_dir: public # 公共文件夹,这个文件夹用于存放生成的站点文件。
+tag_dir: tags # 标签文件夹
+archive_dir: archives # 归档文件夹
+category_dir: categories # 分类文件夹
+code_dir: downloads/code # Include code 文件夹
+i18n_dir: :lang # 国际化(i18n)文件夹
+skip_render: # 跳过指定文件的渲染,您可使用 glob 表达式来匹配路径。
+- README.md
+
+# Writing,文章,这一块一般不需要修改
+new_post_name: :title.md # Hexo 默认以标题做为文件名称,设为 :year-:month-:day-:title.md 可让您更方便的通过日期来管理文章
+default_layout: post # 预设布局,Hexo 有三种默认布局:post、page 和 draft,分别对应不同的路径:source/_posts、source和source/_drafts
+titlecase: false # 把标题转换为 title case
+external_link: true # 在新标签中打开链接
+filename_case: 0 # 把文件名称转换为 (1) 小写或 (2) 大写
+render_drafts: false # 显示草稿,草稿默认不会显示在页面中
+post_asset_folder: true # 启动 Asset 文件夹
+relative_link: false # 把链接改为与根目录的相对位址 
+future: true # 显示未来的文章
+highlight: # 代码块的设置
+  enable: false
+  line_number: true
+  auto_detect: false
+  tab_replace:
+  
+# Home page setting
+# path: Root path for your blogs index page. (default = '')
+# per_page: Posts displayed per page. (0 = disable pagination)
+# order_by: Posts order. (Order by date descending by default)
+index_generator:
+  path: ''
+  per_page: 10
+  order_by: -date
+  
+# Category & Tag,分类 & 标签,这一块一般不需要修改
+default_category: uncategorized # 默认分类
+category_map:
+tag_map:
+
+# Date / Time format,日期 / 时间格式,这一块一般不需要修改
+## Hexo uses Moment.js to parse and display date
+## You can customize the date format as defined in
+## http://momentjs.com/docs/#/displaying/format/
+date_format: YYYY-MM-DD # 日期格式
+time_format: HH:mm:ss # 时间格式
+
+# Pagination,分页,这一块一般不需要修改
+## Set per_page to 0 to disable pagination
+per_page: 10 # 每页显示的文章量 (0 = 关闭分页功能)
+pagination_dir: page # 分页目录
+
+# Extensions,扩展
+## Plugins: https://hexo.io/plugins/
+plugin:
+- hexo-generator-feed
+- hexo-generator-sitemap
+#Feed Atom
+feed:
+type: atom
+path: atom.xml
+limit: 20
+## Themes: https://hexo.io/themes/
+theme: 3-hexo # 当前主题名称。值为false时禁用主题
+
+# Deployment,部署
+## 这里是重点,这里是修改发布地址,因为我们前面已经将本地 SSH 密钥信息添加到 Github 设置里面了,所以只要我们电脑里面持有那两个密钥文件就可以无需密码地跟 Github 做同步。
+## 需要注意的是这里的 repo 采用的是 ssh 的地址,而不是 https 的。分支我们默认采用 master 分支。
+## Docs: https://hexo.io/docs/deployment.html
+deploy:
+  type: git
+  repo: git@github.com:tujidelv/tujidelv.github.io.git
+  branch: master

+ 3 - 0
hd.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+hexo clean && hexo g && hexo d

+ 3 - 0
hs.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+hexo clean && hexo g && hexo s

+ 19 - 0
package - 副本.json

@@ -0,0 +1,19 @@
+{
+  "name": "hexo-site",
+  "version": "0.0.0",
+  "private": true,
+  "hexo": {
+    "version": ""
+  },
+  "dependencies": {
+    "hexo": "^3.7.0",
+    "hexo-generator-archive": "^0.1.5",
+    "hexo-generator-category": "^0.1.3",
+    "hexo-generator-index": "^0.2.1",
+    "hexo-generator-tag": "^0.2.0",
+    "hexo-renderer-ejs": "^0.3.1",
+    "hexo-renderer-stylus": "^0.3.3",
+    "hexo-renderer-marked": "^0.3.2",
+    "hexo-server": "^0.3.1"
+  }
+}

+ 3849 - 0
package-lock - 副本.json

@@ -0,0 +1,3849 @@
+{
+  "name": "hexo-site",
+  "version": "0.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "JSONStream": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+      "requires": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      }
+    },
+    "a-sync-waterfall": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
+      "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA=="
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "requires": {
+        "mime-types": "~2.1.18",
+        "negotiator": "0.6.1"
+      }
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "requires": {
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "anymatch": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+      "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+      "requires": {
+        "micromatch": "^2.1.5",
+        "normalize-path": "^2.0.0"
+      }
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+      "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+      "requires": {
+        "arr-flatten": "^1.0.1"
+      }
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+    },
+    "array-unique": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+      "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+    },
+    "async": {
+      "version": "0.2.10",
+      "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz",
+      "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "requires": {
+        "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"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "basic-auth": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+      "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "binary-extensions": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+      "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg=="
+    },
+    "bluebird": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+      "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+      "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+      "requires": {
+        "expand-range": "^1.8.1",
+        "preserve": "^0.2.0",
+        "repeat-element": "^1.1.2"
+      }
+    },
+    "browser-fingerprint": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz",
+      "integrity": "sha1-jfPNyiW/fVs1QtYVRdcwBT/OYEo="
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "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": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
+    "camelcase": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "requires": {
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
+      }
+    },
+    "chalk": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+      "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "cheerio": {
+      "version": "0.22.0",
+      "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+      "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+      "requires": {
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.0",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash.assignin": "^4.0.9",
+        "lodash.bind": "^4.1.4",
+        "lodash.defaults": "^4.0.1",
+        "lodash.filter": "^4.4.0",
+        "lodash.flatten": "^4.2.0",
+        "lodash.foreach": "^4.3.0",
+        "lodash.map": "^4.4.0",
+        "lodash.merge": "^4.4.0",
+        "lodash.pick": "^4.2.1",
+        "lodash.reduce": "^4.4.0",
+        "lodash.reject": "^4.4.0",
+        "lodash.some": "^4.4.0"
+      }
+    },
+    "chokidar": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+      "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+      "requires": {
+        "anymatch": "^1.3.0",
+        "async-each": "^1.0.0",
+        "fsevents": "^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"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "command-exists": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
+      "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw=="
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+    },
+    "compressible": {
+      "version": "2.0.15",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
+      "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
+      "requires": {
+        "mime-db": ">= 1.36.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+      "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.14",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.1",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+      "requires": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+    },
+    "core-js": {
+      "version": "1.2.7",
+      "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+      "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "cross-spawn": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+      "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "which": "^1.2.9"
+      }
+    },
+    "css-parse": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs="
+    },
+    "css-select": {
+      "version": "1.2.0",
+      "resolved": "http://registry.npmjs.org/css-select/-/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.2",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
+      "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
+    },
+    "cuid": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.3.8.tgz",
+      "integrity": "sha1-S4deCWm612T37AcGz0T1+wgx9rc=",
+      "requires": {
+        "browser-fingerprint": "0.0.1",
+        "core-js": "^1.1.1",
+        "node-fingerprint": "0.0.2"
+      }
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+    },
+    "dom-serializer": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/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.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+        }
+      }
+    },
+    "domelementtype": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
+      "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA=="
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+    },
+    "ejs": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+      "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ=="
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+    },
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+    },
+    "expand-brackets": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+      "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+      "requires": {
+        "is-posix-bracket": "^0.1.0"
+      }
+    },
+    "expand-range": {
+      "version": "1.8.2",
+      "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+      "requires": {
+        "fill-range": "^2.1.0"
+      }
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+      "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+      "requires": {
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "filename-regex": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+    },
+    "fill-range": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+      "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+      "requires": {
+        "is-number": "^2.1.0",
+        "isobject": "^2.0.0",
+        "randomatic": "^3.0.0",
+        "repeat-element": "^1.1.2",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/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"
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+    },
+    "for-own": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fsevents": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+      "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+      "optional": true,
+      "requires": {
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.4",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.5.1",
+          "bundled": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "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"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "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"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.21",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": "^2.1.0"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true
+        },
+        "minipass": {
+          "version": "2.2.4",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.1.0",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.0",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "debug": "^2.1.2",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.0",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.0",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.1.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.3",
+          "bundled": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.1.10",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "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": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.7",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.5.1",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "optional": true,
+          "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"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.0.5"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.1",
+          "bundled": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.5.0",
+          "bundled": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.0.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.2.4",
+            "minizlib": "^1.1.0",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "yallist": {
+          "version": "3.0.2",
+          "bundled": true
+        }
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+    },
+    "glob": {
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+      "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+      "optional": true,
+      "requires": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "2 || 3",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+      "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+      "requires": {
+        "is-glob": "^2.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.15",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hexo": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/hexo/-/hexo-3.8.0.tgz",
+      "integrity": "sha512-qMk0TZ+ErKMD25R+HMHFvbyTAcKszmGZYtQHT2pzVnZgitkJCShZ7b2qDbedtWBBizhutNbKkhQ4D3Dqivaviw==",
+      "requires": {
+        "abbrev": "^1.0.7",
+        "archy": "^1.0.0",
+        "bluebird": "^3.4.0",
+        "chalk": "^2.3.1",
+        "cheerio": "0.22.0",
+        "hexo-cli": "^1.1.0",
+        "hexo-front-matter": "^0.2.2",
+        "hexo-fs": "^0.2.0",
+        "hexo-i18n": "^0.2.1",
+        "hexo-log": "^0.2.0",
+        "hexo-util": "^0.6.3",
+        "js-yaml": "^3.6.1",
+        "lodash": "^4.17.5",
+        "minimatch": "^3.0.4",
+        "moment": "^2.19.4",
+        "moment-timezone": "^0.5.14",
+        "nunjucks": "^3.1.2",
+        "pretty-hrtime": "^1.0.2",
+        "resolve": "^1.5.0",
+        "strip-ansi": "^4.0.0",
+        "strip-indent": "^2.0.0",
+        "swig-extras": "0.0.1",
+        "swig-templates": "^2.0.2",
+        "text-table": "^0.2.0",
+        "tildify": "^1.2.0",
+        "titlecase": "^1.1.2",
+        "warehouse": "^2.2.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "hexo-cli": {
+          "version": "1.1.0",
+          "resolved": "http://registry.npmjs.org/hexo-cli/-/hexo-cli-1.1.0.tgz",
+          "integrity": "sha512-IWQPppwgmj1iBUcP5mpcMg3Tre6a8Qlr8ejXw6naZiJNSepSgh4mS3KiNPKDa2qQIgPDqJYJzNVFLw+RLA9CkA==",
+          "requires": {
+            "abbrev": "^1.0.7",
+            "bluebird": "^3.4.0",
+            "chalk": "^1.1.3",
+            "command-exists": "^1.2.0",
+            "hexo-fs": "^0.2.0",
+            "hexo-log": "^0.2.0",
+            "hexo-util": "^0.6.0",
+            "minimist": "^1.2.0",
+            "object-assign": "^4.1.0",
+            "resolve": "^1.5.0",
+            "tildify": "^1.2.0"
+          },
+          "dependencies": {
+            "chalk": {
+              "version": "1.1.3",
+              "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+              "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+              "requires": {
+                "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"
+              }
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+              "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            }
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "hexo-bunyan": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hexo-bunyan/-/hexo-bunyan-1.0.0.tgz",
+      "integrity": "sha512-RymT8Ck+K77mLt9BEYNb4uyfC7RIQnU5N3laXowMrS28jj2h89VHJCOnhV00mmta4fHRqNa07kP1Hrn17nvMkQ==",
+      "requires": {
+        "moment": "^2.10.6",
+        "mv": "~2",
+        "safe-json-stringify": "~1"
+      }
+    },
+    "hexo-front-matter": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/hexo-front-matter/-/hexo-front-matter-0.2.3.tgz",
+      "integrity": "sha1-x8qO9CDqNr2F6ECKLoyb9J76YF4=",
+      "requires": {
+        "js-yaml": "^3.6.1"
+      }
+    },
+    "hexo-fs": {
+      "version": "0.2.3",
+      "resolved": "http://registry.npmjs.org/hexo-fs/-/hexo-fs-0.2.3.tgz",
+      "integrity": "sha512-rLB1rMVUW3csAljvJgHfyjemL0BrmcUZfBf9hJe6S0pA53igFa3ON0PFwomvoLs1Wdmjs9Awnw9Tru4PjWFSlQ==",
+      "requires": {
+        "bluebird": "^3.4.0",
+        "chokidar": "^1.5.2",
+        "escape-string-regexp": "^1.0.5",
+        "graceful-fs": "^4.1.4"
+      }
+    },
+    "hexo-generator-archive": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/hexo-generator-archive/-/hexo-generator-archive-0.1.5.tgz",
+      "integrity": "sha512-jPbMtibqkJnAX3hCwhYhK3r6cqy9OKQsVEScjk7LDok+iPmFmkKCNdU/OccxGe1CWAZpT+ta4+LknwNeHG2G4w==",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^2.0.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo="
+        }
+      }
+    },
+    "hexo-generator-category": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/hexo-generator-category/-/hexo-generator-category-0.1.3.tgz",
+      "integrity": "sha1-uealhiUwqDvdfaTIGcG58+TMtLI=",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^2.0.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo="
+        }
+      }
+    },
+    "hexo-generator-index": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/hexo-generator-index/-/hexo-generator-index-0.2.1.tgz",
+      "integrity": "sha1-kEIin8rHmq9wBXXaGTMr8/fuXF0=",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "hexo-generator-tag": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/hexo-generator-tag/-/hexo-generator-tag-0.2.0.tgz",
+      "integrity": "sha1-xXFYRrtB5X2cIMHWbX2yGhq/emI=",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "hexo-i18n": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/hexo-i18n/-/hexo-i18n-0.2.1.tgz",
+      "integrity": "sha1-hPFBQyvwnYtVjth4xygWS20c1t4=",
+      "requires": {
+        "sprintf-js": "^1.0.2"
+      }
+    },
+    "hexo-log": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/hexo-log/-/hexo-log-0.2.0.tgz",
+      "integrity": "sha512-fzoc+GQexxPPILTjoOQILnA3ZG2MFgqMBVel4xvJ11pXptw9+f97ynTgDAExXafyp9Nz2ChXRuqlCYgPtZSlxQ==",
+      "requires": {
+        "chalk": "^1.1.1",
+        "hexo-bunyan": "^1.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "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"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "hexo-pagination": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/hexo-pagination/-/hexo-pagination-0.0.2.tgz",
+      "integrity": "sha1-jPRwx9sN5bGKOSanbesZQBXffys=",
+      "requires": {
+        "utils-merge": "^1.0.0"
+      }
+    },
+    "hexo-renderer-ejs": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/hexo-renderer-ejs/-/hexo-renderer-ejs-0.3.1.tgz",
+      "integrity": "sha512-XN8pYJU+Wr3dT8ipqEPRlOBySJpd1C5NUBBzgZpVSVBC/6L36O0YZI/Qd5NxQqwfGfSuKQ8N5iMyjmRXSR1MdA==",
+      "requires": {
+        "ejs": "^2.3.4",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "hexo-renderer-marked": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/hexo-renderer-marked/-/hexo-renderer-marked-0.3.2.tgz",
+      "integrity": "sha512-joSLeHB0YRkuViIPQlRz4A+zfJKPNHT+rABFgPHiT1zL9eeTUPxoLL4h7kcgOwRLAontVScaxP2Sie15mNitFg==",
+      "requires": {
+        "hexo-util": "^0.6.2",
+        "marked": "^0.3.9",
+        "object-assign": "^4.1.1",
+        "strip-indent": "^2.0.0"
+      }
+    },
+    "hexo-renderer-stylus": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/hexo-renderer-stylus/-/hexo-renderer-stylus-0.3.3.tgz",
+      "integrity": "sha1-xU6ifh/Y48ipp6hM+6itNUEiyn8=",
+      "requires": {
+        "nib": "^1.1.2",
+        "stylus": "^0.54.5"
+      }
+    },
+    "hexo-server": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/hexo-server/-/hexo-server-0.3.3.tgz",
+      "integrity": "sha512-70zQaf4Z+bj37Kvq7tEyn9WHH+Xj7uqbvOlGp8pHaOzWLp/riX3rMq3nnQKA2P8dKkBaM0/72IqjJPWu2Zt2WA==",
+      "requires": {
+        "bluebird": "^3.5.1",
+        "chalk": "^1.1.3",
+        "compression": "^1.7.3",
+        "connect": "^3.6.6",
+        "mime": "^1.6.0",
+        "morgan": "^1.9.0",
+        "object-assign": "^4.1.1",
+        "opn": "^5.3.0",
+        "serve-static": "^1.13.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "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"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "hexo-util": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-0.6.3.tgz",
+      "integrity": "sha512-zPxaqCWZz3/25SAB4FlrRtWktJ+Pr+vBiv/nyHpXKgXPt1m70liViKlRwWLqDmRjJ72x6/k4qCEeXHajvcGHUw==",
+      "requires": {
+        "bluebird": "^3.4.0",
+        "camel-case": "^3.0.0",
+        "cross-spawn": "^4.0.0",
+        "highlight.js": "^9.4.0",
+        "html-entities": "^1.2.0",
+        "striptags": "^2.1.1"
+      }
+    },
+    "highlight.js": {
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz",
+      "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A=="
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+    },
+    "htmlparser2": {
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+      "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+      "requires": {
+        "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"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "1.3.0",
+          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+          "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
+        }
+      }
+    },
+    "http-errors": {
+      "version": "1.6.3",
+      "resolved": "http://registry.npmjs.org/http-errors/-/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.4.0 < 2"
+      },
+      "dependencies": {
+        "statuses": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+        }
+      }
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+    },
+    "invert-kv": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+        }
+      }
+    },
+    "is-dotfile": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+    },
+    "is-equal-shallow": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+    },
+    "is-extglob": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+      "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+      "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+      "requires": {
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "is-number": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+      "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "requires": {
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "is-posix-bracket": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+    },
+    "is-primitive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+    },
+    "isobject": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+      "requires": {
+        "isarray": "1.0.0"
+      }
+    },
+    "js-yaml": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+      "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsonparse": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.11",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+    },
+    "lodash.assignin": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+      "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI="
+    },
+    "lodash.bind": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+      "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU="
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+      "optional": true
+    },
+    "lodash.defaults": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+      "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
+    },
+    "lodash.filter": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+      "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4="
+    },
+    "lodash.flatten": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+      "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
+    },
+    "lodash.foreach": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+      "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM="
+    },
+    "lodash.map": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+      "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM="
+    },
+    "lodash.merge": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+      "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ=="
+    },
+    "lodash.pick": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM="
+    },
+    "lodash.reduce": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+      "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs="
+    },
+    "lodash.reject": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+      "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU="
+    },
+    "lodash.some": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+      "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0="
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+    },
+    "lru-cache": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
+      "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^3.0.2"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "markdown": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz",
+      "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=",
+      "requires": {
+        "nopt": "~2.1.1"
+      }
+    },
+    "marked": {
+      "version": "0.3.19",
+      "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+      "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
+    },
+    "math-random": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+      "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w="
+    },
+    "micromatch": {
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+      "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+      "requires": {
+        "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": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+    },
+    "mime-db": {
+      "version": "1.37.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+      "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
+    },
+    "mime-types": {
+      "version": "2.1.21",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+      "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+      "requires": {
+        "mime-db": "~1.37.0"
+      }
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+        }
+      }
+    },
+    "moment": {
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
+      "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
+    },
+    "moment-timezone": {
+      "version": "0.5.23",
+      "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz",
+      "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==",
+      "requires": {
+        "moment": ">= 2.9.0"
+      }
+    },
+    "morgan": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
+      "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
+      "requires": {
+        "basic-auth": "~2.0.0",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "on-headers": "~1.0.1"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+    },
+    "mv": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+      "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
+      "optional": true,
+      "requires": {
+        "mkdirp": "~0.5.1",
+        "ncp": "~2.0.0",
+        "rimraf": "~2.4.0"
+      }
+    },
+    "nan": {
+      "version": "2.11.1",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
+      "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "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-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"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "ncp": {
+      "version": "2.0.0",
+      "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+      "optional": true
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+    },
+    "nib": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/nib/-/nib-1.1.2.tgz",
+      "integrity": "sha1-amnt5AgblcDe+L4CSkyK4MLLtsc=",
+      "requires": {
+        "stylus": "0.54.5"
+      }
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-fingerprint": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/node-fingerprint/-/node-fingerprint-0.0.2.tgz",
+      "integrity": "sha1-Mcur63GmeufdWn3AQuUcPHWGhQE="
+    },
+    "nopt": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
+      "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=",
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+    },
+    "nunjucks": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.1.4.tgz",
+      "integrity": "sha512-OIbdsl7jAZpw5V6GIa6wJc2AKCC/JSwuVdNKuVpFZ+eB3kYugoGF6OVN/jKNFe52782Uj89n0pT0DiSS1KPbxA==",
+      "requires": {
+        "a-sync-waterfall": "^1.0.0",
+        "asap": "^2.0.3",
+        "chokidar": "^2.0.0",
+        "postinstall-build": "^5.0.1",
+        "yargs": "^3.32.0"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "optional": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          }
+        },
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+          "optional": true
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "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.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "chokidar": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+          "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+          "optional": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.0",
+            "braces": "^2.3.0",
+            "fsevents": "^1.2.2",
+            "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"
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "optional": true,
+          "requires": {
+            "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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "optional": true,
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "optional": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "optional": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "optional": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "optional": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "optional": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "optional": true,
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "optional": true
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "optional": 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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "optional": true,
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "optional": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "optional": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "optional": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "optional": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "optional": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+        },
+        "is-glob": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+          "optional": true,
+          "requires": {
+            "is-extglob": "^2.1.1"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "optional": true,
+          "requires": {
+            "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"
+          }
+        }
+      }
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "requires": {
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "requires": {
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+      "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "opn": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.10",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+        }
+      }
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-locale": {
+      "version": "1.4.0",
+      "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+      "requires": {
+        "lcid": "^1.0.0"
+      }
+    },
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "optional": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+    },
+    "postinstall-build": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz",
+      "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg=="
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+    },
+    "pretty-hrtime": {
+      "version": "1.0.3",
+      "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+    },
+    "randomatic": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+      "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+      "requires": {
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "range-parser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+    },
+    "readable-stream": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz",
+      "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "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.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "requires": {
+            "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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "requires": {
+            "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"
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+          "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"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "regex-cache": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+      "requires": {
+        "is-equal-shallow": "^0.1.3"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+    },
+    "resolve": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+    },
+    "right-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+      "requires": {
+        "align-text": "^0.1.1"
+      }
+    },
+    "rimraf": {
+      "version": "2.4.5",
+      "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+      "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+      "optional": true,
+      "requires": {
+        "glob": "^6.0.1"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "safe-json-stringify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
+      "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+      "optional": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "sax": {
+      "version": "0.5.8",
+      "resolved": "http://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+      "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
+    },
+    "send": {
+      "version": "0.16.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+      "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.4.0"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+          "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+        },
+        "statuses": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+          "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
+        "send": "0.16.2"
+      }
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "requires": {
+        "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"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "requires": {
+        "kind-of": "^3.2.0"
+      }
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "requires": {
+        "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": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+      "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
+    },
+    "string-width": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "string_decoder": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+      "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+      "requires": {
+        "ansi-regex": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        }
+      }
+    },
+    "strip-indent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
+    },
+    "striptags": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/striptags/-/striptags-2.2.1.tgz",
+      "integrity": "sha1-TEULcI1BuL85zyTEn/I0/Gqr/TI="
+    },
+    "stylus": {
+      "version": "0.54.5",
+      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
+      "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
+      "requires": {
+        "css-parse": "1.7.x",
+        "debug": "*",
+        "glob": "7.0.x",
+        "mkdirp": "0.5.x",
+        "sax": "0.5.x",
+        "source-map": "0.1.x"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.0.6",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+          "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+          "requires": {
+            "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"
+          }
+        },
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "swig-extras": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/swig-extras/-/swig-extras-0.0.1.tgz",
+      "integrity": "sha1-tQP+3jcqucJMasaMr2VrzvGHIyg=",
+      "requires": {
+        "markdown": "~0.5.0"
+      }
+    },
+    "swig-templates": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/swig-templates/-/swig-templates-2.0.3.tgz",
+      "integrity": "sha512-QojPTuZWdpznSZWZDB63/grsZuDwT/7geMeGlftbJXDoYBIZEnTcKvz4iwYDv3SwfPX9/B4RtGRSXNnm3S2wwg==",
+      "requires": {
+        "optimist": "~0.6",
+        "uglify-js": "2.6.0"
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+    },
+    "tildify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "titlecase": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/titlecase/-/titlecase-1.1.2.tgz",
+      "integrity": "sha1-eBE9EQgIa4MmMxoyR96o9aSeqFM="
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "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": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        }
+      }
+    },
+    "uglify-js": {
+      "version": "2.6.0",
+      "resolved": "http://registry.npmjs.org/uglify-js/-/uglify-js-2.6.0.tgz",
+      "integrity": "sha1-JeqhzDVQ45QQzu+v0c+7a20V8AE=",
+      "requires": {
+        "async": "~0.2.6",
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+        },
+        "cliui": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+          "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+          "requires": {
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
+            "wordwrap": "0.0.2"
+          }
+        },
+        "window-size": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+          "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+        },
+        "wordwrap": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+        },
+        "yargs": {
+          "version": "3.10.0",
+          "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+          "requires": {
+            "camelcase": "^1.0.2",
+            "cliui": "^2.1.0",
+            "decamelize": "^1.0.0",
+            "window-size": "0.1.0"
+          }
+        }
+      }
+    },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "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": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        }
+      }
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "upath": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+      "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+      "optional": true
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+    },
+    "warehouse": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/warehouse/-/warehouse-2.2.0.tgz",
+      "integrity": "sha1-XQnWSUKZK+Zn2PfIagnCuK6gQGI=",
+      "requires": {
+        "JSONStream": "^1.0.7",
+        "bluebird": "^3.2.2",
+        "cuid": "~1.3.8",
+        "graceful-fs": "^4.1.3",
+        "is-plain-object": "^2.0.1",
+        "lodash": "^4.2.1"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "window-size": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+    },
+    "wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+    },
+    "wrap-ansi": {
+      "version": "2.1.0",
+      "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "y18n": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+    },
+    "yallist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+      "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+    },
+    "yargs": {
+      "version": "3.32.0",
+      "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+      "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+      "requires": {
+        "camelcase": "^2.0.1",
+        "cliui": "^3.0.3",
+        "decamelize": "^1.1.1",
+        "os-locale": "^1.4.0",
+        "string-width": "^1.0.1",
+        "window-size": "^0.1.4",
+        "y18n": "^3.2.0"
+      }
+    }
+  }
+}

+ 3849 - 0
package-lock.json

@@ -0,0 +1,3849 @@
+{
+  "name": "hexo-site",
+  "version": "0.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "JSONStream": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+      "requires": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      }
+    },
+    "a-sync-waterfall": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
+      "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA=="
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "requires": {
+        "mime-types": "~2.1.18",
+        "negotiator": "0.6.1"
+      }
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "requires": {
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "anymatch": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+      "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+      "requires": {
+        "micromatch": "^2.1.5",
+        "normalize-path": "^2.0.0"
+      }
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+      "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+      "requires": {
+        "arr-flatten": "^1.0.1"
+      }
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+    },
+    "array-unique": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+      "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+    },
+    "async": {
+      "version": "0.2.10",
+      "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz",
+      "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "requires": {
+        "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"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "basic-auth": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+      "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "binary-extensions": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+      "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg=="
+    },
+    "bluebird": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+      "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw=="
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+      "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+      "requires": {
+        "expand-range": "^1.8.1",
+        "preserve": "^0.2.0",
+        "repeat-element": "^1.1.2"
+      }
+    },
+    "browser-fingerprint": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz",
+      "integrity": "sha1-jfPNyiW/fVs1QtYVRdcwBT/OYEo="
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "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": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
+    "camelcase": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "requires": {
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
+      }
+    },
+    "chalk": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+      "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "cheerio": {
+      "version": "0.22.0",
+      "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+      "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+      "requires": {
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.0",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash.assignin": "^4.0.9",
+        "lodash.bind": "^4.1.4",
+        "lodash.defaults": "^4.0.1",
+        "lodash.filter": "^4.4.0",
+        "lodash.flatten": "^4.2.0",
+        "lodash.foreach": "^4.3.0",
+        "lodash.map": "^4.4.0",
+        "lodash.merge": "^4.4.0",
+        "lodash.pick": "^4.2.1",
+        "lodash.reduce": "^4.4.0",
+        "lodash.reject": "^4.4.0",
+        "lodash.some": "^4.4.0"
+      }
+    },
+    "chokidar": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+      "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+      "requires": {
+        "anymatch": "^1.3.0",
+        "async-each": "^1.0.0",
+        "fsevents": "^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"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "command-exists": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
+      "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw=="
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+    },
+    "compressible": {
+      "version": "2.0.15",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
+      "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
+      "requires": {
+        "mime-db": ">= 1.36.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+      "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.14",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.1",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+      "requires": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+    },
+    "core-js": {
+      "version": "1.2.7",
+      "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+      "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "cross-spawn": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+      "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "which": "^1.2.9"
+      }
+    },
+    "css-parse": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs="
+    },
+    "css-select": {
+      "version": "1.2.0",
+      "resolved": "http://registry.npmjs.org/css-select/-/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.2",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
+      "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
+    },
+    "cuid": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.3.8.tgz",
+      "integrity": "sha1-S4deCWm612T37AcGz0T1+wgx9rc=",
+      "requires": {
+        "browser-fingerprint": "0.0.1",
+        "core-js": "^1.1.1",
+        "node-fingerprint": "0.0.2"
+      }
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+    },
+    "dom-serializer": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/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.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+        }
+      }
+    },
+    "domelementtype": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz",
+      "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA=="
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+    },
+    "ejs": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+      "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ=="
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+    },
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+    },
+    "expand-brackets": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+      "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+      "requires": {
+        "is-posix-bracket": "^0.1.0"
+      }
+    },
+    "expand-range": {
+      "version": "1.8.2",
+      "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+      "requires": {
+        "fill-range": "^2.1.0"
+      }
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+      "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+      "requires": {
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "filename-regex": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+    },
+    "fill-range": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+      "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+      "requires": {
+        "is-number": "^2.1.0",
+        "isobject": "^2.0.0",
+        "randomatic": "^3.0.0",
+        "repeat-element": "^1.1.2",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/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"
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+    },
+    "for-own": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fsevents": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+      "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+      "optional": true,
+      "requires": {
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.4",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.5.1",
+          "bundled": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "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"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "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"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.21",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": "^2.1.0"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true
+        },
+        "minipass": {
+          "version": "2.2.4",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.1.0",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.0",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "debug": "^2.1.2",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.0",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.0",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.1.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.3",
+          "bundled": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.1.10",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "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": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.7",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.5.1",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "optional": true,
+          "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"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.0.5"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.1",
+          "bundled": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.5.0",
+          "bundled": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.0.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.2.4",
+            "minizlib": "^1.1.0",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "yallist": {
+          "version": "3.0.2",
+          "bundled": true
+        }
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+    },
+    "glob": {
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+      "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+      "optional": true,
+      "requires": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "2 || 3",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+      "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+      "requires": {
+        "is-glob": "^2.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.15",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hexo": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/hexo/-/hexo-3.8.0.tgz",
+      "integrity": "sha512-qMk0TZ+ErKMD25R+HMHFvbyTAcKszmGZYtQHT2pzVnZgitkJCShZ7b2qDbedtWBBizhutNbKkhQ4D3Dqivaviw==",
+      "requires": {
+        "abbrev": "^1.0.7",
+        "archy": "^1.0.0",
+        "bluebird": "^3.4.0",
+        "chalk": "^2.3.1",
+        "cheerio": "0.22.0",
+        "hexo-cli": "^1.1.0",
+        "hexo-front-matter": "^0.2.2",
+        "hexo-fs": "^0.2.0",
+        "hexo-i18n": "^0.2.1",
+        "hexo-log": "^0.2.0",
+        "hexo-util": "^0.6.3",
+        "js-yaml": "^3.6.1",
+        "lodash": "^4.17.5",
+        "minimatch": "^3.0.4",
+        "moment": "^2.19.4",
+        "moment-timezone": "^0.5.14",
+        "nunjucks": "^3.1.2",
+        "pretty-hrtime": "^1.0.2",
+        "resolve": "^1.5.0",
+        "strip-ansi": "^4.0.0",
+        "strip-indent": "^2.0.0",
+        "swig-extras": "0.0.1",
+        "swig-templates": "^2.0.2",
+        "text-table": "^0.2.0",
+        "tildify": "^1.2.0",
+        "titlecase": "^1.1.2",
+        "warehouse": "^2.2.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "hexo-cli": {
+          "version": "1.1.0",
+          "resolved": "http://registry.npmjs.org/hexo-cli/-/hexo-cli-1.1.0.tgz",
+          "integrity": "sha512-IWQPppwgmj1iBUcP5mpcMg3Tre6a8Qlr8ejXw6naZiJNSepSgh4mS3KiNPKDa2qQIgPDqJYJzNVFLw+RLA9CkA==",
+          "requires": {
+            "abbrev": "^1.0.7",
+            "bluebird": "^3.4.0",
+            "chalk": "^1.1.3",
+            "command-exists": "^1.2.0",
+            "hexo-fs": "^0.2.0",
+            "hexo-log": "^0.2.0",
+            "hexo-util": "^0.6.0",
+            "minimist": "^1.2.0",
+            "object-assign": "^4.1.0",
+            "resolve": "^1.5.0",
+            "tildify": "^1.2.0"
+          },
+          "dependencies": {
+            "chalk": {
+              "version": "1.1.3",
+              "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+              "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+              "requires": {
+                "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"
+              }
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+              "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            }
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "hexo-bunyan": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hexo-bunyan/-/hexo-bunyan-1.0.0.tgz",
+      "integrity": "sha512-RymT8Ck+K77mLt9BEYNb4uyfC7RIQnU5N3laXowMrS28jj2h89VHJCOnhV00mmta4fHRqNa07kP1Hrn17nvMkQ==",
+      "requires": {
+        "moment": "^2.10.6",
+        "mv": "~2",
+        "safe-json-stringify": "~1"
+      }
+    },
+    "hexo-front-matter": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/hexo-front-matter/-/hexo-front-matter-0.2.3.tgz",
+      "integrity": "sha1-x8qO9CDqNr2F6ECKLoyb9J76YF4=",
+      "requires": {
+        "js-yaml": "^3.6.1"
+      }
+    },
+    "hexo-fs": {
+      "version": "0.2.3",
+      "resolved": "http://registry.npmjs.org/hexo-fs/-/hexo-fs-0.2.3.tgz",
+      "integrity": "sha512-rLB1rMVUW3csAljvJgHfyjemL0BrmcUZfBf9hJe6S0pA53igFa3ON0PFwomvoLs1Wdmjs9Awnw9Tru4PjWFSlQ==",
+      "requires": {
+        "bluebird": "^3.4.0",
+        "chokidar": "^1.5.2",
+        "escape-string-regexp": "^1.0.5",
+        "graceful-fs": "^4.1.4"
+      }
+    },
+    "hexo-generator-archive": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/hexo-generator-archive/-/hexo-generator-archive-0.1.5.tgz",
+      "integrity": "sha512-jPbMtibqkJnAX3hCwhYhK3r6cqy9OKQsVEScjk7LDok+iPmFmkKCNdU/OccxGe1CWAZpT+ta4+LknwNeHG2G4w==",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^2.0.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo="
+        }
+      }
+    },
+    "hexo-generator-category": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/hexo-generator-category/-/hexo-generator-category-0.1.3.tgz",
+      "integrity": "sha1-uealhiUwqDvdfaTIGcG58+TMtLI=",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^2.0.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo="
+        }
+      }
+    },
+    "hexo-generator-index": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/hexo-generator-index/-/hexo-generator-index-0.2.1.tgz",
+      "integrity": "sha1-kEIin8rHmq9wBXXaGTMr8/fuXF0=",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "hexo-generator-tag": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/hexo-generator-tag/-/hexo-generator-tag-0.2.0.tgz",
+      "integrity": "sha1-xXFYRrtB5X2cIMHWbX2yGhq/emI=",
+      "requires": {
+        "hexo-pagination": "0.0.2",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "hexo-i18n": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/hexo-i18n/-/hexo-i18n-0.2.1.tgz",
+      "integrity": "sha1-hPFBQyvwnYtVjth4xygWS20c1t4=",
+      "requires": {
+        "sprintf-js": "^1.0.2"
+      }
+    },
+    "hexo-log": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/hexo-log/-/hexo-log-0.2.0.tgz",
+      "integrity": "sha512-fzoc+GQexxPPILTjoOQILnA3ZG2MFgqMBVel4xvJ11pXptw9+f97ynTgDAExXafyp9Nz2ChXRuqlCYgPtZSlxQ==",
+      "requires": {
+        "chalk": "^1.1.1",
+        "hexo-bunyan": "^1.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "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"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "hexo-pagination": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/hexo-pagination/-/hexo-pagination-0.0.2.tgz",
+      "integrity": "sha1-jPRwx9sN5bGKOSanbesZQBXffys=",
+      "requires": {
+        "utils-merge": "^1.0.0"
+      }
+    },
+    "hexo-renderer-ejs": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/hexo-renderer-ejs/-/hexo-renderer-ejs-0.3.1.tgz",
+      "integrity": "sha512-XN8pYJU+Wr3dT8ipqEPRlOBySJpd1C5NUBBzgZpVSVBC/6L36O0YZI/Qd5NxQqwfGfSuKQ8N5iMyjmRXSR1MdA==",
+      "requires": {
+        "ejs": "^2.3.4",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "hexo-renderer-marked": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/hexo-renderer-marked/-/hexo-renderer-marked-0.3.2.tgz",
+      "integrity": "sha512-joSLeHB0YRkuViIPQlRz4A+zfJKPNHT+rABFgPHiT1zL9eeTUPxoLL4h7kcgOwRLAontVScaxP2Sie15mNitFg==",
+      "requires": {
+        "hexo-util": "^0.6.2",
+        "marked": "^0.3.9",
+        "object-assign": "^4.1.1",
+        "strip-indent": "^2.0.0"
+      }
+    },
+    "hexo-renderer-stylus": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/hexo-renderer-stylus/-/hexo-renderer-stylus-0.3.3.tgz",
+      "integrity": "sha1-xU6ifh/Y48ipp6hM+6itNUEiyn8=",
+      "requires": {
+        "nib": "^1.1.2",
+        "stylus": "^0.54.5"
+      }
+    },
+    "hexo-server": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/hexo-server/-/hexo-server-0.3.3.tgz",
+      "integrity": "sha512-70zQaf4Z+bj37Kvq7tEyn9WHH+Xj7uqbvOlGp8pHaOzWLp/riX3rMq3nnQKA2P8dKkBaM0/72IqjJPWu2Zt2WA==",
+      "requires": {
+        "bluebird": "^3.5.1",
+        "chalk": "^1.1.3",
+        "compression": "^1.7.3",
+        "connect": "^3.6.6",
+        "mime": "^1.6.0",
+        "morgan": "^1.9.0",
+        "object-assign": "^4.1.1",
+        "opn": "^5.3.0",
+        "serve-static": "^1.13.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "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"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "hexo-util": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-0.6.3.tgz",
+      "integrity": "sha512-zPxaqCWZz3/25SAB4FlrRtWktJ+Pr+vBiv/nyHpXKgXPt1m70liViKlRwWLqDmRjJ72x6/k4qCEeXHajvcGHUw==",
+      "requires": {
+        "bluebird": "^3.4.0",
+        "camel-case": "^3.0.0",
+        "cross-spawn": "^4.0.0",
+        "highlight.js": "^9.4.0",
+        "html-entities": "^1.2.0",
+        "striptags": "^2.1.1"
+      }
+    },
+    "highlight.js": {
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz",
+      "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A=="
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+    },
+    "htmlparser2": {
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+      "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+      "requires": {
+        "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"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "1.3.0",
+          "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+          "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
+        }
+      }
+    },
+    "http-errors": {
+      "version": "1.6.3",
+      "resolved": "http://registry.npmjs.org/http-errors/-/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.4.0 < 2"
+      },
+      "dependencies": {
+        "statuses": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+        }
+      }
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+    },
+    "invert-kv": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+        }
+      }
+    },
+    "is-dotfile": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+    },
+    "is-equal-shallow": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+    },
+    "is-extglob": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+      "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+      "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+      "requires": {
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "is-number": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+      "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "requires": {
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "is-posix-bracket": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+    },
+    "is-primitive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+    },
+    "isobject": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+      "requires": {
+        "isarray": "1.0.0"
+      }
+    },
+    "js-yaml": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+      "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsonparse": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.11",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+    },
+    "lodash.assignin": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+      "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI="
+    },
+    "lodash.bind": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+      "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU="
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+      "optional": true
+    },
+    "lodash.defaults": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+      "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
+    },
+    "lodash.filter": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+      "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4="
+    },
+    "lodash.flatten": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+      "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8="
+    },
+    "lodash.foreach": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+      "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM="
+    },
+    "lodash.map": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+      "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM="
+    },
+    "lodash.merge": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+      "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ=="
+    },
+    "lodash.pick": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+      "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM="
+    },
+    "lodash.reduce": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+      "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs="
+    },
+    "lodash.reject": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+      "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU="
+    },
+    "lodash.some": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+      "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0="
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+    },
+    "lru-cache": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
+      "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^3.0.2"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "markdown": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz",
+      "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=",
+      "requires": {
+        "nopt": "~2.1.1"
+      }
+    },
+    "marked": {
+      "version": "0.3.19",
+      "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+      "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg=="
+    },
+    "math-random": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+      "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w="
+    },
+    "micromatch": {
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+      "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+      "requires": {
+        "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": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+    },
+    "mime-db": {
+      "version": "1.37.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+      "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
+    },
+    "mime-types": {
+      "version": "2.1.21",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+      "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+      "requires": {
+        "mime-db": "~1.37.0"
+      }
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+        }
+      }
+    },
+    "moment": {
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
+      "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
+    },
+    "moment-timezone": {
+      "version": "0.5.23",
+      "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz",
+      "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==",
+      "requires": {
+        "moment": ">= 2.9.0"
+      }
+    },
+    "morgan": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
+      "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
+      "requires": {
+        "basic-auth": "~2.0.0",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "on-headers": "~1.0.1"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+    },
+    "mv": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+      "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
+      "optional": true,
+      "requires": {
+        "mkdirp": "~0.5.1",
+        "ncp": "~2.0.0",
+        "rimraf": "~2.4.0"
+      }
+    },
+    "nan": {
+      "version": "2.11.1",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
+      "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "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-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"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "ncp": {
+      "version": "2.0.0",
+      "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+      "optional": true
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+    },
+    "nib": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/nib/-/nib-1.1.2.tgz",
+      "integrity": "sha1-amnt5AgblcDe+L4CSkyK4MLLtsc=",
+      "requires": {
+        "stylus": "0.54.5"
+      }
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-fingerprint": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/node-fingerprint/-/node-fingerprint-0.0.2.tgz",
+      "integrity": "sha1-Mcur63GmeufdWn3AQuUcPHWGhQE="
+    },
+    "nopt": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
+      "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=",
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+    },
+    "nunjucks": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.1.4.tgz",
+      "integrity": "sha512-OIbdsl7jAZpw5V6GIa6wJc2AKCC/JSwuVdNKuVpFZ+eB3kYugoGF6OVN/jKNFe52782Uj89n0pT0DiSS1KPbxA==",
+      "requires": {
+        "a-sync-waterfall": "^1.0.0",
+        "asap": "^2.0.3",
+        "chokidar": "^2.0.0",
+        "postinstall-build": "^5.0.1",
+        "yargs": "^3.32.0"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+          "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+          "optional": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          }
+        },
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+          "optional": true
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "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.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "chokidar": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+          "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+          "optional": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.0",
+            "braces": "^2.3.0",
+            "fsevents": "^1.2.2",
+            "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"
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "optional": true,
+          "requires": {
+            "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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "optional": true,
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "optional": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "optional": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "optional": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "optional": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "optional": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "optional": true,
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "optional": true
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "optional": 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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "optional": true,
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "optional": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "optional": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "optional": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "optional": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "optional": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+        },
+        "is-glob": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+          "optional": true,
+          "requires": {
+            "is-extglob": "^2.1.1"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "optional": true,
+          "requires": {
+            "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"
+          }
+        }
+      }
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "requires": {
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "requires": {
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+      "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "opn": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.10",
+          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+        }
+      }
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-locale": {
+      "version": "1.4.0",
+      "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+      "requires": {
+        "lcid": "^1.0.0"
+      }
+    },
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "optional": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+    },
+    "postinstall-build": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz",
+      "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg=="
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+    },
+    "pretty-hrtime": {
+      "version": "1.0.3",
+      "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+    },
+    "randomatic": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+      "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+      "requires": {
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "range-parser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+    },
+    "readable-stream": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz",
+      "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "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.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "requires": {
+            "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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "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"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "requires": {
+            "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"
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+          "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"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "regex-cache": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+      "requires": {
+        "is-equal-shallow": "^0.1.3"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+    },
+    "resolve": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+    },
+    "right-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+      "requires": {
+        "align-text": "^0.1.1"
+      }
+    },
+    "rimraf": {
+      "version": "2.4.5",
+      "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+      "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+      "optional": true,
+      "requires": {
+        "glob": "^6.0.1"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "safe-json-stringify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
+      "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+      "optional": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "sax": {
+      "version": "0.5.8",
+      "resolved": "http://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+      "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
+    },
+    "send": {
+      "version": "0.16.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+      "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.4.0"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+          "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+        },
+        "statuses": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+          "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
+        "send": "0.16.2"
+      }
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "requires": {
+        "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"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "requires": {
+        "kind-of": "^3.2.0"
+      }
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "requires": {
+        "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": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+      "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
+    },
+    "string-width": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "string_decoder": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+      "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+      "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+      "requires": {
+        "ansi-regex": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        }
+      }
+    },
+    "strip-indent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
+    },
+    "striptags": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/striptags/-/striptags-2.2.1.tgz",
+      "integrity": "sha1-TEULcI1BuL85zyTEn/I0/Gqr/TI="
+    },
+    "stylus": {
+      "version": "0.54.5",
+      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
+      "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
+      "requires": {
+        "css-parse": "1.7.x",
+        "debug": "*",
+        "glob": "7.0.x",
+        "mkdirp": "0.5.x",
+        "sax": "0.5.x",
+        "source-map": "0.1.x"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.0.6",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+          "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+          "requires": {
+            "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"
+          }
+        },
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "swig-extras": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/swig-extras/-/swig-extras-0.0.1.tgz",
+      "integrity": "sha1-tQP+3jcqucJMasaMr2VrzvGHIyg=",
+      "requires": {
+        "markdown": "~0.5.0"
+      }
+    },
+    "swig-templates": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/swig-templates/-/swig-templates-2.0.3.tgz",
+      "integrity": "sha512-QojPTuZWdpznSZWZDB63/grsZuDwT/7geMeGlftbJXDoYBIZEnTcKvz4iwYDv3SwfPX9/B4RtGRSXNnm3S2wwg==",
+      "requires": {
+        "optimist": "~0.6",
+        "uglify-js": "2.6.0"
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+    },
+    "tildify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "titlecase": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/titlecase/-/titlecase-1.1.2.tgz",
+      "integrity": "sha1-eBE9EQgIa4MmMxoyR96o9aSeqFM="
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "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": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        }
+      }
+    },
+    "uglify-js": {
+      "version": "2.6.0",
+      "resolved": "http://registry.npmjs.org/uglify-js/-/uglify-js-2.6.0.tgz",
+      "integrity": "sha1-JeqhzDVQ45QQzu+v0c+7a20V8AE=",
+      "requires": {
+        "async": "~0.2.6",
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+        },
+        "cliui": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+          "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+          "requires": {
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
+            "wordwrap": "0.0.2"
+          }
+        },
+        "window-size": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+          "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+        },
+        "wordwrap": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+        },
+        "yargs": {
+          "version": "3.10.0",
+          "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+          "requires": {
+            "camelcase": "^1.0.2",
+            "cliui": "^2.1.0",
+            "decamelize": "^1.0.0",
+            "window-size": "0.1.0"
+          }
+        }
+      }
+    },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "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": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        }
+      }
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+        }
+      }
+    },
+    "upath": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+      "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+      "optional": true
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+    },
+    "warehouse": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/warehouse/-/warehouse-2.2.0.tgz",
+      "integrity": "sha1-XQnWSUKZK+Zn2PfIagnCuK6gQGI=",
+      "requires": {
+        "JSONStream": "^1.0.7",
+        "bluebird": "^3.2.2",
+        "cuid": "~1.3.8",
+        "graceful-fs": "^4.1.3",
+        "is-plain-object": "^2.0.1",
+        "lodash": "^4.2.1"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "window-size": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+    },
+    "wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+    },
+    "wrap-ansi": {
+      "version": "2.1.0",
+      "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "y18n": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+    },
+    "yallist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+      "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+    },
+    "yargs": {
+      "version": "3.32.0",
+      "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+      "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+      "requires": {
+        "camelcase": "^2.0.1",
+        "cliui": "^3.0.3",
+        "decamelize": "^1.1.1",
+        "os-locale": "^1.4.0",
+        "string-width": "^1.0.1",
+        "window-size": "^0.1.4",
+        "y18n": "^3.2.0"
+      }
+    }
+  }
+}

+ 24 - 0
package.json

@@ -0,0 +1,24 @@
+{
+  "name": "hexo-site",
+  "version": "0.0.0",
+  "private": true,
+  "hexo": {
+    "version": "3.8.0"
+  },
+  "dependencies": {
+    "hexo": "^3.7.0",
+    "hexo-asset-image": "^0.0.3",
+    "hexo-deployer-git": "^0.3.1",
+    "hexo-generator-archive": "^0.1.5",
+    "hexo-generator-category": "^0.1.3",
+    "hexo-generator-feed": "^1.2.2",
+    "hexo-generator-index": "^0.2.1",
+    "hexo-generator-sitemap": "^1.2.0",
+    "hexo-generator-tag": "^0.2.0",
+    "hexo-renderer-ejs": "^0.3.1",
+    "hexo-renderer-marked": "^0.3.2",
+    "hexo-renderer-stylus": "^0.3.3",
+    "hexo-server": "^0.3.1",
+    "hexo-wordcount": "^6.0.1"
+  }
+}

+ 4 - 0
scaffolds/draft.md

@@ -0,0 +1,4 @@
+---
+title: {{ title }}
+tags:
+---

+ 4 - 0
scaffolds/page.md

@@ -0,0 +1,4 @@
+---
+title: {{ title }}
+date: {{ date }}
+---

+ 6 - 0
scaffolds/post.md

@@ -0,0 +1,6 @@
+---
+title: {{ title }}
+date: {{ date }}
+categories:
+tags:
+---

+ 7 - 0
source/404/index.md

@@ -0,0 +1,7 @@
+---
+title: 404 Not Found:该页无法显示
+permalink: /404
+date: 2018-11-28 20:54:46
+---
+---
+**很抱歉,您所访问的地址并不存在**

+ 1 - 0
source/CNAME

@@ -0,0 +1 @@
+www.lvzhiqiang.top

+ 3 - 0
source/README.md

@@ -0,0 +1,3 @@
+# tujidelv.github.io
+hexo blog
+<https://www.lvzhiqiang.top>

+ 456 - 0
source/_posts/af-hexo.md

@@ -0,0 +1,456 @@
+---
+title: Hexo 札记
+date: 2018-12-01 18:25:23
+categories:
+- 应用框架
+tags:
+- hexo
+- nodejs
+---
+
+# Hexo 札记
+
+## 目录
+
+- [简介](#简介)
+- [准备工作](#准备工作)
+- [快速入门](#开始搭建)
+- [进阶使用](#进阶使用)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 中文官网
+    - <http://hexo.io/zh-cn/>
+- 作者 Tommy Chen
+    - <https://zespia.tw/>
+- 个人理解
+    - Hexo 是一个基于 Node.js 快速、简洁且高效的博客框架,可以将 Markdown 文件快速的生成静态网页,托管在 GitHub Pages 上。
+- 官网释义
+    > Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
+- 特点
+    ```
+    1.超快速度
+        Node.js 所带来的超快生成速度,让上百个页面在几秒内瞬间完成渲染。
+    2.支持 Markdown
+        Hexo 支持 GitHub Flavored Markdown 的所有功能,甚至可以整合 Octopress 的大多数插件。
+    3.一键部署
+        只需一条指令即可部署到 GitHub Pages, Heroku 或其他网站。
+    4.丰富的插件
+        Hexo 拥有强大的插件系统,安装插件可以让 Hexo 支持 Jade, CoffeeScript。
+    ```
+
+## 准备工作
+
+- Git 安装
+    ```
+    Tujide.lv@tujide MINGW64 ~
+    $ git --version
+    git version 2.15.1.windows.2
+    ```
+- Node.js 安装
+    ```
+    Tujide.lv@tujide MINGW64 ~
+    $ npm -v
+    6.4.1
+    ```
+- 设置 Node.js 源为淘宝 NPM 镜像
+    - Node.js 官方源默认是:<https://r.cnpmjs.org/>,但是由于在国外,说不定你使用的时候就抽风无法下载任何软件,所以我们决定暂时使用淘宝提供的源,淘宝源官网:<http://npm.taobao.org/>。
+    - 安装时间不一定很快,耐心等待一会。
+    ```
+    Tujide.lv@tujide MINGW64 ~
+    $ npm install -g cnpm --registry=https://registry.npm.taobao.org
+    npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0
+    E:\Ebook\JavaSE\develop\nodejs\node_global\cnpm -> E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\cnpm\bin\cnpm
+    +cnpm@6.0.0
+    added 633 packages from 844 contributors in 120.981s
+    
+    Tujide.lv@tujide MINGW64 ~
+    $ npm list -g --depth 0
+    E:\Ebook\JavaSE\develop\nodejs\node_global
+    `-- cnpm@6.0.0
+    ```
+    
+## 开始搭建
+
+- 安装 Hexo 框架
+    - 因为国内的网络问题,有时候安装异常慢花了大半个小时都没效果,那就 `Ctrl + C` 停掉这次命令,执行 `npm uninstall -g hexo-cli`,然后重新再执行一次。
+    - 安装时间不一定很快,耐心等待一会。
+    ```
+    Tujide.lv@tujide MINGW64 ~
+    $ cnpm install -g hexo-cli
+    Downloading hexo-cli to E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\hexo-cli_tmp
+    Copying E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\hexo-cli_tmp\_hexo-cli@1.1.0@hexo-cli to E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\hexo-cli
+    Installing hexo-cli's dependencies to E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\hexo-cli/node_modules
+    [1/11] abbrev@^1.0.7 installed at node_modules\_abbrev@1.1.1@abbrev
+    [2/11] object-assign@^4.1.0 installed at node_modules\_object-assign@4.1.1@object-assign
+    [3/11] command-exists@^1.2.0 installed at node_modules\_command-exists@1.2.8@command-exists
+    [4/11] minimist@^1.2.0 installed at node_modules\_minimist@1.2.0@minimist
+    [5/11] tildify@^1.2.0 installed at node_modules\_tildify@1.2.0@tildify
+    [6/11] chalk@^1.1.3 installed at node_modules\_chalk@1.1.3@chalk
+    [7/11] bluebird@^3.4.0 installed at node_modules\_bluebird@3.5.3@bluebird
+    [8/11] resolve@^1.5.0 installed at node_modules\_resolve@1.8.1@resolve
+    [9/11] hexo-util@^0.6.0 installed at node_modules\_hexo-util@0.6.3@hexo-util
+    [10/11] hexo-log@^0.2.0 installed at node_modules\_hexo-log@0.2.0@hexo-log
+    fsevents@1.2.4 download from binary mirror: {"module_name":"fse","module_path":"./lib/binding/{configuration}/{node_abi}-{platform}-{arch}/","remote_path":"./v{version}/","package_name":"{module_name}-v{version}-{node_abi}-{platform}-{arch}.tar.gz","host":"https://cdn.npm.taobao.org/dist/fsevents"}
+    platform unsupported hexo-fs@0.2.3 › chokidar@1.7.0 › fsevents@^1.0.0 Package require os(darwin) not compatible with your platform(win32)
+    [fsevents@^1.0.0] optional install error: Package require os(darwin) not compatible with your platform(win32)
+    [11/11] hexo-fs@^0.2.0 installed at node_modules\_hexo-fs@0.2.3@hexo-fs
+    Recently updated (since 2018-11-18): 2 packages (detail see file E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\hexo-cli\node_modules\.recently_updates.txt)
+      2018-11-22
+        → hexo-util@0.6.3 › cross-spawn@4.0.2 › lru-cache@4.1.4 › yallist@^3.0.2(3.0.3) (07:22:36)
+      2018-11-21
+        → hexo-util@0.6.3 › cross-spawn@4.0.2 › lru-cache@^4.0.1(4.1.4) (08:14:09)
+    All packages installed (175 packages installed from npm registry, used 7s(network 6s), speed 498.55kB/s, json 151(218.72kB), tarball 2.93MB)
+    [hexo-cli@1.1.0] link E:\Ebook\JavaSE\develop\nodejs\node_global\hexo@ -> E:\Ebook\JavaSE\develop\nodejs\node_global\node_modules\hexo-cli\bin\hexo
+    ```
+- 创建 Hexo 项目
+    ![抱歉,图片休息了](af-hexo/sf-hexo-001.png "hexo 项目目录结构")
+    - 现在初始化后不需要 `npm install` 了,它会默认执行该命令把相关依赖包下载到 node_modules 目录中,同时会自动生成 package-lock.json 文件用以纪录当前实际安装的各个插件包的具体来源和版本号。
+    - 安装时间不一定很快,耐心等待一会。
+    ```
+    Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea
+    $ hexo init hexo-blog
+    INFO  Cloning hexo-starter to E:\Ebook\JavaSE\workspace_idea\hexo-blog
+    Cloning into 'E:\Ebook\JavaSE\workspace_idea\hexo-blog'...
+    remote: Enumerating objects: 68, done.
+    remote: Total 68 (delta 0), reused 0 (delta 0), pack-reused 68
+    Unpacking objects: 100% (68/68), done.
+    Submodule 'themes/landscape' (https://github.com/hexojs/hexo-theme-landscape.git) registered for path 'themes/landscape'
+    Cloning into 'E:/Ebook/JavaSE/workspace_idea/hexo-blog/themes/landscape'...
+    remote: Enumerating objects: 21, done.
+    remote: Counting objects: 100% (21/21), done.
+    remote: Compressing objects: 100% (21/21), done.
+    remote: Total 867 (delta 8), reused 0 (delta 0), pack-reused 846
+    Receiving objects: 100% (867/867), 2.55 MiB | 1.31 MiB/s, done.
+    Resolving deltas: 100% (457/457), done.
+    Submodule path 'themes/landscape': checked out '73a23c51f8487cfcd7c6deec96ccc7543960d350'
+    INFO  Install dependencies
+    npm WARN deprecated titlecase@1.1.2: no longer maintained
+    npm WARN deprecated postinstall-build@5.0.3: postinstall-build's behavior is now built into npm! You should migrate off of postinstall-build and use the new `prepare` lifecycle script with npm 5.0.0 or greater.
+    
+    > nunjucks@3.1.4 postinstall E:\Ebook\JavaSE\workspace_idea\hexo-blog\node_modules\nunjucks
+    > node postinstall-build.js src
+    
+    npm notice created a lockfile as package-lock.json. You should commit this file.
+    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):
+    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
+    
+    added 423 packages from 501 contributors and audited 4700 packages in 109.987s
+    found 0 vulnerabilities
+    
+    INFO  Start blogging with Hexo!
+    ```
+- 启动 hexo 本地服务
+    - 本地用浏览器访问:<http://localhost:4000/>,查看默认效果。
+    - 如果要停止 hexo 服务:在 Git Bash 下按 `Ctrl + C` 即可。
+    ```
+    Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog
+    $ hexo server
+    INFO  Start processing
+    INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.
+    ```
+- 更换其他主题
+    - 由于默认主题太大众了,可以去这里找主题
+        - hexo-theme:<https://hexo.io/themes/>
+        - hexo-github-theme-list:<https://github.com/hexojs/hexo/wiki/Themes>
+        - 有那些好看的 hexo 主题?:<http://www.zhihu.com/question/24422335>
+    - 这里列出比较中意的 3 款(以 3-hexo 为例)
+        - <https://github.com/theme-next/hexo-theme-next>
+        - <https://github.com/MOxFIVE/hexo-theme-yelee>
+        - <https://github.com/wizardforcel/hexo-theme-cyanstyle>
+        - <https://github.com/yelog/hexo-theme-3-hexo>
+    - 下载主题到 themes 文件夹
+        - 如果以后你不自己修改这个主题的话,可以考虑 `git pull` 经常更新下作者的更新内容。
+        - 下载时间不一定很快,耐心等待一会。
+        ```
+        Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog
+        $ git clone https://github.com/tujidelv/hexo-theme-3-hexo.git themes/3-hexo
+        Cloning into 'themes/3-hexo'...
+        remote: Enumerating objects: 12, done.
+        remote: Counting objects: 100% (12/12), done.
+        remote: Compressing objects: 100% (9/9), done.
+        remote: Total 1854 (delta 3), reused 9 (delta 3), pack-reused 1842
+        Receiving objects: 100% (1854/1854), 1.10 MiB | 937.00 KiB/s, done.
+        Resolving deltas: 100% (1045/1045), done.
+        
+        Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog/themes/3-hexo (master)
+        $ git pull origin master
+        From https://github.com/tujidelv/hexo-theme-3-hexo
+         * branch            master     -> FETCH_HEAD
+        Already up to date.
+        ```
+    - 修改 hexo 站点配置文件 _config.yml 使主题生效
+    
+        ![抱歉,图片休息了](af-hexo/sf-hexo-002.png "hexo 主题修改")
+    - 重新渲染主题静态内容并本地预览
+        ```
+        Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog
+        $ hexo clean && hexo g && hexo s
+        INFO  Deleted database.
+        INFO  Deleted public folder.
+        INFO  Start processing
+        INFO  Files loaded in 311 ms
+        INFO  Generated: img/brown-papersq.png
+        INFO  Generated: img/avatar.jpg
+        INFO  Generated: img/weixin.jpg
+        INFO  Generated: img/school-book.png
+        INFO  Generated: index.html
+        INFO  Generated: archives/index.html
+        INFO  Generated: css/fonts/icomoon.eot
+        INFO  Generated: img/alipay.jpg
+        INFO  Generated: js/search.js
+        INFO  Generated: css/hl_theme/atom-dark.css
+        INFO  Generated: css/mobile.css
+        INFO  Generated: css/hl_theme/atom-light.css
+        INFO  Generated: css/hl_theme/brown-paper.css
+        INFO  Generated: css/hl_theme/darcula.css
+        INFO  Generated: css/hl_theme/github-gist.css
+        INFO  Generated: css/hl_theme/github.css
+        INFO  Generated: css/hl_theme/gruvbox-light.css
+        INFO  Generated: css/hl_theme/gruvbox-dark.css
+        INFO  Generated: css/hl_theme/kimbie-dark.css
+        INFO  Generated: css/hl_theme/kimbie-light.css
+        INFO  Generated: css/hl_theme/railscasts.css
+        INFO  Generated: css/hl_theme/rainbow.css
+        INFO  Generated: archives/2018/index.html
+        INFO  Generated: css/hl_theme/school-book.css
+        INFO  Generated: css/hl_theme/sublime.css
+        INFO  Generated: css/hl_theme/sunburst.css
+        INFO  Generated: css/hl_theme/zenbum.css
+        INFO  Generated: css/fonts/icomoon.ttf
+        INFO  Generated: archives/2018/11/index.html
+        INFO  Generated: js/script.js
+        INFO  Generated: css/fonts/icomoon.woff
+        INFO  Generated: css/fonts/icomoon.svg
+        INFO  Generated: css/style.css
+        INFO  Generated: css/fonts/selection.json
+        INFO  Generated: css/gitalk.css
+        INFO  Generated: js/jquery.autocomplete.min.js
+        INFO  Generated: 2018/11/28/hello-world/index.html
+        INFO  Generated: js/gitalk.js
+        INFO  38 files generated in 775 ms
+        INFO  Start processing
+        INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.
+        ```
+- 创建 Github pages 并 SSH 授权
+    - 创建好这个特殊仓库之后,在本地生成 SSH 秘钥并添加到 GitHub上,方便电脑上的 git 将内容到 Github 上。
+    
+    ![抱歉,图片休息了](af-hexo/sf-hexo-003.png "hexo 仓库")
+- 把本地的博客内容同步到 Github 上
+    - 安装与 hexo 相关的 git 部署插件
+        ```
+        Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog
+        $ cnpm install hexo-deployer-git --save
+        platform unsupported hexo-deployer-git@0.3.1 › hexo-fs@0.2.3 › chokidar@1.7.0 › fsevents@^1.0.0 Package require os(darwin) not compatible with your platform(win32)
+        [fsevents@^1.0.0] optional install error: Package require os(darwin) not compatible with your platform(win32)
+        √ Installed 1 packages
+        √ Run 0 scripts
+        deprecate hexo-deployer-git@0.3.1 › swig@^1.4.2 This package is no longer maintained
+        Recently updated (since 2018-11-21): 1 packages (detail see file E:\Ebook\JavaSE\workspace_idea\hexo-blog\node_modules\.recently_updates.txt)
+        √ All packages installed (183 packages installed from npm registry, used 18s(network 18s), speed 17.06kB/s, json 157(305.82kB), tarball 0B)
+        ```
+    - 修改 hexo 全局配置文件 _config.yml
+        ```
+        # Hexo Configuration
+        ## Docs: https://hexo.io/docs/configuration.html
+        ## Source: https://github.com/hexojs/hexo/
+        
+        # Site,网站,这一块区域主要是设置博客的主要说明,需要注意的是:每个冒号后面都是有一个空格,然后再书写自己的内容
+        title: Tujidelv Code # 网站标题
+        subtitle: 好记性不如烂笔头 # 网站副标题
+        description: Tujidelv的技术小窝 # 网站描述,主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词
+        keywords:
+        author: Tujide.lv # 您的名字,用于主题显示文章的作者
+        language: zh-CN # 网站使用的语言,也可以用zh-Hans
+        timezone:
+        
+        # URL,网址,这一块区域一般可以设置的是 url 这个参数,比如我要设置绑定域名的,这里就需要填写我的域名信息
+        ## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
+        ## 如果您的网站存放在子目录中,例如 http://yoursite.com/blog,则请将您的 url 设为 http://yoursite.com/blog 并把 root 设为 /blog/。
+        url: https://www.lvzhiqiang.top # 网址
+        root: / # 网站根目录
+        permalink: :year/:month/:day/:title/ # 文章的永久链接格式
+        permalink_defaults:
+        
+        # Directory,目录,这一块一般不需要修改
+        source_dir: source # 资源文件夹,这个文件夹用来存放内容。
+        public_dir: public # 公共文件夹,这个文件夹用于存放生成的站点文件。
+        tag_dir: tags # 标签文件夹
+        archive_dir: archives # 归档文件夹
+        category_dir: categories # 分类文件夹
+        code_dir: downloads/code # Include code 文件夹
+        i18n_dir: :lang # 国际化(i18n)文件夹
+        skip_render: # 跳过指定文件的渲染,您可使用 glob 表达式来匹配路径。
+        - README.md
+        
+        # Writing,文章,这一块一般不需要修改
+        new_post_name: :title.md # Hexo 默认以标题做为文件名称,设为 :year-:month-:day-:title.md 可让您更方便的通过日期来管理文章
+        default_layout: post # 预设布局,Hexo 有三种默认布局:post、page 和 draft,分别对应不同的路径:source/_posts、source和source/_drafts
+        titlecase: false # 把标题转换为 title case
+        external_link: true # 在新标签中打开链接
+        filename_case: 0 # 把文件名称转换为 (1) 小写或 (2) 大写
+        render_drafts: false # 显示草稿,草稿默认不会显示在页面中
+        post_asset_folder: false # 启动 Asset 文件夹
+        relative_link: false # 把链接改为与根目录的相对位址 
+        future: true # 显示未来的文章
+        highlight: # 代码块的设置
+          enable: true
+          line_number: true
+          auto_detect: false
+          tab_replace:
+          
+        # Home page setting
+        # path: Root path for your blogs index page. (default = '')
+        # per_page: Posts displayed per page. (0 = disable pagination)
+        # order_by: Posts order. (Order by date descending by default)
+        index_generator:
+          path: ''
+          per_page: 10
+          order_by: -date
+          
+        # Category & Tag,分类 & 标签,这一块一般不需要修改
+        default_category: uncategorized # 默认分类
+        category_map:
+        tag_map:
+        
+        # Date / Time format,日期 / 时间格式,这一块一般不需要修改
+        ## Hexo uses Moment.js to parse and display date
+        ## You can customize the date format as defined in
+        ## http://momentjs.com/docs/#/displaying/format/
+        date_format: YYYY-MM-DD # 日期格式
+        time_format: HH:mm:ss # 时间格式
+        
+        # Pagination,分页,这一块一般不需要修改
+        ## Set per_page to 0 to disable pagination
+        per_page: 10 # 每页显示的文章量 (0 = 关闭分页功能)
+        pagination_dir: page # 分页目录
+        
+        # Extensions,扩展
+        ## Plugins: https://hexo.io/plugins/
+        ## Themes: https://hexo.io/themes/
+        theme: 3-hexo # 当前主题名称。值为false时禁用主题
+        
+        # Deployment,部署
+        ## 这里是重点,这里是修改发布地址,因为我们前面已经将本地 SSH 密钥信息添加到 Github 设置里面了,所以只要我们电脑里面持有那两个密钥文件就可以无需密码地跟 Github 做同步。
+        ## 需要注意的是这里的 repo 采用的是 ssh 的地址,而不是 https 的。分支我们默认采用 master 分支。
+        ## Docs: https://hexo.io/docs/deployment.html
+        deploy:
+          type: git
+          repo: git@github.com:tujidelv/tujidelv.github.io.git
+          branch: master
+        ```
+    - 执行如下命令 `hexo clean && hexo g && hexo d`
+        ```
+        hexo clean          // 清除掉已经生成的旧文件
+        hexo generate/g     // 重新生成一次静态文件
+        hexo deploy/d       // 使用部署命令部署到 Github 上
+        ```
+    ![抱歉,图片休息了](af-hexo/sf-hexo-004.png "hexo 部署到GitHub")
+- 绑定域名
+    - 在 source 目录下新建 `CNAME` 文件(文件名叫 CNAME,没有文件后缀的)
+        - 以后一些需要放在根目录的资源文件都可以放这里。
+        - ***`CNAME` 文件上的内容写你要绑定的域名全称。***
+    - 到各自己域名控制台上设置域名解析(以阿里云为例)
+        ```
+        记录类型:CNAME
+        主机记录:www
+        解析线路:默认
+        记录值:tujidelv.github.io.
+        TTL:默认
+        ```
+- 整合 IntelliJ IDEA 提高效率
+    - 为了提交写作效率,建议使用 IDEA 作为 Markdown 编辑工具。
+      - IDEA 有各种各样的快捷键支持你的操作
+      - IDEA 可以快速地全文检索项目所有的文件
+      - 对 JavaScript、CSS、HTML 等常见语言的良好支持,方便修改主题
+    - 打开 hexo 项目,将 public 目录设置成 Excluded,这样每次 hexo 新的静态博客后 IDEA 不需要每次都去重建索引。
+
+## 进阶使用
+
+- 编写脚本方便快速部署和本地预览
+    - 在 hexo 根目录下新建 hs.sh 和 hd.sh 文件,分别加入如下内容:
+        ```
+        #!/bin/bash
+        hexo clean && hexo g && hexo s
+        ```
+        ```
+        #!/bin/bash
+        hexo clean && hexo g && hexo d
+        ```
+    - 在 Git Bash 中分别执行 `./hs.sh` 和`./hd.sh` 来预览和部署。
+- 创建**关于我**页面
+    - 可以编辑 index.md 文件补充需要显示的内容。
+    ```
+    Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog
+    $ hexo new page about
+    INFO  Created: E:\Ebook\JavaSE\workspace_idea\hexo-blog\source\about\index.md
+    ```
+- 创建 **404** 页面
+    - 对于 github page 来说,只要在根目录有 404.html,当页面找不到时,就会被转发到/404.html 页面,所以我们只要更改这个页面,就可以实现自定义 404 页面了。
+    - 但是我们通常会需要与本主题相符的 404 页面,那我们需要以下操作
+        1. 进入 Hexo 根目录,输入 `hexo new page 404` ;
+        2. 打开刚新建的页面文件,默认在 Hexo 文件夹根目录下 `/source/404/index.md`;
+        3. 在顶部插入一行,写上 `permalink: /404`,这表示指定该页固定链接为 `http://"主页"/404.html`。
+- 创建**分类&标签**页面
+    1. 在 source 目录下新建一个 tags 文件夹
+        ```
+        $ hexo new page tags
+        ```
+    2. 编辑 index.md 文件,添加 `layout` 选项,后面的值对应的是主题文件夹下 `layout` 目录下第一级的布局文件,例如layout/tags.ejs
+        ```
+        ---
+        title: tags
+        date: 2018-11-28 20:23:17
+        type: tags
+        layout: "tags"
+        ---
+        ```
+    3. 编辑主题配置文件,各个主题的显示名称可能不同
+        ```
+        menu:
+          Home: /
+          Archives: /archives
+          tags: /tags
+        ```
+    4. 最后去看下 hexo 站点配置文件对应的选项名称是否对应
+        ```
+        # Directory
+        tag_dir: tags
+        ```
+    Tips:最重要的是看一下主题文件里有没有标签页或者分类页的布局文件,一般来说都是有的,只是命名和存放的位置可能不同,所以大家要根据实际情况来修改。categories 同理。
+- 图片显示
+    - 一般分为外链和本地图片,这里介绍本地图片显示的 2 种方法
+    - 绝对路径,可直接在 source 目录下新建 images 文件夹用于存放图片,在 md 文件中如下引用
+        ```
+        ![图片不存在时的提示文字](/images/图片.jpg "鼠标箭头放到图片上的提示文字")
+        ```
+    - 相对路径,需先将站点配置文件中的 post_asset_folder 设为 true,然后安装 hexo-asset-image 插件
+        ```
+        # Writing
+        post_asset_folder: true # 启动 Asset 文件夹
+        ```
+        ```
+        Tujide.lv@tujide MINGW64 /e/Ebook/JavaSE/workspace_idea/hexo-blog
+        $ cnpm i hexo-asset-image --save
+        √ Installed 1 packages
+        √ Run 0 scripts
+        √ All packages installed (19 packages installed from npm registry, used 2s(network 2s), speed 153.72kB/s, json 18(31.65kB), tarball 315.44kB)
+        ```
+        ```
+         ![图片不存在时的提示文字](MD文件名称/图片.jpg "鼠标箭头放到图片上的提示文字")
+        ```
+        Tips:此方法在运行 hexo n "xxxx" 来生成 md 文件时,同时会在/source/_posts 文件夹下生成一个与 md 文件同名的文件夹。
+- 文章排序及置顶
+- 使用 gitment 评论系统
+- 备份当前项目源码
+
+
+## 参考链接
+
+- <http://www.youmeek.com/hexo-install/>
+
+## 结束语
+
+- 未完待续...

BIN
source/_posts/af-hexo/sf-hexo-001.png


BIN
source/_posts/af-hexo/sf-hexo-002.png


BIN
source/_posts/af-hexo/sf-hexo-003.png


BIN
source/_posts/af-hexo/sf-hexo-004.png


+ 244 - 0
source/_posts/af-nodejs.md

@@ -0,0 +1,244 @@
+---
+title: NodeJS 札记
+date: 2018-12-01 16:28:22
+categories:
+- 应用框架
+tags:
+- nodejs
+---
+
+# NodeJS 札记
+
+## 目录
+
+- [简介](#简介)
+- [发展历史](#发展历史)
+- [准备工作](#准备工作)
+- [模块与包](#模块与包)
+- [基本模块](#基本模块)
+- [Web开发](#Web开发)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- Node.js 是一个能够在**服务器端**运行 JavaScript 的开源、 跨平台 **JavaScript 运行环境**。
+- Node.js 采用 Google 开发的 V8 引擎运行 js 代码,使用**事件驱动**、**非阻塞**和**异步 I/O** 模型等技术来提高性能,可优化应用程序的传输量和规模。
+- 特点:
+    - 非阻塞、异步的 I/O
+    - 事件和回调函数
+    - 单线程(主线程单线程,后台 I/O 线程池)
+    - 跨平台
+- 用途:
+    - Web 服务 API,比如 REST
+    - 实时多人游戏
+    - 在后台编写单线程的服务器
+    - 基于 Web 的应用
+    - 多客户端的通信,如即时通信
+    
+## 发展历史
+
+1. 2004 年,非科班出身的Ryan Dahl(瑞安·达尔),在纽约的罗彻斯特大学数学系读博士。
+2. 2006 年,也许是厌倦了读博的无聊,他产生了"世界那么大, 我想去看看"的念头,做出了退学的决定,然后一个人来到智利的 Valparaiso 小镇。
+3. 从那起,Ryan Dahl 不知道是否因为生活的关系,他开始学习网站开发了,走上了码农的道路。
+4. 那时候 Ruby on Rails(Ruby 的一个 web 框架)很火,他也不例外的学习了它,后来的 Node.js 也是借鉴了它才写出来的。
+5. 从那时候开始,Ryan Dahl 的生活方式就是接项目,然后去客户的地方工作,在他眼中,拿工资和上班其实就是去那里旅行。
+6. Ryan Dahl 经过两年的工作后,成为了高性能 Web 服务器的专家,从接开发应用到变成专门帮客户解决性能问题的专家。
+7. 期间他开始写一些开源项目帮助客户解决 Web 服务器的高并发性能问题,他尝试了很多种语言,发现很多语言虽然同时提供了同步 IO 和异步 IO,但是开发人员一旦用了同步 IO,他们就再也懒得写异步 IO 了,所以,最终,Ryan瞄向了 JavaScript。
+    - 对于高性能,异步 IO、事件驱动是基本原则。
+    - JavaScript 是单线程执行,根本不能进行同步 IO 操作,所以,JavaScript 的这一“缺陷”导致了它只能使用异步 IO。
+8. 选定了开发语言,还要有运行时引擎,他曾考虑过自己写一个,不过明智地放弃了,因为 V8 就是开源的 JavaScript引擎。让 Google 投资去优化 V8,他只负责改造一下拿来用,还不用付钱,这个买卖很划算。
+9. 2009 年 2 月,他开始着手编写 web.js,目的是用 JavaScript 去编写一个高性能的 Web 服务器。
+10. 同年,Ryan Dahl 正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js,并在GitHub上发布最初版本。
+    - 虽然名字很土,但是 Node.js 第一次把 JavaScript 带入到后端服务器开发,加上世界上已经有无数的 JavaScript 开发人员,所以 Node.js 一下子就火了起来。
+    - 在 Node.js 上运行的 JavaScript 相比其他后端开发语言,最大的优势是借助 JavaScript 天生的事件驱动机制加 V8 高性能引擎,使编写高性能 Web 服务轻而易举。
+11. 2010 年 1 月,Node.js 的包管理器 npm 诞生。
+12. 2010 年 12 月,Joyent 公司(美国的一个服务器供应商)赞助 Node.js 的开发,Ryan Dahl 加入旗下,全职负责 Node.js。
+13. 2011 年 7 月,Node.js 在微软的帮助下发布了 windows 版本。
+14. 2011 年 11 月,Node.js 超越 Ruby on Rails,称为 GitHub 上关注度最高的项目。
+15. 2012 年 1 月,Ryan Dahl 离开 Node.js 项目。
+16. 2014 年 12 月,Node.js 虽然由社区推动,但幕后一直由 Joyent 公司资助,由于一群开发者对 Joyent 公司的策略不满,Fedor Indutny 从 Node.js 项目 fork 出了 io.js 项目,决定单独发展,但两者实际上是兼容的。
+17. 2015 年 1 月,Joyent 公司感觉势头不对,Node.js感觉要完,于是联合 IBM、Intel、微软成立了 Node.js 基金会。
+18. 2015 年 9 月,正所谓"分久必合,合久必分”,分家后没多久,Joyent 公司表示要和解,于是 io.js 项目又决定回归 Node.js,Node.js 4.0发布。
+    - 奇数版为开发版本,偶数版为稳定版本。
+19. 2016 年,Node.js 6.0 发布。
+20. 2017 年,Node.js 8.0 发布。
+
+## 准备工作
+
+- 下载与安装
+    - 在 Git Bash 中输入 `node -v` 打印版本号即成功。
+- IDEA 中安装 NodeJS 插件,方便在 js 文件中右键调试代码
+    - 也可以在 Terminal 中输入 `node js文件名` 运行js文件。
+    - 可在 `settings->Lnaguages & Frameworks->Node.js and NPM`中勾选`Coding assistance for Node.js`,来打开 Node.js 的核心代码提示。
+
+## 模块与包
+   
+### 模块
+ 
+- ECMAScript 标准的缺陷
+    - ES5 中没有原生支持模块化,我们只能通过 script 标签引入js文件来实现模块化(ES6 有了)。
+    - 标准库较少。
+    - 没有标准接口。
+    - 缺乏管理系统。
+- CommonJS 规范
+    - CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有模块化标准的缺陷。
+    - CommonJS 规范为 JS 指定了一个美好的愿景, 希望 JS 能够在任何地方运行。
+    - 在 Node.js 中为了对模块管理,引入了 CommonJS 规范,**从而大大提高了代码的复用性和可维护性。**
+    - CommonJS 规范对模块的定义十分简单:**模块定义**,**模块引用**,**模块标识**。
+- 模块定义
+    - **在 Node.js 中,一个 js 文件就是一个模块。**
+    - 在 Node.js 中,默认情况下每一个 js 文件中的 js 代码都是独立运行在一个函数中。
+        - 而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问。
+        - 实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参
+        ```
+        var load = function (exports, require, module, __filename, __dirname) {
+            //js文件内容
+            ...
+            // 参数解释
+            exports
+                - 该对象用来将变量或函数暴露到外部
+            require
+                - 函数,用来引入外部的模块
+            module
+                - module 代表的是当前模块本身
+                - exports 就是 module 的属性
+                - 既可以使用 exports 导出,也可以使用 module.exports 导出
+            __filename
+                - 当前模块的完整路径
+            __dirname
+                - 当前模块所在文件夹的完整路径
+        }
+        ```
+        ```
+        导出变量和函数
+            - 通过exports只能使用.的方式来向外暴露内部变量或函数
+                exports.xxx = xxx
+            - 通过module.exports既可以使用.的形式,也可以直接赋值
+                module.exports.xxx = xxx
+                module.exports = {xxx:xxx,xxx:xxx,...}
+        ```
+        ```javascript
+        console.log(arguments.callee + ""); //这个属性保存的是当前执行的函数对象
+        console.log(arguments.length); //5
+        ```
+    - 在 Node.js 中有一个全局对象 global,它的作用和网页中 window 类似。
+        - 在全局中创建的变量都会作为global的属性保存
+        - 在全局中创建的函数都会作为global的方法保存
+        ```javascript
+        var a = 10;
+        b = 20;
+        console.log(global.a); //undefined
+        console.log(global.b); //20
+        ```
+- 模块引用
+    - 在 Node.js 中,**通过 require()函数来引入外部的模块**,该函数会返回一个对象,这个对象代表的是引入的模块。
+    - 格式:var 变量 = require("模块的标识");
+- 模块标识
+    - **模块的标识就是模块的名字(去掉.js后缀的文件名)或文件路径(绝对路径,相对路径)**,也就是传递给 require()方法的参数。
+    - 对于**核心模块**(npm 中下载的模块或者 Node.js 引擎提供的模块),直接使用模块的名字对其进行引入。
+        ```javascript
+        var fs = require("fs");
+        var express = require("express");
+        ```
+    - 对于**文件模块**(用户自己创建的模块),使用文件的路径来对其进行引入,如果是相对路径必须以./或 ../开头。
+        ```javascript
+        var router = require("./router");
+        ```
+
+### 包
+
+- CommonJS 的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。
+    - **将多个模块组合为一个完整的功能,就是一个包。**
+    - **增强版的模块。**
+- CommonJS 的包规范由包结构和包描述文件两个部分组成。 
+    - 包结构:用于组织包中的各种文件
+        ```
+        包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:    
+            – package.json 包的描述文件,必须的 
+            – bin 二进制可执行文件,一般都是一些工具包中才有
+            – lib js文件 
+            – doc 文档 
+            – test 测试代码
+        ```
+    - 包描述文件:描述包的相关信息,类似于简历,以供外部读取分析
+        ```
+        它是一个json格式的文件,在它里面保存了包各种相关的信息,里面不能写注释
+            - name 包名
+            - version 版本
+            - dependencies 依赖
+            - devDependencies 开发依赖
+            - main 包的主文件
+            - maintainers 主要贡献者
+            - keywords 关键字,方便搜索该包
+        ```
+- NPM(Node Package Manager) :Node.js 的包管理器
+    - CommonJS 包规范是理论,NPM 是其中一种实践。 
+    - 通过 NPM 可以对 Node.js 中的第三方模块进行上传发布、下载安装、搜索和依赖等操作。
+    - **NPM 会在安装完 Node.js 以后,自动安装。**
+    - NPM 常用命令
+        ```
+        npm      //帮助说明
+        npm -v      //查看npm的版本
+        npm version      //查看所有模块的版本
+        npm config list      //查看npm配置信息
+        npm s/search 包名      //搜索模块包,需联网	
+        -------------------------------------
+        npm init      //初始化项目(创建package.json),安装包时根据 package.json 是否存在来识别当前目录是一个包,不然可能会安装到其他地方
+        npm i/install      //安装当前项目所依赖的包
+        npm i/install 包名      //在当前目录安装指定的包
+        npm i/install 包名 --save      //在当前目录安装指定的包并在package.json中添加依赖
+        npm i/install 包名 --save-dev      //在当前目录安装指定的包并在package.json中添加开发依赖
+        npm i/install 包名 -g       //全局模式安装指定的包(一般都是一些工具),可以供命令行使用
+        npm i/install 包名 -registry=地址      //从镜像源安装
+        npm i/install 文件路径      //从本地安装
+        npm r/remove 包名      //删除一个模块包
+        npm r/remove 包名 --save     //删除一个模块包,并在package.json中移除依赖关系
+        npm r/remove 包名 --save-dev     //删除一个模块包,并在package.json中移除开发依赖关系
+        npm r/remove 包名 -g      //删除一个全局模式安装的模块包
+        npm update 包名      //更新指定的已安装模块包的版本
+        npm update 包名 -g      //更新指定的全局安装模块包的版本
+        -------------------------------------
+        npm config get prefix      //查看默认的全局安装路径
+        npm config get cache      //查看默认的全局安装缓存路径
+        npm config set prefix "E:\Ebook\JavaSE\develop\nodejs\node_global"      //设置默认的全局安装路径,需重新修改环境变量
+        npm config set cache "E:\Ebook\JavaSE\develop\nodejs\node_cache"      //设置默认的全局安装缓存路径
+        npm ls/list -g --depth 0      //查看全局安装过的包
+        ```
+    - 通过 NPM 下载的包都放到 node_modules 文件夹中,直接通过包名引入即可(**全局模式安装的需要配置NODE_PATH环境变量**)。
+        ```
+        Node.js 在使用模块名字来引入模块时,它会首先在当前目录的 node_modules 中寻找是否含有该模块
+            如果有则直接使用,如果没有则去上一级目录的 node_modules 中寻找;
+            如果有则直接使用,如果没有则再去上一级目录寻找,直到找到为止;
+            直到找到磁盘的根目录,如果依然没有,则报错.
+        ```
+- CNPM :淘宝 NPM 镜像
+    - 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
+    ```
+    使用说明
+        - 你可以使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
+            $ npm install -g cnpm --registry=https://registry.npm.taobao.org
+        - 或者你直接通过添加 npm 参数 alias 一个新命令:
+            $ alias cnpm="npm --registry=https://registry.npm.taobao.org \
+                --cache=$HOME/.npm/.cache/cnpm \
+                --disturl=https://npm.taobao.org/dist \
+                --userconfig=$HOME/.cnpmrc"
+            # Or alias it in .bashrc or .zshrc
+            $ echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
+                --cache=$HOME/.npm/.cache/cnpm \
+                --disturl=https://npm.taobao.org/dist \
+                --userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc
+    ```
+    
+## 基本模块
+
+## Web开发
+
+## 参考链接
+
+- [Node.js - 廖雪峰的官方网站](https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501245426ad4b91f2b880464ba876a8e3043fc8ef000)
+- [淘宝 NPM 镜像](https://npm.taobao.org/)
+
+## 结束语
+
+- 未完待续...

+ 242 - 0
source/_posts/dl-markdown.md

@@ -0,0 +1,242 @@
+---
+title: Markdown 札记
+date: 2018-12-01 15:54:44
+categories:
+- 开发语言
+tags:
+- markdown
+---
+
+# Markdown 札记
+
+## 目录
+
+- [简介](#简介)
+- [常用语法](#常用语法)
+- [写作风格](#写作风格)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 宗旨:实现 `易读易写`
+- 百度百科:
+    > Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
+
+    > Markdown 具有一系列衍生版本,用于扩展 Markdown 的功能(如表格、脚注、内嵌HTML等等),这些功能原初的 Markdown 尚不具备,它们能让Markdown 转换成更多的格式,例如 LaTeX,Docbook。Markdown 增强版中比较有名的有 Markdown Extra、MultiMarkdown、Maruku 等。这些衍生版本要么基于工具,如 Pandoc;要么基于网站,如 GitHub 和 Wikipedia,在语法上基本兼容,但在一些语法和渲染效果上有改动。
+- 维基百科:
+    > Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(英语:John Gruber)。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者 HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。
+    
+    > 由于Markdown的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,目前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如:GitHub、reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge 等。甚至 Markdown 能被使用来撰写电子书。
+    
+## 常用语法
+
+- ### 标题
+
+MarkDown 支持 1~6 级标题,通过加在标题文字前的 # 来区分。例如,
+```
+# 这是一级标题
+## 这是二级标题
+...
+###### 这是六级标题
+```
+Tips:# 和标题文字之间是有一个空格的。
+
+- ### 段落
+
+一行文字就是一个段落。例如,
+```
+这是一行文字,MarkDown 中的段落。
+```
+Tips:如果要换行,那么两行之间要隔一个空行或者在第一行末尾敲2个空格。
+
+- ### 粗体和斜体
+
+Markdown 中字体的粗体和斜体用 * ** 表示。例如,
+```
+*这里是斜体*
+**这里是粗体**
+***这里是粗体 + 斜体***
+```
+
+- ### 删除线
+
+可能有一部分编辑器不支持这个元素,可用 `<del>` 标签来替代。删除线用 ~ 定义。例如,
+```
+~~我来了木森~~
+```
+Tips:删除线要用两个 ~ 来包裹文字。
+
+- ### 引用
+
+在一行文字前添加大于号 > 来使用引用格式。例如,
+```
+> 这里是引用句子。
+```
+引用可以嵌套使用,例如,
+```
+>> 这里使用了嵌套引用。
+```
+也可以嵌套其他格式。例如,
+```
+> ## 嵌套一个二级标题。
+> *嵌套斜体字。*
+> **嵌套粗体字。**
+```
+Tips:想要结束引用可以空一行。
+
+- ### 列表
+
+列表分为无序列表和有序列表。  
+无序列表使用加号、减号和星号来标记,后面需跟 `空格`。例如,
+```
++ 加号列表
++ 加号列表
++ 加号列表
+- 减号列表
+- 减号列表
+- 减号列表
+* 星号列表
+* 星号列表
+* 星号列表
+```
+有序列表使用自然数加上英文句点来标记,后面需跟 `空格`。例如,  
+```
+1. 有序列表
+2. 有序列表
+3. 有序列表
+```
+Tips:二级列表只需在一级列表前面使用 `Tab` 键。
+
+- ### 代码块
+
+有两种风格,原生和 Github 。  
+原生风格,首行缩进四个空格。例如,
+```
+    这是一个原生风格代码块。
+```
+Github 风格,代码块的前后用三个反引号独占一行来标记。例如,
+<pre>
+```
+这是一个GitHub风格代码块。
+```
+</pre>
+Tips:Github风格可在开头的 ``` 后面跟上语言名称,例如java等。
+
+- ### 标亮(内联代码)
+
+内联代码用反引号 ` 表示。例如,
+```
+`请把我标亮`
+```
+Tips:有的编辑器用单个 **\`** 不起作用,只好用两个 **\`** 将代码包裹起来。
+
+- ### 分割线
+
+分割线可以用三个以上的星号、减号或者下划线来标识,行内不能有其他东西,但是可以插入空格。例如,
+```
+***
+* * * 
+---
+- - - 
+___
+_ _ _
+```
+
+- ### 超链接
+
+链接用下面的格式标识。例如,
+```  
+[链接要显示的文字](链接URL "鼠标箭头放到链接上的提示文字,可以不写,与链接之间留有空格")
+```
+还可以用另外的格式标识,效果也是一样的,例如, 
+``` 
+[链接要显示的文字][id]
+
+[id]:链接URL "鼠标箭头放到链接上的提示文字,可以不写,与链接之间留有空格"
+```
+Tips:如果链接的地址和要显示的文字一样的话,可以用尖括号将其包裹形成自动连接。
+
+- ### 图片
+
+图片的标识语法与链接类似。例如,
+```
+![图片不存在时的提示文字](图片URL "鼠标箭头放到图片上的提示文字")
+```
+图片的 Markdown 标识与 HTML 标签有对应的关系,关系如下,
+```
+![img alt 属性](img 地址 “img title 属性”)
+<img src='img 地址' alt='img alt 属性' title='img title 属性' width="16" height="16" align="center">
+```
+Tips:MD 文件中可采用 `<img>` 标签写法控制图片大小。
+
+- ### 表格
+
+使用 | 来分隔不同的单元格,使用 - 来分隔表头和其他行。  
+原本是 Github 风格的语法,大部分编辑器都支持。例如,
+```  
+| 语言 | 时间 | 备注 |
+|----|----:|:------:|
+|Java|3年|学不动|
+|Python|2年|好学|
+|Golang|1年|不好学|
+```
+Tips:第一行表头可以不要,第二行必须要有,第二行的冒号标识表中内容居左、居右还是剧中,如果不加冒号默认居左。
+
+- ### 内嵌 HTML
+
+Markdown 保留了内嵌 HTML 的语法,标签中的内容都会输入到结果中。例如,
+```
+<html>
+  <body>
+    <div>
+        <iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=4877755&auto=1&height=66"></iframe>
+      </div>
+   </body>
+</html>
+```
+```
+<font color="red" size="8">我是红色放大字</font>
+```
+
+## 写作风格
+
+- ### 空格
+    - 中文与英文之间需要有空格,例如:Apple Watch 将于下周开始接受预订。
+    - 中文与数字之间需要有空格,例如:下午跑步 1 小时。
+    - 数字与单位之间需要有一个空格,例如:是 5 GB 而不是 5GB。
+    - 全角标点符号与其他字符之间不需要空格。例如:第一行表头可以不要,第二行。
+    
+- ### 标点符号
+    - 只有中文或中英文混排中,一律使用中文/全角标点。
+    - 中英文混排中如果出现整句英文,则在这句英文中使用英文/半角标点。
+    - 中文标点与其他字符间一律不加空格。
+    - 尽量避免重复使用标点(尤其是叠加感叹号、问号等),例如!!!等。
+    
+- ### 段落
+    - 段落开头不要留出空白字符,顶格写。
+    - 段落之间使用一个空行隔开或者在第一行末尾敲2个空格。
+    
+- ### 文件命名
+    - 文件夹:英文小写(多个英文减号连接)。
+    ```
+    正确:copywriting-guide
+    错误:copywriting_guide、copywritingGuide、CopywritingGuide、copywriting guide
+    ```
+    - Markdown 文件:英文小写(多个英文减号连接)。
+    ```
+    正确:copywriting-guide.md
+    错误:copywriting_guide.md、copywritingGuide.md、CopywritingGuide.md、copywriting guide.md
+    ```
+- ### 目录标题
+    - 目录标题与每篇文章的标题要一致。
+
+## 参考链接
+
+- [Markdown 语法说明 (简体中文版)](https://www.appinn.com/markdown/)
+- [极客学院 Wiki 协作手册](https://wiki.jikexueyuan.com/project/wiki-editors-guidelines/)
+
+## 结束语
+
+- 未完待续...
+

+ 62 - 0
source/_posts/st-ashampoo-snap.md

@@ -0,0 +1,62 @@
+---
+title: 阿香婆屏幕截图工具 Ashampoo Snap
+date: 2018-12-01 18:18:35
+categories:
+- 软件工具
+tags:
+- screenshot
+---
+
+# 阿香婆屏幕截图工具 Ashampoo Snap
+
+## 目录
+
+- [简介](#简介)
+- [使用方法](#使用方法)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 说明
+    - Ashampoo Snap 是德国 Ashampoo 软件公司的专业截图工具,只要屏幕上见到的使用它都能为您抓取并保存为高质量图片或视频。功能齐全,操作简单,界面优秀!。
+- 下载
+    - Windows 版:<img src="st-ashampoo-snap/dowload.png" width="16" height="16" align="center" />[网盘下载](https://pan.baidu.com/s/1G3bkWzUFXa7-RHnWhTo6cA) `提取码hm2g`
+- 安装
+    - 默认安装即可,最好改下安装路径。
+- 主要特性
+    - 灵活精确的截图
+        >像素级精度的截图。无论是整个屏幕,单个网页或是一个区域 - Snap 都能截取出来生成图片或视频。还有定时器,自动滚动以及智能文本识别,为您提供无限可能。只需点击一下或是按下快捷键,Snap 10 就会立即开始进行截图工作! 
+    - 一图胜千言
+        >使用 Snap 10 您可以与他人更快捷的分享信息。添加箭头、图形,自动标号,还有许多其它选项,让您的图片表意更加清晰。免去大段大段枯燥的描述,节省时间和精力!有图有真相 - 快捷、轻松,直击要害。
+    - 创建自己的实时视频 
+        >实时编辑视频,添加文本、画上图像、语音叙述。现在可以直接进行后期处理了!在视频中可以可视化显示鼠标点击和键盘按下动作 - 这是制作教学视频的利器。如果需要保护知识产权,别忘了试试新的视频水印功能。
+    - 匹配任意数量显示器
+        >同时使用个多显示器时,您可能会面临一大堆的屏幕分辨率和 DPI 设置问题。Snap 可以自动适应您的显示设置,完美兼容任何显示模式!
+    - 完美获取网站内容
+        >Snap 10 不仅能截取网站图像,还能在图片上或是元数据中附加上源页面的信息。Snap 让一切都井井有条。如果您需要分享图片,Snap 可以自动添加图片链接。如果您希望捕获整个网站,或是光文本,甚至一次捕获是多个窗口。Ashampoo Snap 10 都能搞定!
+    - 视频编辑,制作最完美的影片
+        >即使是已经很漂亮的视频也有不少调整空间:裁剪掉无用的场景,删除广告,或是分割视频成一个个片段。有了 Ashampoo Snap 10,您无再需要安装其它软件。设计精巧的编辑器帮您提取出视频中的重点和亮点部分。还可以附加其它视频,导出珍贵场景保存为 GIF 动画!
+    - 安全的发送或上传到云端
+        >想要随时随地查看您的图片?Ashampoo Snap 10 可以做到:用邮件发送图片,保存到 Ashampoo 网络空间,或是上传到各个云服务((DropBox、Microsoft OneDrive、Google Drive)。如有必要,可以在邮寄或上传前进行优化,缩小大小。
+        
+## 使用方法
+
+- 准备工作
+    - 控制此程序  
+        ![抱歉,图片休息了](st-ashampoo-snap/st-ashampoo-snap-001.png)  
+    - 常用设置
+        ![抱歉,图片休息了](st-ashampoo-snap/st-ashampoo-snap-002.png)  
+        ![抱歉,图片休息了](st-ashampoo-snap/st-ashampoo-snap-003.png)  
+ - 主界面
+    - 顶部
+        ![抱歉,图片休息了](st-ashampoo-snap/st-ashampoo-snap-004.png)  
+    - 左部
+        ![抱歉,图片休息了](st-ashampoo-snap/st-ashampoo-snap-005.png)  
+    - 右部
+        ![抱歉,图片休息了](st-ashampoo-snap/st-ashampoo-snap-006.png)  
+## 参考链接
+
+## 结束语
+
+- 未完待续...

BIN
source/_posts/st-ashampoo-snap/dowload.png


BIN
source/_posts/st-ashampoo-snap/st-ashampoo-snap-001.png


BIN
source/_posts/st-ashampoo-snap/st-ashampoo-snap-002.png


BIN
source/_posts/st-ashampoo-snap/st-ashampoo-snap-003.png


BIN
source/_posts/st-ashampoo-snap/st-ashampoo-snap-004.png


BIN
source/_posts/st-ashampoo-snap/st-ashampoo-snap-005.png


BIN
source/_posts/st-ashampoo-snap/st-ashampoo-snap-006.png


+ 93 - 0
source/_posts/st-eclipse.md

@@ -0,0 +1,93 @@
+---
+title: Eclipse 札记
+date: 2018-12-01 16:45:09
+categories:
+- 软件工具
+tags:
+- eclipse
+---
+
+# Eclipse 札记
+
+## 目录
+
+- [简介](#简介)
+- [Git 的使用](#Git的使用)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 记录 Eclipse 的 常用操作
+
+## Git的使用
+- 新建工程初始化为本地库(以 Maven 工程为例)
+    ```
+    1. Maven工程右键->'Java Tools'->'Generate Deployment Descriptor Stub',来生成web.xml文件
+    2. Maven工程右键->'Team'->'Share Project...',选择Git,勾选'Use or create repository in...',选中目标Project后点击'Create Repository'
+    3. 在'Preferences'->'Team'->'Git'->'Configuration'中,'Repository Settings'选项卡能够检测到当前工作空间中的git项目
+        当前项目本地库配置也可在此配置,例如签名等等
+    4. 在'Preferences'->'Team'->'Git'->'Label Decorations'中,能看到各个Git图标的介绍
+    ```
+- 忽略 Eclipse 特定文件
+    ```
+    1. .classpath文件,.project文件,.settings目录下所有文件都是Eclipse为了管理我们创建的工程而维护的文件,和开发的代码没有直接关系。最好不要在Git中进行追踪,也就是把它们忽略
+        因为同一个团队中很难保证大家使用相同的IDE工具,而IDE工具不同时,相关工程特定文件就有可能不同。如果这些文件加入版本控制,那么开发时很可能需要为了这些文件解决冲突。
+    2. 去GitHub官网(https://github.com/github/gitignore)下载样例文件,并在本地编辑该配置文件,文件名任意
+        末尾添加.classpath,.project,.settings,target等文件和目录
+    3. 在~/.gitconfig文件中引入上述文件 ,注意这里路径中一定要使用“/”,不能使用“\”
+        [core]
+            excludesfile=C:/Users/Lenovo/Java.gitignore
+    4. 在'Preferences'->'Team'->'Git'->'Configuration'中,'User Settings'选项卡中能看到
+    ```
+- 提交到本地库
+    ```
+    1. Maven工程右键->'Team'->'Add to index',项目文件都被加入暂存区追踪,也可以通过Ctrl+#打开'Git Stating'窗口来操作指定文件加入暂存区追踪
+        已经被追踪过的文件,再次修改,不会进入'Unstaged Changes'中,会进入'Staged Changes'
+    2. Maven工程右键->'Team'->'Commit...',快捷键Ctrl+#(Ctrl+Shift+3),填写相关信息,提交到本地库
+    ```
+- 推送到远程库(以 GitHub 为例)
+    ```
+    1. Maven工程右键->'Team'->'Remote'-'Push...'>,填写相关信息提交
+        填写URI(远程库地址),用户名,密码后next
+        点击'Add All Branches Spec'来检测所有分支,next	
+        填写相关日志信息,finish
+    2. 弹出'Push Results...'窗口代表推送成功
+    ```
+- 从远程库克隆到本地(以 Oxygen 版本为例)
+    ```
+    1. 右键'Import...',选择'Git'->'Projects from Git',next后选择'Clone URI'
+        填写URI(远程库地址),用户名,密码后,next选择分支
+        指定工程的保存位置(Kepler等低版本Eclipse不能保存到当前Eclipse工作空间,需保存到工作空间以外的目录中)
+        指定工程导入方式,这里只能用:Import as general project,目录下会多出.project文件
+    2. 转换工程类型为Maven
+        工程右键'Configure'->'Convert to Maven Project',目录下会多出.classpath文件和.settings目录
+    ```
+- 解决冲突
+    ```
+    1. 提交各自的修改至本地库后,然后试着推送到远程库,可能会出现冲突	
+        Maven工程右键->'Team'->'Push Branch master'
+    2. 当弹出窗口提示冲突时,可执行拉取操作,解决冲突后Ctrl+#提交到本地库,最后推送到远程库
+        Maven工程右键->'Team'->'Pull'
+        冲突文件右键->'Team'->'Merge Tool'
+    ```
+- GitFlow 分支实战(以 hot_fix 为例)
+    ```
+    1. 创建分支		
+        工程右键'Team'->'Switch To'->'New Branch...',输入分支名hot_fix,依次提交到本地库和远程库(Push Branch hot_fix)
+    2. 切换分支审查代码
+        Maven工程右键->'Team'->'Pull'
+        工程右键'Team'->'Switch To'->'Other...',选择'Remote Tracking'->'origin/hot_fix'
+    3. 检出远程新分支
+        选择'Check out as New Local Branch',检出为本地的一个新的分支
+    4. 切换回master
+        工程右键'Team'->'Switch To'->'master
+    5. 合并分支
+        工程右键'Team'->'Merge...',选择'Local'->'hot_fix',合并成功后把master推送到远程库
+	```
+    
+## 参考链接
+
+## 结束语
+
+- 未完待续...

+ 66 - 0
source/_posts/st-finalshell.md

@@ -0,0 +1,66 @@
+---
+title: 超强SSH客户端 FinalShell
+date: 2018-12-01 17:57:50
+categories:
+- 软件工具
+tags:
+- ssh
+---
+
+# 超强SSH客户端 FinalShell
+
+## 目录
+
+- [简介](#简介)
+- [使用方法](#使用方法)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 说明
+    - FinalShell 是一款集成 ssh 连接、ftp 管理、系统监控的软件,甚至提供了免费海外服务器远程桌面加速、ssh 加速、双边 tcp 加速、内网穿透等功能。
+- 下载
+    - Windows 版:<img src="st-finalshell/dowload.png" width="16" height="16" align="center" />[网盘下载](https://pan.baidu.com/s/1eZ3lsrCDZcd02nnJ4F2PBA) `提取码w17p`
+    - Mac 版,Linux 版:[FinalShell Mac OS版,Linux版安装及教程](http://www.hostbuf.com/t/1059.html)
+- 安装
+    - 默认安装即可,最好改下安装路径。
+    - 中途会安装 winpcap(windows packet capture),是 windows 平台下一个免费、公共的网络访问系统。 
+- 主要特性
+    >1.多平台支持 Windows,Mac OS X,Linux.  
+    2.多标签,批量服务器管理.  
+    3.支持登录 Ssh 和 Windows 远程桌面.  
+    4.漂亮的平滑字体显示,内置 100 多个配色方案.  
+    5.终端,sftp 同屏显示,同步切换目录.  
+    6.命令自动提示,智能匹配,输入更快捷,方便.  
+    7.sftp 支持,通过各种优化技术,加载更快,切换,打开目录无需等待.  
+    8.服务器网络,性能实时监控,无需安装服务器插件.  
+    9.内置海外服务器加速,加速远程桌面和 ssh 连接,操作流畅无卡顿.  
+    10.双边加速功能,大幅度提高访问服务器速度.  
+    11.内存,Cpu 性能监控,Ping 延迟丢包,Trace 路由监控.  
+    12.实时硬盘监控.  
+    13.进程管理器.  
+    14.快捷命令面板,可同时显示数十个命令.  
+    15.内置文本编辑器,支持语法高亮,代码折叠,搜索,替换.  
+    16.ssh 和远程桌面均支持代理服务器.  
+    17.打包传输,自动压缩解压.  
+    18.免费内网穿透,无需设置路由器,无需公网 ip.  
+    19.支持 rz,sz(zmodem).
+    
+## 使用方法
+
+- ssh 添加
+
+![抱歉,图片休息了](st-finalshell/st-finalshell-001.png)
+![抱歉,图片休息了](st-finalshell/st-finalshell-002.png)
+
+- vps 连接
+
+![抱歉,图片休息了](st-finalshell/st-finalshell-003.png)
+![抱歉,图片休息了](st-finalshell/st-finalshell-004.png)
+
+## 参考链接
+
+## 结束语
+
+- 未完待续...

BIN
source/_posts/st-finalshell/dowload.png


BIN
source/_posts/st-finalshell/st-finalshell-001.png


BIN
source/_posts/st-finalshell/st-finalshell-002.png


BIN
source/_posts/st-finalshell/st-finalshell-003.png


BIN
source/_posts/st-finalshell/st-finalshell-004.png


+ 235 - 0
source/_posts/st-git-basic.md

@@ -0,0 +1,235 @@
+---
+title: Git 札记:基础
+date: 2018-12-01 17:25:42
+categories:
+- 软件工具
+tags:
+- git
+---
+
+# Git 札记:基础
+
+## 目录
+
+- [简介](#简介)
+- [发展历史](#发展历史)
+- [准备工作](#准备工作)
+- [add/commit 内部原理](#内部原理)
+- [本地库常用操作](#本地库常用操作)
+- [分支管理](#分支管理)
+- [标签管理](#标签管理)
+- [自定义 Git](#自定义Git)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- ### 版本控制系统
+    - 集中式
+        - 免费:CVS(由于自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况),SVN(修正了CVS的一些稳定性问题)
+        - 收费:ClearCase(以前是 Rational 公司的,被 IBM 收购了,特点是安装比 Windows 还大,运行比蜗牛还慢,能用 ClearCase 的一般是世界 500 强,他们有个共同的特点是财大气粗,或者人傻钱多)
+    - 分布式
+        - 免费:Git(目前世界上最先进、最流行的分布式版本控制系统)
+        - 收费:BitKeeper(属于 BitMover 公司,2002 年授权 Linux 社区免费使用,2005 年终止,促使 Git 诞生)
+- ### 优势
+    - 无需联网,大部分操作在本地完成
+    - 安全性高,通过哈希算法来保证数据的完整性
+    - 强大的分支管理,分支操作非常快捷流畅
+    - 与 Linux 命令全面兼容
+
+## 发展历史
+    
+![抱歉,图片休息了](st-git-basic/st-git-basic-001.png "Linux 系统版本控制历史")
+
+## 准备工作
+
+- 安装过程中选择'User Git from Git Bash only',完全不修改 PATH 环境变量,仅在 Git Bash 中使用 Git
+    ```shell
+    $ git --version      //查看git是否安装成功及版本号
+    ```
+- 设置签名:区分不同开发人员的身份
+    ```shell
+    $ git config --global user.name "tujidelv"      //为该机器上所有的git仓库指定用户名
+    $ git config --global user.email "tujide.lv@foxmail.com"      //为该机器上所有的git仓库指定email地址
+    ```
+ - 适当地显示不同的颜色
+    ```shell
+    $ git config --global color.ui true
+    ```
+
+## 内部原理
+
+![抱歉,图片休息了](st-git-basic/st-git-basic-002.png "add/commit图解")
+- ### git add
+    - 保存二进制对象:$ git hash-object -w test.txt  
+        - 把 test.txt 的当前内容压缩成二进制文件存入 Git。压缩后的二进制文件称为一个 Git 对象,保存在 .git/objects 目录,同时会计算当前内容的 SHA1 哈希值(长度 40 的字符串)作为该对象的文件名
+        - .git/objects 下面的一个个子目录名是该哈希值的前 2 个字符,该子目录下面有一个文件,文件名是哈希值的后 38 个字符
+        - 用 cat 命令查看该文件都是一些二进制字符(包括元数据),可用如下命令查看文件原始的文本内容:$ git cat-file -p e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+    - 更新暂存区:$ git update-index --add --cacheinfo 100644 \ 3b18e512dba79e4c8300dd08aeb37f8e728b8dad test.txt
+        - 用于在暂存区记录一个发生变动的文件
+        - 向暂存区(stage)写入文件名 test.txt、二进制对象名(哈希值)和文件权限(100 代表 regular file[普通文件],644 代表 rw-r--r--)
+        
+    Tips:**Git提供了git add命令简化上面2步操作。**
+- ### git commit
+    - 保存当前目录结构:$ it write-tree
+        - 将当前的目录结构生成一个 Git 对象,目录结构也是作为二进制对象保存的,也保存在 .git/objects 目录里面,对象名就是哈希值
+    - 将目录树对象写入版本历史:$ echo "first commit" | git commit-tree c3b8bb102afeca86037d5b5dd89ceeb0090eae9d
+        - 提交的时候需要有提交说明,echo "first commit"就是给出提交说明。然后,git commit-tree 命令将元数据和目录树,一起生成一个Git对象
+        - 用 $ git cat-file -p 命令能看到本次快照对应的目录树对象(tree),作者和提交人信息,以及提交说明
+        - 用如下命令也可以用来查看某个快照信息:$ git log --stat c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa
+        
+    Tips:**Git提供了git commit命令简化上面2步操作。**
+        
+## 本地库常用操作
+- 常用命令
+    ```
+    - git help <命令>
+    - git init      //初始化版本库(把当前目录变成git可以管理的仓库[会在当前目录创建一个.git子目录,用来保存版本信息])
+    - git add <FILE...|DIR...>      //告诉git把文件添加到仓库的暂存区,可反复多次使用,并且每次可添加多个文件
+        - 实际上就是把要提交的所有修改添加到暂存区(stage)
+        - git add --all/-A/.      //对当前项目所有变动的文件,执行保存二进制对象和更新暂存区操作
+    - git commit -m "wrote a readme file"      //告诉git把文件提交到仓库的分支(-m 后面输入的是本次提交的说明),一次可提交多个文件
+        - 实际上就是一次性把暂存区的所有修改提交到分支(master)
+    - git status      //查看工作区/暂存区的状态
+    - git diff [FILE]      //如果git status提示有文件被修改,可以用此命令查看指定文件修改了哪些内容,显示的格式是Unix通用的diff格式
+        - 比较的是版本库(暂存区和分支中的任意一个)与工作区同名文件相比是否相同,而git diff --cached比较的是暂存区有无内容
+        - git diff HEAD [FILE]      //将工作区中的文件和本地库历史记录比较 
+    - git checkout -- <FILE>...      //撤销此文件在工作区的修改(包括删除),回到最近一次commit或add时的状态
+        - git checkout -- .      //撤销工作区所有的修改
+        - git checkout -- *.java      //撤销工作区所有java文件的修改
+    - git reset HEAD <FILE>...      //撤销此文件在暂存区的修改,回退到工作区
+        - git reset HEAD *      //撤销暂存区所有的修改
+    - git rm FILE      //当想从版本库中删除文件时,可先在工作区删除,然后调用此命令,再commit
+    - git log      //显示从最近到最远的提交日志。其中commit(快照) id是用SHA1算出的16进制数字
+        - 后面加上--pretty=oneline可以精简信息
+        - 后面加上--graph可以看到分支合并情况
+        - 后面加上--abbrev-commit可以精简快照id
+    - git reflog      //查看命令历史,当找不到新版本的id时可以用此来确定要回到未来的哪个版本
+        - HEAD@{移动到当前版本需要多少步}
+    - git reset --hard HEAD~      //版本回退,HEAD代表当前版本,~代表回退到上个版本,如回到上100个版本可以用HEAD~100来表示 
+        - git reset --hard 43ade3f      //当想回到之前的新版本时(也能后退),可以找到它的commit id输入前几位即可(基于局部索引值操作,推荐)
+        - --hard      //会让当前工作区和暂存区的修改也撤销
+        - --soft      //不会让当前工作区和暂存区的修改也撤销,上次的提交由本地仓库回到暂存区
+        - --mix      //不会让当前工作区的修改撤销,会让暂存区的修改撤销,上次的提交由本地仓库回到暂存区
+    - git stash      //隐藏工作现场
+        - 当手头工作没有完成时(工作区/暂存区有变动时),先把工作现场git stash隐藏一下,这样git status查看工作区是干净的,然后去修复bug,修复后,再git stash pop,回到份工作现场
+        - git stash list      //查看隐藏的工作现场									
+        - git stash pop      //恢复隐藏的工作现场,同时删除stash内容	
+    ```
+    
+## 分支管理
+
+![抱歉,图片休息了](st-git-basic/st-git-basic-003.png "分支操作流程图")
+- 分支的好处
+    - 同时并行推进多个功能开发,提高开发效率
+    - 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可
+- 分支操作
+	- 查看所有分支:$ git branch [-v]
+	    - 当前分支前面会标一个*号
+	- 创建+切换分支:$ git checkout -b <name> [branch-name,可写可不写,依情况而定]
+		- 创建分支:$ git branch <name>
+		- 切换分支:$ git checkout <name>
+		- 在本地创建和远程分支(必须已存在)对应的分支,名称最好一致:$ git checkout -b <branch-name> <origin/branch-name>
+	- 合并指定分支到当前分支:git merge [-m "..."] <name>
+		- Fast-forward,代表此次合并是"快进模式",即把当前分支(master)指向指定分支(dev)的当前提交,所以合并速度非常快,这种模式下,删除分支后,会丢失掉分支信息
+		- 后面加上--no-ff 参数,表示禁用"Fast-forward",用普通模式合并,会创建一个新的 commit,合并后的历史能看到分支信息,能看出来曾经做过合并,而 fast forward 合并就看不出来曾经做过合并
+	- 删除分支:$ git branch -d <name>
+		- $ git branch -D <name>   强行删除一个没有被合并过的分支(分支中只有空文件时可用普通方式-d删除分支)
+- 解决冲突
+	- 当 Git 无法自动合并分支时,须手动编辑文件解决冲突,然后再添加到暂存区再提交,合并完成
+    ```
+    CONFLICT (content): Merge conflict in readme.txt
+    Automatic merge failed; fix conflicts and then commit the result.
+    ```
+- 分支管理策略
+	- 首先,master 主分支应该非常稳定,仅用来发布新版本,平时不能在上面干活;
+	- 每个人干活都在 dev 分支上,dev 分支是不稳定的,例如 1.0 版本发布时,再把 dev 分支合并到 master 上,在 master 主分支发布 1.0 版本;
+	- 每个人都有自己的分支,时不时的往 dev 分支上合并就行。
+	- **本地新建的分支如果不推送到远程,对其他人就是不可见的。**	
+- Rebase
+	- $ git rebase 操作可以把本地未 push 的分叉提交历史整理成直线
+	- Rebase 的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
+
+## 标签管理
+
+- Git 标签虽然是版本库的快照,但其实是指向某个 commit 的死指针(与分支类似,但分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
+- 创建标签
+    ```
+    $ git tag <tagname>      //新建一个标签,默认是打在当前分支下的最新commit上的
+        - $ git tag <tagname> [commitid]      //打在某次指定(commit id)提交上
+        - $ git tag -a <tagname> -m "" [commitid]      //创建带有说明的标签,-a指定标签名,-m指定说明信息
+            - $ git tag -a v0.1 -m "version 0.1 released" 3628164
+        - $ git tag -s <tagname> -m "" [commitid]      //创建PGP签名的标签,不可伪造,-s用私钥签名一个标签
+            - 必须先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错;如果报错,请参考GnuPG帮助文档配置Key
+    ```
+- 操作标签
+    ```
+    $ git tag      //查看所有标签,按字母排序列出,而不是按时间顺序
+    $ git show <tagname>      //查看指定标签信息
+    $ git tag -d <tagname>      //删除一个本地标签
+    $ git push origin <tagname>      //推送一个本地标签到远程
+    $ git push origin --tags      //推送全部未推送过的本地标签到远程
+    $ git push origin :refs/tags/<tagname>      //删除一个远程标签,需先删除对应的本地标签
+    ```
+
+## 自定义Git
+
+### 忽略特殊文件
+
+- 有些时候,你必须把某些文件放到 Git 工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件等等,每次 git status 都会显示 Untracked files ...,
+有强迫症的童鞋心里肯定不爽,可以在 Git 工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件。
+- 不需要从头写 .gitignore 文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了(该文件要提交到版本库才能生效)。
+所有配置文件可以直接在线浏览:<https://github.com/github/gitignore>
+- 原则
+    - 忽略操作系统自动生成的文件,比如缩略图等;
+    - 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
+    - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
+- 有些时候添加一个文件到 Git,但发现添加不了,原因是这个文件被 .gitignore 忽略了,有如下2种处理方法
+    ```
+    $ git add -f FILE      //用-f强制添加到Git
+    $ git check-ignore -v FILE      //检查.gitignore文件的哪个配置影响了该文件,好修改规则
+    ```
+- Windows 下创建 .gitignore 文件的常用方法
+    - 方法一(最直接):在资源管理创建文件时,文件命名“.gitignore.”,注意结尾有个 . 号,回车确认时系统会自动存成 .gitignore。
+    - 方法二:打开文本编辑器,保存时文件名输入“.gitignore”,保存类型选“所有文件”。
+    - 方法三:进入 cmd 命令行,执行 echo > .gitignore 输入空内容并创建文件,或执行 rename somefile .gitignore、copy somefile .gitignore 从已有文件复制、重命名。
+    
+### 配置别名
+    
+- 通过命令配置
+    - 加上--global 是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
+    ```								
+    $ git config --global alias.st status				 					
+    $ git config --global alias.co checkout									
+    $ git config --global alias.ci commit									
+    $ git config --global alias.br branch									
+    $ git config --global alias.unstage 'reset HEAD'									
+    $ git config --global alias.last 'log -1'      //显示最近一次的提交									
+    $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"	
+    ```
+- 通过文件配置
+    - 每个仓库的 Git 配置文件都放在 .git/config 文件中,而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件 .gitconfig 中,别名就在[alias]后面,要删除别名,直接把对应的行删掉即可
+    ```
+    [alias]
+    	co = checkout
+    	ci = commit
+    	br = branch
+    	st = status
+    	unstage = reset HEAD
+    	last = log -1
+    	lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
+    [user]
+    	name = tujidelv
+    	email = tujide.lv@foxmail.com
+    ```
+- windows 版 git bash 设置其他命令别名
+    - **Git 安装目录,修改 etc/profile.d/aliases.sh 文件。**
+    
+## 参考链接
+
+- [Git 官方文档](https://git-scm.com/book/zh/v2)
+- [Git教程 - 廖雪峰的官方网站](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
+
+## 结束语
+
+- 未完待续...

BIN
source/_posts/st-git-basic/st-git-basic-001.png


BIN
source/_posts/st-git-basic/st-git-basic-002.png


BIN
source/_posts/st-git-basic/st-git-basic-003.png


+ 246 - 0
source/_posts/st-git-remote.md

@@ -0,0 +1,246 @@
+---
+title: Git 札记:远程库
+date: 2018-12-01 17:46:49
+categories:
+- 软件工具
+tags:
+- git
+---
+
+# Git 札记:远程库
+
+## 目录
+
+- [简介](#简介)
+- [分类](#分类)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 代码托管中心:用来维护远程仓库
+    - 外网环境:Github,码云等等
+    - 内网环境:Gitlab,GitBucket 等等
+
+## 分类
+
+### GitHub(外网环境)
+    
+- 既是一个免费托管开源代码的远程仓库,可将个人的开源项目放上去;还是一个开源协作社区,即可让别人参与你的开源项目,也可参与别人的开源项目。
+- Github 常用按钮说明
+    - Watch:关注该项目,作者有更新的时候,会在你的 Github 主页有通知消息。
+    - Star:收藏该项目,在你的头像上有一个 “Your stars” 链接,可以看到你的收藏列表,以方便下次进来。
+    - Fork:复制一份项目到自己的 Github 空间上,你可以自己开发自己的这个地址项目,然后 Pull Request 给项目原主人。
+---
+1. 本地创建 SSH Key
+    - 在用户主目录下,如果有.ssh 目录并且该目录下有 id_rsa 和 id_rsa.pub 两个文件,则跳过这步;否则在 window 下打开Git Bash。
+        ```shell
+        $ ssh-keygen -t rsa -C "tujide.lv@foxmail.com"
+        ```
+    - 一直默认回车,生成的 2 个文件就是 SSH Key 的秘钥对,id_rsa 是私钥,不能泄露,id_rsa.pub 是公钥,可以告诉别人。
+2. GitHub 添加本地 SSH Key
+    - 登陆 GitHub,打开"Settings"=>"SSH Keys"页面,点击"New SSH Key",填上任意 Title,在 Key 文本框里粘贴 id_rsa.pub 文件的内容,点击"Add Key"。
+        - 可以添加多个,这样有这些公钥的电脑就可以将本地仓库代码推送到GitHub远程仓库中。
+3. 添加远程仓库
+    - 登录 GitHub,打开"New repository",在"Repository name"填入 learngit,其他保持默认设置,点击"Create repository",就创建了一个新的 Git 仓库。
+        - 该仓库为公开的,可通过交保护费让 GitHub 把仓库变成私有,或自己搭建 Git 服务器。
+        - 该仓库默认是空的,可以克隆出新的仓库,也可以与本地仓库关联,把本地仓库的内容推送到该仓库。
+4. 关联远程仓库并推送
+    - 查看远程库的详细信息
+        ```shell
+        $ git remote -v
+        ```
+    - 关联远程库并创建别名
+        ```shell
+        $ git remote add <远程仓库别名> git@github.com:GitHub账户名/learngit.git
+        ```
+        - 如果在使用命令 git remote add 时报错(fatal: remote origin already exists.),说明本地库已经关联了一个名叫 origin 的远程库,有如下2种处理方案。
+            ```
+            1.删除已有的远程仓库origin,再关联
+                - $ git remote rm origin
+            2.因为git是分布布,支持同步到多个远程库,远程仓库的名字不能一样
+                - $ git remote add gitee git@gitee.com:xxx/xxx.git
+                - $ git remote add github git@github.com:xxx/xxx.git
+            ```
+    - 将本地库的内容(指定分支)推送到远程库对应的远程分支上(不存在时会自动新建)
+        ```shell
+        $ git push <远程仓库别名> 分支名
+        ```
+        - **-u 参数,第一次推送时需要,会把本地 master 分支和远程 master 分支关联起来,在以后的推送或拉取可以简化命令。**
+5. 从远程仓库克隆
+    - SSH 协议 Clone,没有添加 Key 将不能推送;Https 协议 Clone,需要登陆有权限的 GitHub 帐号才能推送
+        - 没加入团队是无法推送的,项目发起者可在'Settings'->'Collaborators'中邀请 GitHub 成员加入团队,并把邀请链接发给成员,成员登陆自己的帐号访问邀请链接以同意加入团队,即可进行远程推送。
+        - HTTPS 协议是无法记住登陆帐号的,第一次推送登陆后,而再次推送无需登陆,是因为 win10 系统的'凭据管理器'中的'Windows凭据'记住了密码,如果下次想切换别的帐号登陆,可以到此删除掉重新登陆。
+    - 把远程库下载到本地,因为是读操作,不需要验证身份
+        ```shell
+        $ git clone git@github.com:GitHub账户名/gitskills.git
+        ```
+        - 会关联远程库并创建别名,同时会把本地仓库 master 分支与远程仓库的 master 分支关联起来,在以后的推送或拉取时可以简化命令
+        - --depth=1,用于指定克隆深度,为 1 表示只克隆最近一次 commit,历史旧数据不 clone,可用于解决项目过大时 clone 导致 timeout 的问题,但他只会把默认分支 clone 下来,其他远程分支并不在本地,如需要的话可如下命令拉取其他分支。
+            ```shell
+            $ git remote set-branches origin 'remote_branch_name'
+            $ git fetch --depth=1 origin remote_branch_name
+            ```
+    - **GitHub 还会给出多个地址,如 `https://github.com/GitHub账户名/gitskills.git`,因为 Git 支持多种协议,默认是通过 ssh 支持的原生git协议,速度最快;也可用 https 等其他协议,速度慢,每次推送必须输入口令。**
+6. 拉取
+    1. 首先,可以试图用 **git push origin branch-name** 推送自己的修改。
+    2. 如果推送失败,则因为不是基于 GitHub 远程库的最新版所做的修改(即远程分支比你的本地更新),需先用 **git pull/fetch** 抓取远程的新提交,因为是读操作,不需要验证身份。
+        - fetch
+            - 把远程的更新下载到本地,可 git checkout origin/master 切换查看内容,并没有修改工作区,可 git merge origin/master 进行合并操作。
+        - pull = fetch + merge
+            - 如果 git pull 提示"no tracking information",则说明没有创建本地分支和远程分支的链接关系,用命令 **git branch --set-upstream-to=origin/branch-name branch-name**再进行git pull。
+            ```
+            $ git pull      //如果当前分支只有一个追踪分支,可以省略远程仓库名即可更新并合并
+            $ git pull origin      //如果当前分支有多个追踪分支,可以指定当前分支与指定的远程追踪分支进行更新并合并
+            $ git pull origin master      //指定当前分支与指定的远程master分支进行更新并合并
+            $ git pull origin master1:master2      //指定本地的master2分支与指定的远程master1分支进行更新并合并
+            ```
+    3. 如果合并有冲突,则手动解决冲突(解决的方法和分支管理中的解决冲突完全一样),并在本地提交。
+    4. 没有冲突或者解决掉冲突后,再用 git push origin branch-name 推送就能成功。
+7. 跨团队协作/参与一个开源项目
+    1. 以自己身份进入开源项目主页,点击"fork"克隆到自己的远程仓库下。
+    2. 从自己的远程仓库下克隆项目到本地,这样才能推送修改。
+    3. 如果想修复开源项目的一个 bug,或者新增一个功能,立刻就可以开始干活,干完后,往自己的远程仓库推送	。
+    4. 如果希望开源项目的官方能接受你的修改,可以在 GitHub 上发起一个 pull request,对方是否接受你的 pull request就不一定了。
+        1. 在自己远程仓库项目主页中,点击'Pull requests'/'New pull request',此时'bask fork'选择官方作者,'head fork'选择自己,点击'Create pull request',填好标题和说明(可选)确认。
+        2. 此时官方作者可在项目主页中,点击'Pull requests',能看到自己刚刚发送的请求,进去后可在里面跟请求者对话,点击'Files changed'审核代码,没问题的话可点击'Merge pull request'合并代码。
+        3. 在自己远程仓库项目主页中,如果官方作者有回复内容,可在刚发送的请送中看到官方的回复内容,也可回复。
+    5. 如果官方作者有提交新的代码,可在自己项目主页中,点击'Pull requests'/'New pull request',此时'bask fork'选择自己,'head fork'选择官方作者,点击'Create pull request',填好标题和说明(可选)确认。								
+        - 没问题的点击'Merge pull request'合并代码以获取官方作者的最新代码。
+      
+### 码云(外网环境)
+
+- 同 GitHub 一样,提供免费的 Git 仓库;此外,还集成了代码质量检测、项目演示等功能。对于团队协作开发,码云还提供了项目管理、代码托管、文档管理的服务,5 人以下小团队免费。
+    - 码云的免费版本也提供私有库功能,只是有 5人 的成员上限。
+- 使用方法同 GitHub。
+
+### GitLab(内网环境)
+
+- 官网地址			
+	- 首页:<https://about.gitlab.com/> 
+	- 安装说明:<https://about.gitlab.com/installation/>
+- 安装命令摘录
+    ```shell
+    sudo yum install -y curl policycoreutils-python openssh-server cronie
+    sudo lokkit -s http -s ssh
+    sudo yum install postfix
+    sudo service postfix start
+    sudo chkconfig postfix on
+    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
+    sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee
+    ```
+	 - 实际问题:yum 安装 gitlab-ee(或ce)时,需要联网下载几百 M 的安装文件,非常耗时,所以应提前把所需 RPM 包下载并安装好。
+	 下载地址为:<https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm>,调整后的安装过程:			
+	```shell
+	sudo rpm -ivh /opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm		
+	sudo yum install -y curl policycoreutils-python openssh-server cronie  		
+	sudo lokkit -s http -s ssh		
+	sudo yum install postfix		
+	sudo service postfix start		
+	sudo chkconfig postfix on		
+	curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash		
+	sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
+	```
+	- 当前步骤完成后重启		
+- GitLab 服务操作
+	- 初始化配置 gitlab
+	    ```shell
+	    $ gitlab-ctl reconfigure
+		```
+	- 启动/停止 gitlab 服务
+        ```shell	
+        $ gitlab-ctl start/stop
+        ```
+- 浏览器访问
+    - 访问 Linux 服务器 IP 地址即可,如果想访问 EXTERNAL_URL 指定的域名还需要配置域名服务器或本地 hosts 文件。
+		- 应该会需要停止防火墙服务
+        ```shell
+        $ service firewalld stop
+        ```
+	- 初次登录时需要为 gitlab 的 root 用户设置密码。
+
+### 原生搭建(内网环境)
+
+1. 安装 Git												
+    ```
+    $ apt-get install git  (Debian系列系统)
+    $ yum install -y git   (RetHat系列系统)
+	```
+2. 创建Git用户,用来管理 Git服务,并为 Git 用户设置密码
+    ```shell
+    $ id git
+    $ useradd git
+    $ echo 'git' | passwd --stdin git &> /dev/null
+	```
+3. 创建 Git 仓库
+    1. 先选定一个目录作为 Git 仓库,假定是/home/data/git/sample.git/,在/home/data/git/目录下输入如下命令,Git 就会创建一个裸仓库,裸仓库没有工作区。
+        ```shell
+        $ git init --bare sample.git
+        ```
+    2. 因为服务器上的 Git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的 Git 仓库通常都以 .git 结尾。然后把 owner 改为 git。
+        ```shell
+        $ chown -R git:git sample.git
+        ```
+4. Git 打开 RSA 认证
+	1. 进入/etc/ssh目录,编辑 sshd_config,打开以下三个配置的注释,然后重启 sshd 服务
+        ```shell
+        $ vim sshd_config
+            RSAAuthentication yes
+            PubkeyAuthentication yes
+            AuthorizedKeysFile .ssh/authorized_keys
+        $ systemctl restart sshd
+            或者$ /etc/rc.d/init.d/sshd restart
+        ```
+        Tips:由 AuthorizedKeysFile 得知公钥的存放路径是.ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是git,所以实际存放公钥的路径是/home/git/.ssh/authorized_keys
+	2. 在/home/git/下创建目录 .ssh,然后把 .ssh 文件夹的 owner 修改为 git
+	    ```shell
+	    $ mkdir .ssh
+	    $ chown -R git:git .ssh
+	    ```
+5. 创建证书登录(添加客户端公钥到服务器)
+	1. 收集所有需要登录的用户的公钥,就是他们自己的 id_rsa.pub 文件,把所有公钥导入到/home/git/.ssh/authorized_keys 文件里,一行一个
+	    ```shell
+	    $ ssh git@server 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
+	    ``` 
+	    Tips:需要输入服务器端 git 用户的密码
+	2. 查看服务器端 .ssh 下是否存在 authorized_keys 文件
+        ```shell
+        $ ll git/.ssh/
+	    ```
+	3. 修改 .ssh 目录的权限为 700(rwx------),修改 .ssh/authorized_keys 文件的权限为600(rw-------)
+	    ```shell
+	    $ chmod 700 .ssh
+	    $ chmod 600 authorized_keys
+		```
+6. 禁止 git 用户 ssh 登录服务器
+	- 出于安全考虑,第二步创建的 git 用户不允许登录 shell,这可以通过编辑/etc/passwd 文件完成。将 bash 修改为 git-shell,找到类似下面的一行:
+	    ```
+	    git:x:1001:1001:,,,:/home/git:/bin/bash改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
+	    ```
+	- 这样,git 用户可以正常通过 ssh 使用 git,但无法登录 shell,因为我们为 git 用户指定的 git-shell 每次一登录就自动退出。
+7. 客户端克隆远程仓库
+    ```shell
+    $ git clone git@server:/home/data/git/sample.git
+    ```
+	Tips:如果 SSH 用的不是默认的 22 端口,则需要使用以下的命令(假设 SSH 端口号是 7700)
+	```shell
+	$ git clone ssh://git@server:7700/home/data/git/sample.git
+	```
+8. 管理公钥
+	- 如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用 Gitosis 来管理公钥。
+9. 管理权限
+	- 因为 Git 是为 Linux 源代码托管而开发的,所以 Git 也继承了开源社区的精神,不支持权限控制。
+	- 不过,因为 Git 支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的,Gitolite 就是这个工具。
+
+### GitBucket(内网环境)
+
+- 待更新...
+
+## 参考链接
+
+- [Git 官方文档](https://git-scm.com/book/zh/v2)
+- [Git教程 - 廖雪峰的官方网站](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
+
+## 结束语
+
+- 未完待续...

+ 81 - 0
source/_posts/st-git-workflow.md

@@ -0,0 +1,81 @@
+---
+title: Git 札记:工作流
+date: 2018-12-01 17:54:00
+categories:
+- 软件工具
+tags:
+- git
+---
+
+# Git 札记:工作流
+
+## 目录
+
+- [简介](#简介)
+- [分类](#分类)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- Git 工作流:分支管理策略
+    - 集中式工作流
+    - GitFlow 工作流
+    - Github flow 工作流
+    - AoneFlow 工作流
+    
+## 分类
+
+### 集中式工作流
+
+![抱歉,图片休息了](st-git-workflow/st-git-workflow-001.png "集中式工作流")
+- 简介
+    - 像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体,所有修改都提交到 Master 这个分支上。
+- 评价
+    - 这种方式与 SVN 的主要区别就是开发人员有本地库,Git 很多特性并没有用到。
+
+### GitFlow 工作流
+
+![抱歉,图片休息了](st-git-workflow/st-git-workflow-002.png "GitFlow 工作流")
+- 简介
+    - GitFlow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅,严格的分支模型也为大型项目提供了一些非常必要的结构。
+- 评价			
+    - GitFlow 的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支,大多数工具都将 master 当作默认分支,可是开发是在 develop 分支进行的,这导致经常要切换分支,非常烦人,
+    更大问题在于,这个模式是基于"版本发布"的,目标是一段时间以后产出一个新版本,但是,很多网站项目是"持续发布",代码一有变动,就部署一次,这时,master 分支和 develop 分支的差别不大,没必要维护两个长期分支。	
+- 分支种类
+    - 长期分支(核心分支)
+        - **主干分支 master**
+	        - 主要负责管理正在运行的生产环境代码,永远保持与正在运行的生产环境完全一致,这条分支不能进行代码修改,只能用来合并其他分支。
+		- **开发分支 develop**
+			- 主要负责管理正在开发过程中的代码,一般情况下应该是最新的代码,这条分支也不能进行代码修改,只能用来合并其他辅助分支。
+	- 临时分支(辅助分支)
+		- **补丁分支(bug 修理)hotfix**
+			- 主要负责管理生产环境下出现的紧急修复的代码,基于 master 分支上创建,修复测试无误后合并到 Master 和 Develop 分支。视情况可以删除该分支。
+		- **预发分支(准生产)release**
+			- 较大的版本上线前,会从 Develop 分支中分出准生产分支,进行最后阶段的集成测试,测试确定新功能没有问题,合并回 Master 和 Develop 分支,生产环境运行一段阶段较稳定后可以视情况删除。
+		- **功能分支 feature**
+			- 为了不影响较短周期的开发工作,一般把中长期开发模块,会从 Develop 分支中独立出来,开发完成后合并到 Develop 分支,视情况可以删除该分支。
+
+### Github flow 工作流
+
+- 简介
+    - 是 GitFlow 的简化版,它只有一个长期分支,就是 master,因此用起来非常简单,专门配合"持续发布",它是 Github.com 使用的工作流程。
+- 评价
+	- Github flow 的最大优点就是简单,对于"持续发布"的产品,可以说是最合适的流程,但对于一些要指定时间才能发布的项目来说,容易导致最后线上版本落后于 master 分支,需要另外新建一个 production 分支跟踪线上版本。
+- 流程	
+	1. 根据需求,从 master 拉出新分支,不区分功能分支或补丁分支。
+	2. 新分支开发完成后,或者需要讨论的时候,就向 master 发起一个pull request(简称 PR)。
+	3. Pull Request 既是一个通知,让别人注意到你的请求,又是一种对话机制,大家一起评审和讨论你的代码,对话过程中,你还可以不断提交代码。
+	4. 你的Pull Request 被接受,合并进 master,重新部署后,原来你拉出来的那个分支就被删除。(先部署再合并也可)
+
+### AoneFlow 工作流
+
+- 待更新...
+    
+## 参考链接
+
+- [Git 官方文档](https://git-scm.com/book/zh/v2)
+
+## 结束语
+
+- 未完待续...

BIN
source/_posts/st-git-workflow/st-git-workflow-001.png


BIN
source/_posts/st-git-workflow/st-git-workflow-002.png


+ 354 - 0
source/_posts/st-idea-advanced.md

@@ -0,0 +1,354 @@
+---
+title: IDEA 札记:进阶
+date: 2018-12-01 17:17:42
+categories:
+- 软件工具
+tags:
+- idea
+---
+
+# IDEA 札记:进阶
+
+## 目录
+
+- [简介](#简介)
+- [快捷键设置介绍](#快捷键设置介绍)
+- [高效率编码功能介绍](#高效率编码功能介绍)
+- [插件推荐、开发介绍](#插件推荐、开发介绍)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- 对IDEA进一步的了解及使用
+
+## 快捷键设置介绍
+
+- 设置为 Eclipse 的快捷键
+    ```
+    1.Keymap下拉框选中"Eclipse"并应用
+    2.如需在此快捷键模板上修改,则点击旁边齿轮->Duplicate来拷贝一份模板,并输入自己的命名
+    ```
+- 筛选并修改快捷键
+    ```
+    1.在搜索框输入快捷键描述内容							
+    2.点击搜索框旁边图标并按下需要修改的快捷键							
+    -------------------------
+    Add Keyboard Shortcut:用来添加新的纯键盘快捷键组合
+    Add Mouse Shortcut:用来添加新的键盘+鼠标快捷键组合,比如设置Ctrl+左键单击这类快捷组合。其中在弹出的添加面板中Click Pad是用来监听当前鼠标是左键单击还是右键单击
+    Add Abbreviation:根据IDEA的版本文档解释,添加简称主要是为了方便Search Everywhere中使用我设置的简称搜索
+    Remove:移出当前操作命令(一个操作命令同时支持多个快捷键组合)已设置的快捷键组合,由于IDEA默认就占用了很多快捷键组合,所以如果你要修改某个快捷键,建议还是删除掉旧的
+    ```
+- 导入已有的快捷键模板
+    ```
+    File–>import setttings–>选中本地的快捷键jar文件–>一路确认–>重启。
+    IDEA默认快捷键的配置文件所在地:${IDEA_home}\lib\resources.jar\keymaps\*
+    ```
+- 常用快捷键(Eclipse 版)
+    - ***Ctrl***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Ctrl</kbd> + <kbd>F</kdb>|在当前文件进行文本替换 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Z/Y</kdb>|撤销/反撤销 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>X/C/V/A/S</kdb>|剪切/复制/粘贴/全选/保存 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>D</kdb>|删除光标所在行或选中行 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>/</kdb>|单行注释 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>O</kdb>|查看当前类的结构 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>H/R</kdb>|查找/替换(全局) `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>E</kdb>|显示最近打开的文件记录列表 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>W</kdb>|关闭当前打开的代码栏 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>L</kdb>|在当前文件跳转到指定行处 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Up/Down</kdb>|等效于鼠标滚轮向前/后效果 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Left/Right</kdb>|光标跳转到当前单词/中文名的左/右侧开头位置 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>T</kdb>|在某个调用的方法名上使用会跳到具体的实现处,可以跳过接口 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>F12</kdb>|调转到所选中的词的下一个引用位置|
+        |<kbd>Ctrl</kbd> + <kbd>F1</kdb>|在光标所在的错误代码处显示错误信息|
+        |<kbd>Ctrl</kbd> + <kbd>J</kdb>|插入自定义动态代码模板|
+        |<kbd>Ctrl</kbd> + <kbd>U</kdb>|前往当前光标所在的方法的父类的方法/接口定义|
+    - ***Alt***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Alt</kbd> + <kbd>Insert</kdb>|新建文件 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Enter</kdb>|万能解错/生成返回值变量 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>/</kdb>|提示补全 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Up/Down</kdb>|向上/下移动行/方法 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Left/Right</kdb>|退回/前进到上一个/下一个操作的页面 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>R/D</kdb>|在执行/调试 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>1,2,...,9</kdb>|显示对应数值的他选项卡,其中1是Project用得最多 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>F12</kdb>|在项目下打开命令行 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>F1</kdb>|显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>`</kdb>|显示版本控制常用操作菜单弹出层 `(必备)` |
+    - ***Shift***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Shift</kbd> + <kbd>Enter</kdb>|向下开始新的一行 `(必备)` |
+        |<kbd>Shift</kbd> + <kbd>Tab</kdb>|取消缩进 `(必备)` |
+        |<kbd>Shift</kbd> + <kbd>F11</kdb>|弹出书签显示层 `(必备)` |
+    - ***Ctrl + Alt***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>S</kbd>|打开idea系统设置 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>Down</kbd>|向下复制一行 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>F</kbd>|添加到收藏 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>Left/Right</kbd>|切换当前已打开的窗口中的子视图,如debug窗口中有output,debugger等子视图|
+        |<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>H</kbd>|查看方法的多层重写结构|
+        |<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>/</kbd>|方法参数提示显示|
+    - ***Ctrl + Shift***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>/</kbd>|多行注释 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Enter</kbd>|向上开始新的一行 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>F</kbd>|格式化代码 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>O</kbd>|优化导入的类 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Y</kbd>|大写转小写/小写转大写 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>T</kbd>|根据输入的类名查找类文件 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>R</kbd>|根据输入的文件名打开文件/目录,打开目录需在末尾多加一个正斜杠 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Up/Down</kbd>|当前光标跳转到当前文件的前/后一个方法名位置 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>F12</kbd>|编辑器最大化 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd>|查找方法在哪里被调用 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd>|选择要粘贴的内容|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Q</kbd>|快速搜索类中的错误|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>W</kbd>|关闭打开的所有代码栏|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>U</kbd>|查看类的继承结构图|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>X</kbd>|打开代码所在硬盘文件夹|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>C</kbd>|复制当前文件磁盘路径到剪切板|
+    - ***Alt + Shift***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>S</kbd>|生成构造器/get/set/toString `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>Z</kbd>|生成 try-catch 等 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>C/X</kbd>|收起/打开所有的方法 `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>R</kbd>|重构(修改变量名与方法名) `(必备)` |
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>M</kbd>|抽取方法|
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>F</kbd>|局部变量抽取为成员变量|
+        |<kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>N</kbd>|选择/添加 task|
+    - ***Ctrl + Shift + Alt***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>S</kbd>|打开当前项目设置 `(必备)` |
+        |<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>V</kbd>|无格式黏贴|
+    - ***其他***
+
+        |快捷键|介绍|
+        |:---------|:---------|
+        |<kbd>Dobule Shift</kbd>|查找文件 `(必备)` |
+        |<kbd>Esc</kbd>|从工具窗口进入代码文件窗口 `(必备)` |
+        |<kbd>Tab</kbd>|缩进 `(必备)` |
+        |<kbd>F3</kbd>|进入光标所在的方法/变量的接口或是定义处,等效于ctrl+左键单击 `(必备)` |
+        |<kbd>F11</kbd>|添加书签 `(必备)` |
+        |<kbd>F2</kbd>|光标所在的变量/类名/方法名等上面显示文档内容|
+        |<kbd>F4</kbd>|查看继承关系|
+
+## 高效率编码功能介绍
+
+- Maven 配置
+- 版本控制
+    - IDEA 对版本控制的支持是以插件化的方式实现的,旗舰版默认支持目前主流的版本控制软件:CVS、SVN、Git、Mercurial、Perforce、TFS。
+    又因为目前太多人使用 Github 进行协同或是项目版本管理,同时自带了 Github 插件,方便 Checkout 和管理你的 Github 项目,
+        ```
+        Background:后台进程处理			
+        Confirmation:弹窗提示,是否提交,merge			
+        Issue Navigation:问题导航			
+        GitHub:github配置			
+        CVS:cvs配置			
+        Subversion:svn配置			
+        TFS:工作流引擎管理
+        ```
+    - 常用设置
+        ```
+        1. 设置子目录有文件被修改了,则该文件的所有上层目录都显示版本控制被修改的颜色
+            Version Control,勾选'Show directories with changed descendants',默认是不勾选的
+        2. 设置新建或者删除文件时Git做默认如何处理
+        	Version Control->Confirmation,修改'When files are created'和'When files are deleted'
+        3. 设置忽略文件
+        	Version Control->Ignored Files,添加不想加入到版本控制的文件和目录.对于已经加入到版本控制的文件使用此功能,则表示该文件或目录无法再使用版本控制相关的操作,比如提交、更新等
+        4. 关联本地git.exe
+        	Version Control->Git,在Path to Git executable中选择
+        5. 关联GitHub账户
+        	Version Control->GitHub,选择"+"号关联
+        6. 支持从当前登陆的GitHub账号上直接Clone项目到本地
+        	VCS->Checkout from Version Control->Git
+        	File->New->Project from Version Control->Git
+        7. 支持将本地项目分享到你的GitHub账号上
+        	VCS->Import into Version Control->Share Project On GitHub
+        	此时会在GitHub上创建一个新的仓库,而非更新已经存在的仓库,默认采用https方式传输
+        8. Commit Changes弹窗介绍
+        	Before Commit:
+        		Reformat code:格式化代码,如果是Web开发建议不要勾选,因为格式化JSP类文件,格式化效果不好。如果都是Java类则可以安心格式化
+        		Rearrange code:重新编排代码,IDEA支持各种复杂的编排设置选项
+        		Optimize imports:优化导入包,会自动去掉没有使用的包。这个建议都勾选,因其只对Java类有作用,所以不用担心有副作用
+        		Perform code analysis:进行代码分析,这个建议不用在提交的时候处理,而是在开发完之后,要专门养成对代码进行分析的习惯。IDEA 集成了代码分析功能
+        		Check TODO:检查代码中的TODO。记录待办事项
+        		Cleanup:清除下版本控制系统,去掉一些版本控制系统的错误信息,建议勾选(主要针对 SVN,Git 不适用)
+        	标识着不同颜色的文件:
+        		红色:未被版本控制的文件,即未添加到版本控制的文件,例如我们添加到ignore中的文件
+        		绿色:新加入版本的文件,即我们新创建的文件,还未提交到远程仓库
+        		蓝色:修改过的文件,即远程仓库中已有该文件,我们这次对它进行了修改,但是还未提交
+        9. 点击界面右下角位置可以切换分支和创建分支,以及合并、删除分支等操作
+        ```
+- Debug 技巧
+    - Debug 设置				
+        ```
+        Settings->Build,Execution,Deployment->Debugger,Transport选中Shared memory
+        表示设置Debug连接方式,默认是Socket。Shared memory是Windows特有的一个属性,一般在Windows系统下建议使用此设置,相对于Socket会快
+        ```
+    - Debug 常用快捷键
+        ```
+        Step Over(F6):进入下一步,如果当前行断点是一个方法,则不进入当前方法体内
+        Step Into(F5):进入下一步,如果当前行断点是一个方法,则进入当前方法体内(自定义方法)
+        Force Step Into(Alt+Shift+F7):进入下一步,如果当前行断点是一个方法,则进入当前方法体内(所有方法,包括JDK库)
+        Step Out(F7):跳出
+        Drop Frame:该按钮可以用来退回到当前停住的断点的上一层方法上,可以让过掉的断点重新来过
+        Evaluate Expression(Ctrl+U):选中对象,弹出可输入计算表达式调试框,查看该输入内容的调试结果
+        Resume Program(F8):恢复程序运行,但如果该断点下面代码还有断点则停在下一个断点上
+        Stop:停止
+        View Breakpoints:查看所有断点
+        Mute Breakpoints:点中,使得所有的断点失效
+        Restore Layout:窗口还原
+        ```
+    - Debug 其他用法
+        ```
+        条件断点:调试的时候,在循环里增加条件判断,可以极大的提高效率,心情也能愉悦
+        在断点处右击调出条件断点。可以在满足某个条件下,实施断点。
+        ```
+- 实时代码模板
+    - 功能介绍
+    	- 它的原理就是配置一些常用代码字母缩写,在输入简写时可以出现你预定义的固定模式的代码,使得开发效率大大提高,同时也可以增加个性化。最简单的例子就是在 Java 中输入 sout 会出现 System.out.println()。
+    	- 官方介绍 Live Templates:<https://www.jetbrains.com/help/idea/using-live-templates.html>
+    - 已有的常用模板
+    	- 所处位置: Settings->Editor->General->Postfix Completion | Editor->Live Templates
+    		- 二者的区别:Live Templates 可以自定义,而 Postfix Completion 不可以。同时,有些操作二者都提供了模板,Postfix Templates较Live Templates 能快 0.01 秒
+    	- 举例
+            ```
+            psvm : 可生成main方法
+            sout : 快捷输出System.out.println()
+                soutp => System.out.println("方法形参名 = " + 形参名); 
+                soutm => System.out.println("当前类名.当前方法");
+                soutv => System.out.println("变量名 = " + 变量); 
+                "abc".sout => System.out.println("abc");
+            fori : 可生成普通for循环
+                iter => 可生成增强for循环
+                itar => 可生成普通for循环并赋值
+            list.for : 可生成list集合的增强for循环
+                list.fori => 可生成list集合的普通for循环
+                list.forr => 可生成list集合的普通for循环(倒序)
+            ifn:可生成if(xxx = null)
+                inn => 可生成if(xxx != null)
+                xxx.nn或xxx.null  (Postfix Completion)
+            prsf:可生成private static final
+                psf => 可生成public static final
+                psfi => 可生成public static final int
+                psfs => 可生成public static final String
+            ```			
+    - 修改现有模板
+    	- 如果对于现有的模板,感觉不习惯、不适应的,可以修改。
+    	- 举例
+            ```
+            修改Abbreviation:
+                Settings->Editor->Live Templates,定位到other->psvm,将Abbreviation值改为main
+            修改Template text:
+                Settings->Editor->Live Templates,定位到plain->psfi,将Template text值改为public static final int $VAR1$ = $VAR2$;$END$	
+            ```		
+    - 自定义模板
+    	- IDEA 提供了很多现成的 Templates,但你也可以根据自己的需要创建新的 Template。
+        ```
+        1. 定义一个模板组	
+            Settings->Editor->Live Templates,点击"+"号,选择Template Group...,
+        2. 选中自定义的模板组,点击"+"来定义模板	
+            Settings->Editor->Live Templates,点击"+"号,选择Live Template,	
+        3. 填写模板的内容
+            Abbreviation:模板的缩略名
+            Description:模板的描述
+            Template text:模板的代码片段
+            应用范围:比如点击Define,选择java
+            Edit variables:	https://www.jetbrains.com/help/idea/template-variables.html
+        ```
+- 数据库管理工具
+    - IDEA 的 Database 最大特性就是对于 JavaWeb 项目来讲,对常用的 ORM 框架有很好的支持,比如配置好了 Database 之后,IDEA 会自动识别 domain 对象与数据表的关系,也可以通过 Database 的数据表直接生成 domain 对象等等。
+    - 关联方式
+        ```
+        Database->"+"->Data Source->MySQL,填写相关信息
+        ```
+    - 常用操作
+        ```
+        3:同步当前数据库连接。这个是最重要的操作,有一些情况下,当我们配置好连接之后,没有显示数据表,那就是需要点击该按钮进行同步。还有一种情况就是我们在IDEA之外用其他工具操作数据库,比如新建表。而此时IDEA的 Database如果没有同步到新表,也是需要点击此按钮进行同步的
+        4:配置当前连接,跟我们首次设置连接的界面是一样的
+        5:断开当前的连接
+        6:显示相应数据库对象的数据
+        7:编辑修改当前数据库对象
+        ```
+
+## 插件推荐、开发介绍
+
+- 插件设置
+    - IDEA 对插件进行了很好的分类:启用的插件是被勾选的,如果要禁用一个插件,去掉勾选即可
+    	```
+    	All plugins:显示所有插件
+        Enabled:显示当前所有已经启用的插件
+        Disabled:显示当前所有已经禁用的插件
+        Bundled:显示所有IDEA自带的插件
+        Custom:显示所有我们自行安装的插件,如果你自己装了很多次插件的话,这个选项会用得比较多
+    	```
+    - Install JetBrains plugin...:弹出IDEA公司自行开发的插件仓库列表,供下载安装	
+    - Browse repositories...:弹出插件仓库中所有插件列表供下载安装
+    - Install plugin from disk...:浏览本地的插件文件进行安装,而不是从服务器上下载并安装
+    
+    Tips:在国内的网络下,很经常出现显示不了插件列表,或是显示了插件列表,无法下载完成安装。这时候请自行开 VPN,一般都可以得到解决
+- 插件推荐
+    - 官方插件库:<https://plugins.jetbrains.com>
+    - 在用插件
+        ```
+        Material Theme UI
+        Power Mode II:activate-power-mode
+        Background Image Plus
+        Nyan Progress Bar
+        Gitee
+        NodeJS
+        ```
+    - 备用插件
+        ```
+        Alibaba Java Coding Guidelines:阿里巴巴出的代码规范检查插件
+        IDE Features Trainer:IDEA官方出的学习辅助插件
+        Key promoter:快捷键提示
+        Grep Console:自定义设置控制台输出
+        String Manipulation:驼峰式命名和下划线命名交替变化
+        CheckStyle-IDEA:代码规范检查
+        FindBugs-IDEA:潜在Bug检查
+        MetricsReloaded:代码复杂度检查
+        Statistic:代码统计
+        JRebel for IntelliJ:热部署
+        CodeGlance:在编辑代码最右侧,显示一块代码小地图
+        GsonFormat:把JSON字符串直接实例化成类
+        Markdown Navigator:书写Markdown文章
+        Eclipse Code Formatter:使用 Eclipse 的代码格式化风格,在一个团队中如果公司有规定格式化风格,这个可以使用
+        Jindent-Source Code Formatter:自定义类、方法、doc、变量注释模板
+        Translation:翻译插件
+        Maven Helper:Maven辅助插件
+        Properties to YAML Converter:把Properties的配置格式改为YAML格式
+        Git Flow Integration:Git Flow的图形界面操作
+        Rainbow Brackets:对各个对称括号进行着色,方便查看
+        MybatisX:mybatis框架辅助(免费)
+        Lombok Plugin:Lombok 功能辅助插件
+        .ignore:各类版本控制忽略文件生成工具
+        mongo4idea:mongo客户端
+        iedis:redis客户端
+        VisualVM Launcher:项目启动的时候也启动VisualVM
+        GenerateAllSetter:new POJO类的快速生成set方法
+        ```
+- Java 热部署插件 JRebel 安装及使用
+- 插件开发
+
+## 参考链接
+
+- <https://github.com/judasn/IntelliJ-IDEA-Tutorial>
+
+## 结束语
+
+- 未完待续...

+ 467 - 0
source/_posts/st-idea-basic.md

@@ -0,0 +1,467 @@
+---
+title: IDEA 札记:基础
+date: 2018-12-01 16:51:07
+categories:
+- 软件工具
+tags:
+- idea
+---
+
+# IDEA 札记:基础
+
+## 目录
+
+- [简介](#简介)
+- [安装、基础环境介绍](#安装、基础环境介绍)
+- [开始使用](#开始使用)
+- [常用设置介绍](#常用设置介绍)
+- [其他设置介绍](#其他设置介绍)
+- [参考链接](#参考链接)
+- [结束语](#结束语)
+
+## 简介
+
+- JetBrains 公司介绍
+    - 维基百科:
+        >JetBrains 是一家**捷克**的软件开发公司,该公司位于捷克的布拉格,并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA。
+         
+        >JetBrains 成立于 2000 年,是一家**私人持股**的公司,该公司的合伙创办人有:Sergey Dmitriev、Eugene Belyaev 及 Valentin Kipiatkov。
+         
+        >截至 2017 年 6 月,该公司共发布了 24 款开发工具与及相关产品。
+    - JetBrains 公司旗下其他产品,包括集成开发环境、插件、编程语言、团队工具、其他等等。
+        ```
+        PhpStorm:主要用于开发PHP
+        RubyMine:主要用于开发Ruby/Rails
+        PyCharm:主要用于开发Python
+        AppCode:主要用于开发Objective-C/Swift,xcode的替代者
+        CLion:主要用于开发C/C++
+        WebStorm:主要用于开发JavaScript、HTML5、CSS3等前端技术	
+        DataGrip:主要用于开发数据库和SQL
+        Rider:主要用于开发.NET
+        GoLand:主要用于开发Go(区块链等)
+        Android Studio:主要用于开发Android(Google基于IntelliJ IDEA社区版进行迭代所以也姑且算上)
+        ```
+- Intellij IDEA 介绍
+    - 官网:<https://www.jetbrains.com/idea/>					
+    - 新特性列表:<https://www.jetbrains.com/idea/whatsnew>
+    - 详细使用文档:<https://www.jetbrains.com/help/idea/meet-intellij-idea.html>
+    - IntelliJ IDEA 在 2015 年 06 月官网主页是这样介绍自己的:
+        >Excel at enterprise, mobile and web development with Java, Scala and Groovy, with all the latest modern technologies and frameworks available out of the box.
+        
+        >简明翻译:IntelliJ IDEA主要用于支持Java、Scala、Groovy 等语言的开发工具,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和Web应用的开发。
+        
+    - 如果用一句话来形容 IntelliJ IDEA,我会说:***IntelliJ IDEA 是目前所有 IDE 中最具备沉浸式的 JVM IDE,没有之一。***
+- IDEA 主要功能介绍
+
+| 安装插件后支持 | SQL 类 | 基本JVM |
+|:------:|:------:|:------:|
+|PHP|PostgreSQL|Java|
+|Python|MySQL|Groovy|
+|Ruby|Oracel||
+|Scala|SQL Server||
+|Kotlin|||
+|Clojure|||
+
+| 支持的框架 | 额外支持的语言代码提示 | 支持的容器 |
+|:------:|:------:|:------:|
+|Spring MVC|HTML5|Tomcat|
+|GWT|CSS3|TomEE|
+|Vaadin|SASS|WebLogic|
+|Play|LESS|JBoss|
+|Grails|JavaScript|Jetty|
+|Web Services|CoffeeScript|WebSphere|
+|JSF|Node.js||
+|Struts|ActionScript||
+|Hibernate|||
+|Flex|||
+
+- IDEA 主要优势(相较于 Eclipse 而言)
+    - 强大的整合能力,例如 Git、Maven、Spring 等工具和框架。
+    - 提示功能的快速、便捷	。
+    - 提示功能的范围广。
+    - 好用的快捷键和代码模板。
+    - 精准搜索。
+
+## 安装、基础环境介绍
+
+- Windows 下安装
+    - 首次安装
+        - IDEA 的安装是非常简单的,不需要做过多的选择,可以说简单到都是 Next 即可。
+        - 中间会有个创建快捷图标,建议勾上,方便定位 IDEA 的安装目录;确让是否与 java,groovy,kt 文件关联,建议不勾选。
+    - 已有旧版本安装新版本
+        - 在小版本迭代中建议是卸载掉旧版本的,然后再进行新版本安装,因为小版本迭代一般都是 Bug 的修复,保留旧版本没有多大意义。
+        - 在大版本迭代中建议是保留旧版本,也就是不勾选之前版本,IDEA 是支持一台电脑装多个版本的。
+    - 卸载
+        - 有 2 个选项,1 是删除缓存和本地历史记录,2 是删除个性化设置和插件。
+    - 安装总结
+        - 从安装上来看,IDEA 对硬件的要求看上去不是很高,可是实际在开发中其实并不是这样的,因为 IDEA 执行时会有大量的缓存、索引文件。
+        - 如果你正在使用 Eclipse/MyEclipse,想通过 IDEA 来解决计算机的卡、慢等问题,这基本上是不可能的,本质上你应该对自己的硬件设备进行升级。
+        - 安迪-比尔定律:IT界三大定律之一(摩尔定律、反摩尔定律、安迪-比尔定律)。
+- 安装目录介绍
+    ```
+    bin:执行文件和启动参数等
+      idea.exe:32位IDEA的启动文件,IDEA安装完默认发送到桌面的也就是这个执行文件的快捷方式
+      idea.exe.vmoptions:32位IDEA的VM配置文件
+      idea64.exe:64位IDEA的启动文件,要求必须电脑上装有JDK64位版本,64位的系统也是建议使用该文件
+      idea64.exe.vmoptions:64位IDEA的VM配置文件
+      idea.properties:IDEA的属性配置文件
+    help:快捷键文档
+    jre64:64位java运行环境
+    lib:IDEA依赖的类库
+    license:各个插件的许可信息
+    plugin:插件
+    ```
+    ```
+    可手动复制这2个文件到config根目录下再修改相关参数。
+    idea64.exe.vmoptions:
+        -Xms128m:设置初始的内存数,增加该值可以提高java程序的启动速度(16G内存的机器可尝试设置为-Xms512m)
+        -Xmx750m:设置最大内存数,增加该值可以减少垃圾回收的频率,进而提高程序性能(16G内存的机器可尝试设置为-Xmx1500m)
+        -XX:ReservedCodeCacheSize=240m:设置保留代码占用的内存容量,增加该值可以减少没有用的代码被回收的频率,进而提高程序性能(16G内存的机器可尝试设置为-XX:ReservedCodeCacheSize=500m)
+    idea.properties:
+        idea.config.path=${user.home}/.IntelliJIdea/config:该属性主要用于指向IDEA的个性化配置目录,默认是被注释,这里需要特别注意的是斜杠方向,这里用的是正斜杠。
+        idea.system.path=${user.home}/.IntelliJIdea/system:该属性主要用于指向IDEA的系统文件目录。如果你的项目很多,则该目录会很大,如果你的C盘空间不够的时候,还是建议把该目录转移到其他盘符下。
+        idea.max.intellisense.filesize=2500:该属性主要用于提高在编辑大文件时候的代码帮助。IDEA在编辑大文件的时候还是很容易卡顿的。
+        idea.cycle.buffer.size=1024:该属性主要用于控制控制台输出缓存。有遇到一些项目开启很多输出,控制台很快就被刷满了没办法再自动输出后面内容,这种项目建议增大该值或是直接禁用掉,禁用语句(=disabled) 
+    ```
+    Tips:***强烈推荐使用 IDEA 菜单中的 `Help->Edit Custom VM Options`和`Help->Edit Custom Properties` 进行参数个性化配置;而不是直接修改安装目录中的该文件,因为 IDEA 升级/重装后可能会导致修改完全失效!***。
+- 设置目录介绍
+    - IDEA 各种配置的保存目录。这个设置目录有一个特性,就是你**删除掉整个目录之后,重新启动 IDEA 会再自动帮你生成一个全新的默认配置**,所以很多时候如果你把 IDEA 配置改坏了,没关系,删掉该目录,一切都会还原到默认。
+    - config
+        - IDEA 的个性化化配置目录,或者说是整个 IDE 设置目录,此目录可看成是最重要的目录,没有之一。安装新版本的 IDEA会 自动扫描硬盘上的旧配置目录,指的就是该目录。
+        - 这个目录主要记录了:**IDE 主要配置功能、自定义的代码模板、自定义的文件模板、自定义的快捷键、Project 的 tasks 记录等等个性化的设置**。
+    - system   
+        - IDEA 的系统文件目录,是 IDEA 与开发项目之间的一个桥梁目录。
+        - 这个目录主要记录了:**缓存、索引、容器文件输出等等**,虽然不是最重要目录,但是也是最不可或缺目录之一。
+- 首次运行向导
+    1. 是否导入已有设置
+        - 首次启动后,会弹出对话框,选择不导入已有的设置。
+    2. 激活
+    3. 设置主题
+        - 这里根据个人喜好进行选择,也可以选择跳过,后面在 settings 里也可以再设置主题等。
+    4. 设置插件
+        - 设置 IDEA 中的各种工具/插件,可以选择自定义设置、删除,或者安装本身不存在的插件(比如:支持 Scala 的插件),这里不设置,后面也可以通过界面菜单栏的 settings 行设置。
+        
+## 开始使用
+
+- 首次打开
+    - Create New Project:创建一个新的工程	。
+    - Import Project:导入一个现有的工程。
+    - Open:打开一个已有工程,比如:可以打开 Eclipse 项目,但是由于两者 IDE 下的项目配置不一样,所以项目还是需要配置的。
+    - Check out from Version Control:可以通过服务器上的项目地址 Checkout GitHub 上面项目或其他 Git 托管服务器上的项目。
+- 设置显示常见的视图
+    - `View->TooBar`,勾选工具条。
+    - `View->Tool Buttons`,勾选按钮组。
+- 创建工程
+    - 创建 Java Project/Module
+        1. 选择指定目录下的 JDK 作为 Project/Module SDK。
+        2. 可以勾选 `Create project from template` 根据模板快速创建项目,也可以不勾选手动创建。
+            ```
+            Command Line App:会自动创建一个带有main方法的类
+            Java Hello World:会自动创建一个带有main方法的并且会打印输出Hello World的类
+            ```
+        3. 在 `More Settings` 中,Project format(项目格式文件)主要提供两种方式。
+            ```
+            .idea (directory based):创建项目的时候自动创建一个.idea的项目配置目录来保存项目的配置信息,这是默认选项
+            .ipr (file based):创建项目的时候自动创建一个.ipr的项目配置文件来保存项目的配置信息
+            ```
+    - 创建静态 JavaWeb Project/Module
+        - 省略...
+    - 创建动态 JavaWeb Project/Module
+        1. 选择指定目录下的 JDK 作为Project/Module SDK,同时勾选 `JaveEE->Web Application`。
+        2. 配置 Tomcat
+            ```
+            1.Run->Edit Configurations->"+"->Tomcat Server->Local
+            2.Server
+                - 可配置应用服务器路径,VM参数,JRE,端口等
+                    - On Update action:当我们按Ctrl + F10进行容器更新的时候,可以根据我们配置的这个事件内容进行容器更新。其中我选择的Update classes and resources事件是最常用的,表示我们在按Ctrl + F10进行容器更新的时候,我们触发更新编译的类和资源文件到容器中。在Debug模式下,这个也就是所谓的HotSwap。只是这种热部署没有JRebel插件那样好用
+                    - On frame deactivation:当我们切换IDEA到浏览器的时候进行指定事件更新,这个一般是因为Web开发的时候,我们需要经常在IDEA和各个浏览器之间来回切换测试,所以才有了这种需求。IDEA是为了帮我们在做这种无聊切换的时候做一些指定事情。当然了,如果切换过于频繁,这个功能还是很耗资源的,所以我设置的是Do nothing表示切换的时候什么都不做
+            3.Deployment
+            	- 添加要运行的项目及设置访问名称
+            d.Logs
+            e.Code coverage
+            f.Startup/Connection
+            ```
+- 工程界面展示
+    - 工程下的 src 类似于 Eclipse 下的 src 目录,用于存放代码。
+    - 工程下的 .idea(Project 的配置文件目录)和 .iml(Module 的配置文件)都是 IDEA 工程特有的,类似于 Eclipse 工程下的 .settings、.classpath、.project 等。
+- 创建 package 和 class
+    - 在 src 目录下创建一个 package,接着在包下 new-class,可以直接创建 `Class、Interface、Enum、Annotation` 等常见类型文件。
+    - 然后在下拉框中选择创建的结构的类型,接着在类 HelloWorld 里声明主方法,输出 helloworld,完成测试。
+    
+    Tips1:**在没有文件的情况下包目录默认是连在一起的,不方便看目录层级关系,可点击 Project 窗口的齿轮处,在弹出的菜单中去掉 `Compact Empty Middle Packages`**。
+    Tips2:**IDEA 是一个没有 Ctrl + S 的 IDE,所以每次修改完代码只要管着运行或者调试即可,无需担心保存或者丢失代码。**
+- 创建模块
+    - 在 Eclipse 中有 Workspace(工作空间)和 Project(工程)的概念,在 IDEA 中只有 Project(工程)和 Module(模块)的概念。
+        - <https://www.jetbrains.com/help/idea/migrating-from-eclipse-to-intellij-idea.html>
+        ```
+        IDEA 官网说明:
+        	An Eclipse workspace is similar to a project in IntelliJ IDEA
+        	An Eclipse project maps to a module in IntelliJ IDEA
+        翻译:
+        	Eclipse中workspace相当于IDEA中的Project
+        	Eclipse中Project相当于IDEA中的Module
+        ```
+    - 从 Eclipse 转过来的人总是下意识地要在同一个窗口管理 n 个项目,这在 IDEA 是无法做到的。IDEA 提供的解决方案是打开多个项目实例,即打开多个项目窗口(一个 Project 打开一个 Window 窗口)。
+    - 在 IDEA 中 Project 是最顶级的级别,次级别是 Module。即一个 Project 是由一个或多个 Module 组成。
+        - 目前主流的大型项目都是分布式部署的,结构都是类似这种多 Module 结构。这类项目一般是这样划分的,比如:core Module、web Module、plugin Module、solr Module 等等,模块之间彼此可以相互依赖。
+        - 通过这些 Module 的命名也可以看出,他们之间都是处于同一个项目业务下的模块,彼此之间是有不可分割的业务关系的。
+    - 相比较于多 Module 项目,小项目就无需搞得这么复杂。只有一个 Module 的结构 IDEA 也是支持的,并且 IDEA 创建项目的时候,默认就是单 Module 的结构的,此时 Project 目录和 Module 目录是同一个。
+- 删除模块
+    1. 选中相应的模块右键 `Open Module Setting`,点击减号,逻辑删除模块。
+    2. 再次选中相应的模块右键 `Delete`,物理删除模块。
+- 查看/修改项目配置(`File->Project Structure`)
+    - Project
+        ```
+        Project name:项目名称
+        Project SDK(Software Development Kit):JDK配置
+        	点击"Edit"按钮,进入SDK的统一管理处,加号可以添加新SDK;减号可以删除光标所选的SDK
+        	在开发Java项目过程中,由于IDEA支持管理多个JDK,所以你完全不用担心你系统上不同项目需要不同JDK
+        Project language level:编译级别
+        	限定项目编译检查时最低要求的JDK特性
+        	我们使用JDK8的时候,我们只能向下兼容JDK8及其以下的特性,所以只能选择8及其以下的language level。当项目使用的是JDK8,但是代码却最多使用了JDK7的特性的时候我们可以选择7 - Diamonds,ARM,multi-catch etc
+        Project compiler output:class输出路径配置
+        ```
+    - Modules
+        ```
+        Sources:可以针对Module选择其他language level,默认选择的是Project language level
+        	Sources:一般用于标注类似src这种可编译目录。有时候不单单项目的src目录要可编译,还有其他一些特别的目录也要作为可编译的目录,就需要对该目录进行此标注。只有Sources这种可编译目录才可以新建Java类和包
+        	Tests:一般用于标注可编译的单元测试目录。在规范的maven项目结构中,顶级目录是src,maven的src我们是不会设置为Sources的,而是在其子目录main目录下的java目录,我们会设置为Sources。而单元测试的目录是src-test-java,这里的java目录我们就会设置为Tests,表示该目录是作为可编译的单元测试目录。从这一点也可以看出IDEA对maven项目的支持是比较彻底的
+        	Resources:一般用于标注资源文件目录。在maven项目下,资源目录是单独划分出来的,其目录为:src-main-resources,这里的resources目录我们就会设置为Resources,表示该目录是作为资源目录。资源目录下的文件是会被编译到输出目录下的
+        	Test Resources:一般用于标注单元测试的资源文件目录。在maven项目下,单元测试的资源目录是单独划分出来的,其目录为:src-test-resources,这里的resources目录我们就会设置为Test Resources,表示该目录是作为单元测试的资源目录。资源目录下的文件是会被编译到输出目录下的								
+        	Excluded:一般用于标注排除目录。被排除的目录不会被IDEA创建索引,相当于被IDEA废弃,该目录下的代码文件是不具备代码检查和智能提示等常规代码功能
+        									
+        	注:被标注的目录会在右侧有一个总的概括。值得一提的是classes虽然是Excluded目录,但是由于它的特殊性且不可编辑,所以不显示在这里
+        	注:如果要去掉目录的标注含义,可以点击打叉按钮进行删除
+        Dependencies:可以针对Module选择其他SDK,默认选择的是Project SDK,以及管理项目的所有依赖包
+        	依赖包支持五种操作:
+        		加号,表示可以引入新依赖包
+        		减号,表示可以去除对应的依赖包
+        		向上箭头,表示依赖包可以向上移动位置。依赖包越上面的表示在项目加载的时候越是优先,所以对于同一个依赖包,不同版本,依赖顺序不同,结果也可能会是大不相同的
+        		向下箭头,表示依赖包可以向下移动位置,原因同上
+        		笔,表示可以编辑依赖包的名称和路径
+        ```
+    - Libraries
+        ```
+        点击"+"号,如java可以把项目的lib作为一个总的依赖包放置到项目Libraries中,这样当我们项目需要添加新依赖包时,我们只要放置在lib目录下即可自动被项目引入,原因就是我们这里引的是目录,而不是一个一个依赖包
+        ```
+    - Facets
+        ```
+        点击"+"号-,如web可以配置web.xml文件,其他框架配置文件也是如此
+        ```
+    - Artifacts
+        ```
+        点击"+"号-,如Web Application:Exploded->From Modules...,修改Output directory输出目录,配置一个war包展开的输出结构
+        ```
+        
+## 常用设置介绍
+通过 `File->Settings` 或者 `Ctrl+Alt+S` 进入。
+- Appearance & Behavior(外观和行为)
+    - **设置主题**
+        ```
+        Appearance,在'UI Options'中选择'Theme'的值
+        ```
+    - **设置窗体及菜单的字体及字体大小**
+        ```
+        Appearance,在'UI Options'中修改'Overrid default fonts by(not recommended)'的值
+        ```
+    - **设置内存使用情况显示**
+        ```
+        Appearance,在'Window Options'中勾选'Show memory indicator'
+            点击内存值后可以进行部分内存的回收	
+        ```
+    - **设置启动 IDEA 时可以选择最近打开的某个项目**
+        ```
+        System Settings,在'Shartup/Shutdown'中选择'Confirm application exit'	
+            启动IDEA时,默认会打开上次使用的项目,如果只有一个项目的话,该功能还是很好用的,如果有多个项目的话,建议可以选择最近打开的某个项目
+        ```
+    - **设置另一个项目窗口的打开方式**
+        ```
+        System Settings,在'Project Opening'中选择	
+            Open project in new window 每次都使用新窗口打开
+            Open project in the same window 每次都替换当前已打开的项目,这样桌面上就只有一个项目窗口
+            Confirm window to open project in 每次都弹出提示窗口,让我们选择用新窗口打开或是替换当前项目窗口
+        ```
+    - **设置取消更新**
+        ```
+        System Settings->Updates,去掉'Automatically check updates for'选中
+        ```
+- Keymap(快捷键)
+    - ***详见高级篇***
+    - **设置基础代码提示、补充快捷键生效**
+        ```
+        搜索Basic,将Ctrl+空格改为Ctrl+,
+        ```
+- Editor(编辑器)
+    - **设置鼠标滚轮控制代码字体大小**
+        ```
+        General,在'Mouse'中勾选'Change font size with Ctrl+Mouse Wheel'
+        ```
+    - **设置自动导包功能**
+        ```
+        General->Auto Import,在'Java'中'Insert imports on paste'选择All
+            Add unambiguous imports on the fly:书写代码时自动导入需要用到的包
+            Optimize imports on the fly:自动帮我们优化导入的包,比如去掉一些没有用到的包
+        ```
+    - **设置方法间的分隔线**
+        ```
+        General->Apperance,勾选'Show method separators'
+        ```
+    - **设置忽略代码提示区分大小写**
+        ```
+        General->Code completion,去掉'Match case'选中
+        ```
+    - **设置取消单行显示 tabs 的操作**
+        ```
+        General->Editor Tabs,去掉'Show tabs in one row'选中
+            在打开很多文件的时候,IDEA默认是把所有打开的文件名Tab单行显示的。多行效率比单行高,因为单行会隐藏超过界面部分Tab,这样找文件不方便
+        ```
+    - **设置主题字体**
+        ```
+        Font,也可以去Editor->Color Scheme->Color Scheme Font/Console Font中分别设置编辑区和控制台的字体
+        ```
+    - **设置 Java 代码的单行注释跟随在代码的头部**
+        ```
+        Code Style->Java,切换到Code Generation,在'Comment Code'中去掉'Line comment at first column'选中
+            默认IDEA对于Java代码的单行注释是把注释的斜杠放在行数的最开头,个人觉得这样的单行注释非常丑,整个代码风格很难看,所以一般会设置为单行注释的两个斜杠跟随在代码的头部
+        ```
+    - **设置项目文件编码**
+        ```
+        File Encodings,对'Global Encoding','Project Encoding'和'Properties Files'进行设置,建议都修改为UTF-8
+            Transparent native-to-ascii conversion主要用于转换ascii,一般都要勾选,不然Properties文件中的注释显示的都不会是中文
+        ```
+    - 设置鼠标悬浮提示
+        ```
+        General,在'Other'中勾选'Show quick documentation on mouse move'
+        ```
+    - 设置 Ctrl+E 弹出层显示最近文件的个数
+        ```
+        General,在'Limits'中修改'Recent files limit'
+        ```
+    - 设置指定代码类型进行默认折叠或是展开
+        ```
+        General->Code Folding,勾选上的表示该类型的代码在文件被打开的时候默认是被折叠的,去掉勾选则反之
+        ```
+    - 设置打开的文件 Tab 个数
+        ```
+        General->Editor Tabs,在'Closing Policy'中调整'Tab limit'的值
+            当打开的文件超过该个数的时候,早打开的文件会被新打开的替换
+        ```
+    - 设置编辑区主题
+        ```
+        Color Scheme,如果想要更多的主题效果的话,可以到如下的网站下载,对应文件如何安装请查看网站对应的Help页面,都有详细说明的
+            https://www.riaway.com/theme.php
+            http://color-themes.com/?view=index
+        导入主题(方式1):
+            File–>import setttings–>选中下载的主题jar文件–>一路确认–>重启。重启以后,新主题会自动启用。如果没有启用,可去Editor->Color Scheme选中
+        导入主题(方式2):
+            Editor->Color Scheme->齿轮图标->Import Scheme->Intellij IDEA color scheme or settings
+        ```
+	- 修改代码中注释的字体颜色
+        ```
+        Color Scheme->Language Defaults,选择需要修改的地方进行设置
+            Doc Comment:修改文档注释的字体颜色
+            Block comment:修改多行注释的字体颜色
+            Line comment:修改单行注释的字体颜色
+        ```      
+    - 设置开启自动生成 serialVersionUID
+        ```
+        Inspections,在'Java'->'Serialization'中勾选'Serializable class without serialVersionUID'
+            在已经继承了Serializable接口的类名上,把光标放在类名上(必须这样做),按 Alt + Enter,即可提示帮你生成serialVersionUID功能
+        ```    
+    - 修改类头的文档注释信息
+        ```
+        File and Code Templates,在'Includes'中选择'File Header'修改
+        ```
+- Plugins(插件)
+    - ***详见高级篇***
+- Version Control(版本控制)
+    - ***详见高级篇***
+- Build,Execution,Deployment(构建,执行,部署)
+    - **设置自动编译(不建议,太耗资源)**
+        ```
+        Compiler,勾选'Build project automatically'和'Compile indepent modules in parallel'
+        ------------------------------------------
+        构建就是以我们编写的java代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
+        相比较于Eclipse的实时自动编译,IDEA的编译更加手动化,IDEA也支持通过设置开启实时编译,但是不建议,因为太占资源了
+        ------------------------------------------
+        编译方式介绍(3种):
+            Recompile:对选定的目标(Java类文件),进行强制性编译,不管目标是否是被修改过。
+            Rebuild:对选定的目标(Project),进行强制性编译,不管目标是否是被修改过,由于Rebuild的目标只有Project,所以Rebuild每次花的时间会比较长。
+            Build(使用最多的编译操作):对选定的目标(Project或Module)进行编译,但只编译有修改过的文件,没有修改过的文件不会编译,这样平时开发大型项目才不会浪费时间在编译过程中。	
+        ------------------------------------------
+        编译器的设置和选择:			
+            Compiler下:设置编译heap大小,默认是700,建议使用64位的用户,在内存足够的情况下,建议改为1500 或以上。如果你在编译的时候出错,报:OutOfMemoryError,一般也是要来改这个地方
+            Compiler->Excludes下:开发过程中,某一个包目录的文件编译无法通过,但是我们又不急着改,那我们就可以考虑把该包加入到排除编译列表中,则项目就可以运行起来
+            Compiler->Java Compiler下:IDEA支持常见的几种编译器:Javac、Eclipse、Ajc等。默认是Javac,也推荐使用Javac
+                Project bytecode version 针对项目字节码编译版本,一般选择的是当前项目主JDK的版本。
+                Per-module bytecode version 可以针对Project下各个Module的特殊需求单独设置不同的bytecode version,前提是电脑上必须有安装对应的JDK版本。
+        ```
+    - ***断点调试***
+        - 详见高级篇
+- Languages & Frameworks(语言和框架)
+- Tools(工具集)
+    - 设置默认浏览器
+        ```
+        Web Browsers,在'Default Browser'中选择'Custom path'并选择程序路径
+            如果个人有专属的测试浏览器,希望默认从控制台输出的链接是用测试浏览器打开,就可以这样设置
+        ```
+    - **设置默认终端**
+        ```
+        Terminal,在'Application settings'中将'Shell path'设置成Git Bash
+        可能会出现乱码,可修改Git的安装目录下的etc目录下bash.bashrc文件,在最后一行添加:			
+            # 解决IDEA下的terminal中文Unicode编码问题		
+            export LANG="zh_CN.UTF-8"
+            export LC_ALL="zh_CN.UTF-8"
+        ```
+
+## 其他设置介绍
+
+- 设置为省电模式
+    ```
+    File->Power Save Mode
+        开启这种模式之后IDEA会关掉代码检查和代码提示等功能。所以一般也可认为这是一种阅读模式,如果你在开发过程中遇到突然代码文件不能进行检查和提示,可以来看看这里是否有开启该功能。
+    ```
+- 清除缓存和索引
+    ```
+    File->Invalidate Caches/Restart,一般建议点击'Invalidate and Restart',这样会比较干净,本质也就是去删除C盘下的system目录下的对应的文件而已
+    -------------------------------------                          
+    清除索引和缓存会使得IDEA的Local History丢失,如果你项目没有加入到版本控制,而你又需要你项目文件的历史更改记录,清除前最好备份下LocalHistory目录。										
+    如果你遇到了因为断电、蓝屏引起的强制关机等导致了索引、缓存坏了以至于项目打不开,那也建议你可以直接删除system目录,一般这样都可以很好地解决你的问题。										
+    -------------------------------------    
+    IDEA首次加载项目的时候,都会创建索引,而创建索引的时间跟项目的文件多少成正比;IDEA的缓存和索引主要是用来加快文件查询,从而加快各种查找、代码提示等操作的速度
+    ```
+- 设置 Project 项目的一些配置为模板
+    ```
+    File->Other Settings->Setting for New Projects...
+        对于默认编码、编译版本、Maven 本地库路径等等,可以被当做一个标准的IDE设置模板保存起来,下次打开新的Projec 就会以这个IDE设置进行
+    ```
+- 自带模拟请求工具 Rest Client
+    ```
+    Tools->HTTP Client->Test RESTful web service,在开发时用来模拟请求是非常好用的
+    ```
+- 生成 javadoc
+    ```
+    Tools->Generate JavaDoc,支持对project,module,file
+        Locale(输入语言类型):zh_CN
+        Other command line arguments:-encoding UTF-8 -charset UTF-8
+    ```
+- 设置代码水平或垂直显示
+    ```
+    文件tab页上,右键选择Split Vertically(垂直分屏)和Split Horizontally(水平分屏),可设置快捷键
+        一般在对大文件进行修改的时候,有些修改内容在文件上面,有些内容在文件下面,如果来回操作可能效率会很低,用此方法就可以好很多
+    ```
+- 设置代码检查等级
+    ```
+    右下角图标。IDEA对于编辑大文件并没有太大优势,很卡,原因就是它有各种检查,这样是非常耗内存和CPU的,所以在编辑大文件的时候为了能加快大文件的读写,我一般会暂时性设置为None
+        Inspections:为最高等级检查,可以检查单词拼写,语法错误,变量使用,方法之间调用等
+        Syntax:可以检查单词拼写,简单语法错误
+        None:不设置检查
+    ```
+  
+## 参考链接
+
+- <https://github.com/judasn/IntelliJ-IDEA-Tutorial>
+
+## 结束语
+
+- 未完待续...

+ 15 - 0
source/about/index.md

@@ -0,0 +1,15 @@
+---
+title: 关于&留言板
+date: 2018-11-28 20:37:57
+---
+## 个人简介
+
+- 吕志强
+- 来自哪里:一位对未来有些迷茫的已婚大叔
+- 近期目标:爱生活、爱技术、爱看书
+- 至理名言:好记性不如不如烂笔头
+
+## 联系方式
+
+- QQ:920165830
+- Email:tujide.lv@foxmail.coom

+ 4 - 0
source/categories/index.md

@@ -0,0 +1,4 @@
+---
+title: categories
+date: 2018-11-28 20:22:45
+---

+ 6 - 0
source/tags/index.md

@@ -0,0 +1,6 @@
+---
+title: tags
+date: 2018-11-28 20:23:17
+type: tags
+layout: "tags"
+---