<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>app/controllers/sessions_controller.rb</filename>
    </added>
    <added>
      <filename>app/controllers/users_controller.rb</filename>
    </added>
    <added>
      <filename>app/helpers/sessions_helper.rb</filename>
    </added>
    <added>
      <filename>app/helpers/users_helper.rb</filename>
    </added>
    <added>
      <filename>app/views/account/_settings_menu.html.erb</filename>
    </added>
    <added>
      <filename>app/views/account/front.html.erb</filename>
    </added>
    <added>
      <filename>app/views/account/picture.html.erb</filename>
    </added>
    <added>
      <filename>app/views/account/settings.html.erb</filename>
    </added>
    <added>
      <filename>app/views/sessions/new.html.erb</filename>
    </added>
    <added>
      <filename>app/views/statuses/_latest.html.erb</filename>
    </added>
    <added>
      <filename>app/views/user/_friend.html.erb</filename>
    </added>
    <added>
      <filename>app/views/user/_user_stats.html.erb</filename>
    </added>
    <added>
      <filename>app/views/users/_user_bar.html.erb</filename>
    </added>
    <added>
      <filename>app/views/users/new.html.erb</filename>
    </added>
    <added>
      <filename>config/initializers/site_keys.rb</filename>
    </added>
    <added>
      <filename>db/migrate/20090119123823_create_users.rb</filename>
    </added>
    <added>
      <filename>lib/authenticated_system.rb</filename>
    </added>
    <added>
      <filename>lib/authenticated_test_helper.rb</filename>
    </added>
    <added>
      <filename>public/images/arr2.gif</filename>
    </added>
    <added>
      <filename>public/images/bg.gif</filename>
    </added>
    <added>
      <filename>public/images/checkmark.gif</filename>
    </added>
    <added>
      <filename>public/images/default_profile.png</filename>
    </added>
    <added>
      <filename>public/images/default_profile_bigger.png</filename>
    </added>
    <added>
      <filename>public/images/favicon.gif</filename>
    </added>
    <added>
      <filename>public/images/favicon.ico</filename>
    </added>
    <added>
      <filename>public/images/girl.gif</filename>
    </added>
    <added>
      <filename>public/images/icon_direct_reply.gif</filename>
    </added>
    <added>
      <filename>public/images/icon_reply.gif</filename>
    </added>
    <added>
      <filename>public/images/icon_star_empty.gif</filename>
    </added>
    <added>
      <filename>public/images/icon_star_full.gif</filename>
    </added>
    <added>
      <filename>public/images/icon_throbber.gif</filename>
    </added>
    <added>
      <filename>public/images/icon_trash.gif</filename>
    </added>
    <added>
      <filename>public/images/loader.gif</filename>
    </added>
    <added>
      <filename>public/images/pale.png</filename>
    </added>
    <added>
      <filename>public/images/profile/about.png</filename>
    </added>
    <added>
      <filename>public/images/profile/one.png</filename>
    </added>
    <added>
      <filename>public/images/profile/rob.png</filename>
    </added>
    <added>
      <filename>public/images/rob_mini.jpg</filename>
    </added>
    <added>
      <filename>public/images/round-btn-hover.gif</filename>
    </added>
    <added>
      <filename>public/images/round-btn.gif</filename>
    </added>
    <added>
      <filename>public/images/tiny_check.gif</filename>
    </added>
    <added>
      <filename>public/images/toggle_closed.gif</filename>
    </added>
    <added>
      <filename>public/images/toggle_opened.gif</filename>
    </added>
    <added>
      <filename>public/images/twitter_logo_s.png</filename>
    </added>
    <added>
      <filename>public/javascripts/jquery.color.js</filename>
    </added>
    <added>
      <filename>public/javascripts/jquery.min.js</filename>
    </added>
    <added>
      <filename>public/javascripts/timeline.js</filename>
    </added>
    <added>
      <filename>public/stylesheets/front.css</filename>
    </added>
    <added>
      <filename>public/stylesheets/lightwindow.css</filename>
    </added>
    <added>
      <filename>public/stylesheets/master.css</filename>
    </added>
    <added>
      <filename>public/stylesheets/screen.css</filename>
    </added>
    <added>
      <filename>public/stylesheets/timeline.css</filename>
    </added>
    <added>
      <filename>test/functional/sessions_controller_test.rb</filename>
    </added>
    <added>
      <filename>test/functional/users_controller_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/.gitignore</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/CHANGELOG</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/README.textile</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/Rakefile</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/TODO</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/USAGE</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/authenticated_generator.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/lib/insert_routes.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/_model_partial.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/activation.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/authenticated_system.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/authenticated_test_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/login.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/mailer.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/migration.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/model.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/model_controller.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/model_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/model_helper_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/observer.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/signup.html.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/signup_notification.erb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/site_keys.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/access_control_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/authenticated_system_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/sessions_controller_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/users_controller_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/fixtures/users.yml</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/helpers/users_helper_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/spec/models/user_spec.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/rest_auth_stories.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/rest_auth_stories_helper.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/ra_navigation_steps.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/ra_resource_steps.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/ra_response_steps.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/steps/user_steps.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/users/accounts.story</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/stories/users/sessions.story</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/test/functional_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/test/mailer_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/test/model_functional_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/generators/authenticated/templates/test/unit_test.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/init.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/install.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/authentication.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/authentication/by_cookie_token.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/authentication/by_password.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/authorization.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/authorization/aasm_roles.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/authorization/stateful_roles.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/trustification.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/lib/trustification/email_validation.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/AccessControl.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/Authentication.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/Authorization.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/RailsPlugins.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/SecurityFramework.graffle</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/SecurityFramework.png</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/SecurityPatterns.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/Tradeoffs.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/notes/Trustification.txt</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/rails/init.rb</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/restful-authentication.gemspec</filename>
    </added>
    <added>
      <filename>vendor/plugins/restful-authentication/tasks/auth.rake</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,6 @@
 public/.DS_Store
 log/*
+tmp/*
 db/*sqlite3
 db/development.sqlite3
 .DS_Store</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 class AccountController &lt; ApplicationController
-  before_filter :authenticate
+  before_filter :authenticate, :except=&gt;[:front, :login, :end_session]
 
   def index
     @tweets = @user.public_tweets.find(:all,:include =&gt; :user,:limit =&gt; 20  )
@@ -7,14 +7,11 @@ class AccountController &lt; ApplicationController
   
   def end_session
     reset_session
+    redirect_to :action=&gt;'front'    
   end
   
   def update_profile_image
-    upload_image = &quot;#{RAILS_ROOT}/tmp/upload/#{@user.id}&quot; 
-    File.open(upload_image, &quot;wb&quot;) { |f| f.write(params[:image].read) }
-    cmd = &quot;convert -size 100x100 #{upload_image} #{RAILS_ROOT}/public/images/profile/#{@user.username}.png&quot;
-    puts cmd 
-    puts `#{cmd}`
+    upload_image(params[:image])
     redirect_to :action=&gt;'index'
   end
   
@@ -32,11 +29,32 @@ class AccountController &lt; ApplicationController
       format.json { render :json =&gt; rate_limit }
     end
   end
+
+  def settings
+      if (request.post?)
+          if (@user.update_attributes(params[:user]))
+              flash[:notice] = 'User attributes updated'
+          end
+      end
+  end
+
+  def picture
+      if (request.post?)
+        upload_image(params[:profile_image][:uploaded_data])
+      end
+  end
   
   private
   
   def date_formatted(date)
     date.gmtime.strftime(&quot;%a %b %d %H:%M:%S +0000 %Y&quot;)
   end
-  
+
+  def upload_image(image)
+    upload_image = &quot;#{RAILS_ROOT}/tmp/upload/#{@user.id}&quot; 
+    File.open(upload_image, &quot;wb&quot;) { |f| f.write(image.read) }
+    cmd = &quot;convert -size 100x100 #{upload_image} #{RAILS_ROOT}/public/images/profile/#{@user.username}.png&quot;
+    puts cmd
+    puts `#{cmd}`
+  end
 end</diff>
      <filename>app/controllers/account_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,8 @@
 # Likewise, all the methods added will be available for all controllers.
 
 class ApplicationController &lt; ActionController::Base
+  include AuthenticatedSystem
+
   helper :all # include all helpers, all the time
 
   # See ActionController::RequestForgeryProtection for details
@@ -16,15 +18,13 @@ class ApplicationController &lt; ActionController::Base
   def verify_authenticity_token
     return true
   end
+
   def authenticate
-    if user = authenticate_with_http_basic { |u, p| u if !u.to_s.strip.blank?  }
-      logger.debug user
-      @user = User.find_or_create_by_username(user)
-    else
-      request_http_basic_authentication
-    end
+    x = login_required
+    @user = current_user
+    x
   end
-  
+
   private
 
   def render_tweets(root=&quot;statuses&quot;)</diff>
      <filename>app/controllers/application.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,6 @@
 class FriendshipsController &lt; ApplicationController
+  before_filter :authenticate
+
   def exists
     respond_to do |format|
       format.xml { render :xml=&gt;&quot;&lt;friends&gt;true&lt;/friends&gt;&quot;}</diff>
      <filename>app/controllers/friendships_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,13 @@
 class StatusesController &lt; ApplicationController
   before_filter :authenticate, :except =&gt; [:show]
+
   def replies
     @tweets = @user.replies.find(:all, :include =&gt; :user,:limit =&gt; 25)
     render_tweets
   end
     
   def friends_timeline
+    puts &quot;request=#{@user}&quot;
     limit = params[:all] ? 100000000000 : 25
     @tweets = Tweet.find(:all,:order =&gt; &quot;tweets.created_at DESC&quot;,:conditions =&gt; &quot;tweets.tweet_type!='direct'&quot;,:include =&gt; :user,:limit =&gt; limit)
     render_tweets
@@ -45,8 +47,14 @@ class StatusesController &lt; ApplicationController
       recipient = User.find_or_create_by_username(recipient_name)
     end
       
-    @tweet = Tweet.create({:tweet =&gt; tweet, :user =&gt; @user, :recipient =&gt; recipient, :tweet_type =&gt; type, :source =&gt; params[:source]})
-    render_tweet
-        
+    @tweet = Tweet.create({:tweet =&gt; tweet, :user =&gt; @user, :recipient =&gt; recipient, :tweet_type =&gt; type, :source =&gt; params[:source] || 'web'})
+    if (params['twttr'])
+        latest_status = render_to_string :partial =&gt; &quot;latest&quot;, :object=&gt; @tweet
+        ret = {&quot;status_count&quot;=&gt;@user.public_tweets.count, &quot;latest_status&quot;=&gt; latest_status,&quot;text&quot;=&gt;tweet}
+        ret[&quot;status_tr&quot;] = render_to_string :partial =&gt; &quot;tweet&quot;, :object=&gt; @tweet, :locals=&gt;{:type=&gt;'friends_update'}
+        render :json =&gt; ret
+    else
+        render_tweet
+    end
   end
 end</diff>
      <filename>app/controllers/statuses_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,7 @@
 class UserController &lt; ApplicationController
+
   def index
     @duser = User.find_or_create_by_username(params[:username])
-    if (@duser == @user)
-      redirect_to :controller=&gt;'account'
-    else
-      @tweets = @duser.public_tweets.find(:all,:include =&gt; :user,:limit =&gt; 20  )
-    end
+    @tweets = @duser.public_tweets.find(:all,:include =&gt; :user,:limit =&gt; 20  )
   end
 end</diff>
      <filename>app/controllers/user_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,13 @@
 module AccountHelper
+    def settings_list_entry(page)
+        &quot;&lt;li id=\&quot;tab_#{page}\&quot;&gt;#{settings_link(page)}&lt;/li&gt;&quot;
+    end
+    
+    def settings_link(page)
+        if (params[:action]==page)
+            page.capitalize
+        else
+            &quot;&lt;a href=\&quot;#{page}\&quot; id=\&quot;#{page}_tab\&quot;&gt;#{page.capitalize}&lt;/a&gt;&quot;
+        end   
+    end
 end</diff>
      <filename>app/helpers/account_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,9 @@
 # Methods added to this helper will be available to all templates in the application.
 module ApplicationHelper
+    def setup(options)
+        @title = &quot;Twetter / #{options[:title]}&quot; || &quot;Twetter&quot;
+        @body_id = options[:body_id] || &quot;body&quot;
+        @body_classes = options[:body_classes] || &quot;account&quot;
+        @css = options[:css] || []
+    end
 end</diff>
      <filename>app/helpers/application_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,5 @@
 module StatusesHelper
+    def link_users(tweet)
+        html_escape(tweet).gsub(/@(\S+)/, '@&lt;a href=&quot;/\1&quot;/&gt;\1&lt;/a&gt;')    
+    end
 end</diff>
      <filename>app/helpers/statuses_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,111 @@
+require 'digest/sha1'
+
 class User &lt; ActiveRecord::Base
+  include Authentication
+  include Authentication::ByPassword
+  include Authentication::ByCookieToken
+
   has_many :tweets
-  has_many :replies, :class_name=&gt;'Tweet', :foreign_key=&gt;'recipient_id', :conditions=&gt;&quot;tweet_type='reply'&quot;, :order =&gt; &quot;tweets.created_at DESC&quot;
-  has_many :direct_messages_received, :class_name=&gt;'Tweet', :foreign_key=&gt;'recipient_id', :conditions=&gt;&quot;tweet_type='direct'&quot;, :order =&gt; &quot;tweets.created_at DESC&quot;
-  has_many :direct_messages_sent, :class_name=&gt;'Tweet', :conditions=&gt;&quot;tweet_type='direct'&quot;, :order =&gt; &quot;tweets.created_at DESC&quot;
-  has_many :public_tweets, :class_name=&gt;'Tweet', :conditions=&gt;&quot;tweet_type!='direct'&quot;, :order=&gt;&quot;tweets.created_at DESC&quot;
+    has_many :replies, :class_name=&gt;'Tweet', :foreign_key=&gt;'recipient_id', :conditions=&gt;&quot;tweet_type='reply'&quot;, :order =&gt; &quot;tweets.created_at DESC&quot;
+    has_many :direct_messages_received, :class_name=&gt;'Tweet', :foreign_key=&gt;'recipient_id', :conditions=&gt;&quot;tweet_type='direct'&quot;, :order =&gt; &quot;tweets.created_at DESC&quot;
+    has_many :direct_messages_sent, :class_name=&gt;'Tweet', :conditions=&gt;&quot;tweet_type='direct'&quot;, :order =&gt; &quot;tweets.created_at DESC&quot;
+    has_many :public_tweets, :class_name=&gt;'Tweet', :conditions=&gt;&quot;tweet_type!='direct'&quot;, :order=&gt;&quot;tweets.created_at DESC&quot;
+
+  validates_presence_of     :username
+  validates_length_of       :username,    :within =&gt; 3..40
+  validates_uniqueness_of   :username
+  validates_format_of       :username,    :with =&gt; Authentication.login_regex, :message =&gt; Authentication.bad_login_message
+
+  validates_format_of       :name,     :with =&gt; Authentication.name_regex,  :message =&gt; Authentication.bad_name_message, :allow_nil =&gt; true
+  validates_length_of       :name,     :maximum =&gt; 100
+
+
+  # HACK HACK HACK -- how to do attr_accessible from here?
+  # prevents a user from submitting a crafted form that bypasses activation
+  # anything else you want your user to change should be added here.
+  attr_accessible :username, :name, :password, :password_confirmation, :bio, :location
+
+
+
+  # Authenticates a user by their login name and unencrypted password.  Returns the user or nil.
+  #
+  # uff.  this is really an authorization, not authentication routine.  
+  # We really need a Dispatch Chain here or something.
+  # This will also let us return a human error message.
+  #
+  def self.authenticate(login, password)
+     u = find_or_create_by_username(login)
+     if (!u.crypted_password)
+         u.password = password
+         u.save!
+         return u
+     end
+     u.authenticated?(password) ? u : nil
+  end
+
+  def password_required?
+      false
+  end
+
+
+  def username=(value)
+    write_attribute :username, (value ? value.downcase : nil)
+  end
+
+  def web_profile_url
+    file = &quot;#{RAILS_ROOT}/public/images/profile/#{self.username}.png&quot;
+    if (File.exists?(file))
+      number = File.mtime(file).to_i.to_s rescue &quot;&quot;
+      &quot;/images/profile/#{self.username}.png?#{number}&quot;
+    else
+      &quot;/images/default_profile.png&quot;
+    end
+  end
 
   def profile_url
-    File.exists?(&quot;#{RAILS_ROOT}/public/images/profile/#{self.username}.png&quot;) ? 
-      &quot;http://twitter.com/images/profile/#{self.username}.png&quot; :
-      &quot;http://twitter.com/images/rails.png&quot;
+    &quot;http://twitter.com#{self.web_profile_url}&quot;
   end
-  
+
   def to_map(include_latest=false)
-    ret = {:id=&gt;id, :name=&gt;username, :screen_name=&gt;username, :profile_image_url=&gt; profile_url,
-     :location=&gt;'Rails Camp', :description=&gt;'', :url=&gt;'', :protected=&gt;false, :followers_count=&gt;User.count}
+    ret = {:id=&gt;id, :name=&gt;name, :screen_name=&gt;username, :profile_image_url=&gt; profile_url,
+     :location=&gt;location, :description=&gt;bio, :url=&gt;'', :protected=&gt;false, :followers_count=&gt;follower_count}
     if (include_latest)
       last_tweet = public_tweets.find(:first)
       ret[:status] = last_tweet.to_map(false) if (!last_tweet.nil?)
     end
     ret
   end
-  
+
+  def name
+      read_attribute(:name) || self.username
+  end
+
+  def latest_tweet
+      public_tweets[0]
+  end
+
+  def following_count
+      User.count - 1
+  end
+
+  def follower_count
+      User.count - 1
+  end
+
+  def friends
+      User.find(:all, :conditions =&gt; [&quot;id != ?&quot;, self.id])
+  end
+
+
+  private
+
+   def self.md5(pass)
+     Digest::MD5.hexdigest(&quot;--Twetter--#{pass}&quot;)
+   end
+
+
+  protected
+    
+
+
 end</diff>
      <filename>app/models/user.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,5 @@
+&lt;% setup({}) %&gt;
+
 &lt;h1&gt;&lt;%= @user.username %&gt;&lt;/h1&gt;
 &lt;%= image_tag @user.profile_url, :style=&gt;&quot;float:left&quot;%&gt;
 &lt;% form_tag({:action =&gt; 'update_profile_image'}, {:multipart =&gt; true}) do %&gt;</diff>
      <filename>app/views/account/index.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,25 +1,177 @@
-&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;
-   &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
-
-&lt;html lang=&quot;en&quot;&gt;
-&lt;head&gt;
-	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
-	&lt;title&gt;Twetter&lt;/title&gt;
-	&lt;meta name=&quot;generator&quot; content=&quot;TextMate http://macromates.com/&quot;&gt;
-	&lt;meta name=&quot;author&quot; content=&quot;Phil Oye&quot;&gt;
-	&lt;!-- Date: 2008-06-21 --&gt;
-	&lt;%= stylesheet_link_tag 'twetter' %&gt;
-	&lt;link rel=&quot;icon&quot; type=&quot;image/gif&quot; href=&quot;favicon.gif&quot; /&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;div id=&quot;container&quot;&gt;
-	&lt;div id=&quot;header&quot;&gt;
-		&lt;h1&gt;Twetter&lt;/h1&gt;
-		&lt;p&gt;Mac nerds get &lt;a href=&quot;twitterrific3.zip&quot;&gt;Twitterific&lt;/a&gt;
- 	&lt;/div&gt;
-	&lt;div id=&quot;content&quot;&gt;
-		&lt;%= yield %&gt;
-	&lt;/div&gt;
+&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
+
+&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
+
+  &lt;head&gt;
+    &lt;meta content=&quot;text/html; charset=utf-8&quot; http-equiv=&quot;Content-Type&quot; /&gt;
+&lt;meta content=&quot;en-us&quot; http-equiv=&quot;Content-Language&quot; /&gt;
+&lt;meta content=&quot;Twitter is a free social messaging utility for staying connected in real-time&quot; name=&quot;description&quot; /&gt;
+&lt;meta content=&quot;no&quot; http-equiv=&quot;imagetoolbar&quot; /&gt;
+&lt;meta content=&quot;width =&gt; 780&quot; name=&quot;viewport&quot; /&gt;
+&lt;meta content=&quot;4FTTxY4uvo0RZTMQqIyhh18HsepyJOctQ+XTOu1zsfE=&quot; name=&quot;verify-v1&quot; /&gt;
+&lt;meta content=&quot;y&quot; name=&quot;session-loggedin&quot; /&gt;
+&lt;meta content=&quot;16360207&quot; name=&quot;session-userid&quot; /&gt;
+&lt;meta content=&quot;rob_nielsen&quot; name=&quot;session-user-screen_name&quot; /&gt;
+&lt;meta content=&quot;rob_test&quot; name=&quot;page-user-screen_name&quot; /&gt;
+
+    &lt;title&gt;&lt;%= @title %&gt;&lt;/title&gt;
+    &lt;link href=&quot;/images/favicon.ico&quot; rel=&quot;shortcut icon&quot; type=&quot;image/x-icon&quot; /&gt;
+    &lt;% @css.each do |css| %&gt;
+          &lt;%= stylesheet_link_tag css %&gt;
+    &lt;% end %&gt;
+	&lt;%= stylesheet_link_tag 'master' %&gt;
+
+    &lt;style type=&quot;text/css&quot;&gt;
+      body { background: #9ae4e8 url(/images/bg.gif) fixed no-repeat top left; }
+        div.content-bubble-arrow { margin-top: 6px; padding-top: 11px; background: url(/images/arr2.gif) no-repeat 25px 0px; }
+  .status-btn input.round-btn { background: url('/images/round-btn.gif'); }
+  .status-btn input.round-btn:hover { background: url('/images/round-btn-hover.gif'); }
+  .status-btn input.disabled, .status-btn input.disabled:hover { background: url('/images/round-btn.gif'); }
+  .hentry .actions .fav { background-image: url('/images/icon_star_full.gif'); }
+  .hentry .actions .non-fav { background-image: url('/images/icon_star_empty.gif'); }
+  .hentry .actions .fav-throb, .hentry .actions a.del-throb { background-image: url('/images/icon_throbber.gif'); }
+  .hentry .actions .del { background-image: url('/images/icon_trash.gif'); }
+  body#show .repl, .hentry .actions .repl { background-image: url('/images/icon_reply.gif'); }
+  .direct_message .actions .repl { background-image: url('/images/icon_direct_reply.gif'); }
+  .direct_message .actions .del { background-image: url('/images/icon_trash.gif'); }
+  .notify { background-image: url('/images/girl.gif'); }
+  .promotion, ul#tabMenu a#keyword_search_tab.hover, ul#tabMenu a:hover { background-image: url('/images/pale.png'); }
+  div#follow-toggle.closed { background-image: url('/images/toggle_closed.gif'); }
+  div#follow-toggle.opened { background-image: url('/images/toggle_opened.gif'); }
+  .follow-actions .following { background-image: url('/images/checkmark.gif'); }  
+&lt;/style&gt;
+      &lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;rob_test (RSS)&quot; href=&quot;/statuses/user_timeline/17525701.rss&quot; /&gt;
+      &lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;rob_test (Atom)&quot; href=&quot;/statuses/user_timeline/17525701.atom&quot; /&gt;
+  &lt;/head&gt;
+
+  &lt;body class=&quot;&lt;%= @body_classes %&gt;&quot; id=&quot;&lt;%= @body_id %&gt;&quot;&gt;
+    &lt;div id=&quot;dim-screen&quot;&gt;&lt;/div&gt;
+    &lt;ul id=&quot;accessibility&quot;&gt;
+  &lt;li&gt;On a mobile phone? Check out &lt;a href=&quot;http://m.twitter.com/&quot;&gt;m.twitter.com&lt;/a&gt;!&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;#footer&quot; accesskey=&quot;2&quot;&gt;Skip to navigation&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;#tabMenu&quot; accesskey=&quot;3&quot;&gt;Jump to the sidebar&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;&lt;a href=&quot;#signin&quot;&gt;Skip to sign in form&lt;/a&gt;&lt;/li&gt;
+
+&lt;/ul&gt;
+
+    
+    &lt;div id=&quot;container&quot; class=&quot;subpage&quot;&gt;
+      &lt;span id=&quot;loader&quot; style=&quot;display:none&quot;&gt;&lt;img alt=&quot;Loader&quot; src=&quot;/images/loader.gif&quot; /&gt;&lt;/span&gt;
+      &lt;h1 id=&quot;header&quot;&gt;
+	&lt;a href=&quot;/home&quot; title=&quot;Twetter: home&quot; accesskey=&quot;1&quot;&gt;
+    
+      &lt;img alt=&quot;Twetter.com&quot; height=&quot;41&quot; src=&quot;/images/twitter_logo_s.png&quot; width=&quot;191&quot; /&gt;
+    
+	&lt;/a&gt;
+&lt;/h1&gt;
+
+
+      &lt;% if flash[:notice] || flash[:error] %&gt;
+            &lt;div id=&quot;flash&quot;&gt;
+            &lt;h2 class=&quot;thumb&quot;&gt;&lt;img alt=&quot;Girl&quot; class=&quot;girl&quot; src=&quot;/images/girl.gif&quot; /&gt;&lt;/h2&gt;
+
+            &lt;div class=&quot;content-bubble-arrow&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;desc&quot;&gt;&lt;p&gt;&lt;%= flash[:notice] %&gt;&lt;%= flash[:error] %&gt;&lt;/p&gt;&lt;/div&gt;
+
+      &lt;% else %&gt;
+            &lt;div id=&quot;flash&quot; style=&quot;display:none;&quot;&gt;
+      &lt;% end %&gt;
+      &lt;/div&gt;
+      &lt;div class=&quot;content-bubble-arrow&quot;&gt;&lt;/div&gt;
+      
+        &lt;table cellspacing=&quot;0&quot; class=&quot;columns&quot;&gt;
+          &lt;tbody&gt;
+            &lt;tr&gt;
+                &lt;td id=&quot;content&quot; class=&quot;column&quot;&gt;
+                    &lt;div class=&quot;wrapper&quot;&gt;
+				        &lt;%= yield %&gt;
+                    &lt;/div&gt;
+                &lt;/td&gt;
+
+                &lt;td id=&quot;side_base&quot; class=&quot;column&quot;&gt;
+                    &lt;div id=&quot;side&quot;&gt;
+                        &lt;%= yield :sidebar %&gt;
+                    &lt;/div&gt;
+                    &lt;hr/&gt;
+
+                &lt;/td&gt;
+
+            &lt;/tr&gt;
+          &lt;/tbody&gt;
+        &lt;/table&gt;
+      
+
+      &lt;div id=&quot;footer&quot; &gt;
+  &lt;h3&gt;Footer&lt;/h3&gt;
+
+  &lt;ul&gt;
+    &lt;li class=&quot;first&quot;&gt;&amp;copy; 2009 Twetter&lt;/li&gt;
+
+    &lt;li&gt;&lt;a href=&quot;/about#about&quot;&gt;About Us&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;/about#contact&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt;
+    &lt;!--
+    &lt;li&gt;&lt;a href=&quot;http://blog.twitter.com&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;http://status.twitter.com&quot;&gt;Status&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;/downloads&quot;&gt;Apps&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;&lt;a href=&quot;http://apiwiki.twitter.com/&quot;&gt;API&lt;/a&gt;&lt;/li&gt;
+
+    &lt;li&gt;&lt;a href=&quot;http://search.twitter.com&quot;&gt;Search&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;http://help.twitter.com&quot;&gt;Help&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;/jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;/terms&quot;&gt;Terms&lt;/a&gt;&lt;/li&gt;
+    &lt;li&gt;&lt;a href=&quot;/privacy&quot;&gt;Privacy&lt;/a&gt;&lt;/li&gt;
+    --&gt;
+  &lt;/ul&gt;
+
 &lt;/div&gt;
-&lt;/body&gt;
+
+      &lt;hr /&gt;
+              
+  &lt;div id=&quot;navigation&quot;&gt;
+    &lt;ul&gt;
+      &lt;li class=&quot;first&quot;&gt;&lt;a href=&quot;/home&quot; id=&quot;home_link&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
+      &lt;li&gt;&lt;a href=&quot;/rob_nielsen&quot; id=&quot;profile_link&quot;&gt;Profile&lt;/a&gt;&lt;/li&gt;
+      &lt;!--&lt;li&gt;&lt;a href=&quot;/invitations&quot; id=&quot;find_people_link&quot;&gt;Find People&lt;/a&gt;&lt;/li&gt; --&gt;
+
+      &lt;li&gt;&lt;a href=&quot;/account/settings&quot; id=&quot;settings_link&quot;&gt;Settings&lt;/a&gt;&lt;/li&gt;
+      &lt;!--&lt;li&gt;&lt;a href=&quot;http://google.com&quot; id=&quot;help_link&quot;&gt;Help&lt;/a&gt;&lt;/li&gt; --&gt;
+      &lt;li&gt;&lt;a id=&quot;sign_out_link&quot; href=&quot;#&quot; onclick=&quot;document.getElementById('sign_out_form').submit(); return false;&quot;&gt;Sign out&lt;/a&gt;&lt;/li&gt;
+      
+      
+    &lt;/ul&gt;
+    &lt;form method=&quot;post&quot; id=&quot;sign_out_form&quot; action=&quot;/sessions/destroy&quot; style=&quot;display:none;&quot;&gt;
+      &lt;input name=&quot;authenticity_token&quot; value=&quot;cf586308d33b4601f0dfba618cc4bbf7c5baf1c0&quot; type=&quot;hidden&quot; /&gt;
+    &lt;/form&gt;
+
+  &lt;/div&gt;
+  
+
+
+          &lt;/div&gt;
+
+    
+    &lt;script src=&quot;/javascripts/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;script src=&quot;/javascripts/application.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;script src=&quot;/javascripts/jquery.color.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;/javascripts/timeline.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot;&gt;
+//&lt;![CDATA[
+      twttr.form_authenticity_token = 'cf586308d33b4601f0dfba618cc4bbf7c5baf1c0';
+
+//]]&gt;
+
+&lt;/script&gt;
+&lt;% if (flash[:notice]||flash[:error]) %&gt;
+        &lt;script type=&quot;text/javascript&quot;&gt;
+//&lt;![CDATA[
+
+              $( function () {
+              setTimeout(function() { $('#flash').slideUp(); }, 3000);
+              });
+
+//]]&gt;
+        &lt;/script&gt;
+&lt;% end %&gt;
+
+&lt;%= yield :javascript %&gt;
+
+  &lt;/body&gt;
+
 &lt;/html&gt;</diff>
      <filename>app/views/layouts/application.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,27 @@
-&lt;div class=&quot;tweet &lt;%=cycle(&quot;on&quot;, &quot;off&quot;) %&gt;&quot;&gt;
-	&lt;h2&gt;&lt;%= h tweet.user.username %&gt;&lt;/h2&gt;
-	&lt;p&gt;&lt;%= h tweet.tweet %&gt;&lt;/p&gt;
-	&lt;span class=&quot;datetime&quot; &gt;&lt;%= time_ago_in_words(tweet.created_at) + &quot; ago&quot; %&gt;&lt;/span&gt;
-&lt;/div&gt;
+&lt;tr class=&quot;hentry status u-&lt;%= h tweet.user.username %&gt;&lt;%= (tweet.user==@user) ? &quot; mine&quot; : &quot;&quot; %&gt;&lt;%= ((type=='mine' &amp;&amp; tweet_counter==0) || type=='friends_update') ? &quot; latest-status&quot;:&quot;&quot; %&gt;&quot; id=&quot;status_&lt;%= h tweet.id %&gt;&quot;&gt;
+    &lt;% if (type!='mine') %&gt;
+    &lt;td class=&quot;thumb vcard author&quot;&gt;
+        &lt;a href=&quot;/&lt;%= h tweet.user.username %&gt;&quot; class=&quot;url&quot;&gt;&lt;img alt=&quot;&lt;%= tweet.user.name %&gt;&quot; class=&quot;photo fn&quot; height=&quot;48&quot; src=&quot;&lt;%= tweet.user.web_profile_url %&gt;&quot; width=&quot;48&quot;/&gt;&lt;/a&gt;
+    &lt;/td&gt;
+    &lt;% end %&gt;
+    &lt;td class=&quot;status-body&quot;&gt;
+        &lt;div&gt;
+            &lt;% if (type!='mine') %&gt;
+            &lt;strong&gt;&lt;a href=&quot;/&lt;%= h tweet.user.username %&gt;&quot; title=&quot;&lt;%= tweet.user.name %&gt;&quot;&gt;&lt;%= tweet.user.username %&gt;&lt;/a&gt;&lt;/strong&gt;
+            &lt;% end %&gt;
+            &lt;span class=&quot;entry-content&quot;&gt;&lt;%= link_users(tweet.tweet) %&gt;&lt;/span&gt;
+            &lt;span class=&quot;meta entry-meta&quot;&gt;&lt;a href=&quot;/&lt;%= h tweet.user.username %&gt;/status/&lt;%= h tweet.id %&gt;&quot; class=&quot;entry-date&quot; rel=&quot;bookmark&quot;&gt;&lt;span class=&quot;published&quot; title=&quot;&lt;%= tweet.created_at_formatted %&gt;&quot;&gt;&lt;%= time_ago_in_words(tweet.created_at) %&gt;
+                ago&lt;/span&gt;&lt;/a&gt; &lt;span&gt;from &lt;%= h tweet.source%&gt;&lt;/span&gt;
+                &lt;% if (!tweet.recipient.nil?) then %&gt;
+             &lt;a href=&quot;http://twitter.com/rob_nielsen/status/1014433331&quot;&gt;in reply to &lt;%= tweet.recipient.username %&gt;&lt;/a&gt;
+            &lt;% end %&gt;
+            &lt;/span&gt;
+        &lt;/div&gt;
+    &lt;/td&gt;
+    &lt;td class=&quot;actions&quot;&gt;
+        &lt;div&gt;
+            &lt;a class=&quot;non-fav&quot; id=&quot;status_star_&lt;%= h tweet.id %&gt;&quot; title=&quot;favorite this update&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;a class=&quot;repl&quot; href=&quot;/home?status=@&lt;%= h tweet.user.username %&gt;%20&amp;amp;in_reply_to_status_id=&lt;%= h tweet.id %&gt;&amp;amp;in_reply_to=&lt;%= h tweet.user.username %&gt;&quot; title=&quot;reply to &lt;%= h tweet.user.username %&gt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/a&gt;
+        &lt;/div&gt;
+    &lt;/td&gt;
+&lt;/tr&gt;
+</diff>
      <filename>app/views/statuses/_tweet.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1,145 @@
-&lt;%= render :partial=&gt;'tweet', :collection=&gt;@tweets %&gt;
\ No newline at end of file
+&lt;% setup(:title=&gt;&quot;Home&quot;, :body_id=&gt;&quot;home&quot;, :body_classes=&gt;&quot;account replyable&quot;, :css=&gt;['timeline']) %&gt;
+
+&lt;form action=&quot;/status/update&quot; id=&quot;doingForm&quot; method=&quot;post&quot;&gt;
+    &lt;div style=&quot;margin:0;padding:0&quot;&gt;
+        &lt;input name=&quot;authenticity_token&quot; type=&quot;hidden&quot; value=&quot;35b185be716b1d76607e18b2fc154509ac055063&quot;/&gt;&lt;/div&gt;
+    &lt;input id=&quot;tab_action&quot; name=&quot;tab&quot; type=&quot;hidden&quot; value=&quot;home&quot;/&gt;
+    &lt;input id=&quot;authenticity_token&quot; name=&quot;authenticity_token&quot; type=&quot;hidden&quot; value=&quot;35b185be716b1d76607e18b2fc154509ac055063&quot;/&gt;
+    &lt;input id=&quot;in_reply_to_status_id&quot; name=&quot;in_reply_to_status_id&quot; type=&quot;hidden&quot; value=&quot;&quot;/&gt;
+    &lt;input id=&quot;in_reply_to&quot; name=&quot;in_reply_to&quot; type=&quot;hidden&quot; value=&quot;&quot;/&gt;
+    &lt;input id=&quot;source&quot; name=&quot;source&quot; type=&quot;hidden&quot; value=&quot;&quot;/&gt;
+    &lt;fieldset class=&quot;common-form standard-form&quot;&gt;
+        &lt;div class=&quot;bar&quot;&gt;
+            &lt;h3&gt;&lt;label for=&quot;status&quot; class=&quot;doing&quot;&gt;What are you doing?&lt;/label&gt;&lt;/h3&gt;
+      &lt;span id=&quot;chars_left_notice&quot; class=&quot;numeric&quot;&gt;
+
+        &lt;strong id=&quot;status-field-char-counter&quot; class=&quot;char-counter&quot;&gt;&lt;/strong&gt;
+      &lt;/span&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;info&quot;&gt;
+            &lt;textarea cols=&quot;40&quot; rows=&quot;2&quot; id=&quot;status&quot; name=&quot;status&quot;&gt;&lt;%= params[:status] %&gt;&lt;/textarea&gt;
+
+            &lt;div class=&quot;status-btn&quot;&gt;
+                &lt;input type=&quot;submit&quot; name=&quot;update&quot; value=&quot;update&quot; id=&quot;update-submit&quot; class=&quot;status-btn round-btn&quot;/&gt;
+            &lt;/div&gt;
+
+            &lt;% if (!@user.latest_tweet.nil?) %&gt;
+            &lt;div id=&quot;currently&quot;&gt;
+                &lt;strong&gt;Latest:&lt;/strong&gt;
+        &lt;span id=&quot;latest_status&quot;&gt;
+            &lt;%= render :partial=&gt;'latest', :object=&gt;@user.latest_tweet %&gt;
+        &lt;/span&gt;
+            &lt;/div&gt;
+            &lt;% end %&gt;
+        &lt;/div&gt;
+
+    &lt;/fieldset&gt;
+&lt;/form&gt;
+
+&lt;div class=&quot;tab&quot;&gt;
+
+    &lt;h2 class=&quot;timeline-header&quot; style=&quot;display:none;&quot;&gt;&lt;/h2&gt;
+
+    &lt;table cellspacing=&quot;0&quot; class=&quot;doing&quot; id=&quot;timeline&quot;&gt;
+        &lt;tbody id=&quot;timeline_body_for_update&quot; style=&quot;display: none&quot;&gt;&lt;/tbody&gt;
+        &lt;tbody id=&quot;timeline_body&quot;&gt;
+            &lt;%= render :partial=&gt;'statuses/tweet', :collection=&gt;@tweets, :locals=&gt;{:type=&gt;'friends'} %&gt;
+        &lt;/tbody&gt;
+    &lt;/table&gt;
+
+
+    &lt;div class=&quot;bottom_nav&quot;&gt;
+        &lt;div class=&quot;pagination&quot; id=&quot;pagination&quot;&gt;
+
+
+            &lt;a href=&quot;/home?page=2&quot; class=&quot;section_links&quot; rel=&quot;prev&quot;&gt;Older &amp;#187;&lt;/a&gt;
+
+        &lt;/div&gt;
+        &lt;span class=&quot;left&quot;&gt;&lt;a href=&quot;/statuses/friends_timeline/16360207.rss&quot; class=&quot;section_links&quot;&gt;RSS&lt;/a&gt;&lt;/span&gt;
+    &lt;/div&gt;
+
+&lt;/div&gt;
+
+
+&lt;img alt=&quot;Icon_star_full&quot; src=&quot;http://assets0.twitter.com/images/icon_star_full.gif&quot; style=&quot;display:none;&quot;/&gt;
+
+
+&lt;% content_for :sidebar do %&gt;
+
+    &lt;div class=&quot;section&quot;&gt;
+        &lt;div class=&quot;user_icon&quot;&gt;
+            &lt;a href=&quot;/&lt;%= h @user.username %&gt;&quot; class=&quot;url&quot; rel=&quot;contact&quot; title=&quot;&lt;%= h @user.name %&gt;&quot;&gt;&lt;img alt=&quot;&lt;%= h @user.name %&gt;&quot; class=&quot;side_thumb photo fn&quot; height=&quot;73&quot; src=&quot;&lt;%= @user.web_profile_url %&gt;&quot; width=&quot;73&quot;/&gt;&lt;/a&gt;
+
+            &lt;p id=&quot;me_name&quot;&gt;&lt;%= h @user.username %&gt;&lt;/p&gt;
+
+        &lt;/div&gt;
+
+        &lt;%= render :partial=&gt;'user/user_stats', :object=&gt; @user %&gt;
+
+    &lt;/div&gt;
+
+    &lt;ul id=&quot;tabMenu&quot;&gt;
+        &lt;li&gt;
+
+            &lt;a href=&quot;/home&quot; id=&quot;home_tab&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;
+            &lt;a href=&quot;/replies&quot; id=&quot;replies_tab&quot;&gt;@Replies&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;
+            &lt;a href=&quot;/direct_messages&quot; id=&quot;direct_messages_tab&quot;&gt;&lt;span id=&quot;message_count&quot; class=&quot;stat_count&quot;&gt;6&lt;/span&gt;
+                Direct Messages&lt;/a&gt;&lt;/li&gt;
+
+        &lt;li&gt;
+            &lt;a href=&quot;/favorites&quot; id=&quot;favorites_tab&quot;&gt;Favorites&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;
+            &lt;a href=&quot;/public_timeline&quot; id=&quot;public_timeline_tab&quot;&gt;Everyone&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+
+    &lt;div class=&quot;section last&quot;&gt;
+
+        &lt;div class=&quot;section-header&quot; id=&quot;people&quot;&gt;
+
+            &lt;a href=&quot;/invitations&quot; class=&quot;section-links&quot;&gt;add&lt;/a&gt;
+
+            &lt;h1&gt;Following&lt;/h1&gt;
+        &lt;/div&gt;
+
+
+        &lt;div id=&quot;friends&quot;&gt;
+
+            &lt;%= render :partial=&gt;'user/friend', :collection=&gt;@user.friends %&gt;
+
+        &lt;/div&gt;
+        &lt;div id=&quot;friends_view_all&quot;&gt;&lt;a href=&quot;/friends&quot; rel=&quot;me&quot;&gt;View All&amp;hellip;&lt;/a&gt;&lt;/div&gt;
+
+
+    &lt;/div&gt;
+
+    &lt;div class=&quot;section last&quot;&gt;
+        &lt;div class=&quot;section-header&quot;&gt;
+            &lt;h1&gt;Device Updates&lt;/h1&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;device_control&quot;&gt;
+
+            &lt;div id=&quot;device_msg&quot;&gt;
+                &lt;a href=&quot;/devices&quot;&gt;Set up SMS updates&lt;/a&gt;
+            &lt;/div&gt;
+        &lt;/div&gt;
+
+
+    &lt;/div&gt;
+
+&lt;% end %&gt;
+
+&lt;% content_for :javascript do %&gt;
+    &lt;script type=&quot;text/javascript&quot;&gt;
+//&lt;![CDATA[
+
+          $( function () {
+            $('#latest_status').isCurrentStatus();$('#doingForm').isUpdateForm();  $('body#home ul#tabMenu li a#home_tab, body#profile ul#tabMenu li a#updates_tab, body#replies ul#tabMenu li a#replies_tab, body.direct_messages ul#tabMenu li a#direct_messages_tab, body#favourings ul#tabMenu li a#favorites_tab, body#public_timeline ul#tabMenu li a#public_timeline_tab').isSidebarTab();
+      $('#current_user_send_via_sms, #current_user_send_via_none').isDeviceUpdateOption();
+
+          });
+
+//]]&gt;
+    &lt;/script&gt;
+&lt;% end %&gt;
\ No newline at end of file</diff>
      <filename>app/views/statuses/tweets.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,133 @@
-&lt;h1&gt;&lt;%= @duser.username %&gt;&lt;/h1&gt;
-&lt;%= image_tag @duser.profile_url %&gt;
-&lt;br/&gt;
-&lt;%= render :partial=&gt;'statuses/tweet', :collection=&gt;@tweets %&gt;
+&lt;% setup(:title=&gt;@duser.username, :body_id=&gt;&quot;profile&quot;, :css=&gt;['timeline']) %&gt;
+&lt;div class=&quot;profile-head&quot;&gt;
+    &lt;h2 class=&quot;thumb&quot;&gt;
+        &lt;!-- &lt;img alt=&quot;Default_profile_bigger&quot; height=&quot;73&quot; src=&quot;/images/default_profile_bigger.png&quot; width=&quot;73&quot; /&gt; --&gt;
+        &lt;%= image_tag @duser.web_profile_url, :size=&gt;&quot;73x73&quot; %&gt;
+        &lt;%= @duser.username %&gt;
+    &lt;/h2&gt;
 
+    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;follow_actions_17525701&quot; class=&quot;follow-actions rob_test&quot;&gt;
+        &lt;% if (@duser != @user) %&gt;
+            &lt;div class=&quot;follow-control&quot;&gt;
+                &lt;div id=&quot;follow-toggle&quot; class=&quot;closed med-btn&quot;&gt;
+
+                    &lt;img class=&quot;ticon&quot; src=&quot;/images/tiny_check.gif&quot; alt=&quot;following&quot; class=&quot;followicon&quot;/&gt;&lt;strong&gt;Following&lt;/strong&gt;&amp;nbsp;
+                &lt;/div&gt;
+
+                &lt;div id=&quot;follow-details&quot;&gt;
+                    &lt;p id=&quot;following&quot;&gt;
+                        &lt;strong&gt;You follow &lt;%= h @duser.username %&gt;&lt;/strong&gt;
+                        &lt;input class=&quot;remove-button&quot; id=&quot;remove_button&quot; onclick=&quot;removeUser(17525701, &lt;%= @duser.username %&gt;, 'cf586308d33b4601f0dfba618cc4bbf7c5baf1c0');&quot; type=&quot;button&quot; value=&quot;Remove&quot;/&gt;
+                        &lt;br/&gt;
+                                &lt;span class=&quot;desc&quot;&gt;&lt;%= h @duser.username %&gt;
+                                    's updates appear in your &lt;a href=&quot;/home&quot;&gt;timeline&lt;/a&gt;.&lt;/span&gt;
+                    &lt;/p&gt;
+
+                    &lt;div id=&quot;notifications&quot;&gt;
+                    &lt;/div&gt;
+                &lt;/div&gt;
+            &lt;/div&gt;
+        &lt;% end %&gt;
+    &lt;/div&gt;
+
+    &lt;div class=&quot;hentry&quot;&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+
+&lt;div class=&quot;tab&quot;&gt;
+    &lt;table cellspacing=&quot;0&quot; class=&quot;doing&quot; id=&quot;timeline&quot;&gt;
+        &lt;tbody id=&quot;timeline_body_for_update&quot; style=&quot;display: none&quot;&gt;&lt;/tbody&gt;
+        &lt;tbody id=&quot;timeline_body&quot;&gt;
+
+        &lt;%= render :partial=&gt;'statuses/tweet', :collection=&gt;@tweets, :locals=&gt;{:type=&gt;'mine'} %&gt;
+
+        &lt;/tbody&gt;
+    &lt;/table&gt;
+    &lt;div class=&quot;bottom_nav&quot;&gt;
+        &lt;div class=&quot;pagination&quot; id=&quot;pagination&quot;&gt;
+            &lt;span class=&quot;section_links disabled&quot;&gt;Older &amp;#187;&lt;/span&gt;
+        &lt;/div&gt;
+    &lt;span class=&quot;statuses_options&quot;&gt;
+      &lt;a href=&quot;http://twitter.com/statuses/user_timeline/17525701.rss&quot; class=&quot;section_links&quot;&gt;RSS&lt;/a&gt;
+    &lt;/span&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+
+&lt;% content_for :sidebar do %&gt;
+
+    &lt;div class=&quot;section&quot;&gt;
+  &lt;span class=&quot;section-links&quot;&gt;
+      &lt;/span&gt;
+        &lt;address&gt;
+            &lt;ul class=&quot;about vcard entry-author&quot;&gt;
+                &lt;li&gt;&lt;span class=&quot;label&quot;&gt;Name&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;&lt;%= h @duser.username %&gt;&lt;/span&gt;&lt;/li&gt;
+                &lt;% if @duser.location %&gt;
+                    &lt;li&gt;&lt;span class=&quot;label&quot;&gt;Location&lt;/span&gt; &lt;span class=&quot;adr&quot;&gt;&lt;%= h @duser.location %&gt;&lt;/span&gt;&lt;/li&gt;
+                &lt;% end %&gt;
+                &lt;% if @duser.bio %&gt;
+                    &lt;li id=&quot;bio&quot;&gt;&lt;span class=&quot;label&quot;&gt;Bio&lt;/span&gt; &lt;span class=&quot;bio&quot;&gt;&lt;%= h @duser.bio %&gt;&lt;/span&gt;&lt;/li&gt;
+                &lt;% end %&gt;
+            &lt;/ul&gt;
+        &lt;/address&gt;
+
+        &lt;%= render :partial=&gt;'user_stats', :object=&gt; @duser %&gt;
+
+    &lt;/div&gt;
+
+    &lt;ul id=&quot;tabMenu&quot;&gt;
+        &lt;li&gt;
+            &lt;a href=&quot;/rob_test&quot; id=&quot;updates_tab&quot;&gt;Updates&lt;/a&gt;&lt;/li&gt;
+        &lt;li&gt;
+            &lt;a href=&quot;/rob_test/favourites&quot; id=&quot;favorites_tab&quot;&gt;Favorites&lt;/a&gt;&lt;/li&gt;
+    &lt;/ul&gt;
+
+    &lt;div class=&quot;section last&quot;&gt;
+
+
+        &lt;div class=&quot;section-header&quot;&gt;
+
+            &lt;h1&gt;Actions&lt;/h1&gt;
+        &lt;/div&gt;
+        &lt;!-- /section-header --&gt;
+        &lt;ul&gt;
+            &lt;li&gt;
+                &lt;a href=&quot;/direct_messages/create/&lt;%= @duser.id %&gt;&quot;&gt;message&lt;/a&gt; &lt;%= h @duser.username %&gt;
+            &lt;/li&gt;
+
+
+            &lt;a href=&quot;/blocks/confirm/&lt;%= @duser.id %&gt;&quot; style=&quot;color: gray;&quot;&gt;block&lt;/a&gt; &lt;%= h @duser.username %&gt;
+
+
+        &lt;/ul&gt;
+
+        &lt;br/&gt;
+
+        &lt;div class=&quot;section-header&quot;&gt;
+            &lt;h1&gt;Following&lt;/h1&gt;
+        &lt;/div&gt;
+
+
+        &lt;div id=&quot;friends&quot;&gt;
+
+            &lt;%= render :partial=&gt;'friend', :collection=&gt;@duser.friends %&gt;
+
+
+        &lt;/div&gt;
+        &lt;br/&gt;
+    &lt;/div&gt;
+
+&lt;% end %&gt;
+
+&lt;% content_for :javascript do %&gt;
+    &lt;script type=&quot;text/javascript&quot;&gt;
+        //&lt;![CDATA[
+
+                $( function () {
+                        $('body#profile ul#tabMenu li a#updates_tab, body#favourings ul#tabMenu li a#favorites_tab').isSidebarTab();
+
+                        });
+
+                //]]&gt;
+    &lt;/script&gt;
+&lt;% end %&gt;
\ No newline at end of file</diff>
      <filename>app/views/user/index.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,11 @@
 ActionController::Routing::Routes.draw do |map|
-  map.root :controller =&gt; &quot;statuses&quot; ,:action =&gt; &quot;friends_timeline&quot;
+  map.logout '/logout', :controller =&gt; 'sessions', :action =&gt; 'destroy'
+  map.login '/login', :controller =&gt; 'sessions', :action =&gt; 'new'
+  map.resource :session
+  map.root :controller =&gt; &quot;sessions&quot; ,:action =&gt; &quot;new&quot;
   map.connect &quot;/home&quot; , :controller =&gt; &quot;statuses&quot; ,:action =&gt; &quot;friends_timeline&quot;
   map.connect &quot;/statuses/public_timeline.:format&quot;, :controller =&gt; &quot;statuses&quot;, :action =&gt; &quot;friends_timeline&quot;
+  map.connect &quot;/status/update&quot;, :controller =&gt; &quot;statuses&quot;, :action=&gt; &quot;update&quot;
 
   # See how all your routes lay out with &quot;rake routes&quot;
 </diff>
      <filename>config/routes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 class CreateTweets &lt; ActiveRecord::Migration
   def self.up
     create_table :tweets do |t|
-      t.string :username,:tweet,:source
-      t.integer :user_id  
+      t.string :tweet,:source, :tweet_type
+      t.integer :recipient_id, :user_id
       t.timestamps
     end
   end</diff>
      <filename>db/migrate/20080621002401_create_tweets.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,22 +9,32 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version =&gt; 20081121112034) do
+ActiveRecord::Schema.define(:version =&gt; 20090119123823) do
 
   create_table &quot;tweets&quot;, :force =&gt; true do |t|
     t.string   &quot;tweet&quot;
     t.string   &quot;source&quot;
+    t.string   &quot;tweet_type&quot;
+    t.integer  &quot;recipient_id&quot;
     t.integer  &quot;user_id&quot;
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
-    t.integer  &quot;recipient_id&quot;
-    t.string   &quot;tweet_type&quot;
   end
 
   create_table &quot;users&quot;, :force =&gt; true do |t|
-    t.string   &quot;username&quot;
+    t.string   &quot;username&quot;,                  :limit =&gt; 40
+    t.string   &quot;name&quot;,                      :limit =&gt; 100, :default =&gt; &quot;&quot;
+    t.string   &quot;email&quot;,                     :limit =&gt; 100
+    t.string   &quot;crypted_password&quot;,          :limit =&gt; 40
+    t.string   &quot;salt&quot;,                      :limit =&gt; 40
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
+    t.string   &quot;remember_token&quot;,            :limit =&gt; 40
+    t.datetime &quot;remember_token_expires_at&quot;
+    t.string   &quot;bio&quot;
+    t.string   &quot;location&quot;
   end
 
+  add_index &quot;users&quot;, [&quot;username&quot;], :name =&gt; &quot;index_users_on_username&quot;, :unique =&gt; true
+
 end</diff>
      <filename>db/schema.rb</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/profile/rob_nielsen.png</filename>
    </modified>
    <modified>
      <diff>@@ -1,2 +1,565 @@
-// Place your application-specific JavaScript functions and classes here
-// This file is automatically included by javascript_include_tag :defaults
+if (!window.console || !console.firebug) {
+    var names = [&quot;log&quot;,&quot;debug&quot;,&quot;info&quot;,&quot;warn&quot;,&quot;error&quot;,&quot;assert&quot;,&quot;dir&quot;,&quot;dirxml&quot;,&quot;group&quot;,&quot;groupEnd&quot;,&quot;time&quot;,&quot;timeEnd&quot;,&quot;count&quot;,&quot;trace&quot;,&quot;profile&quot;,&quot;profileEnd&quot;];
+    window.console = {};
+    for (var i = 0; i &lt; names.length; ++i) {
+        window.console[names[i]] = function() {
+        }
+    }
+}
+function _(C, A) {
+    if (twttr.i18n) {
+        var B = twttr.i18n[C];
+        if (B) {
+            C = B
+        }
+    }
+    if (A) {
+        for (var D in A) {
+            C = C.replace(new RegExp(&quot;\\#\\{&quot; + D + &quot;\\}&quot;, &quot;gi&quot;), A[D])
+        }
+    }
+    return C
+}
+(function() {
+    if (document.all) {
+        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
+            var A = new Number(RegExp.$1);
+            if (A &gt;= 8) {
+                $.browser.msie8 = true
+            } else {
+                if (A &gt;= 7) {
+                    $.browser.msie7 = true
+                } else {
+                    $.browser.msie6 = true
+                }
+            }
+        }
+    }
+})();
+$.fn.isSidebarTab = function() {
+    return this.each(function() {
+        var A = $(this);
+        A.click(function() {
+            var B = A.attr(&quot;href&quot;);
+            twttr.googleAnalytics(B + &quot;/refresh&quot;);
+            $.ajax({type:&quot;GET&quot;,url:B,data:{twttr:true},dataType:&quot;json&quot;,beforeSend:twttr.loading,success:function(C) {
+                twttr.processJson(C);
+                $.initializeTimeline()
+            },complete:twttr.loaded});
+            return false
+        })
+    })
+};
+$.fn.isDeviceUpdateOption = function() {
+    return this.each(function() {
+        var A = $(this);
+        A.click(function() {
+            $.ajax({type:&quot;POST&quot;,dataType:&quot;json&quot;,url:&quot;/account/update_send_via&quot;,data:{authenticity_token:twttr.form_authenticity_token,&quot;current_user[send_via]&quot;:A.attr(&quot;value&quot;),twttr:true},beforeSend:twttr.loading,complete:twttr.loaded})
+        })
+    })
+};
+$.fn.isExampleField = function(A, B, C) {
+    if (!C) {
+        C = &quot;focus&quot;
+    }
+    return this.each(function() {
+        var D = $(this);
+        if (B) {
+            D.val(B)
+        } else {
+            B = D.val()
+        }
+        D.attr(&quot;title&quot;, B);
+        D.bind(C, function() {
+            if (D.val() == D.attr(&quot;title&quot;)) {
+                D.val(&quot;&quot;).css(&quot;color&quot;, &quot;#000&quot;).select()
+            }
+        });
+        D.blur(function() {
+            if (D.val() == &quot;&quot;) {
+                D.val(D.attr(&quot;title&quot;)).css(&quot;color&quot;, &quot;&quot;)
+            }
+        });
+        if (A) {
+            $(A).mousedown(function() {
+                if (D.val() == D.attr(&quot;title&quot;)) {
+                    D.val(&quot;&quot;)
+                }
+                return true
+            })
+        }
+    })
+};
+$.fn.isUpdateForm = function() {
+    return this.each(function() {
+        var I = $(this);
+        var F = I.find(&quot;textarea&quot;).isCharCounter();
+        var A = I.find(&quot;input[type=submit]&quot;);
+        var B = I.find(&quot;label.doing&quot;);
+        var E = /^\s*@(\w+)\W+/;
+        var D = /^\s*[dD][mM]?\s+(?:(\w+)\W+)?/;
+        function H() {
+            var J = F.val();
+            if (J.length &gt; 140) {
+                alert(_(&quot;That update is over 140 characters!&quot;));
+                return false
+            } else {
+                if (J.replace(/s\*/g, &quot;&quot;) == &quot;&quot;) {
+                    return false
+                } else {
+                    A.attr(&quot;disabled&quot;, &quot;disabled&quot;);
+                    return true
+                }
+            }
+        }
+        function G(J) {
+            A.removeAttr(&quot;disabled&quot;, &quot;disabled&quot;);
+            var K = J.text;
+            if (J.flash) {
+                $(&quot;#flash&quot;).html(J.flash).fadeIn(200)
+            } else {
+                $(&quot;#timeline tr.hentry:first&quot;).removeClass(&quot;latest-status&quot;);
+                if (J.status_tr &amp;&amp; $(&quot;body&quot;).attr(&quot;id&quot;) == &quot;home&quot;) {
+                    $(&quot;#timeline tbody&quot;).prepend(J.status_tr);
+                    $.initializeTimeline()
+                }
+                $(&quot;#update_count&quot;).fadeOut(&quot;medium&quot;, function() {
+                    $(&quot;#update_count&quot;).html(J.status_count).fadeIn(&quot;medium&quot;)
+                });
+                if (J.latest_status) {
+                    $(&quot;#latest_status&quot;).html(J.latest_status).isCurrentStatus(true)
+                }
+            }
+            F.val(&quot;&quot;).focusEnd();
+            $(&quot;#in_reply_to_status_id&quot;).val(&quot;&quot;);
+            $(&quot;#in_reply_to&quot;).val(&quot;&quot;);
+            C(&quot;&quot;);
+            F.trigger(&quot;change&quot;)
+        }
+        function C(K) {
+            var J;
+            if (J = K.match(D)) {
+                B.html(_(&quot;Direct message&quot;) + (J[1] ? &quot; &quot; + J[1] : &quot;&quot;) + &quot;:&quot;);
+                A.val(_(&quot;send&quot;))
+            } else {
+                if (J = K.match(E)) {
+                    B.html(_(&quot;Reply to #{screen_name}:&quot;, {screen_name:J[1]}));
+                    A.val(_(&quot;reply&quot;))
+                } else {
+                    B.html(_(&quot;What are you doing?&quot;));
+                    A.val(_(&quot;update&quot;))
+                }
+            }
+        }
+        F.bind(&quot;keyup blur focus&quot;, function() {
+            C($(this).val())
+        });
+        I.submit(function() {
+            if (H()) {
+                twttr.googleAnalytics(&quot;/status/update/refresh&quot;);
+                var O = F.val();
+                var N = {authenticity_token:twttr.form_authenticity_token,status:O,twttr:true};
+                var K = window.location.href;
+                if ($(&quot;body&quot;).attr(&quot;id&quot;) == &quot;home&quot; &amp;&amp; ((K.indexOf(&quot;page=&quot;) == -1) || K.match(/page=1(?!\d)/))) {
+                    N.return_rendered_status = true
+                }
+                var J = $(&quot;#in_reply_to_status_id&quot;).val();
+                var M;
+                if (J &amp;&amp; (M = O.match(E))) {
+                    if (M[1] == $(&quot;#in_reply_to&quot;).val()) {
+                        N.in_reply_to_status_id = J
+                    }
+                }
+                var L = $(&quot;#source&quot;).val();
+                if (L) {
+                    N.source = L
+                }
+                $.ajax({type:&quot;POST&quot;,dataType:&quot;json&quot;,url:&quot;/status/update&quot;,data:N,success:G,beforeSend:twttr.loading,complete:twttr.loaded})
+            }
+            return false
+        });
+        F.focusEnd()
+    })
+};
+$.fn.isDirectMessageForm = function() {
+    return this.each(function() {
+        var A = $(this);
+        var B = A.find(&quot;textarea&quot;).isCharCounter();
+        B.find(&quot;input[type=submit]&quot;).attr(&quot;disabled&quot;, &quot;disabled&quot;).addClass(&quot;disabled&quot;);
+        B.focusEnd();
+        A.find(&quot;select&quot;).change(function(C) {
+            B.trigger(&quot;update&quot;, C)
+        })
+    })
+};
+$.fn.isCharCounter = function() {
+    return this.each(function() {
+        var H = $(this);
+        var B = H.parents(&quot;form&quot;);
+        var D = B.find(&quot;.char-counter&quot;);
+        var F = B.find(&quot;input[type=submit]&quot;);
+        var A = B.find(&quot;select&quot;);
+        function G() {
+            F.attr(&quot;disabled&quot;, &quot;disabled&quot;).addClass(&quot;disabled&quot;)
+        }
+        function E() {
+            F.removeAttr(&quot;disabled&quot;).removeClass(&quot;disabled&quot;)
+        }
+        function C() {
+            var J = H.val();
+            var I = J.length;
+            D.html(&quot;&quot; + (140 - I));
+            if (I &lt;= 0) {
+                D.css(&quot;color&quot;, &quot;#cccccc&quot;);
+                G()
+            } else {
+                if (A.length == 0 || A.val()) {
+                    E()
+                } else {
+                    G()
+                }
+                if (I &gt; 130) {
+                    D.css(&quot;color&quot;, &quot;#d40d12&quot;)
+                } else {
+                    if (I &gt; 120) {
+                        D.css(&quot;color&quot;, &quot;#5c0002&quot;)
+                    } else {
+                        D.css(&quot;color&quot;, &quot;#cccccc&quot;)
+                    }
+                }
+            }
+        }
+        H.bind(&quot;keyup blur focus change paste input&quot;, function(I) {
+            C()
+        });
+        H.focus()
+    })
+};
+$.fn.isCurrentStatus = function(A) {
+    return this.each(function() {
+        var D = $(this);
+        var B = D.find(&quot;#latest_text&quot;);
+        var C = B.find(&quot;.status-text&quot;);
+        var G = B.find(&quot;.entry-meta&quot;);
+        $(&quot;#latest_text_full, #latest_text&quot;).click(function() {
+            $(&quot;#latest_text_full, #latest_text&quot;).toggle()
+        });
+        B.css(&quot;visibility&quot;, &quot;hidden&quot;);
+        twttr.boxTruncate($(&quot;#latest_text_full .status-text&quot;).text(), &quot;#currently #latest_text .status-text&quot;, &quot;#currently #latest_text&quot;, {height:40,minlength:60});
+        B.css(&quot;visibility&quot;, &quot;visible&quot;);
+        if (A) {
+            var F = C.css(&quot;color&quot;);
+            var E = G.css(&quot;color&quot;);
+            if (!$.browser.msie) {
+                B.css(&quot;opacity&quot;, 0)
+            }
+            C.css(&quot;color&quot;, &quot;#000&quot;);
+            G.css(&quot;color&quot;, &quot;#000&quot;);
+            if (!$.browser.msie) {
+                B.animate({opacity:1}, 1000)
+            }
+            if (twttr.timeouts.updateLatestStatus) {
+                clearTimeout(twttr.timeouts.updateLatestStatus)
+            }
+            twttr.timeouts.updateLatestStatus = setTimeout(function() {
+                C.animate({color:F}, 3000);
+                G.animate({color:E}, 3000)
+            }, 5000)
+        }
+    })
+};
+$.fn.isNotificationSetting = function() {
+    return this.each(function() {
+        var B = $(this);
+        var A = B.attr(&quot;id&quot;).replace(&quot;notify_on_&quot;, &quot;&quot;).replace(&quot;notify_off_&quot;, &quot;&quot;);
+        B.click(function() {
+            var C = B.attr(&quot;value&quot;);
+            $.ajax({type:&quot;POST&quot;,dataType:&quot;text&quot;,url:&quot;/friends/&quot; + C + &quot;/&quot; + A,data:{authenticity_token:twttr.form_authenticity_token,twttr:true},success:function(D) {
+                if (D.match(/success/)) {
+                    $(&quot;.follow-control&quot;).trigger(&quot;refresh&quot;, [&quot;notify_&quot; + (C == &quot;follow&quot; ? &quot;on&quot; : &quot;off&quot;)])
+                } else {
+                    twttr.error()
+                }
+            },beforeSend:twttr.loading,complete:twttr.loaded})
+        })
+    })
+};
+$.fn.isNudgable = function() {
+    return this.each(function() {
+        var A = $(this);
+        A.click(function() {
+            var B = A.parents(&quot;form&quot;);
+            B.find(&quot;input[name=authenticity_token]&quot;).val(twttr.form_authenticity_token);
+            B.submit();
+            return false
+        })
+    })
+};
+$.fn.isSelectAll = function(A) {
+    return this.each(function() {
+        var B = $(this);
+        var C = $(A);
+        var E = C.find(&quot;input[type=checkbox]&quot;);
+        function D() {
+            var F = true;
+            E.each(function() {
+                if (!this.checked) {
+                    F = false;
+                    return false
+                }
+            });
+            B.get(0).checked = F
+        }
+        B.click(function() {
+            var F = B.get(0).checked;
+            E.each(function() {
+                this.checked = F
+            })
+        });
+        E.click(function() {
+            D()
+        })
+    })
+};
+$.fn.isFollowControl = function() {
+    return this.each(function() {
+        var E = $(this);
+        var F = E.parents(&quot;.follow-actions&quot;);
+        var H = E.find(&quot;.follow-button&quot;);
+        var C = F.attr(&quot;class&quot;).split(&quot; &quot;).pop();
+        var B = F.attr(&quot;id&quot;).replace(&quot;follow_actions_&quot;, &quot;&quot;);
+        var G = F.find(&quot;#follow-toggle&quot;);
+        var A = F.find(&quot;.remove-button&quot;);
+        F.find(&quot;.notify-input&quot;).isNotificationSetting();
+        function D(I) {
+            $.ajax({type:&quot;GET&quot;,dataType:&quot;json&quot;,url:&quot;/account/refresh_follow_control/&quot; + B,data:{action_taken:I},success:function(J) {
+                twttr.processJson(J);
+                $(&quot;.follow-control&quot;).isFollowControl()
+            },beforeSend:twttr.loading,complete:twttr.loaded})
+        }
+        H.click(function() {
+            $.ajax({type:&quot;POST&quot;,dataType:&quot;text&quot;,url:&quot;/friendships/create/&quot; + B,data:{authenticity_token:twttr.form_authenticity_token,twttr:true},success:function(I) {
+                if (I.match(/Bring/)) {
+                    twttr.error()
+                } else {
+                    if (I.match(/success/)) {
+                        E.trigger(&quot;refresh&quot;, [&quot;followed&quot;])
+                    } else {
+                        if (I.match(/242/)) {
+                        } else {
+                            twttr.error(I)
+                        }
+                    }
+                }
+            },beforeSend:twttr.loading,complete:twttr.loaded});
+            return false
+        });
+        E.bind(&quot;refresh&quot;, function(I, J) {
+            D(J)
+        });
+        G.click(function() {
+            var I = F.find(&quot;#follow-details&quot;).toggle();
+            if (I.css(&quot;display&quot;) == &quot;block&quot;) {
+                G.removeClass(&quot;closed&quot;).addClass(&quot;opened&quot;)
+            } else {
+                G.removeClass(&quot;opened&quot;).addClass(&quot;closed&quot;)
+            }
+            return false
+        });
+        A.click(function() {
+            $.ajax({type:&quot;POST&quot;,dataType:&quot;text&quot;,url:&quot;/friendships/destroy/&quot; + B,data:{authenticity_token:twttr.form_authenticity_token,twttr:true},success:function(I) {
+                if (I.match(/success/)) {
+                    E.trigger(&quot;refresh&quot;, [&quot;removed&quot;])
+                } else {
+                    twttr.error()
+                }
+            },beforeSend:twttr.loading,complete:twttr.loaded});
+            return false
+        })
+    })
+};
+$.fn.isFollowRequestLinks = function() {
+    return this.each(function() {
+        var B = $(this);
+        var D = B.hasClass(&quot;ifr-profile&quot;);
+        var F = D ? B.attr(&quot;id&quot;).replace(&quot;ifr_&quot;, &quot;&quot;) : &quot;&quot;;
+        var A = B.find(&quot;#accept_all_requests&quot;);
+        var C = B.find(&quot;#deny_all_requests&quot;);
+        function E(G) {
+            var H = {decision:G,authenticity_token:twttr.form_authenticity_token};
+            if (D) {
+                H.id = F;
+                H.source = &quot;profile&quot;
+            }
+            $.ajax({type:&quot;POST&quot;,url:&quot;/friend_requests/&quot; + (D ? &quot;decision&quot; : &quot;all&quot;),dataType:&quot;text&quot;,data:H,cache:false,success:function(I) {
+                if (I == &quot;fail&quot;) {
+                    alert(_(&quot;Whoops! Something went wrong. Please refresh the page and try again!&quot;))
+                } else {
+                    if (D) {
+                        B.fadeOut(&quot;medium&quot;, function() {
+                            B.html(I)
+                        });
+                        B.fadeIn(&quot;medium&quot;)
+                    } else {
+                        var J = window.location;
+                        uri = J.protocol + &quot;//&quot; + J.host + &quot;/&quot;;
+                        window.location = uri
+                    }
+                }
+            },beforeSend:twttr.loading,complete:twttr.loaded})
+        }
+        A.click(function() {
+            E(&quot;accept&quot;);
+            return false
+        });
+        C.click(function() {
+            E(&quot;deny&quot;);
+            return false
+        })
+    })
+};
+$.fn.isTabMenu = function() {
+    return this.each(function() {
+        var B = $(this);
+        if ($this.id == &quot;networktab&quot;) {
+            return true
+        }
+        function A(C) {
+            B.find(&quot;li a&quot;).each(function() {
+                var E = $(this);
+                var F = E.parent();
+                var D = &quot;&quot;;
+                if (((D = E.attr(&quot;class&quot;)) == C) &amp;&amp; !F.hasClass(&quot;active&quot;)) {
+                    F.addClass(&quot;active&quot;);
+                    $(&quot;#&quot; + D).show()
+                } else {
+                    F.removeClass(&quot;active&quot;);
+                    $(&quot;#&quot; + D).hide()
+                }
+            })
+        }
+        B.find(&quot;li a&quot;).each(function() {
+            var C = $(this);
+            C.click(function() {
+                A(C.attr(&quot;class&quot;));
+                return false
+            })
+        })
+    })
+};
+$.fn.focusEnd = function() {
+    var A;
+    var B;
+    return this.each(function() {
+        A = this;
+        A.focus();
+        if ($.browser.msie) {
+            B = A.createTextRange();
+            B.collapse(false);
+            B.select()
+        } else {
+            A.selectionStart = A.value.length;
+            A.selectionEnd = A.value.length
+        }
+    })
+};
+$.fn.focusFirstTextField = function() {
+    return this.find(&quot;input[type=text]:visible:enabled:first&quot;).focus().length &gt; 0
+},$.fn.focusFirstTextArea = function() {
+    return this.find(&quot;textarea:visible:enabled:first&quot;).focus().length &gt; 0
+};
+$.fn.focusFirstTextElement = function() {
+    return this.focusFirstTextField() || this.focusFirstTextArea()
+},$.fn.isWrapped = function(E) {
+    if (!E) {
+        return
+    }
+    $this = $(this);
+    $this.hide();
+    var C = $this.html();
+    var G = C.length;
+    var B = &quot;&quot;;
+    var H = $this.width();
+    var F = H / E;
+    var A = G / F;
+    for (var D = 0; D &lt;= F; D += 1) {
+        B += (C.substr(A * D, A) + &quot;\n&quot;)
+    }
+    $this.html(B).show()
+};
+if (!window.twttr) {
+    var _tmp = {};
+    var twttr = (function() {
+        var rtn = {timeouts:{},processJson:function(json) {
+            if (typeof (json) == &quot;object&quot;) {
+                var evals = [];
+                $.each(json, function(selector, content) {
+                    if (selector.charAt(0) == &quot;$&quot;) {
+                        evals.push(content)
+                    } else {
+                        var contentPadded = &quot;&lt;div&gt;&quot; + content + &quot;&lt;/div&gt;&quot;;
+                        var $content = $(selector, $(contentPadded));
+                        if ($content.length == 1) {
+                            $(selector).replaceWith($content)
+                        } else {
+                            $(selector).html(content)
+                        }
+                    }
+                });
+                $.each(evals, function(index, js) {
+                    if (js) {
+                        eval(js)
+                    }
+                })
+            }
+        },boxTruncate:function(txt, textContainer, container, opts) {
+            if (!opts) {
+                opts = {}
+            }
+            if (opts.minlength &amp;&amp; (txt.length &lt; opts.minlength)) {
+                $(textContainer).text(txt);
+                if (!opts.width || $(container).width() &lt;= opts.width) {
+                    return txt
+                }
+            }
+            var curr = &quot;&quot;;
+            for (var i = 0; i &lt; txt.length; i++) {
+                curr += txt.charAt(i);
+                if (opts.minlength &gt; curr.length) {
+                    continue
+                }
+                $(textContainer).text(curr + &quot;...&quot;);
+                if (opts.height &amp;&amp; $(container).height() &gt; opts.height) {
+                    $(textContainer).text(curr = curr.substring(0, curr.length - 1) + &quot;...&quot;);
+                    return curr
+                }
+                if (opts.width &amp;&amp; $(container).width() &gt; opts.width) {
+                    if (/\s/gi.test(txt.charAt(i))) {
+                        $(textContainer).text(curr = curr.substring(0, curr.length - 1) + &quot;-&quot;)
+                    } else {
+                        $(textContainer).text(curr = curr.substring(0, curr.length - 1) + &quot;-&quot; + txt.charAt(i))
+                    }
+                }
+            }
+            $(textContainer).text(curr);
+            return curr
+        },googleAnalytics:function(trackid) {
+            if (window.pageTracker) {
+                window.pageTracker._trackEvent(&quot;Ajax&quot;, &quot;refresh&quot;, trackid, null)
+            }
+        },fadeAndReplace:function(selector, content) {
+            $(selector).fadeOut(&quot;medium&quot;, function() {
+                $(selector).html(content)
+            });
+            $(selector).fadeIn(&quot;medium&quot;)
+        },error:function(msg) {
+            alert(msg ? msg : _(&quot;Whoops! Something went wrong. Please refresh the page and try again!&quot;))
+        },loading:function() {
+            $(&quot;#loader&quot;).fadeIn(200)
+        },loaded:function() {
+            $(&quot;#loader&quot;).fadeOut(200)
+        }};
+        return rtn
+    })()
+}
+;
\ No newline at end of file</diff>
      <filename>public/javascripts/application.js</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,7 @@
     &lt;facet type=&quot;RailsFacetType&quot; name=&quot;Ruby on Rails&quot;&gt;
       &lt;configuration&gt;
         &lt;RAILS_FACET_CONFIG_ID NAME=&quot;SHOULD_USE_RSPEC_PLUGIN&quot; VALUE=&quot;false&quot; /&gt;
+        &lt;RAILS_FACET_CONFIG_ID NAME=&quot;RAILS_FACET_SUPPORT_ADDED&quot; VALUE=&quot;true&quot; /&gt;
         &lt;RAILS_FACET_CONFIG_ID NAME=&quot;RAILS_FACET_APPLICATION_ROOT&quot; VALUE=&quot;$MODULE_DIR$&quot; /&gt;
       &lt;/configuration&gt;
     &lt;/facet&gt;</diff>
      <filename>rnielsen-twetter.iml</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,8 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 &lt;project relativePaths=&quot;false&quot; version=&quot;4&quot;&gt;
+  &lt;component name=&quot;AntConfiguration&quot;&gt;
+    &lt;defaultAnt bundledAnt=&quot;true&quot; /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;BuildJarProjectSettings&quot;&gt;
     &lt;option name=&quot;BUILD_JARS_ON_MAKE&quot; value=&quot;false&quot; /&gt;
   &lt;/component&gt;
@@ -27,6 +30,9 @@
       &lt;entry name=&quot;?*.ftl&quot; /&gt;
     &lt;/wildcardResourcePatterns&gt;
   &lt;/component&gt;
+  &lt;component name=&quot;CopyrightManager&quot; default=&quot;&quot;&gt;
+    &lt;module2copyright /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;DependencyValidationManager&quot;&gt;
     &lt;option name=&quot;SKIP_IMPORT_STATEMENTS&quot; value=&quot;false&quot; /&gt;
   &lt;/component&gt;
@@ -212,6 +218,9 @@
     &lt;converter id=&quot;ror-modules&quot; /&gt;
     &lt;converter id=&quot;SelenaRunConfToDiana&quot; /&gt;
   &lt;/component&gt;
+  &lt;component name=&quot;ProjectKey&quot;&gt;
+    &lt;option name=&quot;state&quot; value=&quot;project:///Users/rob/work/git/rnielsen-twetter/rnielsen-twetter.ipr&quot; /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;ProjectModuleManager&quot;&gt;
     &lt;modules&gt;
       &lt;module fileurl=&quot;file://$PROJECT_DIR$/rnielsen-twetter.iml&quot; filepath=&quot;$PROJECT_DIR$/rnielsen-twetter.iml&quot; /&gt;</diff>
      <filename>rnielsen-twetter.ipr</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,51 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 &lt;project relativePaths=&quot;false&quot; version=&quot;4&quot;&gt;
+  &lt;component name=&quot;CCaseConfig&quot;&gt;
+    &lt;option name=&quot;checkoutReserved&quot; value=&quot;false&quot; /&gt;
+    &lt;option name=&quot;markExternalChangeAsUpToDate&quot; value=&quot;true&quot; /&gt;
+    &lt;option name=&quot;checkInUseHijack&quot; value=&quot;true&quot; /&gt;
+    &lt;option name=&quot;useUcmModel&quot; value=&quot;true&quot; /&gt;
+    &lt;option name=&quot;isOffline&quot; value=&quot;false&quot; /&gt;
+    &lt;option name=&quot;synchOutside&quot; value=&quot;false&quot; /&gt;
+    &lt;option name=&quot;isHistoryResticted&quot; value=&quot;true&quot; /&gt;
+    &lt;option name=&quot;useIdenticalSwitch&quot; value=&quot;true&quot; /&gt;
+    &lt;option name=&quot;synchActivitiesOnRefresh&quot; value=&quot;true&quot; /&gt;
+    &lt;option name=&quot;lastScr&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;scrTextFileName&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;historyRevisionsNumber&quot; value=&quot;4&quot; /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;ChangeListManager&quot;&gt;
-    &lt;list default=&quot;true&quot; name=&quot;Default&quot; comment=&quot;&quot; /&gt;
+    &lt;list default=&quot;true&quot; name=&quot;Default&quot; comment=&quot;&quot;&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/.gitignore&quot; afterPath=&quot;$PROJECT_DIR$/.gitignore&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/views/statuses/_tweet.html.erb&quot; afterPath=&quot;$PROJECT_DIR$/app/views/statuses/_tweet.html.erb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/controllers/account_controller.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/controllers/account_controller.rb&quot; /&gt;
+      &lt;change type=&quot;DELETED&quot; beforePath=&quot;$PROJECT_DIR$/app/controllers/upload_controller.rb&quot; afterPath=&quot;&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/views/layouts/application.html.erb&quot; afterPath=&quot;$PROJECT_DIR$/app/views/layouts/application.html.erb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/controllers/application.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/controllers/application.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/models/user.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/models/user.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/config/routes.rb&quot; afterPath=&quot;$PROJECT_DIR$/config/routes.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/rnielsen-twetter.ipr&quot; afterPath=&quot;$PROJECT_DIR$/rnielsen-twetter.ipr&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/public/images/profile/rob_nielsen.png&quot; afterPath=&quot;$PROJECT_DIR$/public/images/profile/rob_nielsen.png&quot; /&gt;
+      &lt;change type=&quot;DELETED&quot; beforePath=&quot;$PROJECT_DIR$/db/migrate/20080621003504_create_users.rb&quot; afterPath=&quot;&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/rnielsen-twetter.iml&quot; afterPath=&quot;$PROJECT_DIR$/rnielsen-twetter.iml&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/rnielsen-twetter.iws&quot; afterPath=&quot;$PROJECT_DIR$/rnielsen-twetter.iws&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/test/fixtures/users.yml&quot; afterPath=&quot;$PROJECT_DIR$/test/fixtures/users.yml&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/test/unit/user_test.rb&quot; afterPath=&quot;$PROJECT_DIR$/test/unit/user_test.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/views/user/index.html.erb&quot; afterPath=&quot;$PROJECT_DIR$/app/views/user/index.html.erb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/helpers/statuses_helper.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/helpers/statuses_helper.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/db/schema.rb&quot; afterPath=&quot;$PROJECT_DIR$/db/schema.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/controllers/user_controller.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/controllers/user_controller.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/tmp/upload/3&quot; afterPath=&quot;$PROJECT_DIR$/tmp/upload/3&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/controllers/friendships_controller.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/controllers/friendships_controller.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/helpers/account_helper.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/helpers/account_helper.rb&quot; /&gt;
+      &lt;change type=&quot;DELETED&quot; beforePath=&quot;$PROJECT_DIR$/db/migrate/20081121112034_add_direct_messages.rb&quot; afterPath=&quot;&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/helpers/application_helper.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/helpers/application_helper.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/views/account/index.html.erb&quot; afterPath=&quot;$PROJECT_DIR$/app/views/account/index.html.erb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/public/javascripts/application.js&quot; afterPath=&quot;$PROJECT_DIR$/public/javascripts/application.js&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/db/migrate/20080621002401_create_tweets.rb&quot; afterPath=&quot;$PROJECT_DIR$/db/migrate/20080621002401_create_tweets.rb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/views/statuses/tweets.html.erb&quot; afterPath=&quot;$PROJECT_DIR$/app/views/statuses/tweets.html.erb&quot; /&gt;
+      &lt;change type=&quot;MODIFICATION&quot; beforePath=&quot;$PROJECT_DIR$/app/controllers/statuses_controller.rb&quot; afterPath=&quot;$PROJECT_DIR$/app/controllers/statuses_controller.rb&quot; /&gt;
+    &lt;/list&gt;
     &lt;ignored path=&quot;rnielsen-twetter.iws&quot; /&gt;
     &lt;ignored path=&quot;.idea/workspace.xml&quot; /&gt;
   &lt;/component&gt;
@@ -59,19 +103,91 @@
   &lt;/component&gt;
   &lt;component name=&quot;FileEditorManager&quot;&gt;
     &lt;leaf&gt;
-      &lt;file leaf-file-name=&quot;application.rb&quot; pinned=&quot;false&quot; current=&quot;true&quot; current-in-tab=&quot;true&quot;&gt;
-        &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/application.rb&quot;&gt;
+      &lt;file leaf-file-name=&quot;tweets.html.erb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/statuses/tweets.html.erb&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;32&quot; column=&quot;21&quot; selection-start=&quot;1637&quot; selection-end=&quot;1637&quot; vertical-scroll-proportion=&quot;-13.894737&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;_tweet.html.erb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/statuses/_tweet.html.erb&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;17&quot; column=&quot;23&quot; selection-start=&quot;810&quot; selection-end=&quot;1333&quot; vertical-scroll-proportion=&quot;-10.736842&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;_latest.html.erb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/statuses/_latest.html.erb&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;2&quot; column=&quot;92&quot; selection-start=&quot;154&quot; selection-end=&quot;154&quot; vertical-scroll-proportion=&quot;-1.2631578&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;.gitignore&quot; pinned=&quot;false&quot; current=&quot;true&quot; current-in-tab=&quot;true&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/.gitignore&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;2&quot; column=&quot;5&quot; selection-start=&quot;28&quot; selection-end=&quot;28&quot; vertical-scroll-proportion=&quot;0.043557167&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;schema.rb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/db/schema.rb&quot;&gt;
           &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
-            &lt;state line=&quot;11&quot; column=&quot;113&quot; selection-start=&quot;590&quot; selection-end=&quot;590&quot; vertical-scroll-proportion=&quot;0.23913044&quot;&gt;
+            &lt;state line=&quot;17&quot; column=&quot;4&quot; selection-start=&quot;902&quot; selection-end=&quot;902&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
               &lt;folding /&gt;
             &lt;/state&gt;
           &lt;/provider&gt;
         &lt;/entry&gt;
       &lt;/file&gt;
-      &lt;file leaf-file-name=&quot;statuses_controller.rb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
-        &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/statuses_controller.rb&quot;&gt;
+      &lt;file leaf-file-name=&quot;account_controller.rb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/account_controller.rb&quot;&gt;
           &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
-            &lt;state line=&quot;0&quot; column=&quot;0&quot; selection-start=&quot;0&quot; selection-end=&quot;0&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+            &lt;state line=&quot;1&quot; column=&quot;20&quot; selection-start=&quot;68&quot; selection-end=&quot;68&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;user.rb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/app/models/user.rb&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;42&quot; column=&quot;0&quot; selection-start=&quot;1965&quot; selection-end=&quot;1965&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;user_test.rb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/test/unit/user_test.rb&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;11&quot; column=&quot;0&quot; selection-start=&quot;381&quot; selection-end=&quot;381&quot; vertical-scroll-proportion=&quot;-5.076923&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;users.yml&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/test/fixtures/users.yml&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;25&quot; column=&quot;37&quot; selection-start=&quot;1017&quot; selection-end=&quot;1017&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+              &lt;folding /&gt;
+            &lt;/state&gt;
+          &lt;/provider&gt;
+        &lt;/entry&gt;
+      &lt;/file&gt;
+      &lt;file leaf-file-name=&quot;by_password.rb&quot; pinned=&quot;false&quot; current=&quot;false&quot; current-in-tab=&quot;false&quot;&gt;
+        &lt;entry file=&quot;file://$PROJECT_DIR$/vendor/plugins/restful-authentication/lib/authentication/by_password.rb&quot;&gt;
+          &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+            &lt;state line=&quot;49&quot; column=&quot;24&quot; selection-start=&quot;1800&quot; selection-end=&quot;1816&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
               &lt;folding /&gt;
             &lt;/state&gt;
           &lt;/provider&gt;
@@ -95,6 +211,8 @@
     &lt;OptionsSetting value=&quot;true&quot; id=&quot;Update&quot; /&gt;
     &lt;OptionsSetting value=&quot;true&quot; id=&quot;Status&quot; /&gt;
     &lt;OptionsSetting value=&quot;true&quot; id=&quot;Edit&quot; /&gt;
+    &lt;OptionsSetting value=&quot;true&quot; id=&quot;Undo Check Out&quot; /&gt;
+    &lt;OptionsSetting value=&quot;true&quot; id=&quot;Get Latest Version&quot; /&gt;
     &lt;ConfirmationsSetting value=&quot;0&quot; id=&quot;Add&quot; /&gt;
     &lt;ConfirmationsSetting value=&quot;0&quot; id=&quot;Remove&quot; /&gt;
   &lt;/component&gt;
@@ -124,46 +242,6 @@
           &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode&quot; /&gt;
         &lt;/PATH_ELEMENT&gt;
       &lt;/PATH&gt;
-      &lt;PATH&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;rnielsen-twetter&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;rnielsen-twetter&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;rnielsen-twetter&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;app&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-      &lt;/PATH&gt;
-      &lt;PATH&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;rnielsen-twetter&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;rnielsen-twetter&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;rnielsen-twetter&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;app&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-        &lt;PATH_ELEMENT&gt;
-          &lt;option name=&quot;myItemId&quot; value=&quot;controllers&quot; /&gt;
-          &lt;option name=&quot;myItemType&quot; value=&quot;com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode&quot; /&gt;
-        &lt;/PATH_ELEMENT&gt;
-      &lt;/PATH&gt;
     &lt;/subPane&gt;
   &lt;/component&gt;
   &lt;component name=&quot;ProjectReloadState&quot;&gt;
@@ -178,17 +256,21 @@
       &lt;hideEmptyPackages /&gt;
       &lt;abbreviatePackageNames /&gt;
       &lt;showStructure ProjectPane=&quot;false&quot; /&gt;
-      &lt;autoscrollToSource /&gt;
-      &lt;autoscrollFromSource /&gt;
+      &lt;autoscrollToSource ProjectPane=&quot;true&quot; /&gt;
+      &lt;autoscrollFromSource ProjectPane=&quot;true&quot; /&gt;
       &lt;sortByType /&gt;
     &lt;/navigator&gt;
   &lt;/component&gt;
   &lt;component name=&quot;PropertiesComponent&quot;&gt;
     &lt;property name=&quot;MemberChooser.copyJavadoc&quot; value=&quot;false&quot; /&gt;
     &lt;property name=&quot;GoToClass.includeLibraries&quot; value=&quot;false&quot; /&gt;
+    &lt;property name=&quot;options.splitter.details.proportions&quot; value=&quot;0.2&quot; /&gt;
     &lt;property name=&quot;MemberChooser.showClasses&quot; value=&quot;true&quot; /&gt;
+    &lt;property name=&quot;options.splitter.main.proportions&quot; value=&quot;0.3&quot; /&gt;
     &lt;property name=&quot;MemberChooser.sorted&quot; value=&quot;false&quot; /&gt;
+    &lt;property name=&quot;options.searchVisible&quot; value=&quot;true&quot; /&gt;
     &lt;property name=&quot;GoToFile.includeJavaFiles&quot; value=&quot;false&quot; /&gt;
+    &lt;property name=&quot;options.lastSelected&quot; value=&quot;preferences.pluginManager&quot; /&gt;
     &lt;property name=&quot;GoToClass.toSaveIncludeLibraries&quot; value=&quot;false&quot; /&gt;
   &lt;/component&gt;
   &lt;component name=&quot;RunManager&quot; selected=&quot;Rails.Development: rnielsen-twetter&quot;&gt;
@@ -199,6 +281,17 @@
       &lt;option name=&quot;HOST&quot; value=&quot;localhost&quot; /&gt;
       &lt;option name=&quot;PORT&quot; value=&quot;5005&quot; /&gt;
     &lt;/configuration&gt;
+    &lt;configuration default=&quot;true&quot; type=&quot;RubyRunConfigurationType&quot; factoryName=&quot;Ruby script&quot;&gt;
+      &lt;module name=&quot;&quot; /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;RUBY_ARGS&quot; VALUE=&quot;-e STDOUT.sync=true;STDERR.sync=true;load($0=ARGV.shift)&quot; /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;WORK DIR&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;SHOULD_USE_SDK&quot; VALUE=&quot;false&quot; /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;ALTERN_SDK_NAME&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;myPassParentEnvs&quot; VALUE=&quot;true&quot; /&gt;
+      &lt;envs /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;SCRIPT_PATH&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RUBY_RUN_CONFIG NAME=&quot;SCRIPT_ARGS&quot; VALUE=&quot;&quot; /&gt;
+    &lt;/configuration&gt;
     &lt;configuration default=&quot;true&quot; type=&quot;Applet&quot; factoryName=&quot;Applet&quot;&gt;
       &lt;module name=&quot;&quot; /&gt;
       &lt;option name=&quot;MAIN_CLASS_NAME&quot; /&gt;
@@ -256,7 +349,7 @@
       &lt;envs /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_NAME&quot; VALUE=&quot;&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_ARGS&quot; VALUE=&quot;&quot; /&gt;
-      &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_SHOULD_ATTACH_TEST_RUNNER_UI&quot; VALUE=&quot;false&quot; /&gt;
+      &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_ATTACHED_TEST_FRAMEWORKS&quot; VALUE=&quot;&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_TRACE&quot; VALUE=&quot;false&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_DRYRUN&quot; VALUE=&quot;false&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_PREREQS&quot; VALUE=&quot;false&quot; /&gt;
@@ -274,6 +367,40 @@
       &lt;module name=&quot;&quot; /&gt;
       &lt;envs /&gt;
     &lt;/configuration&gt;
+    &lt;configuration default=&quot;true&quot; type=&quot;RSpecRunConfigurationType&quot; factoryName=&quot;RSpec&quot;&gt;
+      &lt;module name=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;RUBY_ARGS&quot; VALUE=&quot;-e STDOUT.sync=true;STDERR.sync=true;load($0=ARGV.shift)&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;WORK DIR&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;SHOULD_USE_SDK&quot; VALUE=&quot;false&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;ALTERN_SDK_NAME&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;myPassParentEnvs&quot; VALUE=&quot;true&quot; /&gt;
+      &lt;envs /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;TESTS_FOLDER_PATH&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_SCRIPT_PATH&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;SPEC_RUNNER_PATH&quot; VALUE=&quot;[none]&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_FILE_MASK&quot; VALUE=&quot;**/*_spec.rb&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;SPEC_EXAMPLE_NAME&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_TEST_TYPE&quot; VALUE=&quot;TEST_SCRIPT&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;SPEC_ARGS&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;RUN_SPECS_SEPARATELY&quot; VALUE=&quot;false&quot; /&gt;
+      &lt;RSPEC_RUN_CONFIG_SETTINGS_ID NAME=&quot;USE_CUSTOM_SPEC_RUNNER&quot; VALUE=&quot;false&quot; /&gt;
+    &lt;/configuration&gt;
+    &lt;configuration default=&quot;true&quot; type=&quot;TestUnitRunConfigurationType&quot; factoryName=&quot;Ruby test&quot;&gt;
+      &lt;module name=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;RUBY_ARGS&quot; VALUE=&quot;-e STDOUT.sync=true;STDERR.sync=true;load($0=ARGV.shift)&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;WORK DIR&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;SHOULD_USE_SDK&quot; VALUE=&quot;false&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;ALTERN_SDK_NAME&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;myPassParentEnvs&quot; VALUE=&quot;true&quot; /&gt;
+      &lt;envs /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;TESTS_FOLDER_PATH&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_SCRIPT_PATH&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_CLASS_NAME&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_FILE_MASK&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_METHOD_NAME&quot; VALUE=&quot;&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;TEST_TEST_TYPE&quot; VALUE=&quot;TEST_SCRIPT&quot; /&gt;
+      &lt;RTEST_RUN_CONFIG_SETTINGS_ID NAME=&quot;INHERITANCE_CHECK_DISABLED&quot; VALUE=&quot;false&quot; /&gt;
+    &lt;/configuration&gt;
     &lt;configuration default=&quot;false&quot; name=&quot;test&quot; type=&quot;RakeRunConfigurationType&quot; factoryName=&quot;Rake&quot;&gt;
       &lt;module name=&quot;rnielsen-twetter&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RUBY_ARGS&quot; VALUE=&quot;-e STDOUT.sync=true;STDERR.sync=true;load($0=ARGV.shift)&quot; /&gt;
@@ -284,7 +411,7 @@
       &lt;envs /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_NAME&quot; VALUE=&quot;test&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_ARGS&quot; VALUE=&quot;&quot; /&gt;
-      &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_SHOULD_ATTACH_TEST_RUNNER_UI&quot; VALUE=&quot;true&quot; /&gt;
+      &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_ATTACHED_TEST_FRAMEWORKS&quot; VALUE=&quot;:test_unit &quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_TRACE&quot; VALUE=&quot;false&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_DRYRUN&quot; VALUE=&quot;false&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_PREREQS&quot; VALUE=&quot;false&quot; /&gt;
@@ -302,7 +429,7 @@
       &lt;envs /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_NAME&quot; VALUE=&quot;spec&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_ARGS&quot; VALUE=&quot;&quot; /&gt;
-      &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_SHOULD_ATTACH_TEST_RUNNER_UI&quot; VALUE=&quot;true&quot; /&gt;
+      &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_ATTACHED_TEST_FRAMEWORKS&quot; VALUE=&quot;:test_unit &quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_TRACE&quot; VALUE=&quot;false&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_DRYRUN&quot; VALUE=&quot;false&quot; /&gt;
       &lt;RAKE_RUN_CONFIG_SETTINGS_ID NAME=&quot;RAKE_TASK_OPTION_PREREQS&quot; VALUE=&quot;false&quot; /&gt;
@@ -360,6 +487,17 @@
     &lt;/configuration&gt;
   &lt;/component&gt;
   &lt;component name=&quot;ShelveChangesManager&quot; show_recycled=&quot;false&quot; /&gt;
+  &lt;component name=&quot;StarteamConfiguration&quot;&gt;
+    &lt;option name=&quot;SERVER&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;PORT&quot; value=&quot;49201&quot; /&gt;
+    &lt;option name=&quot;USER&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;PASSWORD&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;PROJECT&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;VIEW&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;ALTERNATIVE_WORKING_PATH&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;LOCK_ON_CHECKOUT&quot; value=&quot;false&quot; /&gt;
+    &lt;option name=&quot;UNLOCK_ON_CHECKIN&quot; value=&quot;false&quot; /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;StructureViewFactory&quot;&gt;
     &lt;option name=&quot;AUTOSCROLL_MODE&quot; value=&quot;true&quot; /&gt;
     &lt;option name=&quot;AUTOSCROLL_FROM_SOURCE&quot; value=&quot;false&quot; /&gt;
@@ -373,6 +511,7 @@
     &lt;option name=&quot;MERGE_DRY_RUN&quot; value=&quot;false&quot; /&gt;
     &lt;option name=&quot;MERGE_DIFF_USE_ANCESTRY&quot; value=&quot;true&quot; /&gt;
     &lt;option name=&quot;UPDATE_LOCK_ON_DEMAND&quot; value=&quot;false&quot; /&gt;
+    &lt;option name=&quot;IGNORE_SPACES_IN_MERGE&quot; value=&quot;false&quot; /&gt;
     &lt;configuration useDefault=&quot;true&quot;&gt;/Users/rob/.subversion&lt;/configuration&gt;
     &lt;myIsUseDefaultProxy&gt;false&lt;/myIsUseDefaultProxy&gt;
   &lt;/component&gt;
@@ -398,29 +537,30 @@
   &lt;/component&gt;
   &lt;component name=&quot;ToolWindowManager&quot;&gt;
     &lt;frame x=&quot;0&quot; y=&quot;22&quot; width=&quot;1280&quot; height=&quot;721&quot; extended-state=&quot;0&quot; /&gt;
-    &lt;editor active=&quot;true&quot; /&gt;
+    &lt;editor active=&quot;false&quot; /&gt;
     &lt;layout&gt;
       &lt;window_info id=&quot;Web Preview&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Dataflow to this&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Maven Projects&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;3&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Dataflow to this&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;14&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Maven Projects&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;6&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Data Sources&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;3&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;IDEtalk&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;3&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;TODO&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;7&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Project&quot; active=&quot;false&quot; anchor=&quot;left&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;true&quot; weight=&quot;0.25&quot; sideWeight=&quot;0.6580311&quot; order=&quot;0&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Find&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;1&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Project&quot; active=&quot;true&quot; anchor=&quot;left&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;true&quot; weight=&quot;0.24939074&quot; sideWeight=&quot;0.6588629&quot; order=&quot;0&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Find&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.328152&quot; sideWeight=&quot;0.5&quot; order=&quot;1&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Structure&quot; active=&quot;false&quot; anchor=&quot;left&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.25&quot; sideWeight=&quot;0.5&quot; order=&quot;1&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Inspection&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.4&quot; sideWeight=&quot;0.5&quot; order=&quot;6&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Messages&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.3283582&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Dependency Viewer&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Palette&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;3&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Messages&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.3283582&quot; sideWeight=&quot;0.5&quot; order=&quot;9&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Dependency Viewer&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;11&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Palette&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;4&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Ant Build&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.25&quot; sideWeight=&quot;0.5&quot; order=&quot;1&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Database&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;3&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Changes&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Changes&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.32943144&quot; sideWeight=&quot;0.5&quot; order=&quot;12&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Run&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;2&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Commander&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.4&quot; sideWeight=&quot;0.5&quot; order=&quot;0&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Debug&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.4&quot; sideWeight=&quot;0.5&quot; order=&quot;4&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;IDEtalk Messages&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
-      &lt;window_info id=&quot;Version Control&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;8&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;IDEtalk Messages&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;13&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Version Control&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;10&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Message&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;0&quot; side_tool=&quot;false&quot; /&gt;
+      &lt;window_info id=&quot;Database&quot; active=&quot;false&quot; anchor=&quot;right&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.33&quot; sideWeight=&quot;0.5&quot; order=&quot;5&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Web&quot; active=&quot;false&quot; anchor=&quot;left&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.25&quot; sideWeight=&quot;0.5&quot; order=&quot;2&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;EJB&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.25&quot; sideWeight=&quot;0.5&quot; order=&quot;3&quot; side_tool=&quot;false&quot; /&gt;
       &lt;window_info id=&quot;Cvs&quot; active=&quot;false&quot; anchor=&quot;bottom&quot; auto_hide=&quot;false&quot; internal_type=&quot;DOCKED&quot; type=&quot;DOCKED&quot; visible=&quot;false&quot; weight=&quot;0.25&quot; sideWeight=&quot;0.5&quot; order=&quot;5&quot; side_tool=&quot;false&quot; /&gt;
@@ -448,6 +588,40 @@
     &lt;option name=&quot;SHOW_FILE_HISTORY_AS_TREE&quot; value=&quot;false&quot; /&gt;
     &lt;option name=&quot;FILE_HISTORY_SPLITTER_PROPORTION&quot; value=&quot;0.6&quot; /&gt;
   &lt;/component&gt;
+  &lt;component name=&quot;VssConfiguration&quot;&gt;
+    &lt;option name=&quot;CLIENT_PATH&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;SRCSAFEINI_PATH&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;USER_NAME&quot; value=&quot;&quot; /&gt;
+    &lt;option name=&quot;PWD&quot; value=&quot;&quot; /&gt;
+    &lt;CheckoutOptions&gt;
+      &lt;option name=&quot;COMMENT&quot; value=&quot;&quot; /&gt;
+      &lt;option name=&quot;DO_NOT_GET_LATEST_VERSION&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;REPLACE_WRITABLE&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;RECURSIVE&quot; value=&quot;false&quot; /&gt;
+    &lt;/CheckoutOptions&gt;
+    &lt;CheckinOptions&gt;
+      &lt;option name=&quot;COMMENT&quot; value=&quot;&quot; /&gt;
+      &lt;option name=&quot;KEEP_CHECKED_OUT&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;RECURSIVE&quot; value=&quot;false&quot; /&gt;
+    &lt;/CheckinOptions&gt;
+    &lt;AddOptions&gt;
+      &lt;option name=&quot;STORE_ONLY_LATEST_VERSION&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;CHECK_OUT_IMMEDIATELY&quot; value=&quot;false&quot; /&gt;
+    &lt;/AddOptions&gt;
+    &lt;UndocheckoutOptions&gt;
+      &lt;option name=&quot;MAKE_WRITABLE&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;REPLACE_LOCAL_COPY&quot; value=&quot;2&quot; /&gt;
+      &lt;option name=&quot;RECURSIVE&quot; value=&quot;false&quot; /&gt;
+    &lt;/UndocheckoutOptions&gt;
+    &lt;GetOptions&gt;
+      &lt;option name=&quot;REPLACE_WRITABLE&quot; value=&quot;0&quot; /&gt;
+      &lt;option name=&quot;MAKE_WRITABLE&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;ANSWER_NEGATIVELY&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;ANSWER_POSITIVELY&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;RECURSIVE&quot; value=&quot;false&quot; /&gt;
+      &lt;option name=&quot;VERSION&quot; /&gt;
+    &lt;/GetOptions&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;XDebuggerManager&quot;&gt;
     &lt;breakpoint-manager /&gt;
   &lt;/component&gt;
@@ -455,17 +629,119 @@
     &lt;history /&gt;
     &lt;find-history /&gt;
   &lt;/component&gt;
+  &lt;component name=&quot;antWorkspaceConfiguration&quot;&gt;
+    &lt;option name=&quot;IS_AUTOSCROLL_TO_SOURCE&quot; value=&quot;false&quot; /&gt;
+    &lt;option name=&quot;FILTER_TARGETS&quot; value=&quot;false&quot; /&gt;
+  &lt;/component&gt;
   &lt;component name=&quot;editorHistoryManager&quot;&gt;
     &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/statuses_controller.rb&quot;&gt;
       &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
-        &lt;state line=&quot;0&quot; column=&quot;0&quot; selection-start=&quot;0&quot; selection-end=&quot;0&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+        &lt;state line=&quot;12&quot; column=&quot;11&quot; selection-start=&quot;466&quot; selection-end=&quot;466&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
           &lt;folding /&gt;
         &lt;/state&gt;
       &lt;/provider&gt;
     &lt;/entry&gt;
     &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/application.rb&quot;&gt;
       &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
-        &lt;state line=&quot;11&quot; column=&quot;113&quot; selection-start=&quot;590&quot; selection-end=&quot;590&quot; vertical-scroll-proportion=&quot;0.23913044&quot;&gt;
+        &lt;state line=&quot;29&quot; column=&quot;6&quot; selection-start=&quot;909&quot; selection-end=&quot;909&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/account/settings.html.erb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;0&quot; column=&quot;0&quot; selection-start=&quot;0&quot; selection-end=&quot;0&quot; vertical-scroll-proportion=&quot;18.631578&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/vendor/plugins/restful-authentication/lib/authentication.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;1&quot; column=&quot;2&quot; selection-start=&quot;24&quot; selection-end=&quot;24&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/test/fixtures/tweets.yml&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;0&quot; column=&quot;0&quot; selection-start=&quot;0&quot; selection-end=&quot;0&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/users_controller.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;0&quot; column=&quot;0&quot; selection-start=&quot;0&quot; selection-end=&quot;0&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/test/fixtures/users.yml&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;25&quot; column=&quot;37&quot; selection-start=&quot;1017&quot; selection-end=&quot;1017&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/vendor/plugins/restful-authentication/lib/authentication/by_password.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;49&quot; column=&quot;24&quot; selection-start=&quot;1800&quot; selection-end=&quot;1816&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/models/user.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;42&quot; column=&quot;0&quot; selection-start=&quot;1965&quot; selection-end=&quot;1965&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/test/unit/user_test.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;11&quot; column=&quot;0&quot; selection-start=&quot;381&quot; selection-end=&quot;381&quot; vertical-scroll-proportion=&quot;-5.076923&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/controllers/account_controller.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;1&quot; column=&quot;20&quot; selection-start=&quot;68&quot; selection-end=&quot;68&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/statuses/tweets.html.erb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;32&quot; column=&quot;21&quot; selection-start=&quot;1637&quot; selection-end=&quot;1637&quot; vertical-scroll-proportion=&quot;-13.894737&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/db/schema.rb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;17&quot; column=&quot;4&quot; selection-start=&quot;902&quot; selection-end=&quot;902&quot; vertical-scroll-proportion=&quot;0.0&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/statuses/_tweet.html.erb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;17&quot; column=&quot;23&quot; selection-start=&quot;810&quot; selection-end=&quot;1333&quot; vertical-scroll-proportion=&quot;-10.736842&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/app/views/statuses/_latest.html.erb&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;2&quot; column=&quot;92&quot; selection-start=&quot;154&quot; selection-end=&quot;154&quot; vertical-scroll-proportion=&quot;-1.2631578&quot;&gt;
+          &lt;folding /&gt;
+        &lt;/state&gt;
+      &lt;/provider&gt;
+    &lt;/entry&gt;
+    &lt;entry file=&quot;file://$PROJECT_DIR$/.gitignore&quot;&gt;
+      &lt;provider selected=&quot;true&quot; editor-type-id=&quot;text-editor&quot;&gt;
+        &lt;state line=&quot;2&quot; column=&quot;5&quot; selection-start=&quot;28&quot; selection-end=&quot;28&quot; vertical-scroll-proportion=&quot;0.043557167&quot;&gt;
           &lt;folding /&gt;
         &lt;/state&gt;
       &lt;/provider&gt;
@@ -474,6 +750,15 @@
   &lt;component name=&quot;masterDetails&quot;&gt;
     &lt;option name=&quot;states&quot;&gt;
       &lt;map&gt;
+        &lt;entry key=&quot;Copyright.UI&quot;&gt;
+          &lt;value&gt;
+            &lt;UIState&gt;
+              &lt;option name=&quot;proportions&quot;&gt;
+                &lt;SplitterProportionsDataImpl /&gt;
+              &lt;/option&gt;
+            &lt;/UIState&gt;
+          &lt;/value&gt;
+        &lt;/entry&gt;
         &lt;entry key=&quot;Errors.UI&quot;&gt;
           &lt;value&gt;
             &lt;UIState&gt;
@@ -503,7 +788,13 @@
           &lt;value&gt;
             &lt;UIState&gt;
               &lt;option name=&quot;proportions&quot;&gt;
-                &lt;SplitterProportionsDataImpl /&gt;
+                &lt;SplitterProportionsDataImpl&gt;
+                  &lt;option name=&quot;proportions&quot;&gt;
+                    &lt;list&gt;
+                      &lt;option value=&quot;0.2&quot; /&gt;
+                    &lt;/list&gt;
+                  &lt;/option&gt;
+                &lt;/SplitterProportionsDataImpl&gt;
               &lt;/option&gt;
             &lt;/UIState&gt;
           &lt;/value&gt;
@@ -512,6 +803,15 @@
     &lt;/option&gt;
     &lt;option name=&quot;myStates&quot;&gt;
       &lt;map&gt;
+        &lt;entry key=&quot;Copyright.UI&quot;&gt;
+          &lt;value&gt;
+            &lt;UIState&gt;
+              &lt;option name=&quot;proportions&quot;&gt;
+                &lt;SplitterProportionsDataImpl /&gt;
+              &lt;/option&gt;
+            &lt;/UIState&gt;
+          &lt;/value&gt;
+        &lt;/entry&gt;
         &lt;entry key=&quot;Errors.UI&quot;&gt;
           &lt;value&gt;
             &lt;UIState&gt;
@@ -541,7 +841,13 @@
           &lt;value&gt;
             &lt;UIState&gt;
               &lt;option name=&quot;proportions&quot;&gt;
-                &lt;SplitterProportionsDataImpl /&gt;
+                &lt;SplitterProportionsDataImpl&gt;
+                  &lt;option name=&quot;proportions&quot;&gt;
+                    &lt;list&gt;
+                      &lt;option value=&quot;0.2&quot; /&gt;
+                    &lt;/list&gt;
+                  &lt;/option&gt;
+                &lt;/SplitterProportionsDataImpl&gt;
               &lt;/option&gt;
             &lt;/UIState&gt;
           &lt;/value&gt;</diff>
      <filename>rnielsen-twetter.iws</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,31 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
 
-# one:
-#   column: value
-#
-# two:
-#   column: value
+quentin:
+  id:                        1
+  username:                     quentin
+  name:                     Quentin Parker
+  salt:                      1b6453892473a467d07372d45eb05abc2031647a # SHA1('0')
+  crypted_password:          ce51a487053a5c48bfd325c6414e0d125e34198c # 'monkey'
+  created_at:                &lt;%= 5.days.ago.to_s :db  %&gt;
+  remember_token_expires_at: &lt;%= 1.days.from_now.to_s %&gt;
+  remember_token:            c1dfd96eea8cc2b62785275bca38ac261256e278
+      
+aaron:
+  id:                        2
+  username:                     aaron
+  name:                     Aaron Spence
+  salt:                      ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4 # SHA1('1')
+  crypted_password:          d89eff8ee3fa88762dd1d9db045c431f1c2b6534 # 'monkey'
+  created_at:                &lt;%= 1.days.ago.to_s :db %&gt;
+  remember_token_expires_at: 
+  remember_token:            
+
+
+old_password_holder:
+  id:                        3
+  username:                     old_password_holder
+  name:                     Salty Dog
+  salt:                      7e3041ebc2fc05a40c60028e2c4901a81035d3cd
+  crypted_password:          00742970dc9e6319f8019fd54864d3ea740f04b1 # test
+  created_at:                &lt;%= 1.days.ago.to_s :db %&gt;
+
+</diff>
      <filename>test/fixtures/users.yml</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,91 @@
-require 'test_helper'
+require File.dirname(__FILE__) + '/../test_helper'
 
 class UserTest &lt; ActiveSupport::TestCase
-  # Replace this with your real tests.
-  def test_truth
-    assert true
+  # Be sure to include AuthenticatedTestHelper in test/test_helper.rb instead.
+  # Then, you can remove it from this and the functional test.
+  include AuthenticatedTestHelper
+  fixtures :users
+
+  def test_should_create_user
+    assert_difference 'User.count' do
+      user = create_user
+      assert !user.new_record?, &quot;#{user.errors.full_messages.to_sentence}&quot;
+    end
+  end
+
+  def test_should_require_username
+    assert_no_difference 'User.count' do
+      u = create_user(:username =&gt; nil)
+      assert u.errors.on(:username)
+    end
+  end
+
+  def test_should_reset_password
+    users(:quentin).update_attributes(:password =&gt; 'new password', :password_confirmation =&gt; 'new password')
+    assert_equal users(:quentin), User.authenticate('quentin', 'new password')
+  end
+
+  def test_should_not_rehash_password
+    users(:quentin).update_attributes(:username =&gt; 'quentin2')
+    assert_equal users(:quentin), User.authenticate('quentin2', 'monkey')
+  end
+
+  def test_should_authenticate_user
+    assert_equal users(:quentin), User.authenticate('quentin', 'monkey')
+  end
+
+  def test_should_create_new_user_if_not_exists
+    u = User.authenticate('new','user')
+    assert_equal &quot;new&quot;, u.username
+  end
+
+  def test_should_not_authenticate_if_password_incorrect
+    assert_nil User.authenticate('quentin', 'minkey')
+  end
+  
+  def test_should_set_remember_token
+    users(:quentin).remember_me
+    assert_not_nil users(:quentin).remember_token
+    assert_not_nil users(:quentin).remember_token_expires_at
+  end
+
+  def test_should_unset_remember_token
+    users(:quentin).remember_me
+    assert_not_nil users(:quentin).remember_token
+    users(:quentin).forget_me
+    assert_nil users(:quentin).remember_token
+  end
+
+  def test_should_remember_me_for_one_week
+    before = 1.week.from_now.utc
+    users(:quentin).remember_me_for 1.week
+    after = 1.week.from_now.utc
+    assert_not_nil users(:quentin).remember_token
+    assert_not_nil users(:quentin).remember_token_expires_at
+    assert users(:quentin).remember_token_expires_at.between?(before, after)
+  end
+
+  def test_should_remember_me_until_one_week
+    time = 1.week.from_now.utc
+    users(:quentin).remember_me_until time
+    assert_not_nil users(:quentin).remember_token
+    assert_not_nil users(:quentin).remember_token_expires_at
+    assert_equal users(:quentin).remember_token_expires_at, time
+  end
+
+  def test_should_remember_me_default_two_weeks
+    before = 2.weeks.from_now.utc
+    users(:quentin).remember_me
+    after = 2.weeks.from_now.utc
+    assert_not_nil users(:quentin).remember_token
+    assert_not_nil users(:quentin).remember_token_expires_at
+    assert users(:quentin).remember_token_expires_at.between?(before, after)
+  end
+
+protected
+  def create_user(options = {})
+    record = User.new({ :username =&gt; 'quire', :name =&gt; 'Quire', :password =&gt; 'quire69', :password_confirmation =&gt; 'quire69' }.merge(options))
+    record.save
+    record
   end
 end</diff>
      <filename>test/unit/user_test.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>app/controllers/upload_controller.rb</filename>
    </removed>
    <removed>
      <filename>db/migrate/20080621003504_create_users.rb</filename>
    </removed>
    <removed>
      <filename>db/migrate/20081121112034_add_direct_messages.rb</filename>
    </removed>
    <removed>
      <filename>tmp/upload/3</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>65bbf0bee2cda2b55aefd7c87769d942b237e56e</id>
    </parent>
  </parents>
  <author>
    <name>Rob Nielsen</name>
    <email>rob@refactor.com.au</email>
  </author>
  <url>http://github.com/rnielsen/twetter/commit/3b48c0d16e1304c54c1ba8c40ca4099cea57c4d1</url>
  <id>3b48c0d16e1304c54c1ba8c40ca4099cea57c4d1</id>
  <committed-date>2009-02-23T22:12:02-08:00</committed-date>
  <authored-date>2009-02-23T22:12:02-08:00</authored-date>
  <message>added authentication</message>
  <tree>953f67c48a63ac4d837c4d66f828c22b3a9432c3</tree>
  <committer>
    <name>Rob Nielsen</name>
    <email>rob@refactor.com.au</email>
  </committer>
</commit>
