From 6700e0e1053b69fd863fbadf1d837d386becfdf6 Mon Sep 17 00:00:00 2001 From: tanhuazhe Date: Thu, 14 Jan 2016 21:54:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 1 - app/assets/stylesheets/application.scss | 4 + app/views/articles/_form.html.haml | 14 +-- app/views/articles/edit.html.haml | 2 +- app/views/articles/index.html.haml | 4 +- app/views/articles/new.html.haml | 2 +- app/views/blogs/_set_sidebar.html.haml | 2 +- app/views/blogs/about.html.haml | 2 +- app/views/blogs/set_blog.html.haml | 12 +- app/views/layouts/application.html.haml | 6 +- app/views/users/login.html.haml | 2 +- app/views/users/register.html.haml | 2 +- config/initializers/gravatar_image_tag.rb | 9 ++ config/unicorn.rb | 66 ++++++++++ deployment/init.d/e2s | 115 ++++++++++++++++++ deployment/nginx/nginx.conf | 59 +++++++++ ...fest-b2cfe5455a8953d6a061109cd65a57a2.json | 2 +- 17 files changed, 278 insertions(+), 26 deletions(-) create mode 100644 config/initializers/gravatar_image_tag.rb create mode 100644 config/unicorn.rb create mode 100644 deployment/init.d/e2s create mode 100644 deployment/nginx/nginx.conf diff --git a/Gemfile b/Gemfile index ea818d9..13ee74d 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,4 @@ source 'https://rubygems.org/' -ruby '2.1.2' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.2.3' diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index bd2af5b..4e284e6 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -18,6 +18,10 @@ */ @import "bootstrap-sprockets"; @import "bootstrap"; +body{ + background:rgba(102, 255, 255, 0.1) none repeat scroll 0 0 !important; +} + .body_content { margin-top: 60px; } diff --git a/app/views/articles/_form.html.haml b/app/views/articles/_form.html.haml index af7670d..079b2a0 100644 --- a/app/views/articles/_form.html.haml +++ b/app/views/articles/_form.html.haml @@ -2,19 +2,19 @@ = form_for @article, role: 'form' do |f| .form-group - %label{for: 'article_title'} 文章标题 - = f.text_field :title, placeholder: '文章标题', class: 'form-control' + %label{for: 'article_title'} 分享标题 + = f.text_field :title, placeholder: '分享标题', class: 'form-control' .form-group - %label{for: 'article_category_id'} 文章分类 + %label{for: 'article_category_id'} 分享分类 = select_tag "article[category_id]", options_for_select(get_categories_options, @article.category_id), include_blank: true, class: 'form-control' 或者新建一个分类: = f.text_field :category_name, placeholder: '分类名称', class: 'form-control' .form-group %label{for: 'article_tags'} 标签 - = f.text_field :tags, placeholder: '文章标签,多个用英文“,”隔开', class: 'form-control' + = f.text_field :tags, placeholder: '分享标签,多个用英文“,”隔开', class: 'form-control' .form-group - %label{for: 'article_source'} 文章来源 - = f.text_field :source, placeholder: '文章来源,为空则为原创', class: 'form-control' + %label{for: 'article_source'} 分享来源 + = f.text_field :source, placeholder: '分享来源,为空则为原创', class: 'form-control' .form-group %ul.nav.nav-tabs#preview_tab{role: "tablist"} %li.active @@ -23,7 +23,7 @@ = link_to '预览', '#preview', role: 'tab', 'data-toggle'=>'tab' .tab-content .tab-pane.active#edit - = f.text_area :content, placeholder: '文章内容', class: 'form-control' + = f.text_area :content, placeholder: '分享内容', class: 'form-control' .tab-pane#preview .form-group = f.submit '提交', class: 'btn btn-success btn-lg btn-block' diff --git a/app/views/articles/edit.html.haml b/app/views/articles/edit.html.haml index 8323d39..740def1 100644 --- a/app/views/articles/edit.html.haml +++ b/app/views/articles/edit.html.haml @@ -1,3 +1,3 @@ -%h3 编辑博文 +%h3 编辑分享 = render partial: 'error' = render partial: 'form' diff --git a/app/views/articles/index.html.haml b/app/views/articles/index.html.haml index fec4c28..9115049 100644 --- a/app/views/articles/index.html.haml +++ b/app/views/articles/index.html.haml @@ -1,10 +1,10 @@ .row.inner.edge .col-md-9.layout-main .tab-nav - -# %h2.common-title 博文列表 + -# %h2.common-title 分享列表 %nav.sub-tab.row %span.col-md-6.text-left - %h3 文章列表 + %h3 经验列表 %span.col-md-6.text-right.sort_navbar - params_hash = params.dup - params_hash.delete :page diff --git a/app/views/articles/new.html.haml b/app/views/articles/new.html.haml index c56fbe7..291c150 100644 --- a/app/views/articles/new.html.haml +++ b/app/views/articles/new.html.haml @@ -1,4 +1,4 @@ -%h3 撰写博文 +%h3 撰写分享 = render partial: 'error' = render partial: 'form' diff --git a/app/views/blogs/_set_sidebar.html.haml b/app/views/blogs/_set_sidebar.html.haml index d675bc3..49bfc62 100755 --- a/app/views/blogs/_set_sidebar.html.haml +++ b/app/views/blogs/_set_sidebar.html.haml @@ -14,6 +14,6 @@ = link_to '个人信息设置', set_blogs_path - if current_user_is_admin? %li{role: 'presentation', class: "#{'active' if params[:action] == 'set_blog'}"} - = link_to '博客设置', set_blog_blogs_path + = link_to '空间设置', set_blog_blogs_path %li{role: 'presentation'} = link_to '修改密码', change_password_blogs_path diff --git a/app/views/blogs/about.html.haml b/app/views/blogs/about.html.haml index f0cb224..4bdd78c 100755 --- a/app/views/blogs/about.html.haml +++ b/app/views/blogs/about.html.haml @@ -1,6 +1,6 @@ .text-left %p - %h2 博主 + %h2 分享者 = @blog ? @blog.name : '未设置' %p %h2 email diff --git a/app/views/blogs/set_blog.html.haml b/app/views/blogs/set_blog.html.haml index f6525cd..40f51c2 100755 --- a/app/views/blogs/set_blog.html.haml +++ b/app/views/blogs/set_blog.html.haml @@ -4,16 +4,16 @@ .col-md-8 = form_for @blog, as: 'blog', url: update_blog_blogs_path, method: 'post', role: 'form' do |f| .form-group - %label{for: 'blog_name'} 博主 - = f.text_field :name, placeholder: '博主名称', class: 'form-control' + %label{for: 'blog_name'} 分享者 + = f.text_field :name, placeholder: '分享者名称', class: 'form-control' .form-group - %label{for: 'blog_blog_title'} 博客名字 - = f.text_field :blog_title, placeholder: '博客名称', class: 'form-control' + %label{for: 'blog_blog_title'} 空间名字 + = f.text_field :blog_title, placeholder: '空间名称', class: 'form-control' .form-group %label{for: 'blog_email'} 联系邮箱 = f.text_field :email, placeholder: '联系邮箱', class: 'form-control' .form-group - %label{for: 'blog_description'} 关于博主 - = f.text_area :description, placeholder: '关于博主', class: 'form-control blog-description' + %label{for: 'blog_description'} 关于分享者 + = f.text_area :description, placeholder: '关于分享者', class: 'form-control blog-description' .form-group = f.submit '修改', class: 'btn btn-primary set-btn' \ No newline at end of file diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index de28606..9bf33eb 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -18,9 +18,9 @@ .collspse.navbar-collapse.site-header %ul.nav.navbar-nav %li{class: "#{'active' if params[:controller] == 'articles' && params[:action] == 'index'}"} - = link_to '文章列表', articles_path + = link_to '经验列表', articles_path %li - = link_to '关于博主', about_blogs_path + = link_to '关于', about_blogs_path %ul.nav.navbar-nav.navbar-right - if is_logined? %li.dropdown @@ -34,7 +34,7 @@ %li = link_to '设置', set_blogs_path %li - = link_to '写博客', new_article_path + = link_to '写经验', new_article_path %li = link_to '退出', logout_path .navbar-header.navbar-avatar diff --git a/app/views/users/login.html.haml b/app/views/users/login.html.haml index 0340601..2d9cf2d 100755 --- a/app/views/users/login.html.haml +++ b/app/views/users/login.html.haml @@ -1,7 +1,7 @@ %section.content .form-unit = link_to root_path, class: 'brand' do - %h1 Blog + %h1 E2S %h3 用户登录 - errors = @user ? @user.errors.full_messages : [] - if errors.any? diff --git a/app/views/users/register.html.haml b/app/views/users/register.html.haml index e3485df..5f831f1 100755 --- a/app/views/users/register.html.haml +++ b/app/views/users/register.html.haml @@ -1,7 +1,7 @@ %section.content .form-unit = link_to root_path, class: 'brand' do - %h1 Blog + %h1 E2S %h3 注册账号 - errors = @user.errors.full_messages - if errors.any? diff --git a/config/initializers/gravatar_image_tag.rb b/config/initializers/gravatar_image_tag.rb new file mode 100644 index 0000000..c2121b3 --- /dev/null +++ b/config/initializers/gravatar_image_tag.rb @@ -0,0 +1,9 @@ +# config/initializers/gravatar_image_tag.rb +GravatarImageTag.configure do |config| + config.default_image = 'https://assets.github.com/images/gravatars/gravatar-140.png' # Set this to use your own default gravatar image rather then serving up Gravatar's default image [ 'http://example.com/images/default_gravitar.jpg', :identicon, :monsterid, :wavatar, 404 ]. + config.filetype = nil # Set this if you require a specific image file format ['gif', 'jpg' or 'png']. Gravatar's default is png + config.include_size_attributes = true # The height and width attributes of the generated img will be set to avoid page jitter as the gravatars load. Set to false to leave these attributes off. + config.rating = nil # Set this if you change the rating of the images that will be returned ['G', 'PG', 'R', 'X']. Gravatar's default is G + config.size = nil # Set this to globally set the size of the gravatar image returned (1..512). Gravatar's default is 80 + config.secure = false # Set this to true if you require secure images on your pages. +end \ No newline at end of file diff --git a/config/unicorn.rb b/config/unicorn.rb new file mode 100644 index 0000000..0448a55 --- /dev/null +++ b/config/unicorn.rb @@ -0,0 +1,66 @@ +# path to app dir +app_dir = "/home/root/e2s/" +worker_processes 2 +working_directory app_dir + +# Load app into the master before forking workers for super-fast +# worker spawn times +preload_app true + +# nuke workers after 30 seconds (60 is the default) +timeout 30 + +# listen on a Unix domain socket and/or a TCP port, + +#listen 8080 # listen to port 8080 on all TCP interfaces +#listen "127.0.0.1:8080" # listen to port 8080 on the loopback interface +listen "#{app_dir}/tmp/sockets/e2s.socket" + +pid "#{app_dir}/tmp/pids/unicorn.pid" +stderr_path "#{app_dir}/log/unicorn.stderr.log" +stdout_path "#{app_dir}/log/unicorn.stdout.log" + +# http://www.rubyenterpriseedition.com/faq.html#adapt_apps_for_cow +if GC.respond_to?(:copy_on_write_friendly=) + GC.copy_on_write_friendly = true +end + + +before_fork do |server, worker| + # the following is highly recomended for Rails + "preload_app true" + # as there's no need for the master process to hold a connection + # defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! + + ## + # When sent a USR2, Unicorn will suffix its pidfile with .oldbin and + # immediately start loading up a new version of itself (loaded with a new + # version of our app). When this new Unicorn is completely loaded + # it will begin spawning workers. The first worker spawned will check to + # see if an .oldbin pidfile exists. If so, this means we've just booted up + # a new Unicorn and need to tell the old one that it can now die. To do so + # we send it a QUIT. + # + # Using this method we get 0 downtime deploys. + + old_pid = "#{server.config[:pid]}.oldbin" + + if File.exists?(old_pid) && server.pid != old_pid + begin + sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU + Process.kill(sig, File.read(old_pid).to_i) + rescue Errno::ENOENT, Errno::ESRCH + # someone else did our job for us + end + end +end + +after_fork do |server, worker| + # Unicorn master loads the app then forks off workers - because of the way + # Unix forking works, we need to make sure we aren't using any of the parent's + # sockets, e.g. db connection + + # defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection + # Redis and Memcached would go here but their connections are established + # on demand, so the master never opens a socket +end + diff --git a/deployment/init.d/e2s b/deployment/init.d/e2s new file mode 100644 index 0000000..af81b3d --- /dev/null +++ b/deployment/init.d/e2s @@ -0,0 +1,115 @@ +### BEGIN INIT INFO +# Provides: code +# Required-Start: $local_fs $remote_fs $network $syslog redis-server +# Required-Stop: $local_fs $remote_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Code git repository management +# Description: Code git repository management +### END INIT INFO + + +APP_ROOT="/home/root/e2s" +DAEMON_OPTS="-c $APP_ROOT/config/unicorn.rb -E production" +PID_PATH="$APP_ROOT/tmp/pids" +UNICORN_PID="$PID_PATH/unicorn.pid" +NAME="unicorn" +DESC="E2S Group service" + +check_pid(){ + if [ -f $UNICORN_PID ]; then + PID=`cat $UNICORN_PID` + STATUS=`ps aux | grep $PID | grep -v grep | wc -l` + else + STATUS=0 + PID=0 + fi +} + +start() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + # Program is running, exit with error code 1. + echo "Error! $DESC $NAME is currently running!" + exit 1 + else + if [ `whoami` = root ]; then + sudo -u fangxiang -H bash -l -c "nohup bundle exec unicorn $DAEMON_OPTS > /dev/null 2>&1 &" + echo "$DESC started" + fi + fi +} + +stop() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + ## Program is running, stop it. + kill -QUIT `cat $UNICORN_PID` + rm "$UNICORN_PID" >> /dev/null + echo "$DESC stopped" + else + ## Program is not running, exit with error. + echo "Error! $DESC not started!" + exit 1 + fi +} + +restart() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + echo "Restarting $DESC..." + kill -USR2 `cat $UNICORN_PID` + echo "$DESC restarted." + else + echo "Error, $NAME not running!" + exit 1 + fi +} + +status() { + cd $APP_ROOT + check_pid + if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then + echo "$DESC / Unicorn with PID $PID is running." + else + echo "$DESC is not running." + exit 1 + fi +} + +## Check to see if we are running as root first. +## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html +if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root" + exit 1 +fi + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + restart + ;; + reload|force-reload) + echo -n "Reloading $NAME configuration: " + kill -HUP `cat $PID` + echo "done." + ;; + status) + status + ;; + *) + echo "Usage: sudo service code {start|stop|restart|reload}" >&2 + exit 1 + ;; +esac + +exit 0 + diff --git a/deployment/nginx/nginx.conf b/deployment/nginx/nginx.conf new file mode 100644 index 0000000..23e0e4b --- /dev/null +++ b/deployment/nginx/nginx.conf @@ -0,0 +1,59 @@ +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + gzip on; + gzip_types application/json; + + upstream blog { + server unix:/home/root/e2s/tmp/sockets/e2s.socket; + } + server { + listen 80; + #server_name blog.com; + root /home/root/e2s/public; + try_files $uri/index.html $uri.html $uri @user1; + location @user1 { + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Real-Ip $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_buffering on; + proxy_pass http://blog; + } + location ~ ^(/assets) { + access_log off; + expires max; + } + + } +} diff --git a/public/assets/.sprockets-manifest-b2cfe5455a8953d6a061109cd65a57a2.json b/public/assets/.sprockets-manifest-b2cfe5455a8953d6a061109cd65a57a2.json index 87b9358..1983f8f 100644 --- a/public/assets/.sprockets-manifest-b2cfe5455a8953d6a061109cd65a57a2.json +++ b/public/assets/.sprockets-manifest-b2cfe5455a8953d6a061109cd65a57a2.json @@ -1 +1 @@ -{"files":{"register-e845712411f09751a41f68ea6910c94f6eee0a01c5770873702e1e3e4bc502b3.css":{"logical_path":"register.css","mtime":"2016-01-06T19:27:47+08:00","size":10385,"digest":"e845712411f09751a41f68ea6910c94f6eee0a01c5770873702e1e3e4bc502b3","integrity":"sha256-6EVxJBHwl1GkH2jqaRDJT27uCgHFdwhzcC4ePkvFArM="},"application-00e870d5f6257a2628f36122637e290b3be60b015ae97c34bb5634adffe6c678.js":{"logical_path":"application.js","mtime":"2016-01-06T21:27:18+08:00","size":177463,"digest":"00e870d5f6257a2628f36122637e290b3be60b015ae97c34bb5634adffe6c678","integrity":"sha256-AOhw1fYleiYo82EiY34pCzvmCwFa6Xw0u1Y0rf/mxng="},"button-49174824c7be3811bb7a68f97cdf52a169dec1a48b01776aeffe910c1ec78b4a.psd":{"logical_path":"button.psd","mtime":"2016-01-04T23:54:17+08:00","size":61300,"digest":"49174824c7be3811bb7a68f97cdf52a169dec1a48b01776aeffe910c1ec78b4a","integrity":"sha256-SRdIJMe+OBG7emj5fN9SoWnewaSLAXdq7/6RDB7Hi0o="},"markdown-toolbar-abbcae3532db5240aaeba105a93cacef511628076dadd7feeef1f3cc99589150.png":{"logical_path":"markdown-toolbar.png","mtime":"2016-01-04T23:54:17+08:00","size":3724,"digest":"abbcae3532db5240aaeba105a93cacef511628076dadd7feeef1f3cc99589150","integrity":"sha256-q7yuNTLbUkCq66EFqTys71EWKAdtrdf+7vHzzJlYkVA="},"text_blockquote-e9d34690f04a578ecde83e577be40bab52ed7fa78aa2663a24bd186a15e5a570.png":{"logical_path":"text_blockquote.png","mtime":"2016-01-04T23:54:17+08:00","size":522,"digest":"e9d34690f04a578ecde83e577be40bab52ed7fa78aa2663a24bd186a15e5a570","integrity":"sha256-6dNGkPBKV47N6D5Xe+QLq1Ltf6eKomY6JL0YahXlpXA="},"text_bold-2fb65dc04959c59d3fa81e5ae9995b6f58d2aa365ff05b07ddcc9bf127c6cbd8.png":{"logical_path":"text_bold.png","mtime":"2016-01-04T23:54:17+08:00","size":573,"digest":"2fb65dc04959c59d3fa81e5ae9995b6f58d2aa365ff05b07ddcc9bf127c6cbd8","integrity":"sha256-L7ZdwElZxZ0/qB5a6Zlbb1jSqjZf8FsH3cyb8SfGy9g="},"text_code-4ecb36e97677bc565b597591a4705b0e250e3bd891db0c86c8ea1a7512aef0f9.png":{"logical_path":"text_code.png","mtime":"2016-01-04T23:54:17+08:00","size":586,"digest":"4ecb36e97677bc565b597591a4705b0e250e3bd891db0c86c8ea1a7512aef0f9","integrity":"sha256-Tss26XZ3vFZbWXWRpHBbDiUOO9iR2wyGyOoadRKu8Pk="},"text_delimiter-176774edd965325446b0fe8c48ec2c61bc5476d1c2569141c8ccad504c7090b8.png":{"logical_path":"text_delimiter.png","mtime":"2016-01-04T23:54:17+08:00","size":136,"digest":"176774edd965325446b0fe8c48ec2c61bc5476d1c2569141c8ccad504c7090b8","integrity":"sha256-F2d07dllMlRGsP6MSOwsYbxUdtHCVpFByMytUExwkLg="},"text_empty-bdad3b2542cedcc32a7edaa31fd17f2b33765a832d66a5073e6702fd94a80d0e.png":{"logical_path":"text_empty.png","mtime":"2016-01-04T23:54:17+08:00","size":348,"digest":"bdad3b2542cedcc32a7edaa31fd17f2b33765a832d66a5073e6702fd94a80d0e","integrity":"sha256-va07JULO3MMqftqjH9F/KzN2WoMtZqUHPmcC/ZSoDQ4="},"text_heading_1-f71177b873d9040133d753f35626d311eeab62ff3407c7ed90cc147488a43dbb.png":{"logical_path":"text_heading_1.png","mtime":"2016-01-04T23:54:17+08:00","size":532,"digest":"f71177b873d9040133d753f35626d311eeab62ff3407c7ed90cc147488a43dbb","integrity":"sha256-9xF3uHPZBAEz11PzVibTEe6rYv80B8ftkMwUdIikPbs="},"text_heading_2-cda9a91b92375375277e030a9b449d27e0330d5466bf0381119ffb21c05b84bd.png":{"logical_path":"text_heading_2.png","mtime":"2016-01-04T23:54:17+08:00","size":577,"digest":"cda9a91b92375375277e030a9b449d27e0330d5466bf0381119ffb21c05b84bd","integrity":"sha256-zampG5I3U3UnfgMKm0SdJ+AzDVRmvwOBEZ/7IcBbhL0="},"text_heading_3-8e6b76a35fcd2cfbfa5cb867299dece1eef4075f09a5b0bca83c700f2478769e.png":{"logical_path":"text_heading_3.png","mtime":"2016-01-04T23:54:17+08:00","size":578,"digest":"8e6b76a35fcd2cfbfa5cb867299dece1eef4075f09a5b0bca83c700f2478769e","integrity":"sha256-jmt2o1/NLPv6XLhnKZ3s4e70B18JpbC8qDxwDyR4dp4="},"text_image-43811f9568bb8d8a7956c688838f094a915d3abc48d993e6da42cb65f72751b9.png":{"logical_path":"text_image.png","mtime":"2016-01-04T23:54:17+08:00","size":664,"digest":"43811f9568bb8d8a7956c688838f094a915d3abc48d993e6da42cb65f72751b9","integrity":"sha256-Q4EflWi7jYp5VsaIg48JSpFdOrxI2ZPm2kLLZfcnUbk="},"text_italic-632c4bd03ddfa7a611a7e6405c7d469e41f6064a0ec3a815fbd0a4ce7a0158a8.png":{"logical_path":"text_italic.png","mtime":"2016-01-04T23:54:17+08:00","size":521,"digest":"632c4bd03ddfa7a611a7e6405c7d469e41f6064a0ec3a815fbd0a4ce7a0158a8","integrity":"sha256-YyxL0D3fp6YRp+ZAXH1GnkH2BkoOw6gV+9CkznoBWKg="},"text_link-141499059d1ee47d7350fa456dde5f28ad4e1f5f05050bff64f99813aae8cdaf.png":{"logical_path":"text_link.png","mtime":"2016-01-04T23:54:17+08:00","size":649,"digest":"141499059d1ee47d7350fa456dde5f28ad4e1f5f05050bff64f99813aae8cdaf","integrity":"sha256-FBSZBZ0e5H1zUPpFbd5fKK1OH18FBQv/ZPmYE6roza8="},"text_list_bullets-41a490fcfa80ea7eca38cf066bd45cc0f6783d2e414d82daad66085a2a4c3316.png":{"logical_path":"text_list_bullets.png","mtime":"2016-01-04T23:54:17+08:00","size":600,"digest":"41a490fcfa80ea7eca38cf066bd45cc0f6783d2e414d82daad66085a2a4c3316","integrity":"sha256-QaSQ/PqA6n7KOM8Ga9RcwPZ4PS5BTYLarWYIWipMMxY="},"text_list_numbers-d0d27541ff91c4481851e3909de94d1322673cf84399cccc054c447cdeed7a5f.png":{"logical_path":"text_list_numbers.png","mtime":"2016-01-04T23:54:17+08:00","size":562,"digest":"d0d27541ff91c4481851e3909de94d1322673cf84399cccc054c447cdeed7a5f","integrity":"sha256-0NJ1Qf+RxEgYUeOQnelNEyJnPPhDmczMBUxEfN7tel8="},"text_strike-b6feab281eeded75e2bcd56342da2c73d984da8244bbcbe109143426881ddacb.png":{"logical_path":"text_strike.png","mtime":"2016-01-04T23:54:17+08:00","size":567,"digest":"b6feab281eeded75e2bcd56342da2c73d984da8244bbcbe109143426881ddacb","integrity":"sha256-tv6rKB7t7XXivNVjQtosc9mE2oJEu8vhCRQ0Jogd2ss="},"text_underline-b97d92487992de02e372fe6b81760ea6a556ede63be8a9f96956a8bafbeac8b0.png":{"logical_path":"text_underline.png","mtime":"2016-01-04T23:54:17+08:00","size":563,"digest":"b97d92487992de02e372fe6b81760ea6a556ede63be8a9f96956a8bafbeac8b0","integrity":"sha256-uX2SSHmS3gLjcv5rgXYOpqVW7eY76Kn5aVaouvvqyLA="},"FontAwesome-e5d717d2c24e52afc0e139b41d817580583acad2e3c9d725d1bd46f0f7e5cb1b.otf":{"logical_path":"FontAwesome.otf","mtime":"2016-01-05T11:02:26+08:00","size":48748,"digest":"e5d717d2c24e52afc0e139b41d817580583acad2e3c9d725d1bd46f0f7e5cb1b","integrity":"sha256-5dcX0sJOUq/A4Tm0HYF1gFg6ytLjydcl0b1G8Pflyxs="},"fontawesome-webfont-e07d3b0225ad8e9438927341d63485e01c767edf1e2930b16f0a0bf907ae0d82.eot":{"logical_path":"fontawesome-webfont.eot","mtime":"2016-01-05T11:02:26+08:00","size":25395,"digest":"e07d3b0225ad8e9438927341d63485e01c767edf1e2930b16f0a0bf907ae0d82","integrity":"sha256-4H07AiWtjpQ4knNB1jSF4Bx2ft8eKTCxbwoL+QeuDYI="},"fontawesome-webfont-1eb7466293db9378858da3694dd11620ec9c351fb7cefef1a94a3802803e1fa3.ttf":{"logical_path":"fontawesome-webfont.ttf","mtime":"2016-01-05T11:02:26+08:00","size":55096,"digest":"1eb7466293db9378858da3694dd11620ec9c351fb7cefef1a94a3802803e1fa3","integrity":"sha256-HrdGYpPbk3iFjaNpTdEWIOycNR+3zv7xqUo4AoA+H6M="},"fontawesome-webfont-a6fb906942932de53852ee244ee3fec27bca0bf63a96421672aa4784851b8d4b.woff":{"logical_path":"fontawesome-webfont.woff","mtime":"2016-01-05T11:02:26+08:00","size":29380,"digest":"a6fb906942932de53852ee244ee3fec27bca0bf63a96421672aa4784851b8d4b","integrity":"sha256-pvuQaUKTLeU4Uu4kTuP+wnvKC/Y6lkIWcqpHhIUbjUs="},"glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot":{"logical_path":"glyphicons-halflings-regular.eot","mtime":"2016-01-07T16:38:47+08:00","size":20127,"digest":"13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407","integrity":"sha256-E2NNqH2eI/jD7ZEIzhck0YOjmtBy5z4bPYy/ZG0tBAc="},"glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg":{"logical_path":"glyphicons-halflings-regular.svg","mtime":"2016-01-07T16:38:47+08:00","size":108738,"digest":"42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5","integrity":"sha256-QvYGWdJlwaPDD5+kKry7Vr1KU69Ng9MW1t16NpA8Q+U="},"glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf":{"logical_path":"glyphicons-halflings-regular.ttf","mtime":"2016-01-07T16:38:47+08:00","size":45404,"digest":"e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456","integrity":"sha256-45UEQJN1fYKvyxOJV9BqHqk2G9zwtELQahioBRr1dFY="},"glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff":{"logical_path":"glyphicons-halflings-regular.woff","mtime":"2016-01-07T16:38:47+08:00","size":23424,"digest":"a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742","integrity":"sha256-omOU9+3hAMoRjv8u2ghZYnWpg5uVnCJuFUOVV6WoB0I="},"glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2":{"logical_path":"glyphicons-halflings-regular.woff2","mtime":"2016-01-07T16:38:47+08:00","size":18028,"digest":"fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c","integrity":"sha256-/hhdEaSWdokNR7t4MxKgzaWkTEA5IUCU55V7TAQO8Rw="},"bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot":{"logical_path":"bootstrap/glyphicons-halflings-regular.eot","mtime":"2016-01-05T11:02:09+08:00","size":20127,"digest":"13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407","integrity":"sha256-E2NNqH2eI/jD7ZEIzhck0YOjmtBy5z4bPYy/ZG0tBAc="},"bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg":{"logical_path":"bootstrap/glyphicons-halflings-regular.svg","mtime":"2016-01-05T11:02:09+08:00","size":108738,"digest":"42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5","integrity":"sha256-QvYGWdJlwaPDD5+kKry7Vr1KU69Ng9MW1t16NpA8Q+U="},"bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf":{"logical_path":"bootstrap/glyphicons-halflings-regular.ttf","mtime":"2016-01-05T11:02:09+08:00","size":45404,"digest":"e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456","integrity":"sha256-45UEQJN1fYKvyxOJV9BqHqk2G9zwtELQahioBRr1dFY="},"bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff","mtime":"2016-01-05T11:02:09+08:00","size":23424,"digest":"a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742","integrity":"sha256-omOU9+3hAMoRjv8u2ghZYnWpg5uVnCJuFUOVV6WoB0I="},"bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff2","mtime":"2016-01-05T11:02:09+08:00","size":18028,"digest":"fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c","integrity":"sha256-/hhdEaSWdokNR7t4MxKgzaWkTEA5IUCU55V7TAQO8Rw="},"application-18504939353a317a186b74ea1cb1d2dbbd4a3666da8d7615b08bb198c6fce527.js":{"logical_path":"application.js","mtime":"2016-01-06T21:30:59+08:00","size":219346,"digest":"18504939353a317a186b74ea1cb1d2dbbd4a3666da8d7615b08bb198c6fce527","integrity":"sha256-GFBJOTU6MXoYa3TqHLHS271KNmbajXYVsIuxmMb85Sc="},"application-74bf64f896810ecc6538542fd61aa95bc3b5defa508a444113dddd1b8af9275d.css":{"logical_path":"application.css","mtime":"2016-01-06T21:30:59+08:00","size":180130,"digest":"74bf64f896810ecc6538542fd61aa95bc3b5defa508a444113dddd1b8af9275d","integrity":"sha256-dL9k+JaBDsxlOFQv1hqpW8O13vpQikRBE93dG4r5J10="},"register-0f641bebcd0ef4698fdee49d1080455aadd6ca2b680fb8759109bc2f34af198f.css":{"logical_path":"register.css","mtime":"2016-01-12T23:26:27+08:00","size":13662,"digest":"0f641bebcd0ef4698fdee49d1080455aadd6ca2b680fb8759109bc2f34af198f","integrity":"sha256-D2Qb680O9GmP3uSdEIBFWq3WyitoD7h1kQm8LzSvGY8="},"application-921ebe033e5acde942c8f3848a8b948a70f8c71230d375391d4534d15e841b30.js":{"logical_path":"application.js","mtime":"2016-01-12T23:26:27+08:00","size":499799,"digest":"921ebe033e5acde942c8f3848a8b948a70f8c71230d375391d4534d15e841b30","integrity":"sha256-kh6+Az5azelCyPOEiouUinD4xxIw03U5HUU00V6EGzA="},"application-7839f0b76d13dd9fd9ee48fc4b019f4c797e3f0ceecaea979fe7d4dcfff3b04b.css":{"logical_path":"application.css","mtime":"2016-01-06T21:30:59+08:00","size":433132,"digest":"7839f0b76d13dd9fd9ee48fc4b019f4c797e3f0ceecaea979fe7d4dcfff3b04b","integrity":"sha256-eDnwt20T3Z/Z7kj8SwGfTHl+PwzuyuqXn+fU3P/zsEs="},"application-d72f8071c3ad36ea735e6faa1f269ececef5a93c06b056ea5cf3d7d786fc67a1.css":{"logical_path":"application.css","mtime":"2016-01-12T23:26:27+08:00","size":428389,"digest":"d72f8071c3ad36ea735e6faa1f269ececef5a93c06b056ea5cf3d7d786fc67a1","integrity":"sha256-1y+AccOtNupzXm+qHyaezs71qTwGsFbqXPPX14b8Z6E="}},"assets":{"register.css":"register-0f641bebcd0ef4698fdee49d1080455aadd6ca2b680fb8759109bc2f34af198f.css","application.js":"application-921ebe033e5acde942c8f3848a8b948a70f8c71230d375391d4534d15e841b30.js","application.css":"application-d72f8071c3ad36ea735e6faa1f269ececef5a93c06b056ea5cf3d7d786fc67a1.css","button.psd":"button-49174824c7be3811bb7a68f97cdf52a169dec1a48b01776aeffe910c1ec78b4a.psd","markdown-toolbar.png":"markdown-toolbar-abbcae3532db5240aaeba105a93cacef511628076dadd7feeef1f3cc99589150.png","text_blockquote.png":"text_blockquote-e9d34690f04a578ecde83e577be40bab52ed7fa78aa2663a24bd186a15e5a570.png","text_bold.png":"text_bold-2fb65dc04959c59d3fa81e5ae9995b6f58d2aa365ff05b07ddcc9bf127c6cbd8.png","text_code.png":"text_code-4ecb36e97677bc565b597591a4705b0e250e3bd891db0c86c8ea1a7512aef0f9.png","text_delimiter.png":"text_delimiter-176774edd965325446b0fe8c48ec2c61bc5476d1c2569141c8ccad504c7090b8.png","text_empty.png":"text_empty-bdad3b2542cedcc32a7edaa31fd17f2b33765a832d66a5073e6702fd94a80d0e.png","text_heading_1.png":"text_heading_1-f71177b873d9040133d753f35626d311eeab62ff3407c7ed90cc147488a43dbb.png","text_heading_2.png":"text_heading_2-cda9a91b92375375277e030a9b449d27e0330d5466bf0381119ffb21c05b84bd.png","text_heading_3.png":"text_heading_3-8e6b76a35fcd2cfbfa5cb867299dece1eef4075f09a5b0bca83c700f2478769e.png","text_image.png":"text_image-43811f9568bb8d8a7956c688838f094a915d3abc48d993e6da42cb65f72751b9.png","text_italic.png":"text_italic-632c4bd03ddfa7a611a7e6405c7d469e41f6064a0ec3a815fbd0a4ce7a0158a8.png","text_link.png":"text_link-141499059d1ee47d7350fa456dde5f28ad4e1f5f05050bff64f99813aae8cdaf.png","text_list_bullets.png":"text_list_bullets-41a490fcfa80ea7eca38cf066bd45cc0f6783d2e414d82daad66085a2a4c3316.png","text_list_numbers.png":"text_list_numbers-d0d27541ff91c4481851e3909de94d1322673cf84399cccc054c447cdeed7a5f.png","text_strike.png":"text_strike-b6feab281eeded75e2bcd56342da2c73d984da8244bbcbe109143426881ddacb.png","text_underline.png":"text_underline-b97d92487992de02e372fe6b81760ea6a556ede63be8a9f96956a8bafbeac8b0.png","FontAwesome.otf":"FontAwesome-e5d717d2c24e52afc0e139b41d817580583acad2e3c9d725d1bd46f0f7e5cb1b.otf","fontawesome-webfont.eot":"fontawesome-webfont-e07d3b0225ad8e9438927341d63485e01c767edf1e2930b16f0a0bf907ae0d82.eot","fontawesome-webfont.ttf":"fontawesome-webfont-1eb7466293db9378858da3694dd11620ec9c351fb7cefef1a94a3802803e1fa3.ttf","fontawesome-webfont.woff":"fontawesome-webfont-a6fb906942932de53852ee244ee3fec27bca0bf63a96421672aa4784851b8d4b.woff","glyphicons-halflings-regular.eot":"glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot","glyphicons-halflings-regular.svg":"glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg","glyphicons-halflings-regular.ttf":"glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf","glyphicons-halflings-regular.woff":"glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff","glyphicons-halflings-regular.woff2":"glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2","bootstrap/glyphicons-halflings-regular.eot":"bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot","bootstrap/glyphicons-halflings-regular.svg":"bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg","bootstrap/glyphicons-halflings-regular.ttf":"bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf","bootstrap/glyphicons-halflings-regular.woff":"bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff","bootstrap/glyphicons-halflings-regular.woff2":"bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2"}} \ No newline at end of file +{"files":{"register-e845712411f09751a41f68ea6910c94f6eee0a01c5770873702e1e3e4bc502b3.css":{"logical_path":"register.css","mtime":"2016-01-06T19:27:47+08:00","size":10385,"digest":"e845712411f09751a41f68ea6910c94f6eee0a01c5770873702e1e3e4bc502b3","integrity":"sha256-6EVxJBHwl1GkH2jqaRDJT27uCgHFdwhzcC4ePkvFArM="},"application-00e870d5f6257a2628f36122637e290b3be60b015ae97c34bb5634adffe6c678.js":{"logical_path":"application.js","mtime":"2016-01-06T21:27:18+08:00","size":177463,"digest":"00e870d5f6257a2628f36122637e290b3be60b015ae97c34bb5634adffe6c678","integrity":"sha256-AOhw1fYleiYo82EiY34pCzvmCwFa6Xw0u1Y0rf/mxng="},"button-49174824c7be3811bb7a68f97cdf52a169dec1a48b01776aeffe910c1ec78b4a.psd":{"logical_path":"button.psd","mtime":"2016-01-06T21:07:53+08:00","size":61300,"digest":"49174824c7be3811bb7a68f97cdf52a169dec1a48b01776aeffe910c1ec78b4a","integrity":"sha256-SRdIJMe+OBG7emj5fN9SoWnewaSLAXdq7/6RDB7Hi0o="},"markdown-toolbar-abbcae3532db5240aaeba105a93cacef511628076dadd7feeef1f3cc99589150.png":{"logical_path":"markdown-toolbar.png","mtime":"2016-01-06T21:07:53+08:00","size":3724,"digest":"abbcae3532db5240aaeba105a93cacef511628076dadd7feeef1f3cc99589150","integrity":"sha256-q7yuNTLbUkCq66EFqTys71EWKAdtrdf+7vHzzJlYkVA="},"text_blockquote-e9d34690f04a578ecde83e577be40bab52ed7fa78aa2663a24bd186a15e5a570.png":{"logical_path":"text_blockquote.png","mtime":"2016-01-06T21:07:53+08:00","size":522,"digest":"e9d34690f04a578ecde83e577be40bab52ed7fa78aa2663a24bd186a15e5a570","integrity":"sha256-6dNGkPBKV47N6D5Xe+QLq1Ltf6eKomY6JL0YahXlpXA="},"text_bold-2fb65dc04959c59d3fa81e5ae9995b6f58d2aa365ff05b07ddcc9bf127c6cbd8.png":{"logical_path":"text_bold.png","mtime":"2016-01-06T21:07:53+08:00","size":573,"digest":"2fb65dc04959c59d3fa81e5ae9995b6f58d2aa365ff05b07ddcc9bf127c6cbd8","integrity":"sha256-L7ZdwElZxZ0/qB5a6Zlbb1jSqjZf8FsH3cyb8SfGy9g="},"text_code-4ecb36e97677bc565b597591a4705b0e250e3bd891db0c86c8ea1a7512aef0f9.png":{"logical_path":"text_code.png","mtime":"2016-01-06T21:07:53+08:00","size":586,"digest":"4ecb36e97677bc565b597591a4705b0e250e3bd891db0c86c8ea1a7512aef0f9","integrity":"sha256-Tss26XZ3vFZbWXWRpHBbDiUOO9iR2wyGyOoadRKu8Pk="},"text_delimiter-176774edd965325446b0fe8c48ec2c61bc5476d1c2569141c8ccad504c7090b8.png":{"logical_path":"text_delimiter.png","mtime":"2016-01-06T21:07:53+08:00","size":136,"digest":"176774edd965325446b0fe8c48ec2c61bc5476d1c2569141c8ccad504c7090b8","integrity":"sha256-F2d07dllMlRGsP6MSOwsYbxUdtHCVpFByMytUExwkLg="},"text_empty-bdad3b2542cedcc32a7edaa31fd17f2b33765a832d66a5073e6702fd94a80d0e.png":{"logical_path":"text_empty.png","mtime":"2016-01-06T21:07:53+08:00","size":348,"digest":"bdad3b2542cedcc32a7edaa31fd17f2b33765a832d66a5073e6702fd94a80d0e","integrity":"sha256-va07JULO3MMqftqjH9F/KzN2WoMtZqUHPmcC/ZSoDQ4="},"text_heading_1-f71177b873d9040133d753f35626d311eeab62ff3407c7ed90cc147488a43dbb.png":{"logical_path":"text_heading_1.png","mtime":"2016-01-06T21:07:53+08:00","size":532,"digest":"f71177b873d9040133d753f35626d311eeab62ff3407c7ed90cc147488a43dbb","integrity":"sha256-9xF3uHPZBAEz11PzVibTEe6rYv80B8ftkMwUdIikPbs="},"text_heading_2-cda9a91b92375375277e030a9b449d27e0330d5466bf0381119ffb21c05b84bd.png":{"logical_path":"text_heading_2.png","mtime":"2016-01-06T21:07:53+08:00","size":577,"digest":"cda9a91b92375375277e030a9b449d27e0330d5466bf0381119ffb21c05b84bd","integrity":"sha256-zampG5I3U3UnfgMKm0SdJ+AzDVRmvwOBEZ/7IcBbhL0="},"text_heading_3-8e6b76a35fcd2cfbfa5cb867299dece1eef4075f09a5b0bca83c700f2478769e.png":{"logical_path":"text_heading_3.png","mtime":"2016-01-06T21:07:53+08:00","size":578,"digest":"8e6b76a35fcd2cfbfa5cb867299dece1eef4075f09a5b0bca83c700f2478769e","integrity":"sha256-jmt2o1/NLPv6XLhnKZ3s4e70B18JpbC8qDxwDyR4dp4="},"text_image-43811f9568bb8d8a7956c688838f094a915d3abc48d993e6da42cb65f72751b9.png":{"logical_path":"text_image.png","mtime":"2016-01-06T21:07:53+08:00","size":664,"digest":"43811f9568bb8d8a7956c688838f094a915d3abc48d993e6da42cb65f72751b9","integrity":"sha256-Q4EflWi7jYp5VsaIg48JSpFdOrxI2ZPm2kLLZfcnUbk="},"text_italic-632c4bd03ddfa7a611a7e6405c7d469e41f6064a0ec3a815fbd0a4ce7a0158a8.png":{"logical_path":"text_italic.png","mtime":"2016-01-06T21:07:53+08:00","size":521,"digest":"632c4bd03ddfa7a611a7e6405c7d469e41f6064a0ec3a815fbd0a4ce7a0158a8","integrity":"sha256-YyxL0D3fp6YRp+ZAXH1GnkH2BkoOw6gV+9CkznoBWKg="},"text_link-141499059d1ee47d7350fa456dde5f28ad4e1f5f05050bff64f99813aae8cdaf.png":{"logical_path":"text_link.png","mtime":"2016-01-06T21:07:53+08:00","size":649,"digest":"141499059d1ee47d7350fa456dde5f28ad4e1f5f05050bff64f99813aae8cdaf","integrity":"sha256-FBSZBZ0e5H1zUPpFbd5fKK1OH18FBQv/ZPmYE6roza8="},"text_list_bullets-41a490fcfa80ea7eca38cf066bd45cc0f6783d2e414d82daad66085a2a4c3316.png":{"logical_path":"text_list_bullets.png","mtime":"2016-01-06T21:07:53+08:00","size":600,"digest":"41a490fcfa80ea7eca38cf066bd45cc0f6783d2e414d82daad66085a2a4c3316","integrity":"sha256-QaSQ/PqA6n7KOM8Ga9RcwPZ4PS5BTYLarWYIWipMMxY="},"text_list_numbers-d0d27541ff91c4481851e3909de94d1322673cf84399cccc054c447cdeed7a5f.png":{"logical_path":"text_list_numbers.png","mtime":"2016-01-06T21:07:53+08:00","size":562,"digest":"d0d27541ff91c4481851e3909de94d1322673cf84399cccc054c447cdeed7a5f","integrity":"sha256-0NJ1Qf+RxEgYUeOQnelNEyJnPPhDmczMBUxEfN7tel8="},"text_strike-b6feab281eeded75e2bcd56342da2c73d984da8244bbcbe109143426881ddacb.png":{"logical_path":"text_strike.png","mtime":"2016-01-06T21:07:53+08:00","size":567,"digest":"b6feab281eeded75e2bcd56342da2c73d984da8244bbcbe109143426881ddacb","integrity":"sha256-tv6rKB7t7XXivNVjQtosc9mE2oJEu8vhCRQ0Jogd2ss="},"text_underline-b97d92487992de02e372fe6b81760ea6a556ede63be8a9f96956a8bafbeac8b0.png":{"logical_path":"text_underline.png","mtime":"2016-01-06T21:07:53+08:00","size":563,"digest":"b97d92487992de02e372fe6b81760ea6a556ede63be8a9f96956a8bafbeac8b0","integrity":"sha256-uX2SSHmS3gLjcv5rgXYOpqVW7eY76Kn5aVaouvvqyLA="},"FontAwesome-e5d717d2c24e52afc0e139b41d817580583acad2e3c9d725d1bd46f0f7e5cb1b.otf":{"logical_path":"FontAwesome.otf","mtime":"2016-01-03T15:32:24+08:00","size":48748,"digest":"e5d717d2c24e52afc0e139b41d817580583acad2e3c9d725d1bd46f0f7e5cb1b","integrity":"sha256-5dcX0sJOUq/A4Tm0HYF1gFg6ytLjydcl0b1G8Pflyxs="},"fontawesome-webfont-e07d3b0225ad8e9438927341d63485e01c767edf1e2930b16f0a0bf907ae0d82.eot":{"logical_path":"fontawesome-webfont.eot","mtime":"2016-01-03T15:32:24+08:00","size":25395,"digest":"e07d3b0225ad8e9438927341d63485e01c767edf1e2930b16f0a0bf907ae0d82","integrity":"sha256-4H07AiWtjpQ4knNB1jSF4Bx2ft8eKTCxbwoL+QeuDYI="},"fontawesome-webfont-1eb7466293db9378858da3694dd11620ec9c351fb7cefef1a94a3802803e1fa3.ttf":{"logical_path":"fontawesome-webfont.ttf","mtime":"2016-01-03T15:32:24+08:00","size":55096,"digest":"1eb7466293db9378858da3694dd11620ec9c351fb7cefef1a94a3802803e1fa3","integrity":"sha256-HrdGYpPbk3iFjaNpTdEWIOycNR+3zv7xqUo4AoA+H6M="},"fontawesome-webfont-a6fb906942932de53852ee244ee3fec27bca0bf63a96421672aa4784851b8d4b.woff":{"logical_path":"fontawesome-webfont.woff","mtime":"2016-01-03T15:32:24+08:00","size":29380,"digest":"a6fb906942932de53852ee244ee3fec27bca0bf63a96421672aa4784851b8d4b","integrity":"sha256-pvuQaUKTLeU4Uu4kTuP+wnvKC/Y6lkIWcqpHhIUbjUs="},"glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot":{"logical_path":"glyphicons-halflings-regular.eot","mtime":"2016-01-06T21:20:35+08:00","size":20127,"digest":"13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407","integrity":"sha256-E2NNqH2eI/jD7ZEIzhck0YOjmtBy5z4bPYy/ZG0tBAc="},"glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg":{"logical_path":"glyphicons-halflings-regular.svg","mtime":"2016-01-06T21:20:35+08:00","size":108738,"digest":"42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5","integrity":"sha256-QvYGWdJlwaPDD5+kKry7Vr1KU69Ng9MW1t16NpA8Q+U="},"glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf":{"logical_path":"glyphicons-halflings-regular.ttf","mtime":"2016-01-06T21:20:35+08:00","size":45404,"digest":"e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456","integrity":"sha256-45UEQJN1fYKvyxOJV9BqHqk2G9zwtELQahioBRr1dFY="},"glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff":{"logical_path":"glyphicons-halflings-regular.woff","mtime":"2016-01-06T21:20:35+08:00","size":23424,"digest":"a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742","integrity":"sha256-omOU9+3hAMoRjv8u2ghZYnWpg5uVnCJuFUOVV6WoB0I="},"glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2":{"logical_path":"glyphicons-halflings-regular.woff2","mtime":"2016-01-06T21:20:35+08:00","size":18028,"digest":"fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c","integrity":"sha256-/hhdEaSWdokNR7t4MxKgzaWkTEA5IUCU55V7TAQO8Rw="},"bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot":{"logical_path":"bootstrap/glyphicons-halflings-regular.eot","mtime":"2016-01-03T15:32:10+08:00","size":20127,"digest":"13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407","integrity":"sha256-E2NNqH2eI/jD7ZEIzhck0YOjmtBy5z4bPYy/ZG0tBAc="},"bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg":{"logical_path":"bootstrap/glyphicons-halflings-regular.svg","mtime":"2016-01-03T15:32:10+08:00","size":108738,"digest":"42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5","integrity":"sha256-QvYGWdJlwaPDD5+kKry7Vr1KU69Ng9MW1t16NpA8Q+U="},"bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf":{"logical_path":"bootstrap/glyphicons-halflings-regular.ttf","mtime":"2016-01-03T15:32:10+08:00","size":45404,"digest":"e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456","integrity":"sha256-45UEQJN1fYKvyxOJV9BqHqk2G9zwtELQahioBRr1dFY="},"bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff","mtime":"2016-01-03T15:32:10+08:00","size":23424,"digest":"a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742","integrity":"sha256-omOU9+3hAMoRjv8u2ghZYnWpg5uVnCJuFUOVV6WoB0I="},"bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2":{"logical_path":"bootstrap/glyphicons-halflings-regular.woff2","mtime":"2016-01-03T15:32:10+08:00","size":18028,"digest":"fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c","integrity":"sha256-/hhdEaSWdokNR7t4MxKgzaWkTEA5IUCU55V7TAQO8Rw="},"application-18504939353a317a186b74ea1cb1d2dbbd4a3666da8d7615b08bb198c6fce527.js":{"logical_path":"application.js","mtime":"2016-01-06T21:30:59+08:00","size":219346,"digest":"18504939353a317a186b74ea1cb1d2dbbd4a3666da8d7615b08bb198c6fce527","integrity":"sha256-GFBJOTU6MXoYa3TqHLHS271KNmbajXYVsIuxmMb85Sc="},"application-74bf64f896810ecc6538542fd61aa95bc3b5defa508a444113dddd1b8af9275d.css":{"logical_path":"application.css","mtime":"2016-01-06T21:30:59+08:00","size":180130,"digest":"74bf64f896810ecc6538542fd61aa95bc3b5defa508a444113dddd1b8af9275d","integrity":"sha256-dL9k+JaBDsxlOFQv1hqpW8O13vpQikRBE93dG4r5J10="},"register-0f641bebcd0ef4698fdee49d1080455aadd6ca2b680fb8759109bc2f34af198f.css":{"logical_path":"register.css","mtime":"2016-01-06T19:27:47+08:00","size":13662,"digest":"0f641bebcd0ef4698fdee49d1080455aadd6ca2b680fb8759109bc2f34af198f","integrity":"sha256-D2Qb680O9GmP3uSdEIBFWq3WyitoD7h1kQm8LzSvGY8="},"application-921ebe033e5acde942c8f3848a8b948a70f8c71230d375391d4534d15e841b30.js":{"logical_path":"application.js","mtime":"2016-01-06T21:30:59+08:00","size":499799,"digest":"921ebe033e5acde942c8f3848a8b948a70f8c71230d375391d4534d15e841b30","integrity":"sha256-kh6+Az5azelCyPOEiouUinD4xxIw03U5HUU00V6EGzA="},"application-7839f0b76d13dd9fd9ee48fc4b019f4c797e3f0ceecaea979fe7d4dcfff3b04b.css":{"logical_path":"application.css","mtime":"2016-01-06T21:30:59+08:00","size":433132,"digest":"7839f0b76d13dd9fd9ee48fc4b019f4c797e3f0ceecaea979fe7d4dcfff3b04b","integrity":"sha256-eDnwt20T3Z/Z7kj8SwGfTHl+PwzuyuqXn+fU3P/zsEs="},"application-d72f8071c3ad36ea735e6faa1f269ececef5a93c06b056ea5cf3d7d786fc67a1.css":{"logical_path":"application.css","mtime":"2016-01-12T23:26:27+08:00","size":428389,"digest":"d72f8071c3ad36ea735e6faa1f269ececef5a93c06b056ea5cf3d7d786fc67a1","integrity":"sha256-1y+AccOtNupzXm+qHyaezs71qTwGsFbqXPPX14b8Z6E="}},"assets":{"register.css":"register-0f641bebcd0ef4698fdee49d1080455aadd6ca2b680fb8759109bc2f34af198f.css","application.js":"application-921ebe033e5acde942c8f3848a8b948a70f8c71230d375391d4534d15e841b30.js","application.css":"application-7839f0b76d13dd9fd9ee48fc4b019f4c797e3f0ceecaea979fe7d4dcfff3b04b.css","button.psd":"button-49174824c7be3811bb7a68f97cdf52a169dec1a48b01776aeffe910c1ec78b4a.psd","markdown-toolbar.png":"markdown-toolbar-abbcae3532db5240aaeba105a93cacef511628076dadd7feeef1f3cc99589150.png","text_blockquote.png":"text_blockquote-e9d34690f04a578ecde83e577be40bab52ed7fa78aa2663a24bd186a15e5a570.png","text_bold.png":"text_bold-2fb65dc04959c59d3fa81e5ae9995b6f58d2aa365ff05b07ddcc9bf127c6cbd8.png","text_code.png":"text_code-4ecb36e97677bc565b597591a4705b0e250e3bd891db0c86c8ea1a7512aef0f9.png","text_delimiter.png":"text_delimiter-176774edd965325446b0fe8c48ec2c61bc5476d1c2569141c8ccad504c7090b8.png","text_empty.png":"text_empty-bdad3b2542cedcc32a7edaa31fd17f2b33765a832d66a5073e6702fd94a80d0e.png","text_heading_1.png":"text_heading_1-f71177b873d9040133d753f35626d311eeab62ff3407c7ed90cc147488a43dbb.png","text_heading_2.png":"text_heading_2-cda9a91b92375375277e030a9b449d27e0330d5466bf0381119ffb21c05b84bd.png","text_heading_3.png":"text_heading_3-8e6b76a35fcd2cfbfa5cb867299dece1eef4075f09a5b0bca83c700f2478769e.png","text_image.png":"text_image-43811f9568bb8d8a7956c688838f094a915d3abc48d993e6da42cb65f72751b9.png","text_italic.png":"text_italic-632c4bd03ddfa7a611a7e6405c7d469e41f6064a0ec3a815fbd0a4ce7a0158a8.png","text_link.png":"text_link-141499059d1ee47d7350fa456dde5f28ad4e1f5f05050bff64f99813aae8cdaf.png","text_list_bullets.png":"text_list_bullets-41a490fcfa80ea7eca38cf066bd45cc0f6783d2e414d82daad66085a2a4c3316.png","text_list_numbers.png":"text_list_numbers-d0d27541ff91c4481851e3909de94d1322673cf84399cccc054c447cdeed7a5f.png","text_strike.png":"text_strike-b6feab281eeded75e2bcd56342da2c73d984da8244bbcbe109143426881ddacb.png","text_underline.png":"text_underline-b97d92487992de02e372fe6b81760ea6a556ede63be8a9f96956a8bafbeac8b0.png","FontAwesome.otf":"FontAwesome-e5d717d2c24e52afc0e139b41d817580583acad2e3c9d725d1bd46f0f7e5cb1b.otf","fontawesome-webfont.eot":"fontawesome-webfont-e07d3b0225ad8e9438927341d63485e01c767edf1e2930b16f0a0bf907ae0d82.eot","fontawesome-webfont.ttf":"fontawesome-webfont-1eb7466293db9378858da3694dd11620ec9c351fb7cefef1a94a3802803e1fa3.ttf","fontawesome-webfont.woff":"fontawesome-webfont-a6fb906942932de53852ee244ee3fec27bca0bf63a96421672aa4784851b8d4b.woff","glyphicons-halflings-regular.eot":"glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot","glyphicons-halflings-regular.svg":"glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg","glyphicons-halflings-regular.ttf":"glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf","glyphicons-halflings-regular.woff":"glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff","glyphicons-halflings-regular.woff2":"glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2","bootstrap/glyphicons-halflings-regular.eot":"bootstrap/glyphicons-halflings-regular-13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407.eot","bootstrap/glyphicons-halflings-regular.svg":"bootstrap/glyphicons-halflings-regular-42f60659d265c1a3c30f9fa42abcbb56bd4a53af4d83d316d6dd7a36903c43e5.svg","bootstrap/glyphicons-halflings-regular.ttf":"bootstrap/glyphicons-halflings-regular-e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456.ttf","bootstrap/glyphicons-halflings-regular.woff":"bootstrap/glyphicons-halflings-regular-a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742.woff","bootstrap/glyphicons-halflings-regular.woff2":"bootstrap/glyphicons-halflings-regular-fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c.woff2"}} \ No newline at end of file