From bcbaa5ba49fb46c01b23386129c7134f452cf4ce Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Sun, 17 May 2009 17:20:09 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=88=A0=E9=99=A4=E4=BA=86=20Shares=20?= =?UTF-8?q?=E8=A1=A8=EF=BC=8C=E5=88=86=E4=BA=AB=E4=B8=8D=E5=AD=98=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E9=87=8C=E9=9D=A2=EF=BC=8C=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E5=8F=96Google=20Reader=E7=9A=8420=E6=9D=A1?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E9=9B=86=E5=90=88=E7=9A=84=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E5=AD=98=20Cache=20=E9=87=8C=E9=9D=A2=EF=BC=9B=202.=20?= =?UTF-8?q?=E5=BD=93=E7=84=B6=EF=BC=8C=E5=B0=B1=E5=8A=A0=E5=85=A5=E4=BA=86?= =?UTF-8?q?=20google=5Freader=5Fid=20=E5=88=B0=20Settings=20=E8=A1=A8?= =?UTF-8?q?=E9=87=8C=E9=9D=A2=EF=BC=9B=203.=20=E5=8E=BB=E9=99=A4=E4=BA=86?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E6=89=80=E6=9C=89=20Shares=20=E8=A1=A8?= =?UTF-8?q?=E7=94=B1=20scaffold=20=E7=94=9F=E6=88=90=E7=9A=84=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=9B=204.=20=E5=90=8E=E9=9D=A2=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=87=8C=E9=9D=A2=E5=8A=A0=E5=85=A5=20google=5Freader=5Fid=20?= =?UTF-8?q?=E7=9A=84=E9=A1=B9=EF=BC=9B=205.=20HomeController=20=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=20share=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=B9=B6=E4=B8=94share=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=9B=AE=E5=89=8D=E5=B7=B2=E5=AE=8C=E6=88=90=EF=BC=9B?= =?UTF-8?q?=206.=20lib/string=20=E9=87=8C=E9=9D=A2=E5=8A=A0=E5=85=A5=20rem?= =?UTF-8?q?ove=5Fhtml=5Ftag=20=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=B8=85=E9=99=A4=E6=89=80=E6=9C=89HTML?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=EF=BC=9B=207.=20lib/string=20=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E5=8A=A0=E5=92=8C=20html=5Fdecode=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=8F=8D=E8=A7=A3=20html?= =?UTF-8?q?=5Fencode=20=E6=A0=BC=E5=BC=8F=E5=8C=96=E7=9A=84=E5=86=85?= =?UTF-8?q?=E5=AE=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/home_controller.rb | 7 + app/controllers/shares_controller.rb | 85 ----- app/helpers/application_helper.rb | 2 + app/helpers/blogs_helper.rb | 2 - app/helpers/shares_helper.rb | 2 - app/models/setting.rb | 1 + app/models/share.rb | 32 ++ app/views/cpanel/settings/index.html.erb | 4 + app/views/shares/edit.html.erb | 32 -- app/views/shares/index.html.erb | 28 -- app/views/shares/new.html.erb | 31 -- app/views/shares/show.html.erb | 28 -- config/routes.rb | 5 +- db/development.sqlite3 | Bin 82944 -> 139264 bytes db/schema.rb | 13 +- lib/string.rb | 9 + personlab.tmproj | 359 +--------------------- public/about.html | 66 ++-- public/projects.html | 150 --------- test/fixtures/shares.yml | 1 - test/functional/shares_controller_test.rb | 5 - test/unit/share_test.rb | 8 - 22 files changed, 91 insertions(+), 779 deletions(-) delete mode 100644 app/controllers/shares_controller.rb delete mode 100644 app/helpers/blogs_helper.rb delete mode 100644 app/helpers/shares_helper.rb delete mode 100644 app/views/shares/edit.html.erb delete mode 100644 app/views/shares/index.html.erb delete mode 100644 app/views/shares/new.html.erb delete mode 100644 app/views/shares/show.html.erb delete mode 100644 public/projects.html delete mode 100644 test/fixtures/shares.yml delete mode 100644 test/functional/shares_controller_test.rb delete mode 100644 test/unit/share_test.rb diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 896311d..501e26c 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -27,4 +27,11 @@ def show set_nav_actived(@page.slug) render :file => "pages/show", :layout => "application" end + + def share + set_nav_actived("share") + set_seo_meta("Google Reader 分享") + @api_url = Share.api_url(@setting) + @shares = Share.find_all(@setting) + end end diff --git a/app/controllers/shares_controller.rb b/app/controllers/shares_controller.rb deleted file mode 100644 index ada5059..0000000 --- a/app/controllers/shares_controller.rb +++ /dev/null @@ -1,85 +0,0 @@ -class SharesController < ApplicationController - # GET /shares - # GET /shares.xml - def index - @shares = Share.all - - respond_to do |format| - format.html # index.html.erb - format.xml { render :xml => @shares } - end - end - - # GET /shares/1 - # GET /shares/1.xml - def show - @share = Share.find(params[:id]) - - respond_to do |format| - format.html # show.html.erb - format.xml { render :xml => @share } - end - end - - # GET /shares/new - # GET /shares/new.xml - def new - @share = Share.new - - respond_to do |format| - format.html # new.html.erb - format.xml { render :xml => @share } - end - end - - # GET /shares/1/edit - def edit - @share = Share.find(params[:id]) - end - - # POST /shares - # POST /shares.xml - def create - @share = Share.new(params[:share]) - - respond_to do |format| - if @share.save - flash[:notice] = 'Share was successfully created.' - format.html { redirect_to(@share) } - format.xml { render :xml => @share, :status => :created, :location => @share } - else - format.html { render :action => "new" } - format.xml { render :xml => @share.errors, :status => :unprocessable_entity } - end - end - end - - # PUT /shares/1 - # PUT /shares/1.xml - def update - @share = Share.find(params[:id]) - - respond_to do |format| - if @share.update_attributes(params[:share]) - flash[:notice] = 'Share was successfully updated.' - format.html { redirect_to(@share) } - format.xml { head :ok } - else - format.html { render :action => "edit" } - format.xml { render :xml => @share.errors, :status => :unprocessable_entity } - end - end - end - - # DELETE /shares/1 - # DELETE /shares/1.xml - def destroy - @share = Share.find(params[:id]) - @share.destroy - - respond_to do |format| - format.html { redirect_to(shares_url) } - format.xml { head :ok } - end - end -end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4a306f3..6b70874 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -13,4 +13,6 @@ def success_messages '' end end + + end \ No newline at end of file diff --git a/app/helpers/blogs_helper.rb b/app/helpers/blogs_helper.rb deleted file mode 100644 index cc0dbd2..0000000 --- a/app/helpers/blogs_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module BlogsHelper -end diff --git a/app/helpers/shares_helper.rb b/app/helpers/shares_helper.rb deleted file mode 100644 index e51aa8b..0000000 --- a/app/helpers/shares_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module SharesHelper -end diff --git a/app/models/setting.rb b/app/models/setting.rb index 68610cc..9715461 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -9,6 +9,7 @@ def self.find_create :email => "huacnlee@gmail.com", :meta_description => "我是一个Web开发人员,.NET,Python,Ruby,PHP,Javascrip等都有在用,我是做互联网开发的,这是一个用于介绍我自已的网站.", :fanfou_id => "huacn", + :google_reader_id => "08982619185204047523", :home_show => '
diff --git a/app/models/share.rb b/app/models/share.rb index 9fb2c82..8fb6612 100644 --- a/app/models/share.rb +++ b/app/models/share.rb @@ -1,2 +1,34 @@ +require "rubygems" +require 'simple-rss' +require 'open-uri' +require "lib/string" + class Share < ActiveRecord::Base + + def self.api_url(setting) + "http://www.google.com/reader/public/atom/user%2F#{setting.google_reader_id}%2Fstate%2Fcom.google%2Fbroadcast" + end + + def self.find_all(setting) + @expire_minutes = 1.days.minutes + cache_key = "data/shares" + feeds = Rails.cache.read(cache_key) + if not feeds + feeds = [] + feed = SimpleRSS::parse open(api_url(setting)) + if feed != nil + feed.items.each do |item| + feeds << { + "title" => item.title, + "link" => item.link, + "content" => item.content == nil ? item.summary.html_decode.remove_html_tag()[0..500] + '...' : item.content.html_decode.remove_html_tag()[0..500] + '...', + "updated_at" => item.updated, + "author" => item.author, + } + end + end + Rails.cache.write(cache_key,feeds,:expires_in => @expire_minutes) + end + feeds + end end diff --git a/app/views/cpanel/settings/index.html.erb b/app/views/cpanel/settings/index.html.erb index 56f1266..5f33523 100644 --- a/app/views/cpanel/settings/index.html.erb +++ b/app/views/cpanel/settings/index.html.erb @@ -23,6 +23,10 @@ 饭否ID <%= f.text_field :fanfou_id, :class => "text middle" %> + + Google Reader + http://www.google.com/reader/shared/<%= f.text_field :google_reader_id, :class => "text short" %> + Meta Keywords <%= f.text_field :meta_keywords, :class => "text long" %> diff --git a/app/views/shares/edit.html.erb b/app/views/shares/edit.html.erb deleted file mode 100644 index ec9fdbf..0000000 --- a/app/views/shares/edit.html.erb +++ /dev/null @@ -1,32 +0,0 @@ -

Editing share

- -<% form_for(@share) do |f| %> - <%= f.error_messages %> - -

- <%= f.label :title %>
- <%= f.text_field :title %> -

-

- <%= f.label :summary %>
- <%= f.text_field :summary %> -

-

- <%= f.label :from %>
- <%= f.text_field :from %> -

-

- <%= f.label :cover %>
- <%= f.text_field :cover %> -

-

- <%= f.label :url %>
- <%= f.text_field :url %> -

-

- <%= f.submit 'Update' %> -

-<% end %> - -<%= link_to 'Show', @share %> | -<%= link_to 'Back', shares_path %> \ No newline at end of file diff --git a/app/views/shares/index.html.erb b/app/views/shares/index.html.erb deleted file mode 100644 index 0ff1fb3..0000000 --- a/app/views/shares/index.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -

Listing shares

- - - - - - - - - - -<% @shares.each do |share| %> - - - - - - - - - - -<% end %> -
TitleSummaryFromCoverUrl
<%=h share.title %><%=h share.summary %><%=h share.from %><%=h share.cover %><%=h share.url %><%= link_to 'Show', share %><%= link_to 'Edit', edit_share_path(share) %><%= link_to 'Destroy', share, :confirm => 'Are you sure?', :method => :delete %>
- -
- -<%= link_to 'New share', new_share_path %> \ No newline at end of file diff --git a/app/views/shares/new.html.erb b/app/views/shares/new.html.erb deleted file mode 100644 index d148e8b..0000000 --- a/app/views/shares/new.html.erb +++ /dev/null @@ -1,31 +0,0 @@ -

New share

- -<% form_for(@share) do |f| %> - <%= f.error_messages %> - -

- <%= f.label :title %>
- <%= f.text_field :title %> -

-

- <%= f.label :summary %>
- <%= f.text_field :summary %> -

-

- <%= f.label :from %>
- <%= f.text_field :from %> -

-

- <%= f.label :cover %>
- <%= f.text_field :cover %> -

-

- <%= f.label :url %>
- <%= f.text_field :url %> -

-

- <%= f.submit 'Create' %> -

-<% end %> - -<%= link_to 'Back', shares_path %> \ No newline at end of file diff --git a/app/views/shares/show.html.erb b/app/views/shares/show.html.erb deleted file mode 100644 index 98cbc25..0000000 --- a/app/views/shares/show.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -

- Title: - <%=h @share.title %> -

- -

- Summary: - <%=h @share.summary %> -

- -

- From: - <%=h @share.from %> -

- -

- Cover: - <%=h @share.cover %> -

- -

- Url: - <%=h @share.url %> -

- - -<%= link_to 'Edit', edit_share_path(@share) %> | -<%= link_to 'Back', shares_path %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 998bcbb..9dd0f40 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,8 +12,7 @@ end # Share - map.resources :controller => "shares", :as => "share" - + # Blog map.purchase "blog", :controller => "posts" map.purchase "blog", :controller => "posts", :action => "index" @@ -21,6 +20,8 @@ map.purchase "blog/page/:page", :controller => "posts", :action => "index", :requirements => { :page => /[\d]+/ } map.purchase "blog/:slug", :controller => "posts", :action => "show", :requirements => { :slug => /[a-z0-9A-Z\-\_\.]+/ } + map.purchase "share", :controller => "home", :action => "share" + # Pages (This well be stay last line) map.purchase ":slug", :controller => "home", :action => "show", :requirements => { :slug => /[a-z0-9A-Z\-\_\.]+/ } diff --git a/db/development.sqlite3 b/db/development.sqlite3 index 25ba0a9db7efa34e5b5b2f4cc4acac32eff46f6d..456536e885716542a58fe62fdb344750bb26bb0c 100644 GIT binary patch literal 139264 zcmeFad2rQNmggxUJDs+ZN@rDPd$O}V`AfOVhD>cw8z2l$jIonUu$_Q&iJUCOlk_A# zBfY153z*E#4hay5MG_dyjscs^*a$Efgv2u45feQzHPbN>J%4mebazZt>G$+B(K8u6 zG0_t-{m0Dbd++b}dyB;4wOm!mSbFcb+~wSR&pr2??>T4n&sIcJ5vM(#=nkixx{`-V zN=r+A(Z|eg6M0|CiZI=67k{=evGG|Ji=L>njg# zKA^w@3VcBnnEee3e)Q}7`ufAO`Tea~|GK2?|1A4=W&cCjXxZtqy=5EAddmK?Y(-g9 z*_^U}T=vkc|7+I&#v>1Y9#G&bPJt)BHEV8dP0fOuhS0p4#`?yZ#wVW0zY?km)j#pg zyeoC}jrH@N_!Iw1O>NEmP+e`^6SIRWq0qcgeQoH8Z{%GG)i0>2d*X5LN_}WPwbj>gpOoPkb%7QWt7ysIRYm z;^BfTwGH)8Jd}T>o;RN;E4UJ>Z+v1_!IhfYc~6w)U#YDRg&t!>zcuS-N!kBV_P>_> ztFkL)C(4G(eqYvE_IlY1Wz}W>wCvGY|9RHm%=({sJoY$GJ*K_=sYm%WU$TDXBmDYDTJPU_h+luEqx?5Z zXP5ooB@dU4m6T1D{fDxDQ}*ANjq&Bd&jSiPpukt00^j&r*;A#h@$T+OER}rq(TB^P zEbWOWQ_0znKEy|^rjvj2Xc-^V$w(qu`sge@5blU1b^8BCX|gk%h$PMaUt0EG)YqTc zKVR`~KWN?q3Ot~|=R|=&XaE06$wRaL>Y=h*WsjEqVb)*G`m4{W=m*6-pum?#0VeU% zvgiKf>m}d$PHA1;H{F3P6JsA#n=Q^L2r6qDDns*}n#QJvhNgyE=?wBNH8$1Ov_JpI z*Gs-<-|oLWF*cML*j*iNiKkN~_UZb{(0nJ<&{Q|SsiDrlR9owW8k_2Bo9gGc)7iRj zKdI_}5l^hGUeB*q|GD7R+ThjD{F0LAAE(7n&El1*6W1pXk5u<0;%`J+Q)N^Bi(UoP z*_M#9X#ZYyj$JU74Im^`frCC)x6sIO`+iJnvfF;HSw>uuD!h} z)F}P`!zJG?DH|*+EBW@UOQq+zu<6@nk39M0lcif8O@&*!B1Wt*zaCn;YT1%C%bYb! zURbfrDL2>3ojK*vwsL3rD{Gd$ylj>8+N$L%m#q4g^V4O&a+bWl=GEn|@Y2dtlF0YG5);G7t(=nd*3wv?dOG{o~vBs$> zDAo#L_w{UdBo%I68`;40Xrqz&1fV76Zd)YTnuzwKqVZVa19LZ)K5WKiQ`nA+q&Xwf zeXVF*bmQ;mxXgX+p|3sp!ylIZ%1|Kr+b*ov&B@4b(~($fr0DCz1ym`zIVToo@Og7? z-y^dgd2&&8Xx%8j9q!3uRvMufMYVXRj|~{=c~F zmrSNRyk73S`ifINtq_gUI^=T=_T1l=KJsKW4f&Ss+&x<`tDu8-FT7x?1+#bV?9#I( zvr2ZClE@rB z`Qjgl{lAYF634&%smP=4u31~1zZ>LjXyJ6KGhWoqVDz8@yd-*;i8YNJyz*sibIhxf zfmFPw$*HNTjdU+`dctjO(O5@iOFWf|ck6OUms{gq@kEpJ^n#H7TUfrhy4oGy_gppG zPi*n*$DY$)r?o4bOfD)LD_ z)X<8hVR&THYev=IRx4hPq`W4~DQZFjQqoWTY5r|Gj*wCKt+_3pM!=f!;%BB(O-;D2 zt{o~_Ijy>_Mskti}ixhnE8d{lTh&%6m=QFptaDF+HAAT5` zI`MHZ&x&T+SF+gy$EOaS%xvq;9NCuN^a6T+b(VT17XbCI zC@EP{`s}Q4^5rx9^!@VDN1lB8>C%ns%~8x8m)av;UGepKAHPv}Aj`Y+sm^5gI9J{6 z$o5H2nSGJRtmbX5>6$UAnqPlX*d252Q*|VLceO;%dd{8s+QR(9<=tQXME!i~@kgHg z_P0wnK4tou3U{DR?MOaR*h^jdRGpmOP$>xRUt=OQ$j?5*41MrwF$J{$mzEtX;opOw z2NZZffv*+?noA!kd2;2mb#>vkZq&prEejgwHMWEowAa-wXbaD;Yi$VCw$HD@|DbL` zeZvwx6h+?@Mg+)SMqG7 zo~=y9D|xmu-Bam5`&`fBPg3;rPJ_b?Nv9&o=bcbZ?(@ocBJ%um)jd+>cGfNqo_a3q zbS5J0i^`vFsPtYecT(X*MhR*{s(G0rdKUj8980Nh ziFC{fJMH0Qs=`4ItORlvPbXT@ct#SK1>|>%@)HAFD@sKSwz1Un&hpf=NhcCcZfNpa z)U((=UDXzEO=I^-RVL!`l(WbwuSO!OUcY{QwS6F|&sC8(!`(eyk*av2quN+UtIHk7 ztFWpE3l4AA)zs8D^dEyO+UY9v*3pg_*XQtLc~xhs8(saPXF5^~F;z$2OjVmJ72M=* z>P>7w`8RvI!qHf{?v_`*(SzaIyBY094PO05Po%@U*%K?iX|6bPgO2(G>#UDFKQIC@j=s%|WKY4Ke{~Q0;jhDz9hp z-}LsHf7|H~$g02T-Qf-#b_ce*!`Iy5{qDd;I-L3N-R$ilckJ}!i4k|?9e3;4#B~A3 zCdNM$Io{oz*>~`dH+D{3Kb9RCow&Zk-8Pu*y_~&uox6YCd&Iqc+}*wXuX~TWyY#$! z@|=6}ke(kuH8DDtJ>BPSJ)SvoOfT*l%4{2)xN!)h5>IANZ<##2&wXpBd-IaJXOLGW zKRD(dIcr-uabvrCW`}$6Qg-Bh+nCIU@45SqP&ohorgvjz|MBd|*yODt_wdc^?E{$u z7c%=#WsZDEIhiB9+1tBm&(!{LxBv3g{o2+_fL%Wx+7QJ;Q{+W zZ*A+P&F;xFT%X!>Gka#6du#vX&_y-r`sJyk@4DySnz*^g9otJ?6Qj2>=TA+JU&(H} z$h+>XfvH2cGMg@EFP(5V4gXDVj^Nqb2Pe-APLAE47~O7u?|^8N<9pm)10t6x6Y7a9 z6g%EKaeW|j{2I6Zc;m48bz~c}(-PCtK_u-vq<4qUnU-Lr`;cw|_hSY_4c%h6M>l3K zj8ATRUtRm?1Z`uu-JxTdqo>@FLlZX#-N7ro?)IOZ+_i~UvS+qTZ5{gS-o5;rI(;xR zdVz~{By(U0(lK);_a4e_y_~&pCBJv{rCjK5~|^<}KEarpNWm?%3$W z*cMIQ(;GAI9ASD)j1EoQU|kHlyLM_mTsX>IR=qpSv^?crJes}mHj8Cq>~QAVrO7KF z{7r8kAF_LnW(M|AI1|+!+L7IUiFb8<+efx`O}~MC+1~yciW=Q9_0f^+w#$0u;uV?^ zyu|{C&t!&oQSu*eFkO$UN&UCocXnj2UUp9&b5Gq=R*Iv;BThC40KB0GaopuKf z!adx94`67T^SkzF9gS__?(~rgEtob^p#__s<@EDlq|BgyHAX7L`MG)8yycY|xo9@o`p3$6;l zv&uWPCR@En#clnQY!X>vCI(9+2Y!mhmvVDF=E!THPc7lrwH*l%#%-0BEu*=K0i}Ya zr}E#dsrd_pk|kY0%+ehw5jfXzT3*Lf0;W3gc4yVH)oa?*T@Hn%)MSd_^td+CwLxdZ z7S7x0_V#FNlvm7|yE`1);Dmd6x}vQX-CChic}XvZomjfNh0{3&uMclXstCX9Xe_9m ztNbNkRDQi2Dg}Bs=gwrri5moSlEZ0hSGq0YALeP~r|Lawg|6rwUq$VeiiW$U6Rk;V zg+#ooE0TDwx+^O3f2v}VP&M5ZPRuma=o0wJue%ZH5-HNc<33BhpQO5`1Tg4mA|efm zkBPf$-K^{H+Wo($WLD3t{McTfdC5O0;O`OzV&AKK*|5FPU4CG6GvAf=Di926Yn)Jh zQ*A?2z2|0AUzvBQWXHn~KVI^~%Dr)_n^l_G)Stb5EfBYU8;x~GD?206%4BD>a((!| zS!-R<$#6+R%)m0+#T+AQYY=)kP3fqH40rPV%*DMD(MGo;^C6jK#*Sof-7-?qZpnft z&qx-$IP6}##(5@lb*H=i?BvnjprMk?{6iF?74lqm*HL%yi2bbBFP*TTC(rh}r?$Go zCo{e0tQ^L>lVeZciS$!I12}{a4-IgV~R-sTIu7 zYRytwZEZRPR6Y&z8jslo^O{Tm2I;sP{OW6gP^@HnsTB^)TwgEX#u($ zjX9ofS-YBPo~LWocHAEANLyDC(>}XDsxPfTqfI6LJMq?_sy6s_E5@1)s!#nzx!xj` zE=~6yPssl&YMz-Bkk|JVOR}d~vq5$4xoS3m#D?k=%J;R^=*)v>I0D7mr;n^v$v55M zc@6m79C2QvWoqbin3>S(ES{m~$qlho_)T^{`-B-My}|(uy*$w-{dc9`R>up=@C1k4 z`|G0g-&Be%f=>s-yddkELbYEnn?37|lCPJb3TP~Oue7oBU(b4K z)_*8_wd_FIfxGQrYaimo@Kk8Q_q1uO;&h*UDI81aZ+kfQqYkO(blmoi;WEnjH>+A> zFUR9;&KvQT?+1H^ckG|vR8Kf2xn>5M0A1>P;%n6QWL+q&+FoMb;@$;aEpIYRzd)(v2$J@iY)R@uMRg9Yk}Wc#+XLPJvf_7;y4atkOE;!BQU0V4l&HA(NefKFfi_JQm z{86|n%t(ZjZK^$->}ca-PT`_=Yn$qr4#6=#@6t~n*D!zkNmHD8x1%ko_rrccGZdER zVQaVkTI+PHji&VJXMgy-+7|hYKLzxt!G(pQ>See;-HGAc}yKDa+Z=kq2;O^Wfnc?;a?%Uh{c%!eNLgX9PRIz-cOD{j8 zc`#LU!oIDO9~}4UX{eOPZ(UPE4L-`Yo`Oq^%C{52 z;p_{rw9d!Q>X~l^juQgR!Ey^vz$)wA&>6U=@XlAqHcKmwfx1#s2gYS{nythr9Er(m zGf8jeVEAos?TBLLEwAe7>@j~6E&B7%&1cTQ<<4Aobo@(gIqI$Vs=4afoaZ{upZ|Ex zn%90^E_PJ@8)uQFRc*diyWIIbwq}oZ?CiubrN<@STiWIiXNJDBV z>;K7_AskEd#;tG^3%~h_ou0*O7?f_w&N;vVx-7n;rI(bt0qNUsvXQp@9T~>piGjgP zsd8SI%EhrvkJq{>Dhjtl-IZXNj4}psyazp;S%yY|wL#@e-Q&%KXgkU*Uq! zTEQfgUuq)S)+U5S!imN6P5_@|ZRM}byrtz8;o(gla6vfZSCk9pSeN+3`iSK)C_#bF ztcxa6=`bow3s+j-83n{;CXnW=7)VkZnm4sT)mRa;J(^${*q18uxt!(IsA<73`SXy2 zTNl_JAU&vLO|5a3YrqNDNObk<7b*xo8u#1i^G)e(!_ExNYe`4DQt*`N+!AOIfihVC z|JCQRaRu$Q%oZJSq{VMG9k5U)t!NHyW>L(qF-taBo`QmD>vK?oOIK~r_l8JG7@NRz zaYJ#55f1W0P@^^p4TTXSbf?N&{$fZT8gkoemviqHU0!62x`@*0F)4V=?v8FFkA&B&NV{E9zNJvTTL9 z(OrSMrE5clrX2)miPElCRpWQogUitJkn~rTc03+hDR>x9i&5Mb2jzEI)g3NqkT?R38=4@SX~A7fZ&B(50@m9 zX*Qsa9Og0HWw%)m_;1FpI+AK7{zf!a)fT8Lf+{qIQ4akOwLlwl&-4D8G+keIgE>;f*m0PSRL90=_=Cqe*qWP=l%BS) z7WLFVAM|&P4yN%QDWDkB+y;Bcm*YL&yWlT#xXyq)PlxWPhGYGI2f7OW7-{q8fw!J~ z(bBGyIqD7SxO~CO2vw|ZGxM~7^QRE;qw$!d?qBKO|g=C8}Dp zi5zN7d~J@Fe-2Bsnlq;|q|CG5t?Qy09@yY&GmH*hh1`RI0uJuL2ga6@(YpnkgYkR(<3H1}%AmM;khQBWhTmPkPSw&DeA(Sa-xKNa!@KxIu1D%Z(={#;>UdW0#pYU$;^R0tP3j7Ts<4A z3e6L~x_=XG=DT~nKUCEa`U`#AehN#&y!lo0>g^L|I&XD{#v5u?>*#rr!XHHN*mN^% zss|IkAXGK4Ay@E`-iezam&fYrs~YDArD--5Ss7{?0y~xsAPPLA2A{z1l^Fa_$-xr+ z`%3)`{Wp*PNl9PX>xUJSwUk_gIhqW4LvQD2K4WrlN`Ms^Q_l7Jss#%yQR+jD^XEre zYAQpa`Lcf0wpKQ_wANMD)P%zGYv$LqH_U4VYvS(QKQZEn+sz8t*11~#h`PS6otM1+r%QD@!2}$d%Ogp*U zk@wtD%@50N-F{ZW-56~!-HVo4ur?@x*<&e?|FBF#vTa?@9N+40-J&bfcY(rxv<{C-^q!1u4IrrQt+ku8T9l$@f{0V0R|QZ@TYY1Zz*{ zeTH|)!_5ShPA6?<=q&JNm}cpaJC`_a_7vzQ}2Il|wKAP~ZZWto}t@3}XI-4T%P zyM&eBHKc+*{195Z*EJVcr(^ELEtax0-xlSLo@Numr^3Cso5>1)T*yqi+yq&YjAIN>y@eAL&h876w#k8HRx~V z?JLIQulVHZdL!90UHRbYLOyMQc}f#hXhPNPJ)84prd!U+ zXe)Bz2JDvINyl<2xBte{Wv@Cv!L*6CDdwzh?Oc!A?{~~^%iIH!St4n2j~~QsNWM_J z54hJ(L3HbN!EcBz_PuW_^9(-Z?%d+y|8#pidto<^G14#+mH`7VN3qj#TghIyCMopl z#|2Z*nXys9_)=9c^b_N(|L>o@&CSV8=Rsqtnj>dlz>fJsI;mF>wuUbTpBx_HePcwoG=FQVh-=REjynv;rHh|ZeLBr+WvcuyY zbj=^ymf8OHBuzKmXKL$Cnr_)Q(j=>ZsmlVL+B(dW6E_Y_p6Ru?2r;k2wpOefJ->@iv94(k72&_fxnb(vt!5D& zp6c75*>X!AKfuvt0Jl2i> z3G@fY*^)&QkW%}PXD+{;*}gq<7_NB84z9>za4&Mv9F*sw@2t2zpVv){4|#)fqZcR1 zeEI|@TFDfn=Q78KiOBCUe9*v|9fKa9*Ax)98`K^(BHu$qM)%^O%;w>V>)X`W0Jpn3 zm531Cf#Yl{_p$|hxuZB+9?p(jbZ@@x`5YSeGc&K=)1>9d_!jJ)MsBn_BkUAEQYH@@ znAckCRJPAJqnZZOIKq!=@*6)!%0YaYJil9K>>*^AO_Zq}dFMVmZCL-`Yi!K-UAVKC zExr?Z*u&4m&(_3>C>Vs#)yLKwJ?m%d4Zs6m+xzsj^@vyGZ|hOO%+x(`WF9AkKQX6S&sYctFq-IoW~-+L@`Wn6&I8`@Z43^1qcnYY0D^L2997V9x> z`-O(UIxhz*P_q%j9lS9Kc6I9p&eCU3cL(=LuQGZX4+gk`WtrOFNsXZml=c5KJ_nW? z*}KU0nagM4ABZEC578L#sB%q!o$Nc3>3z%HgSWMIp5XfAN4MOY@55atO{emiF5B$H z_*`IzySk;A?vG6l(%#KSH~19fFnHQ$X+{&5=>joz&^;N z-yD_X5r5ddHsapc$N&ZXw;~M9)l4uOBZyUM@u+5|0d6BxqsORGG7Bn__uk2VtRrQh zk<0AdX0PK_Z68Ayf{JAF{i}*jASAQ)Ra+(xpxT-oAE1_C3b{Ama<36-!IzsZ_DRNh z8|A6ggZaW89ppuyy$@@6*-7(eh#_ymO8vVd>jZser?m1yni)KoVewuH%FXWmS) zf-F;X&p8{814X6Ev@6Wq&5nKGp4>cf^X-iEe-D@Rm+q`u z%k}ngX|Lad_Xsatk=c78v(pD(qq?hgY8H_As7c2`o5LyZ(#p9M^JlY75Q0Z21BDoh zX3ZOT0BnnB9TzskWpdDHQ(QeD{~Rn;R=|xPNl??14uqr_6*#SnhEB>mpt89{G|0pau69kD1RtY7(2f+>(J&H0d>qhcS5Ic#O6q-hn_F>A z5m+PtXA#)0bVRSOp$WxLs)_PJ0wMN&6T2!-LleRbgXpl(VfhzRXq6AC1JhydVjgRY zJqx7H-goAh7-Ggo7IBv3+?*oq9}Hm)f= znF}jp>^eG|j2v<=Np~S}J+Lr2ER354=ckp4w z+GsylW1P2UyTzU+^0n1ylkGV)pFUH2#3O|NK? zH@oa#l$4f!Si-*tKVNYQ?0l^B(UR{yxnH6Jhcug{(&VV@tgm7jDi~Y#V+9@4Hu3|< zJwvFh!6tAGLmWA$PK-Hof|yBcH#~6t%G9mRKn&{5H^X?EC`h5O91JoXE>x0A&uk}F zmN9T`KWs~%7~RJE6Ju{>`}U$+)VX08w8rq%InKL0L-8D+{M%Ohn0e=F=AF%x=l8h- zZ(*vI0`x4Q0{9R2+R`WgPhG(?cou?9zaVRd&l8aY#h-sPw%Cx z9OT^oE7_~>@vQ7$@WA7HIVRa>z{eY*!6TyWq_c9hv-)Q%RvR#}s@QuL3Nc@m&*S;; zJT;psVRMLjDMXXr{*Mc$aVkV+4tcppWdWBG*bKk&`6Qy&dtmYo_uFlTiN;n8^kR7-aR%>!O_2}AIgnVwRB_D(rc| zo?ShAr)ecRe;Y$VI4R>Rn%{>CE4$cUBI3xm*F0pqmH%iJx&t=D3i`-CXvyQfcl{Wz zO1tZmY3gu)_TW%3VX6#miTB_cRx^ihSxXZ_7$~E8H4|gEE#v`efLP&J!VyY-t-;)P zhc?oCs7966c47y?$B^|b_NK3y19o~sJ=+l8gkl!m;4RPVw~1kB7czBXFGUYR*G^@& zozLF<(3Y(kt|)%8^s8ZG!fU_R60sr}%?hlE_FB z`}xgft;{d}$KZd;)|T+^!OsH)EK|P*HuN(3L2}*!np) zf{tXDQjA7xZyq}14qWAmxF-tm6Vmht=YQorCx7@n{`oqyyi0WVhc-?okvgZrD*W@U zE&Ig?;o_q4bW&T&e&8tAv4-dzZ4ShDe8wKLt4%a?BD6jnsDLUP<|M1Q3RCl8OhTXs%wTmH>EP|#L%*A}%i&DSQ(X!c;ak0*oa2HBL_ zHZS=>@%(?uyz8~^4o&dN585!p^diPUI2mTGRN-dYLEH&VEq~4x&864Ovv(p%!QJT% zV*Ni>l;iilvg@XMj8ALQ{`GSF=6z}Q9gh{e!8~i8$zA@;sba$obq!$wj?lb%+Lo_) z`rSG|{ceS@6Uho|pYpOMuZ?U#d)?-Ef18c+yYO4Hd9<>f7zhPV<*t8bq6TA+^Seh> zd<~Sp_}9PrePPaEd)d4Dx1QbDC#~}bavK*ml%-=V8Q$NoL~>&guAJ9DcHAuot&+kc zwp1%94~^Q=n;2hg^I8ATDo8iHU8Y#0>HkHf#p+vRz}|hJLi&#itIDX5ilYLxN5xOb z;jO@UJ?Kr)6LEmoDR1vtou4TQ70z_UOoepbel0v}z^ywb#|L@G=zxVnwVI-;e5g@0 z)*e?dM+Pb*Z5KGr;_cwkN%01rBjtPg(nDL9u4nGsTAS?_X37 zzi-y=iB=zvyTD*zHdOset_8j5v*&;}XGh+hI?!*oOn2}QDFkd=^BOzDBZUlFr8l=k zJAww&VzTVCB#L^yOaa!L{OutZfUKzRCJuWu;i4j4L5V&Ig1>nLHgcM2b+J%Jl(+VH zx}evENr8N6$6`q=6{b!RUF-DpP20O(*!4h6^s2hsW|_i)n4kx_=GT z;|{Iys|uPkBc%DwC~nTCIqB;8H8t~tNnr_*J$P&K(q+#N!jqwjeY^9fw2|v)dS_-4 z(N>;o;0)3QqIZ=f`Kol%+W!xilpHRN&U&=$p)x5IzZyS%KdrMi?TvLDm>wq%N}|pD zs#H{=4S0;Vr@&iBut)#EQH<`cbr`ofTS&fAcon?LBg;0Rm;{-;)|o@NA4Ljs>Z|Ii zY81o6gvv0A@H@QyYC5Hz+99w&WW7QgwBdM;O*@(wPQnivXsoL8t3=US>}sh?eNWZf z-t_%~-aNJ%`+MR`(IW*1L68!(FEqapLEvBNdvm_p7h1G&0qy&mF%(SaD4sFV%Ipev z4!pJM zdJZ>|cd4&r0S9xs{?kv>`c8yIKayoou`aRHYs_&xcjCA!>yU#5 z;TTfsmT6~_nRfuo@^F;aD^_tZo$D6fz60;|tEGMZxwkQNmve7xtg4IXI#uo6)ruby z9G~uW!c<5eUYg!Y|Hd8Kr^?#9@1e~IuZ_oh!o^#aMG-(MEXz2QA{sHDJmbUgb|w?L z{5ij{@6Ii1*nPcnhbFK0niCAU4A+Vu>uZXvrHE+WHG%O+6B&$* zR!)*{{O2t?<@Uo*C^bo9@_WT!i8pGjIbP+O`~AvF=Oru4IWH|+_9CWCoHH#mlPr8@ zhf`T;`&A$WYB~H4GO+2IF~$F%~SWyoZ+>qtcG7k(2O%0ax>sQ}n0?xo}V#OL0=C|}qyoL`NZ*RxRm z0^k#|Y#gRe9cU<%-f^lQS6EypccLnSo`T4Y?PYdzW%=^e!Cgw29N&}~+L;-~4ax%= z+q<;NT5Dyy!$`Yp3v3qm58uR$k#)tAm9IJ0zGdH$G10hY&{%6P_FFnW%<7V5(mZPUb(7narBvUXQ>5?dCV)POQ) z2|;b{0()i~Pz|0{+M32M;PL0#t#xz~mRWwb?!}v)7ZzTJwzZ}#+fFdtnchCtL>B}}&GZ{HmncdSARGJ2A&2xKn5SAaR_zXm-$JOO7w12wRv(6#Kro0yWbeLJx& z>X2$M3-*-D-HDr9gj3o!$UxYdkYfa}=3r~eVJ2!K4<5Hw-~-H)6vZ3|0AwH!7;g9X zXNU=4=9X>;!)$E-{(QtC067I`q^&p^XFfck;e2NY&)e6%aXoQe##qxzZwjmC9hdOn z;c!WkvRuz-<`xVCTB+tyZ~rHfcAX-CC;~tZe%hcM4fO<;s+asft8{fq>1r|n{=eb| z|A2me^q? z>3ih$zW+{1E=o%SYyG_Xz&vk_^71PsOCaEr={~;JueUDT-quYJ<=Pq2ka5 zCR{;H=HMaF|M!eoU_k^-_@HIhO#jCl1J=X$k2kgfS(%Oz0O^B)KL}jF%vB;lgO2cg zgm2xFANOc4%Lk4MzTX`jHqP^Tb>YDN5q&mDo2?I zql7t4ez?~X3Xfbx=;*yMIfi4#SRSc)-X>}Tp@m(xfCVcEPO!mQhW`ezYcc8Kzyv#epM?w8r;~T`5Nq$hKJfEL z9xwUn>lbtwDJ^Y@fToT#CzUI@Egnhw2wZ`Iy?4X#Ib!&hy;}`dk<4UTWuyafA4T^Th%dwM!q`Tr_EF+2aCj zjIGXGN-nb1g+2u}z4P{HKMbYFp~Tjp6qZGOG?)6m^_;C$0Dw=bVNss<7vp$xEHwec zoz*sL`YI0A5$Cl?f{bo*&v-S)IfmF%;Q~U`GKI*(kWY8-l9sxk?J~1*vw(JD;EH~t zhyX^g@!{+K$-%f%g^8yXYigy=NJ3tb#d!LjN)y2$Kl^6230hkns;yhFprKL8K+Rz} zA6j4SWijyroP3%>Yi20)Ex9pO77qCptYZh_VNgMkd^f_ zWM%b+^$sov^OUWm*30h_sHw@ZTQ}>wCjMV#3t@2L-A!asD|Zaw#R^zPjZ>iRXirOn zo{vdD;qkmQ6km#>!^1-4^c?nrqSfM?b7v*T{dZ9M9CSJ4dbD5^DOpVRuP;xV<5!>S zp{yeyX_C&mUk*9Qe=1Un?uMznj zu5GL%UJUB1#s&4njk%-x>i#<{6KU0Ne`~aKq-v>biN>nc%jeTyyn>EubDjIy&*&D2 zt@-L+sIjr(({=A|8cSj}WR4#5G?qr6TQh&b{MyFQ0^;A**3{S3&qF=vOZm0iv6gTe zskVnd?Jwrof{&Va(8`^+*ap#3qiKL)Yh%G>YuiOK4f0tkw~Ku?oYA!RbaPgMmOF5H1=h~P<-`WZp%m1!7VGHl*lPB}J|Z6& z$E-f--gfN4`#gK?0!LY{PxYd;QK6I$)*!R_HW3RZPrXAO>_4cK=ojwqSe(dCpV=CID7&7xfv@xV#q&(}SZ&lY05u zDF>*$HgQ|AU#?Ip8Q1jk`07$1EdRqRX+&aKVUMtO4YCFsil z^B^!;oM!aFmTb>+XA8+ow}*wcFE;QjX=k7U7--Hm$hJ5vK3GbOBV|cSn8(@5Qr2;bDm*&faa+HAEyH`_r z*KTyM%sCAbAs5eU38I@7?-6)N@jMKtx44KyU%8heBe>nkFuGIz{l7DsW?IO z!jqQc<*TC*p;14H95-=28!pmD6-0rfTS1|`K&Rkfnm4--@ESz6&NHkWXh0XTBWD%j z#Cipd?Qlnqz%#soAQH|C;IlVFZ~RgVn6v>a~Q z7+TUX4edI$ep~hsMBu>8!Hb1$v}S|M=oQ?;t#>zwD69pOBfa8MM#asF@oYT|kzr3u&%3V+4vs-twAk^^c03dzsg*`aZu&EH-z` zWpUY)g9H&XG?TNXY%tqTWN+`{lqTvJrUH0j>fHm=sH5dMHpD!WZ`xVII?c%1<{0C^ z7{g}UsCYf&1iI<9LpZgS2!Cf3<#o>>B(XcAnq#=Z#ONL=U0L8}uQRRFh%$+JkrDJb zt-rm}Z+l&_n@0{!e(=u3*ftvqj8?zO`fo5%9ji5t<0jzcMS_Q2&u;vP7U2s?+!n(@C_2Wya*=`%DHkbiq>05IbmC`%Tv@j(+Fx`!3#SKj`Z(5G3RbfNnY$jl+ z9yXgNujKD-JZWq36uZ=7b{$=}n~RM`I(piRs%Y9dZ73K7Q~cn>t)tj2ZS*VFK1vRc zU05Y8v58JO!msV4m=5V#e!mmYV<#*^fQHR4yK$nb<$4lGbZv9>wliS zmGMM{-P`c8Qg(ONk~KRXU%MjO;*@(ys9NJ~k@6-F&Y&;(ih!Q#79Q`4wj{#jo>mb! zfLoc$gq0=erb0p7yfpdlF>AoJ+`Ir2EX5_6*1wbhh^MeI_uI?V`gZ>nzn8}d2Ku2u)3-km zzcZ|m77I3=Ik5#ZxB(PcuW}->X_q#R=@k~PP+<`bnQia8m)@?h$h8W(D+%PJq(2_m zinFxc67_}ZynsVH_f^8U@=UFM8Eu@Q||D4+4uUX z+&y@fhuR{myM>k1Ry_E&T(>X5F$Ck2K!5bMARx%Xn3@B+S>rruX%YXerCbB<{J{Ca z8%s^Jo*&#VIp46+eGDlTD(DA}H#N;}7=X-Ec5}CMv)KdGLyIAosP*x1_RIkN@uZ3m zE-32i`2&&$&L1Fufw(IfBaDb3_hfhLFagorVYXVC`ahg9}IzksL!QdE(X%iB5{pOAIwaXA|PZOl9A1f5$nGZrb4YAn&HL)(k~G3+Z`xkd<9a z(?=^>Sk`9w4rOQi&SgO3Ljm04FTd@bq&MB196!V1!%8wL$DG=&*hy;(nRoW$yZp;+ z=VD%R-$s>Q@;?%j#?nWX@6t$FtDdII!j-p&>vK*F7F}@|ceIq9UHhiwo zWF!T#xzSD23h*OJ7ZPAiye+I0st9VHs>WFoi^bEVrImk6(ZgQCb9@h#(NK21R6N~5 zAT7dsNf(xMmMa%75ZVOEB$e0JG4ZMV+=*UsCXkj%Z9rUDQ~lCi{wq9R|y3R*kQ*+7O}67TXN_2VU$Qa(jx`)VaG8cuc<6cdY+ zY#5C*2@6fSOw8A$4mQaNTe`yJ5W^jhu8>GFZi1E>e77>Jk!_u5)XJ+y$8D>soLAyb zcUZ80N14~sJy?BtR4Ftm!KMaIh&E)xqY>ROMdgX4Xu^At_Krk55W?n8G#4Yzs%OI8 zJqustfv~bf0uhg|=asZ+VOzAlJ))RtQBpEiIlu6759gIj2yGPCPFEbOd`~)&OcU8@0iq{NIO2_qBnh!PVK3yz$}eive9&VYwsOIO3|!y9rfUf&rf%U_tpeThgk zwoZMwtp_F!SsA%*wi`2Gj0>5G$za9q>^+oj4#-puj#w0S`7 zHq+S5Up2xw6KK|0|6?<8g68soofYliCmC_3-Zt4-x%F1`?<+^T5M4_Z1g0essDbZSG4CERv>~OS-yDMk+?v zE*4Wvho+U%)`m@{MU@Hw!f%gRy*@vX@0Dr`JBe^lw2jo?CL*EQV2R>Y2?aX3;w^N7 z5c9Ek_lA4Sys*k)Yzc1YRGQ?htQg~Snr3npv!B(hXK_+G!Av0WYZ%A|fd=6~ksdK1 zd`d{{N)Zgp8~lnz$j_=wuwk=Ml@--n*pBkBQ6*U_f&7XSt1l+=q=AL3k3`nudR<|P zYKf~{y6@*mwPOu5r-#9p>x!m%UXoZnEACj3d4Q_)m{nzf1xNrbu|yW@G#MGHlbv|Q zs0a8EcbaiyHYo2Hi^*;Uwke!ZBb^8x7mshYi1NSL@Ac3sas4s+)55K zP$OEdJ|lqBD2Y0uts{sLIf^YO?qOsFZd3P9FoR8(rH()3k9bNaMiqg`q{X&b&iBWl6hJH;$9J2u-$ZPUd0cTumf%3btw!9Yqe` z;xS%P%AT#`!4)1>IexGV^xslmA3G&?AsTh~mhLh$O++t_>MInvalHYvOVS)Y_mkCz zF7`}pVY{@j@YvInX4|@NTA8N{rqyeD-%cn71Mncs4;M&Xv|G3l&Qfdx47V3mOgn}0 z@xoMM&Wmqgw2reAd&gNHSTUJZcv$-xaZB4ZMJW8lGDCU1J#Jl2!)H~6iwLo>sRKZ zbPJ&xP|QirtR_Sj<&jO0gGpxJP0oMTEGnh!$wNA@1dmTtKlbF-q%jh3am@&dsVZUNjuwAlh#h?oN%00+WI6a#a z#_w`%hULDL|K})aX{^JCQaBI7ftY|7UPy~(1t02)eCEg+H8tV7Iz_H6H^D!ud#Y>w zm=zDgfqd@d^-248Cmcxa%;7)^LV=(ok!D1?68-g}?&N*>U z*~ZQ5W`DC}eck3w&l{m&?&cp_J*HKvT1B?FqEV8r33tqKci&XjO`|TItCNArFB?ww zkUlaNNmUvpb7d;rL6*;gtPnP=wDWYG`B}*EFP5q_N$LsQ_47!gEgTDbS51}|{HA)| zT!@Sxi&WYe-$c)C;8OWw#|z=&?}3bxN#C5W;Tj~U%o zRXou#-D7#N;;=~WGofPT<7x{tdSKx_I5Jsb+C6_-7$CN4n=j=SvW`+Kh)TXMCjK#O zLB&BnraAe`={{LqH-ABGLrr6CRcETZi^vv*Zr_WMewHMAs-U`b?`9m()B~b6Eu~gG z5;>Osx`|Uar<~u&bKY7P)C;@aA$QYw)UWn^UzYPG0cU~pw*nDK@)QYftO|VigTiO? z=SAKdGv!>KX_%}6n3D&{ZVnuXJW~1^Yv_!#sJ*?hu?BD3#Uxq84B!qN=YX3zCWk0! z;LQ*EYda#*;q*pt64*fHtiKNakCpV5zP{Z~{)SDZL3C1!wy=g#kZ<^cI!Hq{iiCht zn}>(s2DmR2bl(3kwv_e?F`ZQq+cyD!X!|5%RS zeQDvl18*rCB&TK`NrrrHsk}=Y|4GO;bklMg`gM-995Xr9TEuGR>Na_lnte7O9VSNa zKPl%Q9N~{{wMRPPLi#V;hb=fmd-u&F0zw#|7e;+uC#&z+d3)>wo`z;LYx48z06)eq zi~lh2G$|hz$Odd+Fe->0cyM6i#%|8oNB~CTa1OkOjXZGxkHrbMiaQ;<_c3#|%`AzkK^CE;+KXmCQm2xAT zJzHV1%2q}2-dT{%P^_KAO!OsHI@H}aH18v*qqvihPm8Gw=|pF zO~p41Hlp}qcO(^V_Cl^wcVSWHW?RI>!jvVu_z`1;}-o>{gzoGLf=qExgy zQc<4nk-?{}@Tya8!yq=R(*@N#|JrTNk-z>+dz~{kaVIk2y+K#$%P{ zfL6UCj)|&rwM}$hiH)IhC18L`8Ne%b=*&GCn&DWQmu!mYY=r5Hk}y7Lovy0G)qVkv zpWM>%s|{6qp)DQKWtrq1Cj6=Mx-3-Bbfp$LO9&6QF0x8l$J?5kUcm5SpR)%jPsxl? zKb2?>8`C=W(59YnGO4h-Gd;Qv7iQ5qsq}U2Q9P(Me9f5Jg4ZfMR6$`Kh2NT@?Teo2 zNGeO=YVq^3ODi^jx$ZX$@91!B?eoqb?%qC`wo{!& zEo;({L}RAzx~i($nu?hU`I6c?Q`KfDFl~dA5RRq^luswK)bIODujGaV%l&WD5kW>w zw?#Fr+!+s#Lr=Inz5>`3qm0>7o0* z7Bn=R#-a-rrIlGaMR?=C-O z|E{E@?BAAr@Ac5Kjn(H`>*|7(Qu%02i^iN7_agdA(P6?<8ATE?S#yDDgVzZooQzZU zKf6oie=E0U{qJ9VwX?RAeD7sZ^wg5Nx+hK03ui?nvPKqr?OX;87scuy1{!4W0Ns&$ z(K4nID*UGeZuH|VKZxq=1&f|JG~v@hklq;r44Qb$e&l8*#{ZN*a0egxT!-%Xs?sOC zm3C?a^J3qt4Z(8xJXTw7hR_l1|1Wr8IH5qeLO{ldactxjFh~R@)+iYSP&^L@ znym8nffs0E>u=Lh6TH}99&P^&rWPy^P!r0)E@_~ckZ6XUD7vy8E=5EZq_HdVrW0Tw z0XHS$2=LuWCXNCtn?lIu8`G!&IPyADgauv$eiNjxIkHj!P2k0R3|uM>T9d)^u%d!| z(p4W>T)}nkOkl37SxjIFibQvgwIy4_JrEI~p{9auiA7@q|C7%H(Jq03@~gG8!UCaE zQBb2Ak{tRN2%S1i!~hy+DJO5afO=G-vx@**t%A=Avn*U?4tiaH*j*u**{U zc6hC*Wvu_j(7~9REXvUzGiH7~7*ucAkh+<6jE9EIVg|J$c+dnW6AW~{m2jOGOyDvP ztfsrbAVIFJk22FFfSCe(SeH{&<2sl@p*ovzZb*lXV7Pdlp>XwFb12~jx@72Iz& zf#{lbzuCJ##}*Z3cjWd3)*b&N++rI38N-w6xvP6PITQ_vT*j_01PjA&yA%J0w zrcE$Bel?B`>@F(zDNLPeCQ~~VT<6Y6Xfe`!5+^{gS1&AvI0r`uu_|i_AvoDM*i5G@sAO|)AR(Rdh`8HFUE%bFr8vOsXKE;*)r z?RmK>EA30V;CXYHzRULmzY{h?+d1~$D(A=Hb$XfIL>sntUNeEsb|3Br@o(VW(%jLt zE>8mWWP}Qbr33pwJk-Q+2y>)XFqQd&SVy#Fd~6_?kKv9ckgE|Mh3io3jAw;Zp?qU- z{P3R)uw+lBl4dCmG^8Mq#|I=#nbnkRGIwm}G`Ea%5+zcBWJ`&&J&9;MfpY}w|HUH% zwb+47lnn#QwCG1Lq(WO7)aRX$u(E9VP}d20Yzoin4(|uXioFTQA%N3+;1crzo)+4P z?aMk{X7=OLyu(Ls_Mgq*u(@-bFe|7PJP4#i+; zGeM5fFu*SPm{A*}7U&60&A-mkxgZBM*v_G|)^(iD5|+YrdwA435V+(}Ucevf%HRb%aMVUw=ZZ*d4W}l* zaAxy1e64v*;Z3ezY2=B(=6Uy)7`$+1J87mh-KTnYWkz>pw)?Zej*Cf~45k*Nt3x{` zZYsQ^0)y`wqTTaU*}zfWzI#pNLdQkF|0;9UB_<2ON$pCqq&G!P?YSjagkBup&sZe0 z8PQ7uahV|G^Cw2PnixeVEKYg~@U&n>7Znm<+xsjIv*^y{=E&j0nWHDNBNyG9V8ij^ zKIKtYtq#>Vta2z$G>@S9tp8;Ti4`>S+TtynpanD&CT3b?E95$)m_NT}LBsObY^xZ% z(EPgkn&q!iwyeiTx8}cEyP&Qy@6pCkXgR6VH_EMtnSSh4_QJdJ!6of?-rS@P$4+LY zmLC%C`>sUC7_XUo^KD}2yIVe1SbUROTmfkg+`=~-e`zZ95qdMB)brVqjr-w^$=Hw` zB9?6dkMQS`9qP#s4i*8=-AlvSy*E{e8GpJ2H((IlO9WyWx)WpNF$=A?5A(XXA`ot( zs`OulFDo32kKwmrB9xY#EIG!>0K2_nLYNw}AMbVCzT3Q}q}wM6tu>~>9_{2(G+0F+R?df*|0zb>aG5M?-xu zohST?dvn|!W7VC-y~mbq2kIW9K^1hmfOy7_!SZtfBX*r;l>BCx+HyMsfj)3c(A&Oi zhaJNEXt-@1uPQ)C|5YvDZP#IjmTR%Yu?RhWYnZJZ7Y5{K#GZj`0)xd?WVPR(NB+q( ztReTEP41CfcHQ%^EyvN6GD9UtftyF%8-#cR@*%=20K`oNkHU?hVA`<}UB7K-H)Aq! z6WU%Tpa%5xiD9ZDvaD+JH!|BI;sLQ^WVY?WO^WruoO*1v!DMrH5eMa5{!+9lCW;!U z+7fNQO~)6~+h9z9rrdj2nft+lnC@X?qbi9)#%Tm`fE~}>*`Fa&j9o^?uwZfqk_1_~ zT0|`4xS!c~accj#VpiZ;IDQiV4N-q6N*@k*l`@{f#vHzx-$mOD5o7!&vEO;7vF0ye zp)57}qqr|S0ge{?-w^kXc|rLe-7SNZx7w~##6!}|F&Lkqbo;^9k-c?`i8L{${3z@& zyi4^t?-Yw_mC!MANVCw3k*Lsl$Pj@)(mkkcDF*6DkwFFy23#$m?ZmCa+G%}S;d@6Y z2YKU|*j8rp4U$=8YU@@T-4RkujPA{K*#j||*c$9ifyKct7NQ<7+aMxcvt@bx7>1^s zz^oD%(ChMjbtE^>ZXXEx0y`>V%-XO|?xR9)nVJb>qfm+c5#flp($Xk@d%!GPo?hPtBl8GO}^EToXoB;Nf9lA!o6J0c4^`YN9 zY-*Qh5bj(=l?WWR2#{f@<;|%4`IDO)0zF^6l)Wf8H;>y{W%rDGkg;H`vi=u-CI^B$ zc?+$IbmP?QVV>szo|sD%oJSSn#sB$3-gkY@`}#$DJ=|ZT@fQdhtp@Tx|2zdtHSW45 zv6T0>hx6AR@&4Ailxf0}aC;BVDTdmkBSY6~p#Jsq>T5&ursL}6pDl>QT!m#N9SIGg zW=`y!E*F(6Bs=(pNTm(c6eM|4uz+@gQdGX#{)2_c`>HyD&{2@I zRjwyYKoj~FG`W?!u#oe2S3J?=JY8dc7NYfPUE5*OSrD?q-fA~L+~S1@&xU&5L@@=@ z!+E-`H4=&tZg+7$<&x=G3)+qpSHHZhyPp7Wzkr~<3qmxyx_WxD;DRQ5b^zw#C-4qp z{lB!>nZs01zS{CeVd7*D@#J`ao2{+~m1yw=05n9nNGR#a-R^yI@1#4e)9)|x7)xP; zrJga`A^!u(ZVBZrm#Jx2K67J&{Nu57SC`iul8FW^?)Q10#quEW3hb56BBv-#`Bx~F zx*F(prC@4(b!UR0VP1=^pT^&nc4L9?CylrGiuXqXddM#62zewWB!gh|$95j&Pc==i z;_0Sq1+P>deWFhe(x9ymrPLRyRr2Mc9duG!mHBmf-_o~3NK=8QW1`c zlw^LH?;Z#%K!Z7p78$c(q%8+@`gMTA`_28==hcp(fXFSTs{3wgU|}ij!5uEoRP0RG z(6nL@F0?Iq73AAFn=J4%AjnKb&2;T)=XHY^wRVRhjGY7Z$!yex@rg~^LLrTbK@n%L z#I$*e_QDR!M0y{sDSYW^XO%IDqd%{zwqV$5#vS>?sZ8GojPhv(Me$YK%+(&S6bYaK z>pM3*KU2R8Ysbkg-O&+A%=F|;*9zZ;N-`n%6!K7+_k6Fg5c@3;U>FP~EZav|D>11*QtnYhIm?cVfqbapbK5UGgl#T1+0 z22MGgZ*1ULdraanR1u3AT91doc^cw_F9K!9nS{I^El?kgFktO*z-CSqGC7kFQ5TB87c5aj}tSvs7&s9 zeIdAI_6)ANge&}za1vg#rP{o;--h0{#c%+;Q&)8c$vgFG6fY1H|Ehx$(T<@8#3<4{ zJ*As1hbbEV)^_CXs#^x?6l2{%{#-1L;vjJ9dh%DFRK4K`WvL4qVtD2 z#n{7)=S|NL=whL7{frksbI)_}chtUW-`T#fjm5)oXN?Eij#MYEU(wcJjQoe2bN4=T ztAo|-6Wq*csOujV^Ax9r)PBG_|6%jaJbhEa#3-8LtpA_NyOA@WABopjdii2cz47bcn5mt|SG&u zAzI8`ef?%m(MgJ8(B7@nE`0its_|-H=tMs)+x)T>#d$(dVUuUphUIC_KP{O88%4mn zwck`N6;{xrA7YIYz3X)Lx0305OEd<;SZ*Vg1P`~L?(3mDb%*u;3K&p|^86zdVRRk( zKopKX0vP8IeT{IPsFcQM1%1-`&ZwZcKoD`+!R{keq2P?fuLUZr1sRRu!2+_^Mglj* zc}@rh-Z-=84QR#KT7#8TKx5%gHvs6Rdf<}^SWln>kdaa=2_oqQkylHnKW?23z#e<3 zTQ532EowD++EqXRW#)ASe)e5vmOtCgYmlWa+JgHD`m(f#O9ol&pkn)*m$X!a+bYm(Y(%51C(auBTikjx*jf?N!{#u|(y9mJ zV6rHPSV5m``G!)yOO;Ju5cqX1f92=PReinBjj|9`KEjP?e9F2ztD%HtK#63YI$TlC5Z6t|z2CunR(YCcc1f89zO>Sl(wEdZsR1%qO9Yde6!N0!pwV#ISE9>eSE1ddJLyhx_ zbun|6MiY2IlD&hK6n2(&AtF{dO9`mJjE+Ua&Vq)ThWZNU_0>y?_@COL5yvyDC=h<+ zO}L5i+>5uj6B&?Mrm*F#$u^wA3`f-$q)`rCQ4%Upg2&ip-)~iDb1?^|nbx0XT#!kl zV5;(fT5&IyVwYcT!sON}J{as28cj_#v1WOQ`V$gTeKgk;Ncc=5DePZz zT9Y7^8DN2rm7^xjrnA!XEEe_ic)bifk|X5LHN&cBJXc40aBCoYfm6$jQjv0LU>Ek; zg$bL!jyY?1kKs5}qF^uB{h9h6KL}bIu#K4*g!PsDJF<8`*M;hHjE=aO*>NqBfM(O# z1Pc-JGCo?#L^v^dDDrr6A#u|&#egZ|1+U;rt`c6dqF3b#AdYSLu%WQy8(OZ*)wPpl#6jIM?j z)YTcb6+9hUHpA0_0F--;DQj1as#6jX85+BycC=JMAW69oq7mHG||xXIEk_1JP1+r zSc!$zuGj}4QKylS7lcx$w@8y%O$$ zi6(%7m1=;~CBS5yB^2HHPCsSh3G1BzGwa=jBepOWfuM(;ohQwF5C9dy}@8IV2eEiz;3lM_GnXGz9 z$R3A)o&dlfWah~`%krJz6h&%8;EeA`icyN!lCEjwWnwHZwJi|BI^rQZJ<%L8mtX}r zi!$)mK*@%S$cVZNsdqqL9znMSFP6WA+X?8WqvS|z064}enu&B1h?3Hojz8yrWh1BX z`f2cAKbZ;rgbmlnS>&jQaR3Kf1YHap>QTG+M($4gUu=kDFcI1`* zaA1$UR%-bU5^1afL|!?uIcG5!Ynq4yYAc%Lrcrk;eh(7JTl*r|wLMYdcgTMv-@0YV zF-z?k+Ox1)#Zm~y9fxs$AH+#}pr+{#*YMqyR%u7S{)#cF*3>8ij%72KSmdppFyN&Z>*o)4j3x#S!ES@C2Nfr(m$rTs6fT66}8`OIwjS9F;&# za_9O8XnA>2ei}1qan7DUN@!_l&xj8Eh++0 zZ3eCpa0u;vo1v&9zj4Fd;$Z&+%!MI*BG$1)a#1_M z%U;i5EYVszIdi6SG%#}$OtGqVEVYRgW`Jh;hbgT#i>+-Hi;fU^-p;uN_u7ke+tntzv0yRZ5*|3OtqWhsdb(JXH@VsaT+>OsAw6-IPmsQNH z9gQ!yo(+pk^eqIDcmIenmv%dF&-7J$&IURNV!Z4^v|ZS%auBFk^rIK8g<#oi+=TtV zQO1;CnYqanN8q}Ey;t3#syPO6)ylS|5=amo(sIMm4iQmg2^Tmcpw<_5SAp$J834boY`HqMVr2}nSOlGD@$naTv*uu-x`qJ zN3JperaUd1N!t+ek)mBKp7$s7q~RFq6FFD#yN*sXvzHxA0#J6jT2Zn_FhQTV^w1Ecn+dQ&J=--vA14HBZ06sCGk_mKtE0J7Xwa?sx zP)hoXyI|}FL^cil?dciSkLoBzgZ?Ri{u%ec{{KXzRnmGMtpjHQS5cv6a`}l>t)5n5pN@zEj8lh) zxeJq@2M&%JR&R{rigSHmyk6>!HQ%d&c)+%s3c&vVMTxpBL03aFV`O0|yxB*p?l81I zv~9ai$F#}a!er(v94l8UEI0x|*$1^M9-}F8yy}`(T{F*|m0m$X^T=QLYC+SG8P1h@}s0H5(lS%YzsmTpdWm zuyKaJ4~|Flw<{vw;^ zqX?z6T$~!Em%e7rP*}OrWg_QxRLyUDobwKQ(B0Vc3+dHq@xZR9t@8G?=F+Kx=@wYmI76CXlRJJ5d}~y! zMX5}G_d`g{CGVXjDmGSD93>XL#jlBejnSNeOD>&QOdUIJ&wR_zNs{j1$+|s27o!TY zxTqk6o|&L!>ilQ+gY$K{XQsZuCAW6z6VwIf!JR;pb#gW*C@-#oK@d!VvtOb%cqP=M zC|-5ZcIs-|dt}IFfKvv*jZ+UTH(&o6nj`xgz!o%>Yem< zcgjya>Qk?{m-xjE8|GxsE~9hd4#RdZJAqOb)T&%)ICX9|{nfHPcb>*TM*d3NwTWw> zmR*}(dh}q{V)wBa3F`9Ng-=uS)2WN|Yaf4$vlV2NcVG6+Texoe#xyAhFTH1BXamuE z%z6bn8{h`VNiZGi;}|P%>g+=D-bH*xUsj@}!@zU*dZaZHi4RYOLlGzvM47o|8`@5s zLEPCp>6{#0AAcO~kO2ECZpC2) zs45vRhWCxa#X7RIcJxZ}4pe~`QkRa>(7=2xRsX#EOD8VyK+{~OEZa?XBdoc=lU zvZ%cFFL`Ru8Gdcqlc@n_W~ibtT}%{+t%w*#(Fsfw&U1lu+3uo1vsaT{VUhU*uSy=hS~pKwmFWc%skp=`&~*rFz{NYI%&-|AHp|_l!cOnfPBNm}V3Iqi&;3 z<9`$S(xGdSvI)Qoga2Xq!^I8J;D72VHuR+6e?kWTn+tK~#!ltW#X%lUY!7mGAxR~H zRr2J)%(1FNIm$=*rC7YDyBYki!T(m1PJ^}gu*v@^#MeAgVI|XR>CmRe{PxJ8K#q)sfPLG1BD!a)d|eoFNLLtygksl8_X1;ep3WVRw#NScg~d?;YTn;1@NOUP0zT8{YM;$?5$tm z_9?99WE(zTBimhQmZ@aBf!!0GN%`%k0>M_;KVYStu(J4Q)6sAEKOeu@5=Z6cp0i~# zMVcNZ&R7O%>^XH_G3*-BpURZxVgE71|6KxGZYx*=U^$_X(1-}Rm^!2aWU z{9nx|OIi3f^992fEcwE!Uf)wISONgT1MpTZci0`Xs3Y^nfp9=-`|7lUMQC8g;-QgP z07+g>Dj2!5>bk1cd;#`oB{+F!AJl(Id2BZHaavo)cl`>EDiC)7QAD}q` z{b&>GmLhXebAR^?hl*X76=vA~!Q%C)d;--djs9mxzieYh|FbOQE9=j;A)#I_bgkcj z8q|zZz^Jm|R9QO)1EGwg|%NyMVR)H}!0-$MrHmRPUGSzc;Qy8^o@$W^G5Y^82~M<6Pjeub?b)2@cHe?J?HZ4njDS?AiN+~ca;M*lnK z!ZpVKsWQfY1;H?F7&AN3Jq{|gZ^kZb*V8?lX~P&OMK=fc%MUsuONL|63lg;hb%wb- zUV#w9;XhVF5}mWaRRIohqg%@f8g^ty( zbySPXg8jbvjgV&U`8&2&azj}>750CaYbxSVI;B~v2XIugUd1hB zrupN-qV#AsTH#I5qUxZ9J-5s`io~qIRB_F<#Z=8|ZMW7qGT8rH<*cjfmgMefWhe-& zfiB&fnz@iBHk9GQ%o90Ku_4anD;iSy&8Px6SvgHf&RsBIiXzg~MSPV0A`Zew)XMH| zbajmV70^9WY6JU!yK4G(t(_?cNO)__s-d=%Vrym^2G-C)EO3zp*ns0yA&aR3Ihx`Y{uZ}) zy(S6sl4r|+iTqB#HEYftHi7*g6R|p`M_scxUGA8GvvjmpE5AE%1|=4}0fokU(SQ&r zB>w$sIAVGGA&(dFlOUk{T~HV>dG7&ayuh)aI{!a=`a&^nzV6N0nodTWqp8{)t-#y^ zSy34;Dja5LrHS@q<{=Nszn9fQhZ zhg47O?hun8uAe5pr!+$ zVlSS{jZn$G&`@L^;&Mw|y;LPV6u+TDBG(lqD${w_Yj2Lb#`^q0|JJN22E1Ucr1foM z6}K--IKrx(HPkdJEH=Z&DQ$XHbgjNy$3$TN>xivglxVPyW|9Mtq}xjyOmbasu@&dI znBrEpNXfP92ZqLzcP`sEZ>4V~lB=us!jgUCll1LGI&m56mpE#lxcunYJ(9amTwqhe zM>p=*4fKEVI&L>tz44q2cHxxCkcupX%}XUiA1jdAc`Sz8Cs7J>R!+lWW)J zKHu|b-qFdfkUwVei(wu1(SuoQXMA|d!ealg=)>s~_QlU%;&(`{T(@t0lsn{bYjt7SxK%gtsR*~(bq0cKe~D(HGgMqc9GX} t>hkI2$~4NRDz>Yu%hwVA6~!{ED$!N>P$QN=s8B^+$dL4Sqnx(jN-OfXiIUgl`ps9B-CN0i^hBar(X@u&zk277FF!~L#syi*rqjJ$ z>3ml@Lo;bT-=k~Uhh4qGkGAZ=S^r>5vcIn`f)Z^3(5;EfOXFXphCTN+W(rPjtyJc^ zvRRtx*0sm=eEuP@Y);O!>{08XM}ley)$n=c>ss|qS)NHH5M__iQP(?0Er(XzvPVnq|F7$$ z17$%6SO8LXc#sWri|%LuH8x!4MYz}y)GQiK(3neIXwIVr;9qiwnFle-aHI#y;<}rv_4iJOucyM!2;<+WtD_k&pg&#Z4%(8$?V+hc=0Me^{tjfLu z3p|T~8q{@IClzC(ZYOm;&~}8a!E*=~EvJw?WLPCm`(M~MXqA|rN~Mm%k7YBS3eG%L za7{Qlf~UM7acedWo)i?aG=eqTb_K<6RMhn3_hR9MdmPr|J|CuPU zy>h7|wkNSR@aepsP9qddE=J=Bjn}HRhIe0y#!;0V8BbtM!&qJzKKdApHENgY`~xD% z;vEvs=~_n5uwb|HduQvK#WnZ7|(+#}W5`{cd8WbMqkI7y)@K5}|@z{Q_jdfET( z#zwj6%rlC5>Wx@~e|E`{s(`{j*Qx3RQYNOVA1bkvuhxf~TU+s4b@KG>!&pA}`~7g^ zF5H0Hj%45GrwXd$*V104bcFI0+oqSFn#S#3hzwpU++4<3rBxFMPIT<>i zRASvUtLfQZJ>M;NUAT@zT@XV4?6n;-dG#`>^|xLkX-qb#(+Ex1s^=d$yE_s^iPnn^ TpvTH 20090517034648) do +ActiveRecord::Schema.define(:version => 20090517064606) do create_table "comments", :force => true do |t| t.integer "post_id", :null => false @@ -71,16 +71,7 @@ t.datetime "updated_at" t.string "fanfou_id" t.string "blog_feed_html" - end - - create_table "shares", :force => true do |t| - t.string "title", :null => false - t.string "summary", :null => false - t.string "from" - t.string "cover" - t.string "url", :null => false - t.datetime "created_at" - t.datetime "updated_at" + t.string "google_reader_id" end create_table "tags", :force => true do |t| diff --git a/lib/string.rb b/lib/string.rb index 142876f..77c4b86 100644 --- a/lib/string.rb +++ b/lib/string.rb @@ -28,6 +28,15 @@ def truncate_html(len = 30, ellipsis = "...") (results + ellipsis) end + def remove_html_tag() + self.gsub(/<.+?>/, "") + end + + def html_decode + es = {'&' => '&', '>' => '>', '<' => '<', '"' => '"'} + self.gsub(/&|>|<|"/) { |s| es[s] } + end + # clear unsafe char with url slug def safe_slug(spliter = '-') @slug = self diff --git a/personlab.tmproj b/personlab.tmproj index ddb8803..90d1f43 100644 --- a/personlab.tmproj +++ b/personlab.tmproj @@ -2,8 +2,6 @@ - currentDocument - app/controllers/application_controller.rb documents @@ -20,363 +18,10 @@ fileHierarchyDrawerWidth 259 metaData - - app/controllers/application_controller.rb - - caret - - column - 21 - line - 7 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/controllers/cpanel/comments_controller.rb - - caret - - column - 0 - line - 9 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/controllers/cpanel/posts_controller.rb - - caret - - column - 65 - line - 1 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/controllers/posts_controller.rb - - caret - - column - 50 - line - 71 - - firstVisibleColumn - 0 - firstVisibleLine - 60 - - app/models/comment.rb - - caret - - column - 20 - line - 12 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/models/comment_observer.rb - - caret - - column - 27 - line - 25 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/sweepers/comment_sweeper.rb - - caret - - column - 34 - line - 19 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/sweepers/menu_sweeper.rb - - caret - - column - 36 - line - 12 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/sweepers/page_sweeper.rb - - caret - - column - 26 - line - 4 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/sweepers/post_sweeper.rb - - caret - - column - 25 - line - 11 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/views/cpanel/menus/edit.html.erb - - caret - - column - 24 - line - 7 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/views/cpanel/menus/index.html.erb - - caret - - column - 23 - line - 5 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/views/cpanel/pages/edit.html.erb - - caret - - column - 0 - line - 9 - - columnSelection - - firstVisibleColumn - 0 - firstVisibleLine - 0 - selectFrom - - column - 23 - line - 9 - - selectTo - - column - 0 - line - 9 - - - app/views/cpanel/pages/index.html.erb - - caret - - column - 0 - line - 5 - - columnSelection - - firstVisibleColumn - 0 - firstVisibleLine - 0 - selectFrom - - column - 23 - line - 5 - - selectTo - - column - 0 - line - 5 - - - app/views/cpanel/posts/edit.html.erb - - caret - - column - 25 - line - 16 - - firstVisibleColumn - 0 - firstVisibleLine - 0 - - app/views/posts/_posts.html.erb - - caret - - column - 4 - line - 5 - - columnSelection - - firstVisibleColumn - 0 - firstVisibleLine - 0 - selectFrom - - column - 95 - line - 5 - - selectTo - - column - 4 - line - 5 - - - app/views/posts/show.html.erb - - caret - - column - 15 - line - 14 - - firstVisibleColumn - 0 - firstVisibleLine - 14 - - config/environment.rb - - caret - - column - 0 - line - 52 - - firstVisibleColumn - 0 - firstVisibleLine - 25 - - config/environments/development.rb - - caret - - column - 11 - line - 8 - - columnSelection - - firstVisibleColumn - 0 - firstVisibleLine - 0 - selectFrom - - column - 7 - line - 8 - - selectTo - - column - 17 - line - 8 - - - - openDocuments - - app/views/posts/show.html.erb - app/sweepers/comment_sweeper.rb - config/environments/development.rb - app/sweepers/page_sweeper.rb - app/views/cpanel/menus/index.html.erb - app/models/comment.rb - app/models/comment_observer.rb - app/sweepers/post_sweeper.rb - app/controllers/cpanel/posts_controller.rb - app/controllers/cpanel/comments_controller.rb - app/sweepers/menu_sweeper.rb - app/views/cpanel/pages/index.html.erb - app/views/cpanel/menus/edit.html.erb - app/views/cpanel/posts/edit.html.erb - app/views/cpanel/pages/edit.html.erb - app/views/posts/_posts.html.erb - app/controllers/application_controller.rb - app/controllers/posts_controller.rb - config/environment.rb - + showFileHierarchyDrawer windowFrame - {{289, 146}, {871, 595}} + {{590, 92}, {871, 595}} diff --git a/public/about.html b/public/about.html index ee67be1..80f7c23 100644 --- a/public/about.html +++ b/public/about.html @@ -3,22 +3,22 @@ - 关于我 - Jason Lee + 关于我 - 李华顺 - + - +